From abd8a30262af3974164912750519277979327aa3 Mon Sep 17 00:00:00 2001 From: zy_Java <654600784@qq.com> Date: Wed, 28 Apr 2021 18:12:39 +0800 Subject: [PATCH 1/2] 20210428v1.6 --- mt/src/main/resources/application-test.yml | 2 +- mt/src/main/resources/application.yml | 4 +- pom.xml | 2 +- .../com/ccsens/tall/bean/vo/MemberVo.java | 24 +- .../ccsens/tall/persist/dao/ProMemberDao.java | 7 + .../ccsens/tall/service/ExportWbsService.java | 240 ++++++++++++++++-- .../ccsens/tall/service/IExcelService.java | 1 + .../tall/service/IExportWbsService.java | 19 ++ .../ccsens/tall/service/ProRoleService.java | 15 +- .../com/ccsens/tall/service/RobotService.java | 5 +- .../tall/service/TaskSubTimeService.java | 6 +- .../com/ccsens/tall/web/ExcelController.java | 45 +++- .../resources/mapper_dao/ProMemberDao.xml | 29 +++ 13 files changed, 356 insertions(+), 43 deletions(-) diff --git a/mt/src/main/resources/application-test.yml b/mt/src/main/resources/application-test.yml index 5130b7a9..e73d1baf 100644 --- a/mt/src/main/resources/application-test.yml +++ b/mt/src/main/resources/application-test.yml @@ -28,7 +28,7 @@ swagger: enable: true eureka: instance: - ip-address: 192.168.0.99 + ip-address: 192.168.31.13 file: path: /home/cloud/mt/uploads/ signUpUrl: https://test.tall.wiki/compete/ diff --git a/mt/src/main/resources/application.yml b/mt/src/main/resources/application.yml index 1ac895fc..a47f2a7b 100644 --- a/mt/src/main/resources/application.yml +++ b/mt/src/main/resources/application.yml @@ -1,6 +1,6 @@ spring: profiles: - active: prod - include: common, util-prod + active: dev + include: common, util-dev diff --git a/pom.xml b/pom.xml index e6b63103..c2c7812d 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ tall - + mt beneficiation diff --git a/tall/src/main/java/com/ccsens/tall/bean/vo/MemberVo.java b/tall/src/main/java/com/ccsens/tall/bean/vo/MemberVo.java index f9d5fb3d..1526c1ae 100644 --- a/tall/src/main/java/com/ccsens/tall/bean/vo/MemberVo.java +++ b/tall/src/main/java/com/ccsens/tall/bean/vo/MemberVo.java @@ -1,5 +1,8 @@ package com.ccsens.tall.bean.vo; +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** @@ -9,7 +12,7 @@ import lombok.Data; public class MemberVo { @Data - public static class MemberInfo{ + public static class MemberInfo { private Long id; private Long userId; private Long projectId; @@ -22,7 +25,7 @@ public class MemberVo { private Long stakeholderId; } -// @Data + // @Data // public static class FirstRole{ // private Long id; // private String name; @@ -35,5 +38,20 @@ public class MemberVo { // private String roleExclude; // private List memberList; // } - + @ApiModel + @Data + public static class ExportMember { + @ApiModelProperty("成员id") + private Long mId; + @ApiModelProperty("成员姓名") + private String mName; + @ApiModelProperty("成员手机号") + private String mPhone; + @ApiModelProperty("干系人Id") + private Long sId; + @ApiModelProperty("干系人姓名") + private String sName; + @ApiModelProperty("干系人手机号") + private String sPhone; + } } diff --git a/tall/src/main/java/com/ccsens/tall/persist/dao/ProMemberDao.java b/tall/src/main/java/com/ccsens/tall/persist/dao/ProMemberDao.java index 34178a93..60b4dc4d 100644 --- a/tall/src/main/java/com/ccsens/tall/persist/dao/ProMemberDao.java +++ b/tall/src/main/java/com/ccsens/tall/persist/dao/ProMemberDao.java @@ -60,4 +60,11 @@ public interface ProMemberDao extends ProMemberMapper{ * @return 返回所有的成员id */ List getIdByUserIdAndProjectId(@Param("projectIdList")List projectIdList, @Param("currentUserId")Long currentUserId); + + /** + * 通过项目id查找所有的成员信息 + * @param projectId 项目id + * @return 返回所有成员信息及奖惩干系人 + */ + List queryByProjectId(@Param("projectId")Long projectId); } diff --git a/tall/src/main/java/com/ccsens/tall/service/ExportWbsService.java b/tall/src/main/java/com/ccsens/tall/service/ExportWbsService.java index 0ba98a3c..8d15fcc0 100644 --- a/tall/src/main/java/com/ccsens/tall/service/ExportWbsService.java +++ b/tall/src/main/java/com/ccsens/tall/service/ExportWbsService.java @@ -4,18 +4,25 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.FileUtil; +import cn.hutool.core.lang.Snowflake; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.ZipUtil; import cn.hutool.crypto.SecureUtil; +import com.ccsens.tall.bean.dto.ProjectDto; +import com.ccsens.tall.bean.dto.RoleDto; import com.ccsens.tall.bean.po.*; +import com.ccsens.tall.bean.vo.MemberVo; +import com.ccsens.tall.bean.vo.ProjectVo; +import com.ccsens.tall.bean.vo.RoleVo; import com.ccsens.tall.bean.vo.WbsVo; import com.ccsens.tall.persist.dao.*; -import com.ccsens.util.PoiUtil; -import com.ccsens.util.PropUtil; -import com.ccsens.util.WebConstant; +import com.ccsens.util.*; +import com.ccsens.util.exception.BaseException; import lombok.extern.slf4j.Slf4j; import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.usermodel.XSSFRow; +import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.DefaultResourceLoader; @@ -24,6 +31,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.*; import java.io.File; import java.math.BigDecimal; @@ -34,26 +42,32 @@ import java.util.*; @Service @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class) public class ExportWbsService implements IExportWbsService{ - @Autowired + @Resource private SysProjectDao sysProjectDao; - @Autowired + @Resource private ProMemberDao proMemberDao; - @Autowired + @Resource + private ProMemberRoleDao proMemberRoleDao; + @Resource private ProRoleDao proRoleDao; - @Autowired + @Resource private ProRoleExcludeDao proRoleExcludeDao; - @Autowired + @Resource private TaskDetailDao taskDetailDao; - @Autowired + @Resource private TaskDeliverDao taskDeliverDao; - @Autowired + @Resource private SysPluginDao sysPluginDao; - @Autowired + @Resource private TaskDeliverService taskDeliverService; - @Autowired + @Resource private ProTaskDetailService taskDetailService; - @Autowired + @Resource private ProRoleService proRoleService; + @Resource + private IUserService userService; + @Resource + private Snowflake snowflake; @Override public String exportWbs(Long projectId) throws Exception { @@ -607,9 +621,9 @@ public class ExportWbsService implements IExportWbsService{ List taskTitle = new ArrayList<>(); taskTitle.add(new PoiUtil.PoiUtilCell("序号")); taskTitle.add(new PoiUtil.PoiUtilCell("成员名")); - taskTitle.add(new PoiUtil.PoiUtilCell("电话/账号")); + taskTitle.add(new PoiUtil.PoiUtilCell("电话")); taskTitle.add(new PoiUtil.PoiUtilCell("奖惩干系人")); - taskTitle.add(new PoiUtil.PoiUtilCell("干系人账号")); + taskTitle.add(new PoiUtil.PoiUtilCell("干系人手机号")); memberSheet.add(taskTitle); int index = 1; @@ -703,13 +717,7 @@ public class ExportWbsService implements IExportWbsService{ //生成文件 String fileName = "/exportWbs/" + DateUtil.today() + "/" + System.currentTimeMillis() + ".xlsx"; String path = WebConstant.UPLOAD_PATH_BASE + fileName; - File tmpFile = new File(path); - if (!tmpFile.getParentFile().exists()) { - tmpFile.getParentFile().mkdirs(); - } - OutputStream stream = new FileOutputStream(tmpFile); - wb.write(stream); - stream.close(); + writeFile(wb, path); return PropUtil.imgDomain + "/" + fileName; } @@ -889,6 +897,40 @@ public class ExportWbsService implements IExportWbsService{ //生成文件 String fileName = "/"+filePath+"/" + "MVP" + ".xlsx"; String path = WebConstant.UPLOAD_PATH_BASE + fileName; + writeFile(wb, path); + } + + + /** + * 导出项目成员表 + */ + @Override + public String exportMember(ProjectDto.ProjectIdDto params, Long userId) throws Exception { + String fileName = "exportWbs/" + DateUtil.today() + "/" + System.currentTimeMillis() + ".xlsx"; + String path = PropUtil.path + fileName; + //权限验证 + int power = proRoleService.selectPowerByRoleName(userId, params.getProjectId()); + if (power < 2) { + throw new BaseException(CodeEnum.NOT_POWER); + } + //查找项目内所有成员 + List exportMemberList = proMemberDao.queryByProjectId(params.getProjectId()); + + if(CollectionUtil.isNotEmpty(exportMemberList)){ + //生成写入数据 + List> list = writeMember(exportMemberList); + //导出文件 + XSSFWorkbook wb = new XSSFWorkbook(); + //写入数据 + PoiUtil.exportWB("项目成员表", list, wb); + //生成文件 + writeFile(wb, path); + + } + return PropUtil.imgDomain + "/" + fileName; + } + + private void writeFile(XSSFWorkbook wb, String path) throws IOException { File tmpFile = new File(path); if (!tmpFile.getParentFile().exists()) { tmpFile.getParentFile().mkdirs(); @@ -898,4 +940,158 @@ public class ExportWbsService implements IExportWbsService{ stream.close(); } + private List> writeMember(List exportMemberList) { + List> list = new ArrayList<>(); + List title = new ArrayList<>(); + title.add(new PoiUtil.PoiUtilCell("序号")); + title.add(new PoiUtil.PoiUtilCell("成员名")); + title.add(new PoiUtil.PoiUtilCell("电话")); + title.add(new PoiUtil.PoiUtilCell("奖惩干系人")); + title.add(new PoiUtil.PoiUtilCell("干系人手机号")); + title.add(new PoiUtil.PoiUtilCell("备注")); + list.add(title); + + for (int i = 0; i < exportMemberList.size(); i++) { + MemberVo.ExportMember exportMember = exportMemberList.get(i); + List member = new ArrayList<>(); + member.add(new PoiUtil.PoiUtilCell((i + 1) + "")); + member.add(new PoiUtil.PoiUtilCell(exportMember.getMName())); + member.add(new PoiUtil.PoiUtilCell(exportMember.getMPhone())); + member.add(new PoiUtil.PoiUtilCell(exportMember.getSName())); + member.add(new PoiUtil.PoiUtilCell(exportMember.getSPhone())); + list.add(member); + } + return list; + } + + /** + * 导入项目成员表 + * @param path 路径 + * @param currentUserId userId + * @param projectId 项目id + */ + @Override + public void importMember(String path, Long currentUserId, Long projectId) throws Exception { + +// //验证权限 +// int power = proRoleService.selectPowerByRoleName(currentUserId, projectId); +// if (power < 2) { +// throw new BaseException(CodeEnum.NOT_POWER); +// } +// //获取excel表格 +// InputStream is = new FileInputStream(path); +// XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is); +// //获取项目成员表 +// XSSFSheet memberSheet = xssfWorkbook.getSheet("项目成员表"); +// +// //读取WBS表 +// List stakeholderList = new ArrayList<>(); +// if (ObjectUtil.isNotNull(memberSheet)) { +// Set userIdSet = new HashSet<>(); +// +// for (int i = 1; i <= memberSheet.getLastRowNum(); i++) { +// XSSFRow row = memberSheet.getRow(i); +// if(ObjectUtil.isNull(row)){ +// continue; +// } +// String memberCell = ExcelUtil.getCellValue(row.getCell(1)); +// String phoneCell = ExcelUtil.getCellValue(row.getCell(2)); +// String stakeholderCell = ExcelUtil.getCellValue(row.getCell(3)); +// String stakeholderPhoneCell = ExcelUtil.getCellValue(row.getCell(4)); +// ProMember stakeholder = null; +// ProMember member; +// //成员名为空,跳至下一行 +// if ((StrUtil.isEmpty(memberCell))) { +// continue; +// } +// //手机号不能为空 +// if (StrUtil.isNotEmpty(memberCell) && StrUtil.isEmpty(phoneCell)) { +// throw new BaseException(CodeEnum.WBS_NOT_PHONE.addMsg(memberSheet.getSheetName(), (i+1),memberCell)); +// } +// //判断手机号格式 +// String regex ="^[1]([3-9])[0-9]{9}$"; +// if (StrUtil.isEmpty(phoneCell) || !phoneCell.matches(regex)){ +// throw new BaseException(CodeEnum.WBS_PHONE_ERROR.addMsg(memberSheet.getSheetName(),(i+1),memberCell)); +// } +// +// //添加奖惩干系人 +// if (StrUtil.isNotEmpty(stakeholderCell)) { +// //判断奖惩干系人的手机号是否为空 +// if ( StrUtil.isEmpty(stakeholderPhoneCell)){ +// throw new BaseException(CodeEnum.WBS_NOT_PHONE.addMsg(memberSheet.getSheetName(), (i+1),stakeholderCell)); +// } +// //判断奖惩干系人的手机号格式是否正确 +// if (!stakeholderPhoneCell.matches(regex)){ +// throw new BaseException(CodeEnum.WBS_PHONE_ERROR.addMsg(memberSheet.getSheetName(),(i+1),stakeholderCell)); +// } +// if (!stakeholderWithPhone(stakeholderList, stakeholderCell, stakeholderPhoneCell)) { +// Long userId = userService.selectUserIdByPhone(stakeholderPhoneCell); +// if (ObjectUtil.isNotNull(userId)) { +// userIdSet.add(userId); +// } +// stakeholder = new ProMember(); +// stakeholder.setId(snowflake.nextId()); +// stakeholder.setProjectId(projectId); +// stakeholder.setUserId(userId); +// stakeholder.setNickname(stakeholderCell); +// stakeholder.setPhone(stakeholderPhoneCell); +// proMemberDao.insertSelective(stakeholder); +// stakeholderList.add(stakeholder); +// +// ProMemberRole proMemberRole = new ProMemberRole(); +// proMemberRole.setId(snowflake.nextId()); +// proMemberRole.setMemberId(stakeholder.getId()); +// proMemberRole.setRoleId(stakeholderId); +// proMemberRoleDao.insertSelective(proMemberRole); +// } else { +// throw new BaseException(CodeEnum.WBS_STAKEHOLDER_PHONE.addMsg(memberSheet.getSheetName(),(i+1),stakeholderCell)); +// } +// } +// //成员 +// if (StrUtil.isNotEmpty(memberCell)) { +// if (!memberAndPhoneRepeat(proMembers, memberCell, phoneCell)) { +// Long userId = userService.selectUserIdByPhone(phoneCell); +// if (ObjectUtil.isNotNull(userId)) { +// userIdSet.add(userId); +// } +// member = new ProMember(); +// member.setId(snowflake.nextId()); +// member.setProjectId(sysProject.getId()); +// member.setUserId(userId); +// member.setNickname(memberCell); +// member.setPhone(phoneCell); +// if (ObjectUtil.isNotNull(stakeholder)) { +// member.setStakeholderId(stakeholder.getId()); +// } +// proMemberService.saveMember(member); +// proMembers.add(member); +//// //创建者依据project的creatorId判断,不需要添加成员 +// } else { +// throw new BaseException(CodeEnum.WBS_REPEAT_MEMBER_PHONE.addMsg(memberSheet.getSheetName(),(i+1))); +// } +// } +// } +// //TODO 每个成员都关注此项目(暂时) +// addUserAttention(userIdSet, sysProject); +// } else { +// throw new BaseException(CodeEnum.WBS_NOT_MEMBER_SHEET); +// } + } + + private boolean stakeholderWithPhone(List stakeholderList, String stakeholderName, String phone) { + if (CollectionUtil.isNotEmpty(stakeholderList)) { + for (ProMember proMember : stakeholderList) { + if (stakeholderName.equalsIgnoreCase(proMember.getNickname())) { + if (!proMember.getPhone().equalsIgnoreCase(phone)) { + return true; + } + } else { + if (proMember.getPhone().equalsIgnoreCase(phone)) { + return true; + } + } + } + } + return false; + } } diff --git a/tall/src/main/java/com/ccsens/tall/service/IExcelService.java b/tall/src/main/java/com/ccsens/tall/service/IExcelService.java index c3aca4fd..f509df29 100644 --- a/tall/src/main/java/com/ccsens/tall/service/IExcelService.java +++ b/tall/src/main/java/com/ccsens/tall/service/IExcelService.java @@ -35,4 +35,5 @@ public interface IExcelService { * @param wpsFileId 前端传的wps里的文件id */ void saveWbsExcelFile(Long userId,Long projectId,String filePath, String fileName,Long fileSize,Long wpsFileId); + } diff --git a/tall/src/main/java/com/ccsens/tall/service/IExportWbsService.java b/tall/src/main/java/com/ccsens/tall/service/IExportWbsService.java index 6bbcb219..411ca7a3 100644 --- a/tall/src/main/java/com/ccsens/tall/service/IExportWbsService.java +++ b/tall/src/main/java/com/ccsens/tall/service/IExportWbsService.java @@ -1,5 +1,9 @@ package com.ccsens.tall.service; +import com.ccsens.tall.bean.dto.ProjectDto; +import com.ccsens.util.bean.dto.QueryDto; + +import java.io.FileNotFoundException; import java.io.IOException; public interface IExportWbsService { @@ -8,4 +12,19 @@ public interface IExportWbsService { String exportChecklist(Long userId,Long projectId,Long roleId,Long startTime,Long endTime) throws Exception; String exportDeliver(Long currentUserId, Long projectId) throws Exception; + + /** + * 导出项目成员表 + * @param params + * @return + */ + String exportMember(ProjectDto.ProjectIdDto params,Long userId) throws Exception; + + /** + * 导入项目成员表 + * @param path 路径 + * @param currentUserId userId + * @param projectId 项目id + */ + void importMember(String path, Long currentUserId, Long projectId) throws Exception; } diff --git a/tall/src/main/java/com/ccsens/tall/service/ProRoleService.java b/tall/src/main/java/com/ccsens/tall/service/ProRoleService.java index dba00563..58606c5f 100644 --- a/tall/src/main/java/com/ccsens/tall/service/ProRoleService.java +++ b/tall/src/main/java/com/ccsens/tall/service/ProRoleService.java @@ -1136,7 +1136,7 @@ public class ProRoleService implements IProRoleService { /** * 修改对谁不可见 * @param param 参数 - * @param userId 当前用户id + * @param userId 当前用户id */ @Override public void upRoleWhoNoLook(RoleDto.RoleOfNoLook param, Long userId) { @@ -1147,14 +1147,17 @@ public class ProRoleService implements IProRoleService { if (2 < power){ //删除之前的记录 ProRoleExcludeExample excludeExample = new ProRoleExcludeExample(); - excludeExample.createCriteria().andRoleIdEqualTo(param.getRoleId()).andRecStatusEqualTo((byte)0); + excludeExample.createCriteria().andRoleIdEqualTo(param.getRoleId()); List proRoleExcludes = proRoleExcludeMapper.selectByExample(excludeExample); if (CollectionUtil.isNotEmpty(proRoleExcludes)){ for (ProRoleExclude proRoleExclude : proRoleExcludes) { - ProRoleExclude oldExclude = new ProRoleExclude(); - oldExclude.setId(proRoleExclude.getId()); - oldExclude.setRecStatus((byte)2); - proRoleExcludeMapper.updateByExampleSelective(oldExclude,excludeExample); + proRoleExclude.setRecStatus(WebConstant.REC_STATUS.Deleted.value); + proRoleExcludeMapper.updateByPrimaryKeySelective(proRoleExclude); + +// ProRoleExclude oldExclude = new ProRoleExclude(); +// oldExclude.setId(proRoleExclude.getId()); +// oldExclude.setRecStatus((byte)2); +// proRoleExcludeMapper.updateByExampleSelective(oldExclude,excludeExample); } } diff --git a/tall/src/main/java/com/ccsens/tall/service/RobotService.java b/tall/src/main/java/com/ccsens/tall/service/RobotService.java index 8b13ab1e..72cc8daa 100644 --- a/tall/src/main/java/com/ccsens/tall/service/RobotService.java +++ b/tall/src/main/java/com/ccsens/tall/service/RobotService.java @@ -195,9 +195,10 @@ public class RobotService implements IRobotService{ String projectName = ""; //获取项目名 - if(ObjectUtil.isNotNull(project)){ - projectName = project.getName(); + if(ObjectUtil.isNull(project)){ + return; } + projectName = project.getName(); // 获取角色名 TaskVo.RoleCheckList role = proRoleService.selectRoleByCheckOrExecutor(executorId); String executorName = ObjectUtil.isNotNull(role) ? role.getName() : ""; diff --git a/tall/src/main/java/com/ccsens/tall/service/TaskSubTimeService.java b/tall/src/main/java/com/ccsens/tall/service/TaskSubTimeService.java index 71fa9283..b063d9cd 100644 --- a/tall/src/main/java/com/ccsens/tall/service/TaskSubTimeService.java +++ b/tall/src/main/java/com/ccsens/tall/service/TaskSubTimeService.java @@ -433,7 +433,7 @@ public class TaskSubTimeService implements ITaskSubTimeService { } //TaskSubTime List proTaskSubTimeList = new ArrayList<>(); - if (ObjectUtil.isNotNull(detail.getProjectId())) { +// if (ObjectUtil.isNotNull(detail.getProjectId())) { //cycle为空,只加一条数据 if (StrUtil.isEmpty(detail.getCycle())) { ProTaskSubTime proTaskSubTime = new ProTaskSubTime(); @@ -443,12 +443,14 @@ public class TaskSubTimeService implements ITaskSubTimeService { proTaskSubTime.setEndTime(detail.getEndTime()); taskSubTimeDao.insertSelective(proTaskSubTime); proTaskSubTimeList.add(proTaskSubTime); + log.info("添加一条分解任务{}",proTaskSubTime); } else { Date startDate = new Date(detail.getBeginTime()); Date endDate = new Date(detail.getEndTime()); List taskDateList = NatureToDate.generateDates(detail.getCycle(), startDate, endDate); if (CollectionUtil.isNotEmpty(taskDateList)) { + log.info("添加多条分解任务"); for (CronConstant.TaskDate taskDate : taskDateList) { ProTaskSubTime proTaskSubTime = new ProTaskSubTime(); proTaskSubTime.setId(snowflake.nextId()); @@ -460,7 +462,7 @@ public class TaskSubTimeService implements ITaskSubTimeService { } } } - } +// } //交付物 // if (StrUtil.isNotEmpty(addTask.getTaskDeliver())) { // ProTaskDeliver deliver = new ProTaskDeliver(); diff --git a/tall/src/main/java/com/ccsens/tall/web/ExcelController.java b/tall/src/main/java/com/ccsens/tall/web/ExcelController.java index f58fa66b..0ee4b28b 100644 --- a/tall/src/main/java/com/ccsens/tall/web/ExcelController.java +++ b/tall/src/main/java/com/ccsens/tall/web/ExcelController.java @@ -1,6 +1,9 @@ package com.ccsens.tall.web; +import com.ccsens.tall.annotation.MustLoginTall; +import com.ccsens.tall.bean.dto.InputDocDto; +import com.ccsens.tall.bean.dto.ProjectDto; import com.ccsens.tall.bean.vo.ProjectVo; import com.ccsens.tall.service.IExcelService; import com.ccsens.tall.service.IExportWbsService; @@ -8,13 +11,12 @@ import com.ccsens.util.JsonResponse; import com.ccsens.util.UploadFileUtil_Servlet3; import com.ccsens.util.WebConstant; import com.ccsens.util.annotation.OperateType; +import com.ccsens.util.bean.dto.QueryDto; import io.jsonwebtoken.Claims; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiImplicitParams; -import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -94,4 +96,39 @@ public class ExcelController { // String s = "https://test.tall.wiki/gateway/tall/v1.0/uploads//exportWbs/2020-05-07/1588833118577.xlsx"; return JsonResponse.newInstance().ok(wbsPath); } + + @MustLoginTall + @ApiOperation(value = "导出成员表", notes = "") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/export/member", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse exportMember( @ApiParam @Validated @RequestBody QueryDto params) throws Exception { + + String wbsPath = exportWbsService.exportMember(params.getParam(),params.getUserId()); + return JsonResponse.newInstance().ok(wbsPath); + } + + @OperateType(value = 1) + @ApiOperation(value = "导入成员表",notes = "文件大小不能超过20M,支持后缀:.xls|.xlsx") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/import/member", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse importMember(HttpServletRequest request, HttpServletResponse response, + @RequestParam(required = true) Part file, + @RequestParam(required = true) Long projectId) throws Exception { + Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject()); + + //1.上传文件 + String allowedExts = "xls,xlsx"; + String dir = WebConstant.UPLOAD_PROJECT_WBS + File.separator; + String path = UploadFileUtil_Servlet3.uploadFile(file, allowedExts, dir); + log.info(dir+""+path); + //获取文件路径,文件名,和文件大小 + String filePath = WebConstant.UPLOAD_PATH_PROJECT + File.separator + path; + String name = UploadFileUtil_Servlet3.getFileNameByPart(file); + //添加数据 + exportWbsService.importMember(dir+""+path,currentUserId,projectId); + //保存文件信息、添加wps信息 + return JsonResponse.newInstance().ok(); + } } diff --git a/tall/src/main/resources/mapper_dao/ProMemberDao.xml b/tall/src/main/resources/mapper_dao/ProMemberDao.xml index d7be6c8f..ea178cde 100644 --- a/tall/src/main/resources/mapper_dao/ProMemberDao.xml +++ b/tall/src/main/resources/mapper_dao/ProMemberDao.xml @@ -345,4 +345,33 @@ #{id} + \ No newline at end of file From c057d4fe0aa2aa98a07b70edf736dd7ef78a5da6 Mon Sep 17 00:00:00 2001 From: zy_Java <654600784@qq.com> Date: Wed, 28 Apr 2021 19:23:27 +0800 Subject: [PATCH 2/2] 20210428v1.7 --- .../tall/service/IProTaskDetailService.java | 20 +- .../tall/service/ProTaskDetailService.java | 203 +++++++++--------- .../tall/service/TaskDeliverService.java | 2 +- .../main/java/com/ccsens/util/CodeEnum.java | 3 +- 4 files changed, 120 insertions(+), 108 deletions(-) diff --git a/tall/src/main/java/com/ccsens/tall/service/IProTaskDetailService.java b/tall/src/main/java/com/ccsens/tall/service/IProTaskDetailService.java index 7d215b69..ea847987 100644 --- a/tall/src/main/java/com/ccsens/tall/service/IProTaskDetailService.java +++ b/tall/src/main/java/com/ccsens/tall/service/IProTaskDetailService.java @@ -56,14 +56,14 @@ public interface IProTaskDetailService { */ List queryAllTaskByProjectId(Long currentUserId, TaskDto.QueryAllTaskByProjectId projectId) throws Exception; - /** - * 新增和修改交付物的方法 - * @param jiaoFuWu - */ - void addAndUpdateJiaoFuWu(TaskDto.JiaoFuWu jiaoFuWu); - /** - * 新增和修改交付物的方法 - * @param jiaoFuWu - */ - void addAndUpdateShuWuWenDang(TaskDto.JiaoFuWu jiaoFuWu); +// /** +// * 新增和修改交付物的方法 +// * @param jiaoFuWu +// */ +// void addAndUpdateJiaoFuWu(TaskDto.JiaoFuWu jiaoFuWu); +// /** +// * 新增和修改交付物的方法 +// * @param jiaoFuWu +// */ +// void addAndUpdateShuWuWenDang(TaskDto.JiaoFuWu jiaoFuWu); } diff --git a/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java b/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java index b05f455b..e9b416e1 100644 --- a/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java +++ b/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java @@ -170,7 +170,7 @@ public class ProTaskDetailService implements IProTaskDetailService { TaskVo.NormalTask normalTask; SysProject project = sysProjectDao.selectByPrimaryKey(projectId); - if (ObjectUtil.isNull(project)){ + if (ObjectUtil.isNull(project)) { throw new BaseException(CodeEnum.PARAM_ERROR); } if (endTime < project.getBeginTime() || startTime > project.getEndTime()) { @@ -180,10 +180,10 @@ public class ProTaskDetailService implements IProTaskDetailService { ProShowExample proShowExample = new ProShowExample(); proShowExample.createCriteria().andProjectIdEqualTo(projectId); List proShowList = proShowDao.selectByExample(proShowExample); - if(CollectionUtil.isNotEmpty(proShowList)){ + if (CollectionUtil.isNotEmpty(proShowList)) { ProShow proShow = proShowList.get(0); - if(proShow.getSelectTaskType() == 4){ - return getTaskAndType4ByPM(currentUserId,projectId,startTime,endTime,page,pageSize,roleId); + if (proShow.getSelectTaskType() == 4) { + return getTaskAndType4ByPM(currentUserId, projectId, startTime, endTime, page, pageSize, roleId); } } @@ -278,7 +278,7 @@ public class ProTaskDetailService implements IProTaskDetailService { } //特殊任务分页查找项目经理下的任务(不处理时间) - private TaskVo.ProTaskInfo getTaskAndType4ByPM(Long currentUserId,Long projectId,Long startTime,Long endTime,int page,int pageSize,Long roleId) throws Exception { + private TaskVo.ProTaskInfo getTaskAndType4ByPM(Long currentUserId, Long projectId, Long startTime, Long endTime, int page, int pageSize, Long roleId) throws Exception { List normalTasks = new ArrayList<>(); //1、查找一级任务 PageHelper.startPage(page, pageSize); @@ -290,7 +290,6 @@ public class ProTaskDetailService implements IProTaskDetailService { PageInfo pageInfo = new PageInfo<>(firstTaskDetailList); - if (CollectionUtil.isNotEmpty(firstTaskDetailList)) { int sequence = 1; for (ProTaskDetail firstTaskDetail : firstTaskDetailList) { @@ -338,8 +337,8 @@ public class ProTaskDetailService implements IProTaskDetailService { return proTaskInfo; } - private TaskVo.ProTaskInfo getTaskAndType4ByMember(Long currentUserId,Long projectId,Long startTime,Integer imitation, - Long endTime,int page,int pageSize,Long roleId,Long allMemberId,Integer priority) throws Exception { + private TaskVo.ProTaskInfo getTaskAndType4ByMember(Long currentUserId, Long projectId, Long startTime, Integer imitation, + Long endTime, int page, int pageSize, Long roleId, Long allMemberId, Integer priority) throws Exception { //查找该角色的所有任务(全体成员的任务也是这个角色的任务) PageHelper.startPage(page, pageSize); @@ -353,12 +352,12 @@ public class ProTaskDetailService implements IProTaskDetailService { //通过角色id查找 负责人名称 检查人名称 Long executorRole = normalTask.getExecutorRole(); ProRole executor = proRoleDao.selectByPrimaryKey(executorRole); - if(ObjectUtil.isNotNull(executor)){ + if (ObjectUtil.isNotNull(executor)) { normalTask.setExecutorRoleName(executor.getName()); } Long checkerRole = normalTask.getCheckerRole(); ProRole checker = proRoleDao.selectByPrimaryKey(checkerRole); - if(ObjectUtil.isNotNull(checker)){ + if (ObjectUtil.isNotNull(checker)) { normalTask.setCheckerRoleName(checker.getName()); } @@ -412,10 +411,10 @@ public class ProTaskDetailService implements IProTaskDetailService { ProShowExample proShowExample = new ProShowExample(); proShowExample.createCriteria().andProjectIdEqualTo(projectId); List proShowList = proShowDao.selectByExample(proShowExample); - if(CollectionUtil.isNotEmpty(proShowList)){ + if (CollectionUtil.isNotEmpty(proShowList)) { ProShow proShow = proShowList.get(0); - if(proShow.getSelectTaskType() == 4){ - return getTaskAndType4ByMember(currentUserId,projectId,startTime,imitation,endTime,page,pageSize,roleId,allMemberId,priority); + if (proShow.getSelectTaskType() == 4) { + return getTaskAndType4ByMember(currentUserId, projectId, startTime, imitation, endTime, page, pageSize, roleId, allMemberId, priority); } } //查找该角色的所有任务(全体成员的任务也是这个角色的任务) @@ -435,16 +434,16 @@ public class ProTaskDetailService implements IProTaskDetailService { //通过角色id查找 负责人名称 检查人名称 Long executorRole = normalTask.getExecutorRole(); ProRole executor = proRoleDao.selectByPrimaryKey(executorRole); - if(ObjectUtil.isNotNull(executor)){ + if (ObjectUtil.isNotNull(executor)) { normalTask.setExecutorRoleName(executor.getName()); } //设置默认检查人 Long checkerRole = normalTask.getCheckerRole(); ProRole checker = proRoleDao.selectByPrimaryKey(checkerRole); - if(ObjectUtil.isNotNull(checker)) { + if (ObjectUtil.isNotNull(checker)) { normalTask.setCheckerRoleName(checker.getName()); - }else{ + } else { //根据任务id查询项目下项目经理 Long pmId = taskDetailDao.selectPmByTaskId(normalTask.getDetailId()); ProRole proRole = proRoleDao.selectByPrimaryKey(pmId); @@ -648,7 +647,7 @@ public class ProTaskDetailService implements IProTaskDetailService { if (ObjectUtil.isNotNull(proPluginConfig)) { //如果是周会相关的插件,且入参为空。特殊查询 SysPlugin sysPlugin = sysPluginDao.selectByPrimaryKey(Long.parseLong(pluginIds[i])); - if(ObjectUtil.isNotNull(sysPlugin) && sysPlugin.getScene() == 6 && StrUtil.isEmpty(proPluginConfig.getImportParam())){ + if (ObjectUtil.isNotNull(sysPlugin) && sysPlugin.getScene() == 6 && StrUtil.isEmpty(proPluginConfig.getImportParam())) { PluginVo.PersonalTaskReport personalTaskReport = taskPluginService.getPersonalTaskReport(normalTask.getProjectId()); proPluginConfig.setImportParam(JacksonUtil.beanToJson(personalTaskReport)); } @@ -755,7 +754,7 @@ public class ProTaskDetailService implements IProTaskDetailService { if (ObjectUtil.isNull(task)) { throw new BaseException(CodeEnum.NOT_TASK); } - if(ObjectUtil.isNull(taskSubTimeId)){ + if (ObjectUtil.isNull(taskSubTimeId)) { taskSubTimeId = taskDeliverService.isTaskOrSubTime(taskId); } @@ -821,20 +820,20 @@ public class ProTaskDetailService implements IProTaskDetailService { } //查询此任务下的输入文档 List inputDocInfos = proTaskInputDocDao.selectDocByTaskId(taskDetail.getDetailId()); - if (CollectionUtil.isNotEmpty(inputDocInfos)){ + if (CollectionUtil.isNotEmpty(inputDocInfos)) { taskDetail.setInputDoc(inputDocInfos); } //查询此任务下的输出文档 List outputDocInfos = taskDeliverDao.selectOutputDocByTaskId(taskDetail.getDetailId()); - if (CollectionUtil.isNotEmpty(outputDocInfos)){ + if (CollectionUtil.isNotEmpty(outputDocInfos)) { taskDetail.setOutputDoc(outputDocInfos); } //设置检查人 ProRole checkRole = proRoleDao.selectByPrimaryKey(task.getCheckerRole()); - if (ObjectUtil.isNotNull(checkRole)){ + if (ObjectUtil.isNotNull(checkRole)) { taskDetail.setCheckerRole(checkRole.getId()); taskDetail.setCheckerRoleName(checkRole.getName()); - }else{ + } else { //根据任务id查询项目下项目经理 Long pmId = taskDetailDao.selectPmByTaskId(task.getId()); ProRole proRole = proRoleDao.selectByPrimaryKey(pmId); @@ -1395,10 +1394,7 @@ public class ProTaskDetailService implements IProTaskDetailService { if (ObjectUtil.isNotNull(updateTaskInfo.getMilestone())) { taskDetail.setMilestone(updateTaskInfo.getMilestone()); } - //父任务id - if(null != updateTaskInfo.getParentId()){ - taskDetail.setParentId(updateTaskInfo.getParentId()); - } + //时间 if (ObjectUtil.isNotNull(updateTaskInfo.getBeginTime()) || ObjectUtil.isNotNull(updateTaskInfo.getEndTime()) || @@ -1492,34 +1488,47 @@ public class ProTaskDetailService implements IProTaskDetailService { } }); } - //修改项目信息 当前的项目 - if(ObjectUtil.isNotNull(updateTaskInfo.getId())){ - if(ObjectUtil.isNotNull(updateTaskInfo.getProjectId())){ - if(ObjectUtil.isNotNull(updateTaskInfo.getParentId())){ - //检查父任务在不在移动后的项目下,不在的话提示错误信息 该任务不在该项目下,在的话则修改项目信息 - //B项目updateTaskInfo.getProjectId() 父任务updateTaskInfo.getParentId() - ProTaskDetailExample proTaskDetailExample = new ProTaskDetailExample(); - proTaskDetailExample.createCriteria().andIdEqualTo(updateTaskInfo.getParentId()).andProjectIdEqualTo(updateTaskInfo.getProjectId()); - long l = taskDetailDao.countByExample(proTaskDetailExample); - if(l > 0 ){ - throw new BaseException(CodeEnum.NOT_TASK); - }else { //在的话则修改项目信息 - taskDetail.setId(updateTaskInfo.getId()); - taskDetail.setParentId(updateTaskInfo.getParentId()); - taskDetail.setProjectId(updateTaskInfo.getProjectId()); - taskDetailDao.updateByPrimaryKeySelective(taskDetail); - } + //修改任务所属的项目 + if (ObjectUtil.isNotNull(updateTaskInfo.getProjectId())) { + if (ObjectUtil.isNotNull(updateTaskInfo.getParentId())) { + //检查父任务在不在移动后的项目下,不在的话提示错误信息 该任务不在该项目下,在的话则修改项目信息 + //B项目updateTaskInfo.getProjectId() 父任务updateTaskInfo.getParentId() + ProTaskDetailExample proTaskDetailExample = new ProTaskDetailExample(); + proTaskDetailExample.createCriteria().andIdEqualTo(updateTaskInfo.getParentId()).andProjectIdEqualTo(updateTaskInfo.getProjectId()); + long l = taskDetailDao.countByExample(proTaskDetailExample); + if (l > 0) { +// throw new BaseException(CodeEnum.NOT_TASK); + taskDetail.setProjectId(updateTaskInfo.getProjectId()); + taskDetail.setParentId(updateTaskInfo.getParentId()); + } else { //在的话则修改项目信息 + throw new BaseException(CodeEnum.PARENT_PROJECT_NOT_MATCHING); } - //把这个任务当作父任务,如果原来任务下的父任务有值 设置为0,修改项目信息 - //taskDetail = taskDetailDao.selectByPrimaryKey(updateTaskInfo.getId()); //任务详情 - if(ObjectUtil.isNotNull(taskDetail.getParentId())){ - taskDetail.setParentId(0L); - taskDetailDao.updateByPrimaryKeySelective(taskDetail); - } - taskDetail.setId(updateTaskInfo.getId()); + } else { + taskDetail.setParentId(0L); taskDetail.setProjectId(updateTaskInfo.getProjectId()); - taskDetailDao.updateByPrimaryKeySelective(taskDetail); } + //将此任务以前的子任务的父id改成0 + ProTaskDetailExample proTaskDetailExample = new ProTaskDetailExample(); + proTaskDetailExample.createCriteria().andParentIdEqualTo(taskDetail.getId()); + List proTaskDetailList = taskDetailDao.selectByExample(proTaskDetailExample); + if(CollectionUtil.isNotEmpty(proTaskDetailList)){ + proTaskDetailList.forEach(proTaskDetail -> { + proTaskDetail.setParentId(0L); + taskDetailDao.updateByPrimaryKeySelective(proTaskDetail); + }); + } + } else { + //父任务id + if (null != updateTaskInfo.getParentId()) { + ProTaskDetailExample proTaskDetailExample = new ProTaskDetailExample(); + proTaskDetailExample.createCriteria().andIdEqualTo(updateTaskInfo.getParentId()).andProjectIdEqualTo(taskDetail.getProjectId()); + long l = taskDetailDao.countByExample(proTaskDetailExample); + if (l <= 0) { + throw new BaseException(CodeEnum.PARENT_PROJECT_NOT_MATCHING); + } + taskDetail.setParentId(updateTaskInfo.getParentId()); + } + } //修改数据 @@ -1741,7 +1750,7 @@ public class ProTaskDetailService implements IProTaskDetailService { if (CollectionUtil.isNotEmpty(firstTaskDetailList)) { firstTaskDetailList.forEach(firstTaskDetail -> { TaskVo.TaskListByProjectId firstTask = taskDetailDao.getTaskById(firstTaskDetail.getId()); - List secondTaskList = taskDetailDao.getTaskByParentId(firstTaskDetail.getId(), null,null,null); + List secondTaskList = taskDetailDao.getTaskByParentId(firstTaskDetail.getId(), null, null, null); if (CollectionUtil.isNotEmpty(secondTaskList)) { secondTaskList.forEach(secondTask -> secondTask.setParentName(firstTaskDetail.getName())); } @@ -1752,48 +1761,50 @@ public class ProTaskDetailService implements IProTaskDetailService { return taskList; } - /** - * 新增和修改交付物 - * @param jiaoFuWu - */ - @Override - public void addAndUpdateJiaoFuWu(TaskDto.JiaoFuWu jiaoFuWu) { - ProTaskDeliverExample proTaskDeliverExample=new ProTaskDeliverExample(); - ProTaskDeliver proTaskDeliver=new ProTaskDeliver(); - if(jiaoFuWu.getId()!=null && StringUtils.isNotBlank(jiaoFuWu.getNames())){ - //修改 - proTaskDeliver.setId(jiaoFuWu.getId()); - proTaskDeliver.setName(jiaoFuWu.getNames()); - proTaskDeliverExample.createCriteria().andIdEqualTo(jiaoFuWu.getId()).andRecStatusEqualTo((byte) 0); - proTaskDeliverMapper.updateByExampleSelective(proTaskDeliver,proTaskDeliverExample); - }else if(jiaoFuWu.getId()==null && StringUtils.isNotBlank(jiaoFuWu.getNames())) { - //新增 - proTaskDeliver.setId(snowflake.nextId()); - proTaskDeliver.setName(jiaoFuWu.getNames()); - proTaskDeliverMapper.insertSelective(proTaskDeliver); - } - - } - - /** - * 新增和修改输入文档 - * @param jiaoFuWu - */ - @Override - public void addAndUpdateShuWuWenDang(TaskDto.JiaoFuWu jiaoFuWu) { - ProTaskInputDocExample proTaskDeliverExample=new ProTaskInputDocExample(); - ProTaskInputDoc proTaskDeliver=new ProTaskInputDoc(); - if(jiaoFuWu.getId()!=null && StringUtils.isNotBlank(jiaoFuWu.getNames())){ - //修改 - proTaskDeliver.setId(jiaoFuWu.getId()); - proTaskDeliver.setName(jiaoFuWu.getNames()); - proTaskDeliverExample.createCriteria().andIdEqualTo(jiaoFuWu.getId()).andRecStatusEqualTo((byte) 0); - proTaskInputDocDao.updateByExampleSelective(proTaskDeliver,proTaskDeliverExample); - }else if(jiaoFuWu.getId()==null && StringUtils.isNotBlank(jiaoFuWu.getNames())) { - //新增 - proTaskDeliver.setId(snowflake.nextId()); - proTaskDeliver.setName(jiaoFuWu.getNames()); - proTaskInputDocDao.insertSelective(proTaskDeliver); - } - } +// /** +// * 新增和修改交付物 +// * +// * @param jiaoFuWu +// */ +// @Override +// public void addAndUpdateJiaoFuWu(TaskDto.JiaoFuWu jiaoFuWu) { +// ProTaskDeliverExample proTaskDeliverExample = new ProTaskDeliverExample(); +// ProTaskDeliver proTaskDeliver = new ProTaskDeliver(); +// if (jiaoFuWu.getId() != null && StringUtils.isNotBlank(jiaoFuWu.getNames())) { +// //修改 +// proTaskDeliver.setId(jiaoFuWu.getId()); +// proTaskDeliver.setName(jiaoFuWu.getNames()); +// proTaskDeliverExample.createCriteria().andIdEqualTo(jiaoFuWu.getId()).andRecStatusEqualTo((byte) 0); +// proTaskDeliverMapper.updateByExampleSelective(proTaskDeliver, proTaskDeliverExample); +// } else if (jiaoFuWu.getId() == null && StringUtils.isNotBlank(jiaoFuWu.getNames())) { +// //新增 +// proTaskDeliver.setId(snowflake.nextId()); +// proTaskDeliver.setName(jiaoFuWu.getNames()); +// proTaskDeliverMapper.insertSelective(proTaskDeliver); +// } +// +// } +// +// /** +// * 新增和修改输入文档 +// * +// * @param jiaoFuWu +// */ +// @Override +// public void addAndUpdateShuWuWenDang(TaskDto.JiaoFuWu jiaoFuWu) { +// ProTaskInputDocExample proTaskDeliverExample = new ProTaskInputDocExample(); +// ProTaskInputDoc proTaskDeliver = new ProTaskInputDoc(); +// if (jiaoFuWu.getId() != null && StringUtils.isNotBlank(jiaoFuWu.getNames())) { +// //修改 +// proTaskDeliver.setId(jiaoFuWu.getId()); +// proTaskDeliver.setName(jiaoFuWu.getNames()); +// proTaskDeliverExample.createCriteria().andIdEqualTo(jiaoFuWu.getId()).andRecStatusEqualTo((byte) 0); +// proTaskInputDocDao.updateByExampleSelective(proTaskDeliver, proTaskDeliverExample); +// } else if (jiaoFuWu.getId() == null && StringUtils.isNotBlank(jiaoFuWu.getNames())) { +// //新增 +// proTaskDeliver.setId(snowflake.nextId()); +// proTaskDeliver.setName(jiaoFuWu.getNames()); +// proTaskInputDocDao.insertSelective(proTaskDeliver); +// } +// } } diff --git a/tall/src/main/java/com/ccsens/tall/service/TaskDeliverService.java b/tall/src/main/java/com/ccsens/tall/service/TaskDeliverService.java index 595e8273..232f13c3 100644 --- a/tall/src/main/java/com/ccsens/tall/service/TaskDeliverService.java +++ b/tall/src/main/java/com/ccsens/tall/service/TaskDeliverService.java @@ -1272,7 +1272,7 @@ public class TaskDeliverService implements ITaskDeliverService { proTaskDeliverExample.createCriteria().andTaskDetailIdEqualTo(taskDetailId).andNameEqualTo(param.getFileName()[i]); long l = taskDeliverDao.countByExample(proTaskDeliverExample); if(l>0){ - throw new BaseException(CodeEnum.Deliver_REPEAT); + throw new BaseException(CodeEnum.DELIVER_REPEAT); } //添加交付物 ProTaskDeliver proTaskDeliver = new ProTaskDeliver(); diff --git a/util/src/main/java/com/ccsens/util/CodeEnum.java b/util/src/main/java/com/ccsens/util/CodeEnum.java index 176ec4b6..d54fa552 100644 --- a/util/src/main/java/com/ccsens/util/CodeEnum.java +++ b/util/src/main/java/com/ccsens/util/CodeEnum.java @@ -210,7 +210,8 @@ public enum CodeEnum { CANNOT_DELETE_PM(170,"无法删除项目经理",true), LABEL_TOO_LONG(171,"标签长度过长,请不要超过六个字",true), WBS_PROJECT_NAME_REPEAT(172,"项目名称不能重复",true), - Deliver_REPEAT(173,"交付物已存在",true), + DELIVER_REPEAT(173,"交付物已存在",true), + PARENT_PROJECT_NOT_MATCHING(174,"父任务与项目不匹配",true), ;