diff --git a/src/main/java/com/ccsens/ptos_zero/persist/dao/PluDeliverDao.java b/src/main/java/com/ccsens/ptos_zero/persist/dao/PluDeliverDao.java index c4cbf73..4d12bf3 100644 --- a/src/main/java/com/ccsens/ptos_zero/persist/dao/PluDeliverDao.java +++ b/src/main/java/com/ccsens/ptos_zero/persist/dao/PluDeliverDao.java @@ -12,6 +12,7 @@ import java.util.List; */ public interface PluDeliverDao extends PluDeliverMapper { + void insertReplace(PluDeliver pluDeliver); /** * 查询任务下的交付物信息 * @param taskId 任务id diff --git a/src/main/java/com/ccsens/ptos_zero/persist/dao/ProMemberDao.java b/src/main/java/com/ccsens/ptos_zero/persist/dao/ProMemberDao.java index 2741f0a..0b7a7ad 100644 --- a/src/main/java/com/ccsens/ptos_zero/persist/dao/ProMemberDao.java +++ b/src/main/java/com/ccsens/ptos_zero/persist/dao/ProMemberDao.java @@ -1,5 +1,6 @@ package com.ccsens.ptos_zero.persist.dao; +import com.ccsens.ptos_zero.bean.po.ProMember; import com.ccsens.ptos_zero.persist.mapper.ProMemberMapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; @@ -13,6 +14,8 @@ import java.util.List; @Repository public interface ProMemberDao extends ProMemberMapper { + void insertReplace(ProMember proMember); + /** * 查找用户的成员id * @param projectId 项目id diff --git a/src/main/java/com/ccsens/ptos_zero/persist/dao/ProMemberStakeholderDao.java b/src/main/java/com/ccsens/ptos_zero/persist/dao/ProMemberStakeholderDao.java new file mode 100644 index 0000000..a26baf1 --- /dev/null +++ b/src/main/java/com/ccsens/ptos_zero/persist/dao/ProMemberStakeholderDao.java @@ -0,0 +1,12 @@ +package com.ccsens.ptos_zero.persist.dao; + + +import com.ccsens.ptos_zero.bean.po.ProMemberStakeholder; +import com.ccsens.ptos_zero.persist.mapper.ProMemberStakeholderMapper; + +/** + * @author 逗 + */ +public interface ProMemberStakeholderDao extends ProMemberStakeholderMapper { + void insertReplace(ProMemberStakeholder memberStakeholder); +} diff --git a/src/main/java/com/ccsens/ptos_zero/persist/dao/ProRoleDao.java b/src/main/java/com/ccsens/ptos_zero/persist/dao/ProRoleDao.java index 7c2399e..3b6bd94 100644 --- a/src/main/java/com/ccsens/ptos_zero/persist/dao/ProRoleDao.java +++ b/src/main/java/com/ccsens/ptos_zero/persist/dao/ProRoleDao.java @@ -14,6 +14,8 @@ import java.util.List; @Repository public interface ProRoleDao extends ProRoleMapper { + void insertReplace(ProRole role); + /** * 根据角色id查找项目id * @param roleId 角色id diff --git a/src/main/java/com/ccsens/ptos_zero/persist/dao/ProTaskDetailDao.java b/src/main/java/com/ccsens/ptos_zero/persist/dao/ProTaskDetailDao.java index f2e8632..3849284 100644 --- a/src/main/java/com/ccsens/ptos_zero/persist/dao/ProTaskDetailDao.java +++ b/src/main/java/com/ccsens/ptos_zero/persist/dao/ProTaskDetailDao.java @@ -2,6 +2,7 @@ package com.ccsens.ptos_zero.persist.dao; import com.ccsens.ptos_zero.bean.dto.TaskDto; +import com.ccsens.ptos_zero.bean.po.ProTaskDetail; import com.ccsens.ptos_zero.bean.po.ProTaskSub; import com.ccsens.ptos_zero.bean.vo.TaskVo; import com.ccsens.ptos_zero.persist.mapper.ProTaskDetailMapper; @@ -18,6 +19,8 @@ import java.util.List; */ @Repository public interface ProTaskDetailDao extends ProTaskDetailMapper { + + void insertReplace(ProTaskDetail taskDetail); /** * 根据角色查找永久日常任务 * @param roleIdList 角色id @@ -91,6 +94,13 @@ public interface ProTaskDetailDao extends ProTaskDetailMapper { List queryPwbs( @Param("startTime")Long startTime, @Param("endTime")Long endTime, @Param("userId")Long userId, @Param("parentId")Long parentId); + /** + * 分页查找定期任务 + * @param roleId 角色id + * @return 返回任务列表 + */ + List pageQueryRegularTask(@Param("roleId")Long roleId, @Param("timeNode")Long timeNode, @Param("timeUnit")int timeUnit, @Param("queryType")int queryType); + // /** // * 根据任务详情id查找项目id // */ diff --git a/src/main/java/com/ccsens/ptos_zero/persist/dao/ProTaskPluginDao.java b/src/main/java/com/ccsens/ptos_zero/persist/dao/ProTaskPluginDao.java index 292fdbf..96bbdee 100644 --- a/src/main/java/com/ccsens/ptos_zero/persist/dao/ProTaskPluginDao.java +++ b/src/main/java/com/ccsens/ptos_zero/persist/dao/ProTaskPluginDao.java @@ -1,5 +1,6 @@ package com.ccsens.ptos_zero.persist.dao; +import com.ccsens.ptos_zero.bean.po.ProTaskPlugin; import com.ccsens.ptos_zero.persist.mapper.ProTaskPluginMapper; import com.ccsensptos.tallsdk.bean.vo.TallTaskVo; import org.apache.ibatis.annotations.Param; @@ -26,6 +27,7 @@ public interface ProTaskPluginDao extends ProTaskPluginMapper { */ String queryParamByTaskId(@Param("detailTaskId")Long taskDetailId); + void insertReplace(ProTaskPlugin proTaskPlugin); // /** // * 根据任务id列表查询任务插件 // * @param oldTaskIdList 任务id列表 diff --git a/src/main/java/com/ccsens/ptos_zero/persist/dao/ProTaskSubDao.java b/src/main/java/com/ccsens/ptos_zero/persist/dao/ProTaskSubDao.java index 16e0e5a..31a51d7 100644 --- a/src/main/java/com/ccsens/ptos_zero/persist/dao/ProTaskSubDao.java +++ b/src/main/java/com/ccsens/ptos_zero/persist/dao/ProTaskSubDao.java @@ -39,4 +39,14 @@ public interface ProTaskSubDao extends ProTaskSubMapper { * @param taskDetailId 任务详情id */ void deleteOldSubTask(@Param("taskDetailId") Long taskDetailId); + + /** + * 查询规定时间时进行的任务的开始时间 + * @param timeNode 时间点 + * @param roleId 角色id + * @return 返回开始时间 + */ + Long getTimeByProgressTask(@Param("timeNode")Long timeNode, @Param("roleId")Long roleId); + + void insertReplace(ProTaskSub taskSub); } diff --git a/src/main/java/com/ccsens/ptos_zero/service/ImportService.java b/src/main/java/com/ccsens/ptos_zero/service/ImportService.java index 5b109af..1594711 100644 --- a/src/main/java/com/ccsens/ptos_zero/service/ImportService.java +++ b/src/main/java/com/ccsens/ptos_zero/service/ImportService.java @@ -6,14 +6,13 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.ccsens.ptos_zero.bean.dto.RoleDto; import com.ccsens.ptos_zero.bean.dto.TaskDto; - import com.ccsens.ptos_zero.bean.po.*; import com.ccsens.ptos_zero.bean.vo.ProjectVo; import com.ccsens.ptos_zero.persist.dao.*; -import com.ccsens.ptos_zero.persist.mapper.ProMemberStakeholderMapper; import com.ccsens.ptos_zero.util.Constant; import com.ccsens.ptos_zero.util.ZeroCodeError; import com.ccsens.util.ExcelUtil; +import com.ccsens.util.PropUtil; import com.ccsens.util.StringUtil; import com.ccsens.util.cron.CronConstant; import com.ccsens.util.cron.NatureToDate; @@ -62,7 +61,7 @@ public class ImportService implements IImportService { @Resource private ProRoleMemberDao roleMemberDao; @Resource - private ProMemberStakeholderMapper memberStakeholderMapper; + private ProMemberStakeholderDao memberStakeholderDao; @Resource private ProRoleRepulsionDao repulsionDao; @Resource @@ -79,7 +78,8 @@ public class ImportService implements IImportService { private PluginDao taskPluginDao; @Resource private ProTaskPluginDao proTaskPluginDao; - + @Resource + private PluDeliverDao pluDeliverDao; /** @@ -202,7 +202,7 @@ public class ImportService implements IImportService { throw new BaseException(ZeroCodeError.WSB_NOT_TASK_HEADER); } //添加项目 - ProjectVo.SysProject project = readProject(wbsSheet, projectStart, userId,projectId); + ProjectVo.SysProject project = readProject(wbsSheet, projectStart, userId); if(ObjectUtil.isNull(project)){ throw new BaseException(ZeroCodeError.WSB_NOT_PROJECT_HEADER); } @@ -252,36 +252,54 @@ public class ImportService implements IImportService { roleMember.setRoleId(role.getId()); roleMember.setMemberId(memberId); roleMemberDao.insertSelective(roleMember); - -// //TODO 在tall客户端添加项目和用户的关联信息 -// ProjectDto.SaveProjectDto saveProjectDto = new ProjectDto.SaveProjectDto(); -// saveProjectDto.setId(project.getId()); -// saveProjectDto.setName(project.getName()); -// saveProjectDto.setStartTime(project.getBeginTime()); -// saveProjectDto.setEndTime(project.getEndTime()); -// saveProjectDto.setUrl(PropUtil.domain); -// -// saveProjectDto.setUserIdList(userIdSet); -// JsonResponse jsonResponse = tall3FeignClient.saveProjectList(saveProjectDto); -// if (null == jsonResponse){ -// throw new BaseException(ZeroCodeError.FEIGN_ERROR); -// } - - //获取项目信息 -// BeanUtil.copyProperties(saveProjectDto,projectInfo); + //返回项目信息 + projectInfo.setId(project.getId()); + projectInfo.setName(project.getName()); + projectInfo.setStartTime(project.getBeginTime()); + projectInfo.setEndTime(project.getEndTime()); + projectInfo.setUrl(PropUtil.notGatewayUrl); + projectInfo.setBusinessCode(Constant.BUSINESS_CODE); } /** * 读取项目信息 */ - private ProjectVo.SysProject readProject(XSSFSheet wbsSheet, int projectStart, Long userId, Long projectId) { + private ProjectVo.SysProject readProject(XSSFSheet wbsSheet, int projectStart, Long userId) { ProjectVo.SysProject project = new ProjectVo.SysProject(); - // TODO 查询是否项目是否存在 - if (ObjectUtil.isNotNull(projectId)) { + //获取项目信息的那一行 + XSSFRow row = wbsSheet.getRow(projectStart + 1); + if (ObjectUtil.isNull(row)) { + throw new BaseException(ZeroCodeError.WSB_NOT_PROJECT_HEADER); + } + //项目名 + String projectName = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(0))); + //项目id + String projectIdCell = ExcelUtil.getCellComment(row.getCell(0)); + //详情 + String description = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(1))); + //项目地点 + String address = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(2))); + //开始时间 + String beginTime = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(3))); + //结束时间 + String endTime = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(4))); + //版本 + String version = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(5))); + if (StrUtil.isEmpty(projectName)) { + throw new BaseException(ZeroCodeError.WBS_NOT_PROJECT_NAME.addMsg(wbsSheet.getSheetName(),projectStart+1)); + } + //TODO 验证是否有项目id且项目id合法 + Long projectId = null; + if(StrUtil.isNotBlank(projectIdCell)){ + try { + projectId = Long.parseLong(projectIdCell); + }catch (Exception e) { + log.info("项目id分解异常"); + } project = projectDao.selectById(projectId); if (ObjectUtil.isNotNull(project)) { project.setId(projectId); - project.setImportType((byte)1); + project.setImportType((byte) 1); //删除之前的项目详情 projectDao.updateStatusById(projectId); //删除之前的项目分解 @@ -304,36 +322,18 @@ public class ImportService implements IImportService { labelBusinessDao.updateByExampleSelective(labelBusiness,labelBusinessExample); } } - //获取项目信息的那一行 - XSSFRow row = wbsSheet.getRow(projectStart + 1); - if (ObjectUtil.isNull(row)) { - throw new BaseException(ZeroCodeError.WSB_NOT_PROJECT_HEADER); - } - //项目名 - String projectName = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(0))); - //详情 - String description = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(1))); - //项目时间 - String address = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(2))); - //开始时间 - String beginTime = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(3))); - //结束时间 - String endTime = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(4))); - //版本 - String version = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(5))); - if (StrUtil.isEmpty(projectName)) { - throw new BaseException(ZeroCodeError.WBS_NOT_PROJECT_NAME.addMsg(wbsSheet.getSheetName(),projectStart+1)); - } //项目名不能重复(当前用户创建的项目内名字不能重复) //根据userId查找已创建的项目 - List sysProjectList = projectDao.queryByCreator(userId); - if(CollectionUtil.isNotEmpty(sysProjectList)){ - sysProjectList.forEach(p -> { - if(projectName.equalsIgnoreCase(p.getName())){ - //如果名称重复则提示错误信息 - throw new BaseException(ZeroCodeError.PROJECT_NAME_REPEAT.addMsg(wbsSheet.getSheetName(),projectStart+1,projectName)); - } - }); + if(0 == project.getImportType()) { + List sysProjectList = projectDao.queryByCreator(userId); + if (CollectionUtil.isNotEmpty(sysProjectList)) { + sysProjectList.forEach(p -> { + if (projectName.equalsIgnoreCase(p.getName())) { + //如果名称重复则提示错误信息 + throw new BaseException(ZeroCodeError.PROJECT_NAME_REPEAT.addMsg(wbsSheet.getSheetName(), projectStart + 1, projectName)); + } + }); + } } //判断时间是否正确 String begin = ExcelUtil.getCellValue(row.getCell(3)); @@ -350,24 +350,14 @@ public class ImportService implements IImportService { //日期格式错误 throw new BaseException(ZeroCodeError.WBS_PROJECT_TIME_ERROR.addMsg(wbsSheet.getSheetName(),projectStart+1)); } + //添加项目信息(任务详情) ProTaskDetail taskDetail = new ProTaskDetail(); - if (0 == project.getImportType()) { - taskDetail.setId(snowflake.nextId()); - } - if (1 == project.getImportType()) { - taskDetail.setId(projectId); - } + taskDetail.setId((1 == project.getImportType() && projectId != null) ? projectId : snowflake.nextId()); taskDetail.setName(projectName); taskDetail.setDescription(description); - if (0 == project.getImportType()){ - taskDetailDao.insertSelective(taskDetail); - } - if (1 == project.getImportType()){ - taskDetailDao.updateByPrimaryKeySelective(taskDetail); - } - project.setId(taskDetail.getId()); - project.setName(projectName); +// taskDetailDao.insertSelective(taskDetail); + taskDetailDao.insertReplace(taskDetail); //添加(任务分解) ProTaskSub taskSub = new ProTaskSub(); taskSub.setId(snowflake.nextId()); @@ -376,8 +366,6 @@ public class ImportService implements IImportService { taskSub.setPlanEndTime(eTime); taskSub.setPlanDuration(eTime - bTime); taskSubDao.insertSelective(taskSub); - project.setBeginTime(bTime); - project.setEndTime(eTime); //添加版本信息 ProTaskVersion taskVersion = new ProTaskVersion(); taskVersion.setId(snowflake.nextId()); @@ -390,6 +378,10 @@ public class ImportService implements IImportService { //添加任务标签关联信息 saveLabelTask(taskDetail.getId(), labelId); + project.setId(taskDetail.getId()); + project.setName(projectName); + project.setBeginTime(bTime); + project.setEndTime(eTime); return project; } @@ -434,7 +426,7 @@ public class ImportService implements IImportService { memberStakeholder.setRecStatus((byte)2); ProMemberStakeholderExample memberStakeholderExample = new ProMemberStakeholderExample(); memberStakeholderExample.createCriteria().andMemeberIdIn(memberIdList); - memberStakeholderMapper.updateByExampleSelective(memberStakeholder,memberStakeholderExample); + memberStakeholderDao.updateByExampleSelective(memberStakeholder,memberStakeholderExample); //删除对谁不可见 ProRoleRepulsion roleRepulsion = new ProRoleRepulsion(); roleRepulsion.setRecStatus((byte)2); @@ -469,9 +461,12 @@ public class ImportService implements IImportService { //项目角色 String roleName = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(2))); if((StrUtil.isEmpty(roleName) || "/".equalsIgnoreCase(roleName)) && ObjectUtil.isNull(roleId)){ continue; } + //角色id + String roleIdCell = ExcelUtil.getCellComment(row.getCell(2)); //成员 String memberName = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(3))); - + //成员id + String memberIdCell = ExcelUtil.getCellComment(row.getCell(3)); //角色手机号 String memberPhone = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(4))); if((StrUtil.isNotEmpty(memberName) && !"/".equalsIgnoreCase(memberName)) && (StrUtil.isEmpty(memberPhone) || !memberPhone.matches(Constant.PHONE_REGEX))){ @@ -479,6 +474,8 @@ public class ImportService implements IImportService { } //奖惩干系人 String stakeholderName = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(5))); + //奖惩干系人id + String stakeholderIdCell = ExcelUtil.getCellComment(row.getCell(5)); //干系人电话 String stakeholderPhone = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(6))); if((StrUtil.isNotEmpty(stakeholderName) && !"/".equalsIgnoreCase(stakeholderName)) && (StrUtil.isEmpty(stakeholderPhone) || !stakeholderPhone.matches(Constant.PHONE_REGEX))){ @@ -486,12 +483,19 @@ public class ImportService implements IImportService { } //添加角色 if(StrUtil.isNotEmpty(roleName) && !"/".equalsIgnoreCase(roleName)){ + if(StrUtil.isNotBlank(roleIdCell)){ + try { + roleId = Long.parseLong(roleIdCell); + }catch (Exception e){ + log.info("角色id解析失败"); + } + } ProRole role = new ProRole(); - role.setId(snowflake.nextId()); + role.setId((1 == project.getImportType() && roleId != null) ? roleId : snowflake.nextId()); role.setName(roleName); role.setProjectId(project.getId()); role.setLabelId(sysRoleId); - roleDao.insertSelective(role); + roleDao.insertReplace(role); roleId = role.getId(); roleMap.put(roleName,role.getId()); } @@ -504,8 +508,13 @@ public class ImportService implements IImportService { memberId = wbsMembers.getId(); } if(ObjectUtil.isNull(memberId)){ - //TODO 根据成员手机号查找userId 成员关联userId - + if(StrUtil.isNotBlank(memberIdCell)){ + try { + memberId = Long.parseLong(memberIdCell); + }catch (Exception e){ + log.info("成员id解析失败"); + } + } //根据手机号获取userId ProUser user = userDao.getUserIdByPhone(memberPhone); if(ObjectUtil.isNull(user)){ @@ -518,15 +527,42 @@ public class ImportService implements IImportService { Long userId = user.getId(); //添加成员至数据库 ProMember proMember = new ProMember(); - proMember.setId(snowflake.nextId()); + proMember.setId((1 == project.getImportType() && memberId != null) ? memberId : snowflake.nextId()); proMember.setName(memberName); proMember.setPhone(memberPhone); proMember.setProjectId(project.getId()); proMember.setUserId(userId); - memberDao.insertSelective(proMember); + memberDao.insertReplace(proMember); RoleDto.WbsMember member = new RoleDto.WbsMember(proMember.getId(),userId); memberMap.put(memberName+"_"+memberPhone,member); memberId = proMember.getId(); + //添加奖惩干系人 + if(StrUtil.isNotEmpty(stakeholderName) && !"/".equalsIgnoreCase(roleName)){ + //根据干系人手机号查找userId 奖惩干系人关联userId + ProUser stakeholderUser = userDao.getUserIdByPhone(stakeholderPhone); + if(ObjectUtil.isNull(stakeholderUser)){ + //如果未查到用户则添加一条新的用户信息 + stakeholderUser = new ProUser(); + stakeholderUser.setId(snowflake.nextId()); + stakeholderUser.setPhone(stakeholderPhone); + userDao.insertSelective(stakeholderUser); + } + Long stakeholderId = null; + if(StrUtil.isNotBlank(stakeholderIdCell)){ + try { + stakeholderId = Long.parseLong(stakeholderIdCell); + }catch (Exception e){ + log.info("奖惩干系人id解析失败"); + } + } + ProMemberStakeholder memberStakeholder = new ProMemberStakeholder(); + memberStakeholder.setId((1 == project.getImportType() && stakeholderId != null) ? stakeholderId : snowflake.nextId()); + memberStakeholder.setMemeberId(memberId); + memberStakeholder.setStakeholderName(stakeholderName); + memberStakeholder.setStakeholderPhone(stakeholderPhone); + memberStakeholder.setUserId(stakeholderUser.getId()); + memberStakeholderDao.insertReplace(memberStakeholder); + } } //添加角色成员关联信息 ProRoleMember roleMember = new ProRoleMember(); @@ -534,26 +570,6 @@ public class ImportService implements IImportService { roleMember.setRoleId(roleId); roleMember.setMemberId(memberId); roleMemberDao.insertSelective(roleMember); - //添加奖惩干系人 - if(StrUtil.isNotEmpty(stakeholderName) && !"/".equalsIgnoreCase(roleName)){ - //TODO 根据干系人手机号查找userId 奖惩干系人关联userId - ProUser user = userDao.getUserIdByPhone(stakeholderPhone); - if(ObjectUtil.isNull(user)){ - //TODO 如果未查到用户则添加一条新的用户信息 - user = new ProUser(); - user.setId(snowflake.nextId()); - user.setPhone(stakeholderPhone); - userDao.insertSelective(user); - } - Long userId = user.getId(); - ProMemberStakeholder memberStakeholder = new ProMemberStakeholder(); - memberStakeholder.setId(snowflake.nextId()); - memberStakeholder.setMemeberId(memberId); - memberStakeholder.setStakeholderName(stakeholderName); - memberStakeholder.setStakeholderPhone(stakeholderPhone); - memberStakeholder.setUserId(userId); - memberStakeholderMapper.insertSelective(memberStakeholder); - } } } //添加对谁不可见 @@ -663,21 +679,29 @@ public class ImportService implements IImportService { if(StrUtil.isEmpty(firstTaskName) && ObjectUtil.isNull(firstTaskId)){ continue; } + //一级任务id + String firstTaskIdCell = ExcelUtil.getCellComment(row.getCell(1)); if(StrUtil.isNotEmpty(firstTaskName)){ //添加一级任务 - firstTaskId = saveFirstTask(project, firstTaskName); + firstTaskId = saveFirstTask(project, firstTaskName,firstTaskIdCell); } //二级任务名 String taskName = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(2))); if(StrUtil.isEmpty(taskName)){ continue; } + //二级任务分解id + String subIdCell = ExcelUtil.getCellComment(row.getCell(2)); + //二级任务详情id + String detailIdCell = ExcelUtil.getCellComment(row.getCell(3)); //任务描述 String description = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(3))); //重要性标签 String vitalLabel = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(7))); //负责人 String executorRole = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(8))); + //检查人 + String checkerRole = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(9))); //开始时间 String beginTime = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(4))); //结束时间 @@ -686,17 +710,30 @@ public class ImportService implements IImportService { String duration = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(6))); //交付物 String deliver = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(10))); + //二级任务详情id + String deliverIdCell = ExcelUtil.getCellComment(row.getCell(10)); //插件 String plugin1 = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(12))); + String pluginIdCell1 = ExcelUtil.getCellComment(row.getCell(12)); String plugin2 = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(13))); + String pluginIdCell2 = ExcelUtil.getCellComment(row.getCell(13)); String plugin3 = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(14))); + String pluginIdCell3 = ExcelUtil.getCellComment(row.getCell(14)); if(StrUtil.isNotEmpty(taskName)){ + Long detailId = null; + if(StrUtil.isNotBlank(detailIdCell)){ + try { + detailId = Long.parseLong(detailIdCell); + }catch (Exception e){ + log.info("任务详情id解析失败"); + } + } //添加二级任务信息(任务详情) ProTaskDetail taskDetail = new ProTaskDetail(); - taskDetail.setId(snowflake.nextId()); + taskDetail.setId((1 == project.getImportType() && detailId != null) ? detailId : snowflake.nextId()); taskDetail.setName(taskName); taskDetail.setDescription(description); - taskDetailDao.insertSelective(taskDetail); + taskDetailDao.insertReplace(taskDetail); //任务关联信息(关联一级任务) ProParentTask parentTask = new ProParentTask(); parentTask.setId(snowflake.nextId()); @@ -714,7 +751,7 @@ public class ImportService implements IImportService { labelBusiness.setBusinessId(taskDetail.getId()); labelBusiness.setLabelId(labelId); labelBusinessDao.insertSelective(labelBusiness); - //任务和角色关联 + //任务和负责人关联 if(StrUtil.isEmpty(executorRole)){ throw new BaseException(ZeroCodeError.WBS_NOT_FIND_ROLE.addMsg(wbsSheet.getSheetName(),i+1,executorRole)); } @@ -731,15 +768,47 @@ public class ImportService implements IImportService { roleTaskMapper.insertSelective(roleTask); } + //任务和检查人关联 + if(StrUtil.isNotEmpty(checkerRole)){ + Long checkerRoleId = roleMap.get(checkerRole); + if(ObjectUtil.isNull(checkerRoleId)){ + throw new BaseException(ZeroCodeError.WBS_NOT_FIND_ROLE.addMsg(wbsSheet.getSheetName(),i+1,checkerRole)); + } + ProRoleTask roleTask = new ProRoleTask(); + roleTask.setId(snowflake.nextId()); + roleTask.setRoleDuty((byte) 1); + roleTask.setRoleId(checkerRoleId); + roleTask.setTaskId(taskDetail.getId()); + roleTaskMapper.insertSelective(roleTask); + }else { + throw new BaseException(ZeroCodeError.WBS_NOT_FIND_ROLE.addMsg(wbsSheet.getSheetName(),i+1,executorRole)); + } + //处理时间、添加任务分解、添加任务标签 - taskStartTime = taskSaveTime(taskStartTime, project, beginTime, endTime, duration, taskDetail.getId(),wbsSheet,i+1,deliver); + Long subId = null; + if(StrUtil.isNotBlank(subIdCell)){ + try { + subId = Long.parseLong(subIdCell); + }catch (Exception e){ + log.info("任务分解id解析失败"); + } + } + Long deliverId = null; + if(StrUtil.isNotBlank(deliverIdCell)){ + try { + deliverId = Long.parseLong(deliverIdCell); + }catch (Exception e){ + log.info("交付物id解析失败"); + } + } + taskStartTime = taskSaveTime(subId, taskStartTime, project, beginTime, endTime, duration, taskDetail.getId(),wbsSheet,i+1,deliver,deliverId); //添加时间颗粒度标签并关联 Long timeLabel = labelDao.getLabelByTypeAndLevel(0, 4); saveLabelTask(taskDetail.getId(),timeLabel); //TODO 插件 - Long taskPlugin1 = plugin(plugin1,taskDetail.getId(),1,wbsSheet,i+1); - Long taskPlugin2 = plugin(plugin2,taskDetail.getId(),2,wbsSheet,i+1); - Long taskPlugin3 = plugin(plugin3,taskDetail.getId(),3,wbsSheet,i+1); + Long taskPlugin1 = plugin(project,pluginIdCell1,plugin1,taskDetail.getId(),1,wbsSheet,i+1); + Long taskPlugin2 = plugin(project,pluginIdCell2,plugin2,taskDetail.getId(),2,wbsSheet,i+1); + Long taskPlugin3 = plugin(project,pluginIdCell3,plugin3,taskDetail.getId(),3,wbsSheet,i+1); TaskDto.TaskPluginId taskPlugin = new TaskDto.TaskPluginId(taskPlugin1,taskPlugin2,taskPlugin3); taskMap.put(sequence + "_" + taskName, taskPlugin); } @@ -750,22 +819,23 @@ public class ImportService implements IImportService { //TODO 添加默认插件 } } - private Long plugin(String plugin, Long taskId, int row, XSSFSheet wbsSheet, int errorRow) { + private Long plugin(ProjectVo.SysProject project, String pluginIdCell, String plugin, Long taskId, int row, XSSFSheet wbsSheet, int errorRow) { Long taskPlugin = null; if(StrUtil.isNotEmpty(plugin)){ - //根据插件名称查找插件id -// Long pluginId = taskPluginDao.getPluginIdByName(plugin); -// Long pluginId = 1L; -// if(ObjectUtil.isNull(pluginId)){ -// throw new BaseException(ZeroCodeError.PLUGIN_NAME_ERROR.addMsg(wbsSheet.getSheetName(),errorRow,plugin)); -// } + if(StrUtil.isNotBlank(pluginIdCell)){ + try { + taskPlugin = Long.parseLong(pluginIdCell); + }catch (Exception e){ + log.info("任务插件id解析失败"); + } + } TallPluginVo.BusinessPluginInfo pluginByCodeAndName = PluginUtil.getPluginByCodeAndName(Constant.BUSINESS_CODE, plugin); if(ObjectUtil.isNull(pluginByCodeAndName)){ throw new BaseException(ZeroCodeError.PLUGIN_NAME_ERROR.addMsg(wbsSheet.getSheetName(),errorRow,plugin)); } //添加插件 ProTaskPlugin proTaskPlugin = new ProTaskPlugin(); - proTaskPlugin.setId(snowflake.nextId()); + proTaskPlugin.setId((1 == project.getImportType() && taskPlugin != null) ? taskPlugin : snowflake.nextId()); proTaskPlugin.setTaskDetailId(taskId); proTaskPlugin.setPluginId(pluginByCodeAndName.getPluginId()); proTaskPlugin.setBusinessPluginId(pluginByCodeAndName.getBusinessPluginId()); @@ -775,13 +845,14 @@ public class ImportService implements IImportService { proTaskPlugin.setPlginCol(1); proTaskPlugin.setRowspan(1); proTaskPlugin.setColspan(1); - proTaskPluginDao.insertSelective(proTaskPlugin); + proTaskPlugin.setCode(plugin); + proTaskPluginDao.insertReplace(proTaskPlugin); taskPlugin = proTaskPlugin.getId(); } return taskPlugin; } - private Long taskSaveTime(Long taskStartTime, ProjectVo.SysProject project, String beginTime, String endTime, String duration, Long taskDetailId, XSSFSheet wbsSheet, int row,String deliver) { + private Long taskSaveTime(Long subId, Long taskStartTime, ProjectVo.SysProject project, String beginTime, String endTime, String duration, Long taskDetailId, XSSFSheet wbsSheet, int row, String deliver, Long deliverId) { if(StrUtil.isEmpty(beginTime) || "日常".equalsIgnoreCase(beginTime)){ if(StrUtil.isEmpty(beginTime) && StrUtil.isNotEmpty(duration)){ @@ -803,18 +874,18 @@ public class ImportService implements IImportService { Long durationTime = Long.parseLong(trimNum) * aLong; //添加任务分解 ProTaskSub taskSub = new ProTaskSub(); - taskSub.setId(snowflake.nextId()); + taskSub.setId((1 == project.getImportType() && subId != null) ? subId : snowflake.nextId()); taskSub.setTaskDetailId(taskDetailId); taskSub.setPlanDuration(durationTime); taskSub.setPlanStartTime(taskStartTime); taskStartTime += durationTime; taskSub.setPlanEndTime(taskStartTime); - taskSubDao.insertSelective(taskSub); + taskSubDao.insertReplace(taskSub); //TODO 添加交付物信息 //添加交付物信息 -// if(StrUtil.isNotBlank(deliver)) { -// saveDeliver(deliver, taskSub); -// } + if(StrUtil.isNotBlank(deliver)) { + saveDeliver(project, deliverId, deliver, taskSub); + } //查找定期任务标签并关联任务 Long taskLabel = labelDao.getLabelByTypeAndLevel(1, 3); saveLabelTask(taskDetailId,taskLabel); @@ -822,13 +893,13 @@ public class ImportService implements IImportService { }else { //添加任务分解 ProTaskSub taskSub = new ProTaskSub(); - taskSub.setId(snowflake.nextId()); + taskSub.setId((1 == project.getImportType() && subId != null) ? subId : snowflake.nextId()); taskSub.setTaskDetailId(taskDetailId); - taskSubDao.insertSelective(taskSub); + taskSubDao.insertReplace(taskSub); //添加交付物信息 -// if(StrUtil.isNotBlank(deliver)) { -// saveDeliver(deliver, taskSub); -// } + if(StrUtil.isNotBlank(deliver)) { + saveDeliver(project, deliverId, deliver, taskSub); + } //查找日常任务标签并关联信息 Long label = labelDao.getLabelByTypeAndLevel(1, 2); saveLabelTask(taskDetailId,label); @@ -841,16 +912,16 @@ public class ImportService implements IImportService { eTime = StrUtil.isEmpty(endTime) ? project.getEndTime() : Long.parseLong(endTime); //添加任务分解 ProTaskSub taskSub = new ProTaskSub(); - taskSub.setId(snowflake.nextId()); + taskSub.setId((1 == project.getImportType() && subId != null) ? subId : snowflake.nextId()); taskSub.setTaskDetailId(taskDetailId); taskSub.setPlanEndTime(eTime); taskSub.setPlanStartTime(bTime); taskSub.setPlanDuration(eTime - bTime); - taskSubDao.insertSelective(taskSub); + taskSubDao.insertReplace(taskSub); //添加交付物信息 -// if(StrUtil.isNotBlank(deliver)) { -// saveDeliver(deliver, taskSub); -// } + if(StrUtil.isNotBlank(deliver)) { + saveDeliver(project, deliverId, deliver, taskSub); + } //查找定期任务标签并关联任务 Long taskLabel = labelDao.getLabelByTypeAndLevel(1, 3); saveLabelTask(taskDetailId,taskLabel); @@ -886,9 +957,9 @@ public class ImportService implements IImportService { } if(CollectionUtil.isNotEmpty(proTaskSubList)){ taskDetailDao.insertSelectiveList(proTaskSubList); -// if(StrUtil.isNotBlank(deliver)) { -// pluDeliverDao.insertSelectiveList(deliverList); -// } + if(StrUtil.isNotBlank(deliver)) { + pluDeliverDao.insertSelectiveList(deliverList); + } } //查找定期任务标签并关联任务 Long taskLabel = labelDao.getLabelByTypeAndLevel(1, 3); @@ -902,25 +973,33 @@ public class ImportService implements IImportService { return taskStartTime; } -// private void saveDeliver(String deliver, ProTaskSub taskSub) { -// PluDeliver pluDeliver = new PluDeliver(); -// pluDeliver.setId(snowflake.nextId()); -// pluDeliver.setTaskSubId(taskSub.getId()); -// pluDeliver.setName(deliver); -// pluDeliverDao.insertSelective(pluDeliver); -// } + private void saveDeliver(ProjectVo.SysProject project, Long deliverId, String deliver, ProTaskSub taskSub) { + PluDeliver pluDeliver = new PluDeliver(); + pluDeliver.setId((1 == project.getImportType() && deliverId != null) ? deliverId : snowflake.nextId()); + pluDeliver.setTaskSubId(taskSub.getId()); + pluDeliver.setName(deliver); + pluDeliverDao.insertReplace(pluDeliver); + } /** * 添加一级任务 */ - private Long saveFirstTask(ProjectVo.SysProject project, String firstTaskName) { + private Long saveFirstTask(ProjectVo.SysProject project, String firstTaskName, String firstIdCell) { + Long firstTaskId = null; + if(StrUtil.isNotBlank(firstIdCell)){ + try { + firstTaskId = Long.parseLong(firstIdCell); + }catch (Exception e){ + log.info("一级任务id解析失败"); + } + } //TODO 一级任务负责人是项目经理 - Long firstTaskId; + ProTaskDetail taskDetail = new ProTaskDetail(); - taskDetail.setId(snowflake.nextId()); + taskDetail.setId((1 == project.getImportType() && firstTaskId != null) ? firstTaskId : snowflake.nextId()); taskDetail.setName(firstTaskName); - taskDetailDao.insertSelective(taskDetail); + taskDetailDao.insertReplace(taskDetail); firstTaskId = taskDetail.getId(); //添加任务分解 ProTaskSub taskSub = new ProTaskSub(); @@ -943,3 +1022,5 @@ public class ImportService implements IImportService { return firstTaskId; } } + + diff --git a/src/main/java/com/ccsens/ptos_zero/service/TallService.java b/src/main/java/com/ccsens/ptos_zero/service/TallService.java index 2e64486..af011ea 100644 --- a/src/main/java/com/ccsens/ptos_zero/service/TallService.java +++ b/src/main/java/com/ccsens/ptos_zero/service/TallService.java @@ -1,151 +1,16 @@ -//package com.ccsens.ptos_zero.service; -// -//import cn.hutool.core.collection.CollectionUtil; -//import com.ccsens.ptos_zero.bean.po.ProRole; -//import com.ccsens.ptos_zero.persist.dao.ProRoleDao; -//import com.ccsensptos.tallsdk.bean.dto.ProjectDto; -//import com.ccsensptos.tallsdk.bean.dto.RoleDto; -//import com.ccsensptos.tallsdk.bean.dto.TaskDto; -//import com.ccsensptos.tallsdk.bean.vo.ProjectVo; -//import com.ccsensptos.tallsdk.bean.vo.RoleVo; -//import com.ccsensptos.tallsdk.bean.vo.TaskVo; -//import com.ccsensptos.tallsdk.service.ITallService; -//import lombok.extern.slf4j.Slf4j; -//import org.springframework.stereotype.Service; -//import org.springframework.transaction.annotation.Propagation; -//import org.springframework.transaction.annotation.Transactional; -//import org.springframework.web.multipart.MultipartFile; -// -//import javax.annotation.Resource; -//import java.util.ArrayList; -//import java.util.List; -// -///** -// * @author 逗 -// */ -//@Slf4j -//@Service -//@Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class) -//public class TallService implements ITallService { -// -// @Resource -// private ProRoleDao proRoleDao; -// -// -// @Override -// public List queryProjectByUser(String token,ProjectDto.QueryProjectDto param) { -// return null; -// } -// -// @Override -// public RoleVo.QueryRole queryShowRole(String token,RoleDto.QueryRoleById param) { -// //TODO 通过token向tall获取用户信息, -// Long userId = null; -// -// //返回的对象 -// RoleVo.QueryRole queryRole = new RoleVo.QueryRole(); -// List visibleList = new ArrayList<>(); -// List invisibleList = new ArrayList<>(); -// -// //查询当前用户在项目下的角色,没有则算作关注者 -// List userRoleList = proRoleDao.queryRoleByUserId(param.getProjectId(),userId); -// //查询用户可见的角色 -// List roleInfoList; -// if(CollectionUtil.isNotEmpty(userRoleList)){ -// //不是关注者,查询可见的角色(完全屏蔽才不可见) -// roleInfoList = proRoleDao.notAttentionQueryRole(param.getProjectId(),userRoleList); -// }else { -// //是关注者查询可见的角色(未设置过对谁不可见信息的角色) -// roleInfoList = proRoleDao.attentionQueryRole(param.getProjectId()); -// } -// //查询配置信息 -// List showRoleList = proRoleDao.queryShowByUserAndProject(param.getProjectId(),userId); -// if(CollectionUtil.isNotEmpty(showRoleList)){ -// for (Long showRoleId : showRoleList) { -// //循环配置内的信息去匹配角色列表,来确定角色该放在什么地方 -// for (RoleVo.RoleInfo roleInfo : roleInfoList) { -// if(showRoleId.equals(roleInfo.getId())){ -// //和配置内的信息相同则放入展示角色列表 -// visibleList.add(roleInfo); -// //同时删除数组内的信息 -// roleInfoList.remove(roleInfo); -// //跳出循环,开始配置信息内的下一个 -// break; -// } -// } -// } -// //剩下的角色全部放在不可见角色列表 -// invisibleList.addAll(roleInfoList); -// }else { -// //没有配置信息则按默认规则 -// if (CollectionUtil.isNotEmpty(roleInfoList)) { -// //循环所有角色 -// for (RoleVo.RoleInfo roleInfo : roleInfoList) { -// //如果是项目经理,放入展示的角色 -// if (roleInfo.getPm() == 1) { -// visibleList.add(roleInfo); -// continue; -// } -// //是用户所属的角色,放入展示的角色列表 -// if (roleInfo.getMine() == 1) { -// visibleList.add(roleInfo); -// continue; -// } else { -// //不是用户所属的角色,但展示角色列表数量不足设置的数量 -// -// //展示数量等于0,展示全部 -// if(param.getNum() == 0){ -// visibleList.add(roleInfo); -// continue; -// } -// //不是用户所属的角色,但展示角色列表数量不足五个, -// if (visibleList.size() < param.getNum()) { -// visibleList.add(roleInfo); -// continue; -// } -// } -// //不满足上面条件的,放入不展示的角色列表 -// invisibleList.add(roleInfo); -// } -// } -// } -// queryRole.setVisibleList(visibleList); -// queryRole.setInvisibleList(invisibleList); -// return queryRole; -// } -// -// @Override -// public List queryPermanentGlobalTask(String token,TaskDto.QueryPermanentGlobalTask param) { -// return null; -// } -// -// @Override -// public List queryGlobalTask(String token,TaskDto.QueryGlobalTask param) { -// return null; -// } -// -// @Override -// public List queryRegularTask(String token,TaskDto.QueryRegularTask param) { -// return null; -// } -// -// @Override -// public List importWbs(String token,MultipartFile params) { -// return null; -// } -//} package com.ccsens.ptos_zero.service; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.FileUtil; -import cn.hutool.core.util.BooleanUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; import com.ccsens.ptos_zero.bean.po.ProRole; -import com.ccsens.ptos_zero.bean.po.ProRoleExample; +import com.ccsens.ptos_zero.bean.po.ProTaskSub; import com.ccsens.ptos_zero.bean.po.ProUser; +import com.ccsens.ptos_zero.bean.vo.DeliverVo; import com.ccsens.ptos_zero.persist.dao.*; import com.ccsens.ptos_zero.util.Constant; import com.ccsens.ptos_zero.util.ZeroCodeError; @@ -158,9 +23,10 @@ import com.ccsensptos.tallsdk.bean.dto.TallRoleDto; import com.ccsensptos.tallsdk.bean.dto.TallTaskDto; import com.ccsensptos.tallsdk.bean.dto.TallTokenDto; import com.ccsensptos.tallsdk.bean.vo.*; -import com.ccsensptos.tallsdk.bean.vo.TallProjectVo; import com.ccsensptos.tallsdk.service.ITallService; import com.ccsensptos.tallsdk.util.TokenUtil; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -187,6 +53,8 @@ public class TallService implements ITallService { @Resource private ProTaskDetailDao taskDetailDao; @Resource + private ProTaskSubDao proTaskSubDao; + @Resource private ProRoleDao roleDao; @Resource private ProMemberDao memberDao; @@ -201,36 +69,31 @@ public class TallService implements ITallService { @Resource private IImportService importService; @Resource + private UserDao userDao; + @Resource private ProProjectDao proProjectDao; @Resource - private UserDao userDao; - - @Override - public TallProjectVo.ProjectInfo findProjectById(String header, TallProjectDto.ProjectById params) { - TallProjectVo.ProjectInfo projectById = proProjectDao.findProjectById(params.getProjectId()); - if (ObjectUtil.isNull(projectById)){ - throw new BaseException(ZeroCodeError.PROJECT_NOT_FOUND); - } - return projectById; - } + private PluDeliverDao pluDeliverDao; @SneakyThrows @Override public TallProjectVo.ProjectInfo importWbs(String token, MultipartFile params) { //TODO 根据token获取用户信息 TallTokenVo.UserIdByToken userByToken = TokenUtil.getUserByToken(new TallTokenDto.GetUserByToken(token, Constant.APP_ID, Constant.APP_SECRET)); + if(ObjectUtil.isNull(userByToken)){ + throw new BaseException(CodeEnum.NOT_LOGIN); + } + log.info("token获取的用户信息:{}", userByToken); //通过手机号获取用户在服务内的userId ProUser user = null; if(ObjectUtil.isNotNull(userByToken) && StrUtil.isNotBlank(userByToken.getPhone())){ user = userDao.getUserIdByPhone(userByToken.getPhone()); } - if(user == null){ - throw new BaseException(CodeEnum.NOT_LOGIN); + log.info("本服务下的用户信息:{}", user); + if(ObjectUtil.isNull(user)){ + throw new BaseException(ZeroCodeError.NOT_USER_SERVER); } - if(ObjectUtil.isNull(userByToken)){ - throw new BaseException(CodeEnum.NOT_LOGIN); - } String ext = FileUtil.extName(params.getOriginalFilename()); if(StrUtil.isEmpty(ext) || !Constant.WbsExcel.WBS_FILE_FORMAT.contains(ext)){ throw new BaseException(ZeroCodeError.FILE_FORMAT_ERROR); @@ -248,23 +111,59 @@ public class TallService implements ITallService { FileUtil.writeFromStream(params.getInputStream(), fullPath); //导入数据库 - return importService.importWbs(fullPath,userByToken.getId(),null); + return importService.importWbs(fullPath,user.getId(),null); } + @SneakyThrows @Override - public List queryProjectByUser(String token,TallProjectDto.QueryProjectDto param) { - TallTokenVo.UserIdByToken userByToken = TokenUtil.getUserByToken(new TallTokenDto.GetUserByToken(token, Constant.APP_ID, Constant.APP_SECRET)); + public TallWbsVo.WbsPath exportWbs(String token, TallProjectDto.ProjectById param) { +// //TODO 验证项目id是否正确 +// //TODO 暂时只查询二级任务,不管二级以下的子任务 +// +// //查询下项目信息 +// TallWbsVo.WbsProjectInfo wbsProjectInfo = proProjectDao.getWbsProjectId(param.getProjectId()); +// if(ObjectUtil.isNull(wbsProjectInfo)){ +// throw new BaseException(ZeroCodeError.PROJECT_NOT_FOUND); +// } +// //查询一级任务信息 +// List wbsTaskInfo = taskDetailDao.getWbsTaskByProjectId(param.getProjectId()); +// if(CollectionUtil.isNotEmpty(wbsTaskInfo)){ +// wbsTaskInfo.forEach(taskInfo -> { +// //查询二级任务 +// List secondTaskList = taskDetailDao.getSecondTask(taskInfo.getFirstId()); +// taskInfo.setSecondTaskList(secondTaskList); +// }); +// } +// //查询角色成员信息 +// TallWbsVo.WbsRoleInfo wbsRoleInfo = new TallWbsVo.WbsRoleInfo(); +// //查询项目经理的角色信息 +// List pmList = proRoleDao.getWbsRoleInfo(param.getProjectId(),0); +// //查询项目成员的角色信息 +// List roleList = proRoleDao.getWbsRoleInfo(param.getProjectId(),1); +// wbsRoleInfo.setPmList(pmList); +// wbsRoleInfo.setRoleList(roleList); +// +// //生成excel数据并导入文件 +// String url = exportService.exportWbs(wbsProjectInfo,wbsTaskInfo,wbsRoleInfo); +// +// TallWbsVo.WbsPath wbsPath = new TallWbsVo.WbsPath(); +// wbsPath.setUrl(url); +// return wbsPath; + return null; + } -// List projectInfos = new ArrayList<>(); -// TallProjectVo.ProjectInfo projectInfo = new TallProjectVo.ProjectInfo(); -// projectInfo.setId(1485932638408675328L); -// projectInfo.setName("我的"); -// projectInfo.setUrl("http://101.201.226.163:7310"); -// projectInfo.setBusinessCode("ZERO"); -// projectInfo.setDomainCode("tall_dh"); -// projectInfos.add(projectInfo); - -// TallTokenVo.UserIdByToken userByToken = TokenUtil.getUserByToken(new TallTokenDto.GetUserByToken(token, Constant.APP_ID, Constant.APP_SECRET)); + @Override + public TallProjectVo.ProjectInfo findProjectById(String header, TallProjectDto.ProjectById params) { + TallProjectVo.ProjectInfo projectById = proProjectDao.findProjectById(params.getProjectId()); + if (ObjectUtil.isNull(projectById)){ + throw new BaseException(ZeroCodeError.PROJECT_NOT_FOUND); + } + return projectById; + } + + @Override + public List queryProjectByUser(String token, TallProjectDto.QueryProjectDto param) { + TallTokenVo.UserIdByToken userByToken = TokenUtil.getUserByToken(new TallTokenDto.GetUserByToken(token, Constant.APP_ID, Constant.APP_SECRET)); if(ObjectUtil.isNull(userByToken)){ return null; } @@ -300,9 +199,9 @@ public class TallService implements ITallService { } @Override - public TallRoleVo.QueryRole queryShowRole(String token,TallRoleDto.QueryRoleById param) { + public TallRoleVo.QueryRole queryShowRole(String token, TallRoleDto.QueryRoleById param) { //TODO 通过token向tall获取用户信息, - TallTokenVo.UserIdByToken userByToken = TokenUtil.getUserByToken(new TallTokenDto.GetUserByToken(token, Constant.APP_ID, Constant.APP_SECRET)); + TallTokenVo.UserIdByToken userByToken = TokenUtil.getUserByToken(new TallTokenDto.GetUserByToken(token, Constant.APP_ID, Constant.APP_SECRET)); if(ObjectUtil.isNull(userByToken)){ throw new BaseException(CodeEnum.NOT_LOGIN); } @@ -318,43 +217,15 @@ public class TallService implements ITallService { //查询当前用户在项目下的角色,没有则算作关注者 List userRoleList = proRoleDao.queryRoleByUserId(param.getProjectId(),user == null ? null : user.getId()); + //查询用户可见的角色 List roleInfoList = new ArrayList<>(); - if(CollectionUtil.isNotEmpty(userRoleList)){ //不是关注者,查询可见的角色(完全屏蔽才不可见) roleInfoList = proRoleDao.notAttentionQueryRole(param.getProjectId(),userRoleList); - if(CollectionUtil.isNotEmpty(roleInfoList)){ - roleInfoList.forEach(roleInfo -> { - if("我".equals(roleInfo.getName())){ - roleInfo.setMine(1); - } - }); - } }else { -// //是关注者查询可见的角色(未设置过对谁不可见信息的角色) -// roleInfoList = proRoleDao.attentionQueryRole(param.getProjectId()); - //TODO 0号项目游客查看所有,默认属于管理员 - ProRoleExample proRoleExample = new ProRoleExample(); - proRoleExample.createCriteria().andProjectIdEqualTo(param.getProjectId()); - List proRoles = proRoleDao.selectByExample(proRoleExample); - if(CollectionUtil.isNotEmpty(proRoles)){ - for (ProRole proRole : proRoles) { - if("我".equals(proRole.getName())){ - TallRoleVo.RoleInfo roleInfo = new TallRoleVo.RoleInfo(); - roleInfo.setId(proRole.getId()); - roleInfo.setName(proRole.getName()); - roleInfo.setMine(1); - roleInfoList.add(roleInfo); - }else if("管理员".equals(proRole.getName())){ - TallRoleVo.RoleInfo roleInfo = new TallRoleVo.RoleInfo(); - roleInfo.setId(proRole.getId()); - roleInfo.setName(proRole.getName()); - roleInfo.setMine(1); - roleInfoList.add(roleInfo); - } - } - } + //是关注者查询可见的角色(未设置过对谁不可见信息的角色) + roleInfoList = proRoleDao.attentionQueryRole(param.getProjectId()); } //查询配置信息 List showRoleList = proRoleDao.queryShowByUserAndProject(param.getProjectId(),userByToken.getId()); @@ -413,15 +284,20 @@ public class TallService implements ITallService { } @Override - public List queryPermanentGlobalTask(String token,TallTaskDto.QueryPermanentGlobalTask param) { - //TODO 通过token向tall获取用户信息, - Long userId = null; - - //查找当前角色是否有查看权限 - Boolean isLook = queryRoleIsLook(param.getRoleId(), userId); - if (BooleanUtil.isFalse(isLook)) { - throw new BaseException(CodeEnum.NO_POWER); + public List queryPermanentGlobalTask(String token, TallTaskDto.QueryPermanentGlobalTask param) { + TallTokenVo.UserIdByToken userByToken = TokenUtil.getUserByToken(new TallTokenDto.GetUserByToken(token, Constant.APP_ID, Constant.APP_SECRET)); + if(ObjectUtil.isNull(userByToken)){ + throw new BaseException(CodeEnum.NOT_LOGIN); } + //通过手机号获取用户在服务内的userId + ProUser user = null; + if(ObjectUtil.isNotNull(userByToken) && StrUtil.isNotBlank(userByToken.getPhone())){ + user = userDao.getUserIdByPhone(userByToken.getPhone()); + } +// if(ObjectUtil.isNull(user)){ +// throw new BaseException(ZeroCodeError.NOT_USER_SERVER); +// } + List roleIds = new ArrayList<>(); roleIds.add(param.getRoleId()); @@ -430,19 +306,27 @@ public class TallService implements ITallService { queryPluginForTask(permanentGlobalTask); //查询任务下的检查人 queryCheckerOfTask(permanentGlobalTask); + + //TODO 查询插件展示信息 + queryPluginShow(permanentGlobalTask,user == null ? null : user.getId()); return permanentGlobalTask; } @Override - public List queryGlobalTask(String token,TallTaskDto.QueryGlobalTask param) { - //TODO 通过token向tall获取用户信息, - Long userId = null; - - //查找当前角色是否有查看权限 - Boolean isLook = queryRoleIsLook(param.getRoleId(), userId); - if (BooleanUtil.isFalse(isLook)) { - throw new BaseException(CodeEnum.NO_POWER); + public List queryGlobalTask(String token, TallTaskDto.QueryGlobalTask param) { + TallTokenVo.UserIdByToken userByToken = TokenUtil.getUserByToken(new TallTokenDto.GetUserByToken(token, Constant.APP_ID, Constant.APP_SECRET)); + if(ObjectUtil.isNull(userByToken)){ + throw new BaseException(CodeEnum.NOT_LOGIN); } + //通过手机号获取用户在服务内的userId + ProUser user = null; + if(ObjectUtil.isNotNull(userByToken) && StrUtil.isNotBlank(userByToken.getPhone())){ + user = userDao.getUserIdByPhone(userByToken.getPhone()); + } +// if(ObjectUtil.isNull(user)){ +// throw new BaseException(ZeroCodeError.NOT_USER_SERVER); +// } + List roleIds = new ArrayList<>(); roleIds.add(param.getRoleId()); //查询当前角色是否项目经理 @@ -450,14 +334,21 @@ public class TallService implements ITallService { queryPluginForTask(globalTask); //查询任务下的检查人 queryCheckerOfTask(globalTask); + + //TODO 查询插件展示信息 + queryPluginShow(globalTask,user == null ? null : user.getId()); return globalTask; } @Override - public List queryRegularTask(String token,TallTaskDto.QueryRegularTask param) { + public List queryRegularTask(String token, TallTaskDto.QueryRegularTask param) { //TODO 通过token向tall获取用户信息, - Long userId = null; - +// Long userId = null; +// //查找当前角色是否有查看权限 +// Boolean isLook = queryRoleIsLook(param.getRoleId(), userId); +// if (BooleanUtil.isFalse(isLook)) { +// throw new BaseException(ZeroCodeError.NOT_PERMISSION); +// } //查找类型:0向上查找,1向下查找(默认),下查包含自己,上查不包含 //根据参数配置sql语句 String query = ""; @@ -468,11 +359,7 @@ public class TallService implements ITallService { } else { query += "interval " + (param.getQueryNum() - 1) + " " + unit; } - //查找当前角色是否有查看权限 - Boolean isLook = queryRoleIsLook(param.getRoleId(), userId); - if (BooleanUtil.isFalse(isLook)) { - throw new BaseException(ZeroCodeError.NOT_PERMISSION); - } + List roleIds = new ArrayList<>(); roleIds.add(param.getRoleId()); @@ -562,15 +449,15 @@ public class TallService implements ITallService { //创建任务面板的二维数组 createSecondPanel(plugins, panelRow, panelCol); //将插件放入二维数组对应的位置中 - List taskPluginInfoList = taskPluginDao.queryTaskOfPlugin(queryTask.getDetailId()); + List taskPluginInfoList = taskPluginDao.queryTaskOfPlugin(queryTask.getId()); putDateInList(taskPluginInfoList, plugins, queryTask); } else { //根据插件最大的行和列创建二维数组 - createPanelByPlugin(queryTask.getDetailId(), plugins, queryTask); + createPanelByPlugin(plugins, queryTask); } } else { //根据插件最大的行和列创建二维数组 - createPanelByPlugin(queryTask.getDetailId(), plugins, queryTask); + createPanelByPlugin(plugins, queryTask); } } } @@ -625,12 +512,11 @@ public class TallService implements ITallService { /** * 根据插件的最大行列创建面板 * - * @param taskDetailId 任务详情id * @param plugins 插件列表 * @param queryTask 任务 */ - public void createPanelByPlugin(Long taskDetailId, List> plugins, TallTaskVo.QueryTask queryTask) { - List taskPluginInfoList = taskPluginDao.queryTaskOfPlugin(taskDetailId); + public void createPanelByPlugin(List> plugins, TallTaskVo.QueryTask queryTask) { + List taskPluginInfoList = taskPluginDao.queryTaskOfPlugin(queryTask.getId()); if (CollectionUtil.isNotEmpty(taskPluginInfoList)) { List col = taskPluginInfoList.stream().map(TallTaskVo.TaskPluginInfo::getCol).collect(Collectors.toList()); List row = taskPluginInfoList.stream().map(TallTaskVo.TaskPluginInfo::getRow).collect(Collectors.toList()); @@ -643,8 +529,186 @@ public class TallService implements ITallService { } } + + /** + * 查看定期任务和任务下的插件展示信息 + * @param token token + * @param param 查询条件 + * @return 返回任务列表和对应的插件展示信息 + */ @Override - public List queryRegularTaskAndPlugin(String header, TallTaskDto.QueryRegularTask param) { - return null; + public List queryRegularTaskAndPlugin(String token, TallTaskDto.QueryRegularTask param) { + //TODO 根据token获取用户信息 + TallTokenVo.UserIdByToken userByToken = TokenUtil.getUserByToken(new TallTokenDto.GetUserByToken(token, Constant.APP_ID, Constant.APP_SECRET)); + if(ObjectUtil.isNull(userByToken)){ + throw new BaseException(CodeEnum.NOT_LOGIN); + } + //通过手机号获取用户在服务内的userId + ProUser user = null; + if(ObjectUtil.isNotNull(userByToken) && StrUtil.isNotBlank(userByToken.getPhone())){ + user = userDao.getUserIdByPhone(userByToken.getPhone()); + } +// if(ObjectUtil.isNull(user)){ +// throw new BaseException(ZeroCodeError.NOT_USER_SERVER); +// } + + //查找类型:0向上查找,1向下查找(默认),下查包含自己,上查不包含 + //根据参数配置sql语句 + String query = ""; + String timeFormat = Constant.timeFormat.get(param.getTimeUnit()); + String unit = Constant.timeUnit.get(param.getTimeUnit()); + if (0 == param.getQueryType()) { + query = "interval -" + param.getQueryNum() + " " + unit; + } else { + query += "interval " + (param.getQueryNum() - 1) + " " + unit; + } + + List roleIds = new ArrayList<>(); + roleIds.add(param.getRoleId()); + + //TODO 季度未实现 + List regularTask = taskDetailDao.queryRegularTask(roleIds, param.getTimeUnit(), param.getTimeNode(), param.getQueryType(), query, timeFormat); + //如果该时段没有任务向上或向下补充 + if (CollectionUtil.isEmpty(regularTask)) { + List replenishTask = taskDetailDao.continueQueryTask(roleIds, param.getTimeUnit(), param.getTimeNode(), param.getQueryType(), query, timeFormat); + Map> taskMap = replenishTask.stream().collect(Collectors.groupingBy(task -> new SimpleDateFormat("yyyy-MM-dd").format(new Date(task.getPlanStart())))); + List mapOfKey = new ArrayList<>(); + taskMap.forEach((key, val) -> mapOfKey.add(key)); + if (CollectionUtil.isNotEmpty(mapOfKey)) { + if (0 == param.getQueryType()) { + String max = Collections.max(mapOfKey); + queryPluginForTask(taskMap.get(max)); + return taskMap.get(max); + } else { + String min = Collections.min(mapOfKey); + queryPluginForTask(taskMap.get(min)); + return taskMap.get(min); + } + } + queryPluginForTask(replenishTask); + //查询任务下的检查人 + queryCheckerOfTask(replenishTask); + //TODO 查询插件展示信息 + queryPluginShow(regularTask,user == null ? null : user.getId()); + return replenishTask; + } + queryPluginForTask(regularTask); + //查询任务下的检查人 + queryCheckerOfTask(regularTask); + + //TODO 查询插件展示信息 + queryPluginShow(regularTask,user == null ? null : user.getId()); + + return regularTask; + } + + private void queryPluginShow(List regularTask,Long userId) { + if(CollectionUtil.isEmpty(regularTask)){ + return; + } + for (TallTaskVo.QueryTask queryTask : regularTask) { + if(CollectionUtil.isNotEmpty(queryTask.getPlugins())){ + + for (List plugins : queryTask.getPlugins()) { + if(CollectionUtil.isNotEmpty(plugins)){ + for (TallTaskVo.TaskPluginInfo plugin : plugins) { + System.out.println("====" + plugin); + //TODO 判断插件类型,暂时一个个的判断,之后应该是统一的接口 + Long pluginId = plugin.getPluginId(); + if (pluginId == 15L) { + //TODO 查找交付物的信息 + DeliverVo.DeliverOfTask deliverByTask = pluDeliverDao.getDeliverByTask(queryTask.getId(), userId); + plugin.setData(JSON.toJSONString(deliverByTask)); + } else if (pluginId == 18L) { +// //TODO 查找财务条的信息 +// FinanceVo.FinanceItem byTask = financeService.getByTask(new FinanceDto.TaskId(queryTask.getDetailId())); +// plugin.setData(JSON.toJSONString(byTask)); + } + } + } + } +// queryTask.getPlugins().forEach(pluginInfos -> { +// if(CollectionUtil.isNotEmpty(pluginInfos)){ +// pluginInfos.forEach(plugin ->{ +// //TODO 判断插件类型,暂时一个个的判断,之后应该是统一的接口 +// Long pluginId = plugin.getPluginId(); +// if (pluginId == 15L) { +// //TODO 查找交付物的信息 +// DeliverVo.DeliverOfTask deliverByTask = pluDeliverDao.getDeliverByTask(queryTask.getId(), userId); +// plugin.setData(JSON.toJSONString(deliverByTask)); +// } else if (pluginId == 18L) { +// //TODO 查找财务条的信息 +// FinanceVo.FinanceItem byTask = financeService.getByTask(new FinanceDto.TaskId(queryTask.getDetailId())); +// plugin.setData(JSON.toJSONString(byTask)); +// } +// }); +// } +// }); + } + } + } + + @Override + public PageInfo pageQueryRegularTask(String token, TallTaskDto.PageQueryRegularTask param) { + //TODO 根据token获取用户信息 + TallTokenVo.UserIdByToken userByToken = TokenUtil.getUserByToken(new TallTokenDto.GetUserByToken(token, Constant.APP_ID, Constant.APP_SECRET)); + if(ObjectUtil.isNull(userByToken)){ + throw new BaseException(CodeEnum.NOT_LOGIN); + } + //通过手机号获取用户在服务内的userId + ProUser user = null; + if(ObjectUtil.isNotNull(userByToken) && StrUtil.isNotBlank(userByToken.getPhone())){ + user = userDao.getUserIdByPhone(userByToken.getPhone()); + } +// if(ObjectUtil.isNull(user)){ +// throw new BaseException(ZeroCodeError.NOT_USER_SERVER); +// } + //查询用的时间 + Long queryTime = System.currentTimeMillis(); + + if(ObjectUtil.isNotNull(param.getTaskId())){ + //根据任务id查找任务,以任务的开始时间当做查询的时间点 + ProTaskSub proTaskSub = proTaskSubDao.selectByPrimaryKey(param.getTaskId()); + if(ObjectUtil.isNotNull(proTaskSub) && proTaskSub.getPlanStartTime() != 0L){ + queryTime = proTaskSub.getPlanStartTime(); + } + }else { + if(ObjectUtil.isNotNull(param.getTimeNode())){ + //没有任务id则根据时间基准线查询当前正在进行的任务(如果多个则选择时间最早的一个) + Long startTime = proTaskSubDao.getTimeByProgressTask(param.getTimeNode(),param.getRoleId()); + if(ObjectUtil.isNotNull(startTime)){ + queryTime = startTime; + } + }else { + //如果没有时间基准线则按当前时间查询查询任务 + Long startTime = proTaskSubDao.getTimeByProgressTask(System.currentTimeMillis(),param.getRoleId()); + if(ObjectUtil.isNotNull(startTime)){ + queryTime = startTime; + } + } + } + + //获取任务列表 + PageHelper.startPage(param.getPageNum(),param.getPageSize()); + List regularTask = taskDetailDao.pageQueryRegularTask(param.getRoleId(),queryTime,param.getTimeUnit(),param.getQueryType()); + PageInfo queryTaskPageInfo = new PageInfo<>(regularTask); + if(CollectionUtil.isNotEmpty(queryTaskPageInfo.getList())){ + if(param.getQueryType() == 0){ + //向上查找任务顺序是倒的,需要改成正序 + List taskList = new ArrayList<>(); + for (int i = queryTaskPageInfo.getList().size() - 1; i >= 0; i--) { + taskList.add(queryTaskPageInfo.getList().get(i)); + } + queryTaskPageInfo.setList(taskList); + } + //查询任务下的插件 + queryPluginForTask(queryTaskPageInfo.getList()); + //查询任务下的检查人 + queryCheckerOfTask(queryTaskPageInfo.getList()); + //TODO 查询插件展示信息 + queryPluginShow(queryTaskPageInfo.getList(),user == null ? null : user.getId()); + } + + return queryTaskPageInfo; } } diff --git a/src/main/java/com/ccsens/ptos_zero/util/ZeroCodeError.java b/src/main/java/com/ccsens/ptos_zero/util/ZeroCodeError.java index 75e4bde..89f52d5 100644 --- a/src/main/java/com/ccsens/ptos_zero/util/ZeroCodeError.java +++ b/src/main/java/com/ccsens/ptos_zero/util/ZeroCodeError.java @@ -6,7 +6,7 @@ import com.ccsens.util.CodeError; * @author 逗 */ public class ZeroCodeError extends CodeError { - + public static final Code NOT_USER_SERVER = new Code(407,"您不属于该服务的成员", true); public static final Code NOT_WBS_SHEET = new Code(501,"找不到wbs表",true); public static final Code NOT_MEMBER_SHEET = new Code(502,"找不到项目成员表",true); public static final Code WSB_NOT_PROJECT_HEADER = new Code(503,"读取项目信息异常",true); diff --git a/src/main/resources/mapper_dao/PluDeliverDao.xml b/src/main/resources/mapper_dao/PluDeliverDao.xml index 8215858..d403e11 100644 --- a/src/main/resources/mapper_dao/PluDeliverDao.xml +++ b/src/main/resources/mapper_dao/PluDeliverDao.xml @@ -36,6 +36,62 @@ + + replace into t_plu_deliver + + + id, + + + task_sub_id, + + + name, + + + description, + + + operator, + + + created_at, + + + updated_at, + + + rec_status, + + + + + #{id,jdbcType=BIGINT}, + + + #{taskSubId,jdbcType=BIGINT}, + + + #{name,jdbcType=VARCHAR}, + + + #{description,jdbcType=VARCHAR}, + + + #{operator,jdbcType=BIGINT}, + + + #{createdAt,jdbcType=TIMESTAMP}, + + + #{updatedAt,jdbcType=TIMESTAMP}, + + + #{recStatus,jdbcType=TINYINT}, + + + + SELECT id diff --git a/src/main/resources/mapper_dao/ProMemberStakeholderDao.xml b/src/main/resources/mapper_dao/ProMemberStakeholderDao.xml new file mode 100644 index 0000000..bbbdb8e --- /dev/null +++ b/src/main/resources/mapper_dao/ProMemberStakeholderDao.xml @@ -0,0 +1,66 @@ + + + + + + replace into t_pro_member_stakeholder + + + id, + + + memeber_id, + + + stakeholder_name, + + + stakeholder_phone, + + + user_id, + + + operator, + + + created_at, + + + updated_at, + + + rec_status, + + + + + #{id,jdbcType=BIGINT}, + + + #{memeberId,jdbcType=BIGINT}, + + + #{stakeholderName,jdbcType=VARCHAR}, + + + #{stakeholderPhone,jdbcType=VARCHAR}, + + + #{userId,jdbcType=BIGINT}, + + + #{operator,jdbcType=BIGINT}, + + + #{createdAt,jdbcType=TIMESTAMP}, + + + #{updatedAt,jdbcType=TIMESTAMP}, + + + #{recStatus,jdbcType=TINYINT}, + + + + \ No newline at end of file diff --git a/src/main/resources/mapper_dao/ProRoleDao.xml b/src/main/resources/mapper_dao/ProRoleDao.xml index cefe76c..bf2ac23 100644 --- a/src/main/resources/mapper_dao/ProRoleDao.xml +++ b/src/main/resources/mapper_dao/ProRoleDao.xml @@ -2,6 +2,61 @@ + + replace into t_pro_role + + + id, + + + name, + + + label_id, + + + project_id, + + + operator, + + + created_at, + + + updated_at, + + + rec_status, + + + + + #{id,jdbcType=BIGINT}, + + + #{name,jdbcType=VARCHAR}, + + + #{labelId,jdbcType=BIGINT}, + + + #{projectId,jdbcType=BIGINT}, + + + #{operator,jdbcType=BIGINT}, + + + #{createdAt,jdbcType=TIMESTAMP}, + + + #{updatedAt,jdbcType=TIMESTAMP}, + + + #{recStatus,jdbcType=TINYINT}, + + + + + diff --git a/src/main/resources/mapper_dao/ProTaskPluginDao.xml b/src/main/resources/mapper_dao/ProTaskPluginDao.xml index 5c1ccd8..09600b7 100644 --- a/src/main/resources/mapper_dao/ProTaskPluginDao.xml +++ b/src/main/resources/mapper_dao/ProTaskPluginDao.xml @@ -2,31 +2,97 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + + replace into t_pro_task_plugin + + + id, + + + param, + + + plgin_row, + + + plgin_col, + + + task_detail_id, + + + plugin_id, + + + business_plugin_id, + + + code, + + + plugin_inner, + + + created_at, + + + updated_at, + + + rec_status, + + + colspan, + + + rowspan, + + + + + #{id,jdbcType=BIGINT}, + + + #{param,jdbcType=VARCHAR}, + + + #{plginRow,jdbcType=INTEGER}, + + + #{plginCol,jdbcType=INTEGER}, + + + #{taskDetailId,jdbcType=BIGINT}, + + + #{pluginId,jdbcType=BIGINT}, + + + #{businessPluginId,jdbcType=BIGINT}, + + + #{code,jdbcType=VARCHAR}, + + + #{pluginInner,jdbcType=TINYINT}, + + + #{createdAt,jdbcType=TIMESTAMP}, + + + #{updatedAt,jdbcType=TIMESTAMP}, + + + #{recStatus,jdbcType=TINYINT}, + + + #{colspan,jdbcType=INTEGER}, + + + #{rowspan,jdbcType=INTEGER}, + + + + \ No newline at end of file