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/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/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/ProTaskDetailService.java b/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java deleted file mode 100644 index 0f3f782a..00000000 --- a/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java +++ /dev/null @@ -1,1799 +0,0 @@ -package com.ccsens.tall.service; - -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.collection.CollectionUtil; -import cn.hutool.core.lang.Snowflake; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSONObject; -import com.ccsens.cloudutil.feign.MtFeignClient; -import com.ccsens.tall.bean.dto.ProjectDto; -import com.ccsens.tall.bean.dto.TaskDto; -import com.ccsens.tall.bean.po.*; -import com.ccsens.tall.bean.vo.*; -import com.ccsens.tall.persist.dao.*; -import com.ccsens.tall.persist.dao.ProTaskShowDao; -import com.ccsens.tall.persist.mapper.ProPluginConfigMapper; -import com.ccsens.tall.persist.mapper.ProTaskDeliverMapper; -import com.ccsens.tall.persist.mapper.ProTaskInputDocMapper; -import com.ccsens.tall.util.TallConstant; -import com.ccsens.tall.util.TaskUtil; -import com.ccsens.util.CodeEnum; -import com.ccsens.util.DateUtil; -import com.ccsens.util.JacksonUtil; -import com.ccsens.util.WebConstant; -import com.ccsens.util.cron.CronConstant; -import com.ccsens.util.cron.NatureToDate; -import com.ccsens.util.exception.BaseException; -import com.fasterxml.jackson.annotation.JsonFormat; -import com.github.pagehelper.PageHelper; -import com.github.pagehelper.PageInfo; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang.StringUtils; -import org.apache.ibatis.annotations.Param; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; - -import javax.annotation.Resource; -import java.math.BigDecimal; -import java.util.*; - - -@Slf4j -@Service -@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) -public class ProTaskDetailService implements IProTaskDetailService { - @Resource - private IProRoleService proRoleService; - @Resource - private ITaskDeliverService taskDeliverService; - @Resource - private IUserAttentionService attentionService; - @Resource - private TaskPluginDao taskPluginDao; - @Resource - private IProMemberService proMemberService; - @Resource - private ProTaskShowDao proTaskShowDao; - @Resource - private TaskDetailDao taskDetailDao; - @Resource - private TaskSubTimeDao taskSubTimeDao; - @Resource - private ITaskSubTimeService taskSubTimeService; - @Resource - private TaskMemberDao taskMemberDao; - @Resource - private ProSubTimeMemberDao proSubTimeMemberDao; - @Resource - private ProRoleDao proRoleDao; - @Resource - private ProMemberDao proMemberDao; - @Resource - private SysProjectDao sysProjectDao; - @Resource - private SysPluginDao sysPluginDao; - @Resource - private Snowflake snowflake; - @Resource - private ProPluginConfigDao pluginConfigDao; - @Resource - private IRobotService robotService; - @Resource - private ProRemindDao proRemindDao; - @Resource - private TaskDeliverDao taskDeliverDao; - @Resource - private ProMemberRoleDao proMemberRoleDao; - @Resource - private TaskPluginService taskPluginService; - @Resource - private ProShowDao proShowDao; - @Resource - private ProTaskDeliverMapper proTaskDeliverMapper; - @Resource - private ProTaskInputDocDao proTaskInputDocDao; - - @Override - public void saveTaskDetail(ProTaskDetail taskDetail) { - taskDetailDao.insertSelective(taskDetail); - } - - @Override - public Object getTasksByRoleId(Long currentUserId, Long projectId, TaskDto.QueryTaskInfoByRoleId taskInfoByRoleId) throws Exception { - SysProject sysProject = sysProjectDao.selectByPrimaryKey(projectId); - if (ObjectUtil.isNull(sysProject)) { - throw new BaseException(CodeEnum.NOT_PROJECT); - } - taskInfoByRoleId.setStartTime(taskInfoByRoleId.getStartTime() == null ? sysProject.getBeginTime() : taskInfoByRoleId.getStartTime()); - taskInfoByRoleId.setEndTime(taskInfoByRoleId.getEndTime() == null ? sysProject.getEndTime() : taskInfoByRoleId.getEndTime()); - - Object obj = null; - ProRole role = proRoleDao.selectByPrimaryKey(taskInfoByRoleId.getRoleId()); //查到了项目下的角色信息 - if (ObjectUtil.isNull(role)) { - throw new BaseException(CodeEnum.NOT_ROLE); - } - ProRole parentRole = proRoleDao.selectByPrimaryKey(role.getParentId()); //查到了项目下的父角色信息 - if (ObjectUtil.isNull(parentRole)) { - throw new BaseException(CodeEnum.NOT_ROLE); - } - if (ObjectUtil.isNotNull(role)) { -// if (role.getName().equalsIgnoreCase(WebConstant.ROLE_NAME.MVP.value)) { -// obj = getTaskInfoByMvp(projectId, page, pageSize); -// } else - if (parentRole.getName().equalsIgnoreCase(WebConstant.ROLE_NAME.PM.value)) { - obj = getTaskInfoByProjectIdAndPm(currentUserId, projectId, taskInfoByRoleId.getRoleId(), - taskInfoByRoleId.getStartTime(), taskInfoByRoleId.getEndTime(), taskInfoByRoleId.getProcess(), - taskInfoByRoleId.getPage(), taskInfoByRoleId.getPageSize(), taskInfoByRoleId.getPriority(), taskInfoByRoleId.getImitation()); - } else if (parentRole.getName().equalsIgnoreCase(WebConstant.ROLE_NAME.Member.value)) { - obj = getTaskInfoByProjectIdAndRoleId(currentUserId, projectId, taskInfoByRoleId.getRoleId(), - taskInfoByRoleId.getStartTime(), taskInfoByRoleId.getEndTime(), taskInfoByRoleId.getProcess(), - taskInfoByRoleId.getPage(), taskInfoByRoleId.getPageSize(), taskInfoByRoleId.getPriority(), taskInfoByRoleId.getImitation()); - } - } else { - throw new BaseException(CodeEnum.NOT_ROLE); - } - return obj; - } - - - /** - * 查找任务配置 - */ - private TaskVo.ProTaskShow getProTaskShow(Long taskId) { - TaskVo.ProTaskShow proTaskShow = proTaskShowDao.getProTaskShowByTaskId(taskId); - if (ObjectUtil.isNull(proTaskShow)) { - proTaskShow = new TaskVo.ProTaskShow(); - proTaskShow.setTimeShow("MM-DD HH:mm"); - proTaskShow.setDuration(0); - proTaskShow.setCreateTask(1); - proTaskShow.setShowHardware(1); - proTaskShow.setShowDeliver(1); - proTaskShow.setShowMoney(1); - proTaskShow.setShowFinish(1); - proTaskShow.setShowRealTime(0); - } - return proTaskShow; - } - - /** - * 查看任务 项目经理 - */ - private TaskVo.ProTaskInfo getTaskInfoByProjectIdAndPm(Long currentUserId, Long projectId, Long roleId, Long startTime, Long endTime, - Integer process, Integer page, Integer pageSize, Integer priority, Integer imitation) throws Exception { - TaskVo.ProTaskInfo proTaskInfo = new TaskVo.ProTaskInfo(); - - List globalTaskList = new ArrayList<>(); - List normalTaskList = new ArrayList<>(); - TaskVo.GlobalTask globalTask; - TaskVo.NormalTask normalTask; - - SysProject project = sysProjectDao.selectByPrimaryKey(projectId); - if (ObjectUtil.isNull(project)){ - throw new BaseException(CodeEnum.PARAM_ERROR); - } - if (endTime < project.getBeginTime() || startTime > project.getEndTime()) { - return proTaskInfo; - } - //查找项目配置 - ProShowExample proShowExample = new ProShowExample(); - proShowExample.createCriteria().andProjectIdEqualTo(projectId); - List proShowList = proShowDao.selectByExample(proShowExample); - if(CollectionUtil.isNotEmpty(proShowList)){ - ProShow proShow = proShowList.get(0); - if(proShow.getSelectTaskType() == 4){ - return getTaskAndType4ByPM(currentUserId,projectId,startTime,endTime,page,pageSize,roleId); - } - } - - - //1、查找一级任务 - ProTaskDetailExample proTaskDetailExample = new ProTaskDetailExample(); - proTaskDetailExample.createCriteria().andProjectIdEqualTo(projectId).andLevelEqualTo((byte) 1) - .andLevelEqualTo((byte) 1).andBeginTimeLessThanOrEqualTo(endTime).andEndTimeGreaterThanOrEqualTo(startTime); - proTaskDetailExample.setOrderByClause("begin_time"); - List firstTaskDetailList = taskDetailDao.selectByExample(proTaskDetailExample); - if (CollectionUtil.isNotEmpty(firstTaskDetailList)) { - int sequence = 1; - for (ProTaskDetail firstTaskDetail : firstTaskDetailList) { - normalTask = new TaskVo.NormalTask(); - BeanUtil.copyProperties(firstTaskDetail, normalTask); - normalTask.setDetailId(firstTaskDetail.getId()); - normalTask.setId(taskDeliverService.isTaskOrSubTime(firstTaskDetail.getId())); - normalTask.setSequence(sequence); - // 查询任务对应的配置 - ProPluginConfigExample configExample = new ProPluginConfigExample(); - configExample.createCriteria().andTaskIdEqualTo(firstTaskDetail.getId()).andPlaceLocationEqualTo((byte) 0); - List proPluginConfigs = pluginConfigDao.selectByExample(configExample); - if (CollectionUtil.isNotEmpty(proPluginConfigs)) { - ProPluginConfig config = proPluginConfigs.get(0); - normalTask.setImportParam(config.getImportParam()); - normalTask.setRoutineLocation(config.getRoutineLocation()); - normalTask.setWebPath(config.getWebPath()); - } - //一级任务配置 - normalTask.setProTaskConfig(getProTaskShow(normalTask.getDetailId())); - - //一级任务完成状态 - ProSubTimeMember firstSubTimeMember = getProcessByUserIdAndTask(currentUserId, normalTask.getId()); - if (ObjectUtil.isNotNull(firstSubTimeMember)) { - normalTask.setRealEndTime(firstSubTimeMember.getRealFinishTime()); - normalTask.setProcess(firstSubTimeMember.getComplatedStatus()); - } - //查找一级任务下的二级任务 - List secondNormalTaskList = taskDetailDao.selectNormalTaskListByPM(projectId, firstTaskDetail.getId(), startTime, endTime, roleId); - if (CollectionUtil.isNotEmpty(secondNormalTaskList)) { - for (TaskVo.NormalTask task : secondNormalTaskList) { -// //处理分数 -// BigDecimal score = mtFeignClient.getAdminScore(task.getProjectId(), task.getDetailId()); -// if (ObjectUtil.isNotNull(score)) { -// task.setScore(score); -// } - //处理插件 - managePlugin(currentUserId, roleId, task, imitation); - //二级任务完成状态 - if (task.getProcess() != 2) { - ProSubTimeMember subTimeMember = getProcessByUserIdAndTask(currentUserId, task.getId()); - if (ObjectUtil.isNotNull(subTimeMember)) { - task.setRealEndTime(subTimeMember.getRealFinishTime()); - task.setProcess(subTimeMember.getComplatedStatus()); - } else if (task.getProcess() > 2) { - task.setRealEndTime((long) 0); - task.setProcess(0); - } - } - //二级任务配置 - task.setProTaskConfig(getProTaskShow(task.getDetailId())); - //提醒信息 - normalTask.setRemindInfoList(proRemindDao.queryRemindByTask(normalTask.getId())); - } - TaskUtil.Task task = TaskUtil.splitTask(secondNormalTaskList, startTime, endTime, process); - if (CollectionUtil.isNotEmpty(task.getGlobalTask())) { - for (TaskVo.NormalTask global : task.getGlobalTask()) { - globalTask = new TaskVo.GlobalTask(); - BeanUtil.copyProperties(global, globalTask); - globalTaskList.add(globalTask); - } - } - if (CollectionUtil.isNotEmpty(task.getCommonTask())) { - normalTask.setSecondTasks(new ArrayList<>()); - normalTask.getSecondTasks().addAll(task.getCommonTask()); - } - } -// if(CollectionUtil.isNotEmpty(normalTask.getSecondTasks())) { - normalTaskList.add(normalTask); - sequence++; -// } - } - } - TaskVo.PageInfo pageInfo = new TaskVo.PageInfo(); - pageInfo.setTotalPage(page); - pageInfo.setCurrentPage(page); - - proTaskInfo.setPageInfo(pageInfo); - proTaskInfo.setGlobalTaskList(globalTaskList); - proTaskInfo.setNormalTaskList(normalTaskList); - return proTaskInfo; - } - - //特殊任务分页查找项目经理下的任务(不处理时间) - 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); - ProTaskDetailExample proTaskDetailExample = new ProTaskDetailExample(); - proTaskDetailExample.createCriteria().andProjectIdEqualTo(projectId).andLevelEqualTo((byte) 1) - .andLevelEqualTo((byte) 1).andBeginTimeLessThanOrEqualTo(endTime).andEndTimeGreaterThanOrEqualTo(startTime); - proTaskDetailExample.setOrderByClause("begin_time"); - List firstTaskDetailList = taskDetailDao.selectByExample(proTaskDetailExample); - PageInfo pageInfo = new PageInfo<>(firstTaskDetailList); - - - - if (CollectionUtil.isNotEmpty(firstTaskDetailList)) { - int sequence = 1; - for (ProTaskDetail firstTaskDetail : firstTaskDetailList) { - TaskVo.NormalTask normalTask = new TaskVo.NormalTask(); - BeanUtil.copyProperties(firstTaskDetail, normalTask); - normalTask.setDetailId(firstTaskDetail.getId()); - normalTask.setId(taskDeliverService.isTaskOrSubTime(firstTaskDetail.getId())); - normalTask.setSequence(sequence); - // 查询任务名对应的配置 - ProPluginConfigExample configExample = new ProPluginConfigExample(); - configExample.createCriteria().andTaskIdEqualTo(firstTaskDetail.getId()).andPlaceLocationEqualTo((byte) 0); - List proPluginConfigs = pluginConfigDao.selectByExample(configExample); - if (CollectionUtil.isNotEmpty(proPluginConfigs)) { - ProPluginConfig config = proPluginConfigs.get(0); - normalTask.setImportParam(config.getImportParam()); - normalTask.setRoutineLocation(config.getRoutineLocation()); - normalTask.setWebPath(config.getWebPath()); - } - //一级任务配置 - normalTask.setProTaskConfig(getProTaskShow(normalTask.getDetailId())); - - //一级任务完成状态 - ProSubTimeMember firstSubTimeMember = getProcessByUserIdAndTask(currentUserId, normalTask.getId()); - if (ObjectUtil.isNotNull(firstSubTimeMember)) { - normalTask.setRealEndTime(firstSubTimeMember.getRealFinishTime()); - normalTask.setProcess(firstSubTimeMember.getComplatedStatus()); - } - //查找一级任务下的二级任务 - List secondNormalTaskList = taskDetailDao.selectNormalTaskListByPM(projectId, firstTaskDetail.getId(), startTime, endTime, roleId); - if (CollectionUtil.isNotEmpty(secondNormalTaskList)) { - normalTask.setSecondTasks(secondNormalTaskList); - } - sequence++; - normalTasks.add(normalTask); - } - } - //页码 - TaskVo.PageInfo p = new TaskVo.PageInfo(); - p.setCurrentPage(pageInfo.getPageNum()); - p.setTotalPage(pageInfo.getPages()); - - TaskVo.ProTaskInfo proTaskInfo = new TaskVo.ProTaskInfo(); - proTaskInfo.setPageInfo(p); - proTaskInfo.setNormalTaskList(normalTasks); - 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 { - - //查找该角色的所有任务(全体成员的任务也是这个角色的任务) - PageHelper.startPage(page, pageSize); - List secondTaskVoList = taskDetailDao.selectTaskByRoleAndAllMembers(projectId, roleId, - allMemberId, startTime, endTime, priority); - PageInfo pageInfo = new PageInfo<>(secondTaskVoList); - - if (CollectionUtil.isNotEmpty(secondTaskVoList)) { - for (TaskVo.NormalTask normalTask : secondTaskVoList) { - - //通过角色id查找 负责人名称 检查人名称 - Long executorRole = normalTask.getExecutorRole(); - ProRole executor = proRoleDao.selectByPrimaryKey(executorRole); - if(ObjectUtil.isNotNull(executor)){ - normalTask.setExecutorRoleName(executor.getName()); - } - Long checkerRole = normalTask.getCheckerRole(); - ProRole checker = proRoleDao.selectByPrimaryKey(checkerRole); - if(ObjectUtil.isNotNull(checker)){ - normalTask.setCheckerRoleName(checker.getName()); - } - - //处理插件 - managePlugin(currentUserId, roleId, normalTask, imitation); - //任务完成状态 - if (normalTask.getProcess() != 2) { - ProSubTimeMember subTimeMember = getProcessByUserIdAndTask(currentUserId, normalTask.getId()); - if (ObjectUtil.isNotNull(subTimeMember)) { - normalTask.setProcess(subTimeMember.getComplatedStatus()); - normalTask.setRealEndTime(subTimeMember.getRealFinishTime()); - } else if (normalTask.getProcess() > 2) { - normalTask.setRealEndTime((long) 0); - normalTask.setProcess(0); - } - } - //任务配置 - normalTask.setProTaskConfig(getProTaskShow(normalTask.getDetailId())); - //提醒信息 - normalTask.setRemindInfoList(proRemindDao.queryRemindByTask(normalTask.getId())); - } - } - //页码 - TaskVo.PageInfo p = new TaskVo.PageInfo(); - p.setCurrentPage(pageInfo.getPageNum()); - p.setTotalPage(pageInfo.getPages()); - - TaskVo.ProTaskInfo proTaskInfo = new TaskVo.ProTaskInfo(); - proTaskInfo.setPageInfo(p); - proTaskInfo.setNormalTaskList(secondTaskVoList); - return proTaskInfo; - } - - /** - * 查看任务 项目成员 - */ - private TaskVo.ProTaskInfo getTaskInfoByProjectIdAndRoleId(Long currentUserId, Long projectId, Long roleId, Long startTime, - Long endTime, Integer process, Integer page, Integer pageSize, Integer priority, Integer imitation) throws Exception { - TaskVo.ProTaskInfo proTaskInfo = new TaskVo.ProTaskInfo(); - - List globalTaskList = new ArrayList<>(); - List normalTaskList = new ArrayList<>(); - TaskVo.GlobalTask globalTask; - //获取“全体成员”角色 - ProRole allMember = proRoleService.getAllMember(projectId); - Long allMemberId = null; - if (ObjectUtil.isNotNull(allMember)) { - allMemberId = allMember.getId(); - } - //查找项目配置 - ProShowExample proShowExample = new ProShowExample(); - proShowExample.createCriteria().andProjectIdEqualTo(projectId); - List proShowList = proShowDao.selectByExample(proShowExample); - 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); - } - } - //查找该角色的所有任务(全体成员的任务也是这个角色的任务) - List secondTaskVoList = taskDetailDao.selectTaskByRoleAndAllMembers(projectId, roleId, - allMemberId, startTime, endTime, priority); - - if (CollectionUtil.isNotEmpty(secondTaskVoList)) { - for (TaskVo.NormalTask normalTask : secondTaskVoList) { -// //处理分数 -// MemberVo.MemberInfo memberInfo = proMemberService.getMemberByUserIdAndProjectId(currentUserId, normalTask.getProjectId()); -// if (ObjectUtil.isNotNull(memberInfo)) { -// BigDecimal score = mtFeignClient.getMemberScore(normalTask.getDetailId(), memberInfo.getId()); -// if (ObjectUtil.isNotNull(score)) { -// normalTask.setScore(score); -// } -// } - //通过角色id查找 负责人名称 检查人名称 - Long executorRole = normalTask.getExecutorRole(); - ProRole executor = proRoleDao.selectByPrimaryKey(executorRole); - if(ObjectUtil.isNotNull(executor)){ - normalTask.setExecutorRoleName(executor.getName()); - } - - //设置默认检查人 - Long checkerRole = normalTask.getCheckerRole(); - ProRole checker = proRoleDao.selectByPrimaryKey(checkerRole); - if(ObjectUtil.isNotNull(checker)) { - normalTask.setCheckerRoleName(checker.getName()); - }else{ - //根据任务id查询项目下项目经理 - Long pmId = taskDetailDao.selectPmByTaskId(normalTask.getDetailId()); - ProRole proRole = proRoleDao.selectByPrimaryKey(pmId); - normalTask.setCheckerRole(proRole.getId()); - normalTask.setCheckerRoleName(proRole.getName()); - } - - - //处理插件 - managePlugin(currentUserId, roleId, normalTask, imitation); - //任务完成状态 - if (normalTask.getProcess() != 2) { - ProSubTimeMember subTimeMember = getProcessByUserIdAndTask(currentUserId, normalTask.getId()); - if (ObjectUtil.isNotNull(subTimeMember)) { - normalTask.setProcess(subTimeMember.getComplatedStatus()); - normalTask.setRealEndTime(subTimeMember.getRealFinishTime()); - } else if (normalTask.getProcess() > 2) { - normalTask.setRealEndTime((long) 0); - normalTask.setProcess(0); - } - } - //任务配置 - normalTask.setProTaskConfig(getProTaskShow(normalTask.getDetailId())); - //提醒信息 - normalTask.setRemindInfoList(proRemindDao.queryRemindByTask(normalTask.getId())); - } - - TaskUtil.Task task = TaskUtil.splitTask(secondTaskVoList, startTime, endTime, process); - - if (CollectionUtil.isNotEmpty(task.getGlobalTask())) { - for (TaskVo.NormalTask global : task.getGlobalTask()) { - globalTask = new TaskVo.GlobalTask(); - BeanUtil.copyProperties(global, globalTask); - globalTaskList.add(globalTask); - } - } - if (CollectionUtil.isNotEmpty(task.getCommonTask())) { - if (priority == 0) { - normalTaskList = sortTaskTime(task.getCommonTask()); - } else { - normalTaskList = task.getCommonTask(); - } - } - - } - - - TaskVo.PageInfo pageInfo = new TaskVo.PageInfo(); //2.业务层分页 - List theNormalTaskList = null; - int totalPages = 1; - if (CollectionUtil.isNotEmpty(normalTaskList)) { - //1.计算分页条件 - if (page > 0) { - int size = normalTaskList.size(); - totalPages = size / pageSize + 1; - int num = pageSize; - int startIndex = pageSize * (page - 1); - if (startIndex >= size) { - startIndex = -1; - } else { - if (startIndex + num > size) { - num = size - startIndex; - } - } - //拷贝分页数据 - if (startIndex >= 0) { - theNormalTaskList = CollectionUtil.newArrayList(); - for (int i = startIndex; i < startIndex + num; i++) { - theNormalTaskList.add(normalTaskList.get(i)); - } - } - } else { //不分页 - page = 1; - theNormalTaskList = CollectionUtil.newArrayList(normalTaskList); - } - } - - pageInfo.setTotalPage(totalPages); - pageInfo.setCurrentPage(page); - - proTaskInfo.setPageInfo(pageInfo); - proTaskInfo.setGlobalTaskList(globalTaskList); - proTaskInfo.setNormalTaskList(theNormalTaskList); - - return proTaskInfo; - } - - private List sortTaskTime(List commonTask) { - - List normalTaskList = new ArrayList<>(); - List secondTaskVoList; - Set longSet = new HashSet<>(); - if (CollectionUtil.isNotEmpty(commonTask)) { - for (TaskVo.NormalTask secondTaskVo : commonTask) { - longSet.add(secondTaskVo.getBeginTime()); - longSet.add(secondTaskVo.getEndTime()); - } - List timeList = new ArrayList<>(longSet); - for (int i = 0; i < timeList.size(); i++) { - for (int j = 0; j < timeList.size() - i - 1; j++) { - if (timeList.get(j) > timeList.get(j + 1)) { - Long r = timeList.get(j); - timeList.set(j, timeList.get(j + 1)); - timeList.set(j + 1, r); - } - } - } - int sequence = 1; - for (int i = 0; i < timeList.size() - 1; i++) { - TaskVo.NormalTask normalTask; - secondTaskVoList = new ArrayList<>(); - Long startTime = timeList.get(i); - Long endTime = timeList.get(i + 1); - - for (TaskVo.NormalTask secondTaskVo : commonTask) { - if (secondTaskVo.getTimeStatus() == 1) { - if (secondTaskVo.getBeginTime().longValue() == startTime.longValue()) { - normalTask = new TaskVo.NormalTask(); - BeanUtil.copyProperties(secondTaskVo, normalTask); - normalTask.setEndTime(null); - normalTask.setSequence(sequence); - sequence++; - normalTaskList.add(normalTask); - } - continue; - } - if (secondTaskVo.getTimeStatus() == 2) { - if (secondTaskVo.getEndTime().longValue() == endTime.longValue()) { - normalTask = new TaskVo.NormalTask(); - BeanUtil.copyProperties(secondTaskVo, normalTask); - normalTask.setBeginTime(null); - normalTask.setSequence(sequence); - sequence++; - normalTaskList.add(normalTask); - } - continue; - } - if (secondTaskVo.getBeginTime() < startTime && secondTaskVo.getEndTime() <= endTime && secondTaskVo.getEndTime() > startTime) { - secondTaskVo.setBeginTime(startTime); - secondTaskVoList.add(secondTaskVo); - } else if (secondTaskVo.getBeginTime() >= startTime && secondTaskVo.getEndTime() <= endTime) { - secondTaskVoList.add(secondTaskVo); - } else if (secondTaskVo.getBeginTime() >= startTime && secondTaskVo.getBeginTime() < endTime && secondTaskVo.getEndTime() > endTime) { - secondTaskVo.setEndTime(endTime); - secondTaskVoList.add(secondTaskVo); - } else if (secondTaskVo.getBeginTime() < startTime && secondTaskVo.getEndTime() > endTime) { - secondTaskVo.setBeginTime(startTime); - secondTaskVo.setEndTime(endTime); - secondTaskVoList.add(secondTaskVo); - } - } - if (CollectionUtil.isNotEmpty(secondTaskVoList)) { - if (secondTaskVoList.size() == 1) { - normalTask = new TaskVo.NormalTask(); - BeanUtil.copyProperties(secondTaskVoList.get(0), normalTask); - normalTask.setSequence(sequence); - sequence++; - normalTaskList.add(normalTask); - } else { - normalTask = new TaskVo.NormalTask(); - normalTask.setBeginTime(startTime); - normalTask.setEndTime(endTime); - normalTask.setSecondTasks(secondTaskVoList); - normalTask.setSequence(sequence); - sequence++; - normalTaskList.add(normalTask); - } - } - } - } - return normalTaskList; - } - - /** - * 处理任务的插件 - */ - @Override - public void managePlugin(Long userId, Long roleId, TaskVo.NormalTask normalTask, Integer imitation) throws Exception { - Boolean isMain = proMemberService.userIsBelongRole(userId, roleId, imitation); - if (!isMain) { - normalTask.setPlugins(null); - } else { - if (CollectionUtil.isNotEmpty(normalTask.getPlugins())) { - List pluginVoList = new ArrayList<>(); - for (TaskVo.PluginVo pluginVo : normalTask.getPlugins()) { - String[] pluginIds = pluginVo.getId().split(","); - String[] pluginNames = pluginVo.getName().split(","); - String[] pluginDescription = pluginVo.getDescription().split(","); - String[] pluginShowType = pluginVo.getShowType().split(","); - - TaskVo.PluginVo plugin; - for (int i = 0; i < pluginIds.length; i++) { - plugin = new TaskVo.PluginVo(); - plugin.setId(pluginIds[i]); - plugin.setName(pluginNames[i]); - plugin.setDescription(pluginDescription[i]); - plugin.setShowType(pluginShowType[i]); - //查找插件的配置信息 - ProPluginConfig proPluginConfig = sysPluginDao.getPluginConfigByTaskPluginId(pluginIds[i], normalTask.getDetailId()); - - if (ObjectUtil.isNotNull(proPluginConfig)) { - //如果是周会相关的插件,且入参为空。特殊查询 - SysPlugin sysPlugin = sysPluginDao.selectByPrimaryKey(Long.parseLong(pluginIds[i])); - if(ObjectUtil.isNotNull(sysPlugin) && sysPlugin.getScene() == 6 && StrUtil.isEmpty(proPluginConfig.getImportParam())){ - PluginVo.PersonalTaskReport personalTaskReport = taskPluginService.getPersonalTaskReport(normalTask.getProjectId()); - proPluginConfig.setImportParam(JacksonUtil.beanToJson(personalTaskReport)); - } -// //如果是“个人任务汇报”插件,特殊查询 -// if(pluginNames[i].equalsIgnoreCase(TallConstant.PERSONAL_TASK_REPORT) && StrUtil.isEmpty(proPluginConfig.getImportParam())){ -// PluginVo.PersonalTaskReport personalTaskReport = taskPluginService.getPersonalTaskReport(normalTask.getProjectId()); -// proPluginConfig.setImportParam(JacksonUtil.beanToJson(personalTaskReport)); -//// pluginConfigDao.updateByPrimaryKeySelective(proPluginConfig); -// } - plugin.setWebPath(proPluginConfig.getWebPath()); - plugin.setRoutineLocation(proPluginConfig.getRoutineLocation()); - plugin.setImportParam(proPluginConfig.getImportParam()); - } - pluginVoList.add(plugin); - } - } - normalTask.setPlugins(pluginVoList); - } - } - } - - - /** - * 点击MVP查看交付物 - */ - @Override - public List getTaskInfoByMvp(Long projectId) { - List taskDeliverByMvpList; - TaskVo.TaskDeliverByMVP taskDeliverByMvp; - List firstTasks = new ArrayList<>(); - TaskVo.FirstTask firstProTask; - //查找项目下的一级任务 - ProTaskDetailExample firstTaskExample = new ProTaskDetailExample(); - firstTaskExample.createCriteria().andProjectIdEqualTo(projectId) - .andVirtualEqualTo((byte) WebConstant.TASK_VIRTUAL.Normal.value).andLevelEqualTo((byte) 1); - List firstTaskList = taskDetailDao.selectByExample(firstTaskExample); - if (CollectionUtil.isNotEmpty(firstTaskList)) { - for (ProTaskDetail firstTask : firstTaskList) { - taskDeliverByMvpList = new ArrayList<>(); - //查找项目下所有的二级任务 - ProTaskDetailExample taskExample = new ProTaskDetailExample(); - taskExample.createCriteria().andProjectIdEqualTo(projectId) - .andVirtualEqualTo((byte) WebConstant.TASK_VIRTUAL.Normal.value).andParentIdEqualTo(firstTask.getId()); - List taskList = taskDetailDao.selectByExample(taskExample); - if (CollectionUtil.isNotEmpty(taskList)) { - for (ProTaskDetail task : taskList) { - - taskDeliverByMvp = new TaskVo.TaskDeliverByMVP(); - taskDeliverByMvp.setId(task.getId()); - taskDeliverByMvp.setName(task.getName()); - //负责人信息 - TaskVo.RoleCheckList roleCheckList = proRoleService.selectRoleByCheckOrExecutor(task.getExecutorRole()); - if (ObjectUtil.isNotNull(roleCheckList)) { - List roleCheckListList = new ArrayList<>(); - if (roleCheckList.getName().equals(WebConstant.ROLE_NAME.AllMember.phase)) { - roleCheckListList = proRoleDao.findAll(projectId); - } else { - roleCheckListList.add(roleCheckList); - } - taskDeliverByMvp.setRoles(roleCheckListList); - } - //检查人信息 - taskDeliverByMvp.setChecker(proRoleService.selectRoleByCheckOrExecutor(task.getCheckerRole())); - //查找任务下的交付物 - if (task.getHasGroup() == 0) { - taskDeliverByMvp.setDelivers(taskDeliverService.selectDeliverOrInputByTask(task.getId(), 0)); - } else { - Long now = System.currentTimeMillis(); - log.info(task.getName()); - TaskVo.TaskIdAndSubTimeIdByParentIdAndTime taskAndSubTime = taskDetailDao.selectSubTimeByTaskParentIdAndTime(task.getId(), now); - if (ObjectUtil.isNotNull(taskAndSubTime)) { - taskDeliverByMvp.setDelivers(taskDeliverService.selectDeliverOrInputByTask(taskAndSubTime.getTaskId(), 0)); - } - } - //查找任务的输入文档 - taskDeliverByMvp.setInputs(taskDeliverService.selectDeliverOrInputByTask(task.getId(), 1)); - - taskDeliverByMvpList.add(taskDeliverByMvp); - } - } - firstProTask = new TaskVo.FirstTask(); - firstProTask.setId(firstTask.getId()); - firstProTask.setName(firstTask.getName()); - firstProTask.setTaskDeliverByMVP(taskDeliverByMvpList); - firstTasks.add(firstProTask); - } - } - return firstTasks; - } - - /** - * 通过任务id查任务详情 - */ - @Override - public TaskVo.NormalTask getTaskInfoByTaskId(Long currentUserId, Long projectId, Long taskId, Integer imitation) throws Exception { - TaskVo.NormalTask taskDetail; - Long taskSubTimeId = null; - ProTaskSubTime subTime = taskSubTimeDao.selectByPrimaryKey(taskId); - if (ObjectUtil.isNotNull(subTime)) { - taskId = subTime.getTaskDetailId(); - taskSubTimeId = subTime.getId(); - } - ProTaskDetail task = taskDetailDao.selectByPrimaryKey(taskId); - if (ObjectUtil.isNull(task)) { - throw new BaseException(CodeEnum.NOT_TASK); - } - if(ObjectUtil.isNull(taskSubTimeId)){ - taskSubTimeId = taskDeliverService.isTaskOrSubTime(taskId); - } - - taskDetail = taskDetailDao.selectTaskByTaskId(taskSubTimeId, taskId, task.getExecutorRole()); - if (ObjectUtil.isNotNull(taskDetail)) { - //处理查询到的任务的插件 - managePlugin(currentUserId, task.getExecutorRole(), taskDetail, imitation); - //任务的完成状态 - if (taskDetail.getProcess() != 2) { - ProSubTimeMember subTimeMember = getProcessByUserIdAndTask(currentUserId, taskDetail.getId()); - if (ObjectUtil.isNotNull(subTimeMember)) { - taskDetail.setProcess(subTimeMember.getComplatedStatus()); - taskDetail.setRealEndTime(subTimeMember.getRealFinishTime()); - } else if (taskDetail.getProcess() > 2) { - taskDetail.setRealEndTime((long) 0); - taskDetail.setProcess(0); - } - } - //任务配置 - taskDetail.setProTaskConfig(getProTaskShow(taskDetail.getDetailId())); - //添加项目信息 - normalTaskAddPlugin(taskId, taskDetail); - List groupTaskList = new ArrayList<>(); - //提醒信息 - taskDetail.setRemindInfoList(proRemindDao.queryRemindByTask(taskDetail.getId())); - //获取此任务的子任务 - ProTaskDetailExample detailExample = new ProTaskDetailExample(); - detailExample.createCriteria().andParentIdEqualTo(taskDetail.getDetailId()); - List detailList = taskDetailDao.selectByExample(detailExample); - if (CollectionUtil.isNotEmpty(detailList)) { - for (ProTaskDetail detail : detailList) { - TaskVo.NormalTask groupTask; - Long subTimeId = taskDeliverService.isTaskOrSubTime(detail.getId()); - if (ObjectUtil.isNotNull(subTimeId)) { - groupTask = taskDetailDao.selectTaskByTaskId(subTimeId, detail.getId(), detail.getExecutorRole()); - if (ObjectUtil.isNotNull(groupTask)) { - //处理查询到的任务的插件 - managePlugin(currentUserId, task.getExecutorRole(), taskDetail, imitation); - //任务的完成状态 - if (taskDetail.getProcess() != 2) { - ProSubTimeMember proSubTimeMember = getProcessByUserIdAndTask(currentUserId, groupTask.getId()); - if (ObjectUtil.isNotNull(proSubTimeMember)) { - groupTask.setProcess(proSubTimeMember.getComplatedStatus()); - groupTask.setRealEndTime(proSubTimeMember.getRealFinishTime()); - } else if (taskDetail.getProcess() > 2) { - taskDetail.setRealEndTime((long) 0); - taskDetail.setProcess(0); - } - } - - //添加项目信息和插件信息 - normalTaskAddPlugin(groupTask.getDetailId(), groupTask); - //修改返回时子任务的名字(“任务名+(xx和XX)”) - if (detail.getAllMember() == 0) { - groupTask.setName(updateSubTaskName(groupTask.getDetailId(), groupTask.getName())); - } - groupTaskList.add(groupTask); - } - } - } - taskDetail.setSecondTasks(new ArrayList<>()); - taskDetail.getSecondTasks().addAll(groupTaskList); - } - //查询此任务下的输入文档 - List inputDocInfos = proTaskInputDocDao.selectDocByTaskId(taskDetail.getDetailId()); - if (CollectionUtil.isNotEmpty(inputDocInfos)){ - taskDetail.setInputDoc(inputDocInfos); - } - //查询此任务下的输出文档 - List outputDocInfos = taskDeliverDao.selectOutputDocByTaskId(taskDetail.getDetailId()); - if (CollectionUtil.isNotEmpty(outputDocInfos)){ - taskDetail.setOutputDoc(outputDocInfos); - } - //设置检查人 - ProRole checkRole = proRoleDao.selectByPrimaryKey(task.getCheckerRole()); - if (ObjectUtil.isNotNull(checkRole)){ - taskDetail.setCheckerRole(checkRole.getId()); - taskDetail.setCheckerRoleName(checkRole.getName()); - }else{ - //根据任务id查询项目下项目经理 - Long pmId = taskDetailDao.selectPmByTaskId(task.getId()); - ProRole proRole = proRoleDao.selectByPrimaryKey(pmId); - taskDetail.setCheckerRole(proRole.getId()); - taskDetail.setCheckerRoleName(proRole.getName()); - } - } - - return taskDetail; - } - - private void normalTaskAddPlugin(Long taskId, TaskVo.NormalTask normalTask) { - ProTaskDetail task = taskDetailDao.selectByPrimaryKey(taskId); - //添加项目信息 - SysProject project = sysProjectDao.selectByPrimaryKey(task.getProjectId()); - if (ObjectUtil.isNotNull(project)) { - normalTask.setProjectId(project.getId()); - normalTask.setProjectName(project.getName()); - } - ProRole role = proRoleDao.selectByPrimaryKey(normalTask.getExecutorRole()); - if (ObjectUtil.isNotNull(role)) { - normalTask.setExecutorRoleName(role.getName()); - } - } - - /** - * 修改返回时子任务的名字 格式:“任务名+(xx和XX)” - */ - private String updateSubTaskName(Long taskId, String taskName) { - StringBuilder name = new StringBuilder(taskName + "("); - ProTaskMemberExample taskMemberExample = new ProTaskMemberExample(); - taskMemberExample.createCriteria().andTaskDetailIdEqualTo(taskId); - List taskMemberList = taskMemberDao.selectByExample(taskMemberExample); - if (CollectionUtil.isNotEmpty(taskMemberList)) { - for (int i = 0; i < taskMemberList.size(); i++) { - ProMember member = proMemberDao.selectByPrimaryKey(taskMemberList.get(i).getMemberId()); - if (ObjectUtil.isNotNull(member)) { - name.append(member.getNickname()); - if (i != taskMemberList.size() - 1) { - name.append("和"); - } - } - } - } - name.append(")"); - return name.toString(); - } - - - /** - * 任务清单 - */ - @Override - public TaskVo.TaskCheckList selectTaskList(Long currentUserId, String key, String start, String end, - String role, Integer page, Integer pageSize) throws Exception { - TaskVo.TaskCheckList taskCheckList = new TaskVo.TaskCheckList(); - List normalTaskList = new ArrayList<>(); - TaskVo.PageInfo pageInfo = new TaskVo.PageInfo(); - - //获取日期的开始结束时间 - Long startMillisTime = null; - Long endMillisTime = null; - Map timeMap; - if (StrUtil.isNotEmpty(start)) { - timeMap = DateUtil.projectFormatDateTime(start); - startMillisTime = timeMap.get("startMillisTime"); - } - if (StrUtil.isNotEmpty(end)) { - timeMap = DateUtil.projectFormatDateTime(end); - endMillisTime = timeMap.get("endMillisTime"); - } - //获取该用户关注的项目 - List projectList = attentionService.findProjectIdByUserId(currentUserId); - if (CollectionUtil.isNotEmpty(projectList)) { - if (StrUtil.isNotEmpty(role)) { - switch (role) { - case "创建者": - for (SysProject project : projectList) { - if (project.getCreatorId().longValue() == currentUserId.longValue()) { - List taskList = getTaskInfoByProjectIdAndUserId(project, currentUserId, startMillisTime, endMillisTime, null); - if (CollectionUtil.isNotEmpty(taskList)) { - normalTaskList.addAll(taskList); - } - } - } - break; - case "参与者": - for (SysProject project : projectList) { - if (project.getCreatorId().longValue() != currentUserId.longValue()) { - List taskList = getTaskInfoByProjectIdAndUserId(project, currentUserId, startMillisTime, endMillisTime, null); - if (CollectionUtil.isNotEmpty(taskList)) { - normalTaskList.addAll(taskList); - } - } - } - break; - default: - break; - } - } else { - for (SysProject project : projectList) { - List taskList = getTaskInfoByProjectIdAndUserId(project, currentUserId, startMillisTime, endMillisTime, null); - if (CollectionUtil.isNotEmpty(taskList)) { - normalTaskList.addAll(taskList); - } - } - } - } - //关键词模糊搜索 - if (StrUtil.isNotEmpty(key)) { - if (CollectionUtil.isNotEmpty(normalTaskList)) { - normalTaskList.removeIf(normalTask -> !normalTask.getName().contains(key)); - } - } - - //业务分页 - List theNormalList = null; - int totalPages = 1; - if (CollectionUtil.isNotEmpty(normalTaskList)) { - //1.计算分页条件 - if (page > 0) { - int size = normalTaskList.size(); - totalPages = size / pageSize + 1; - int num = pageSize; - int startIndex = pageSize * (page - 1); - if (startIndex >= size) { - startIndex = -1; - } else { - if (startIndex + num > size) { - num = size - startIndex; - } - } - //拷贝分页数据 - if (startIndex >= 0) { - theNormalList = CollectionUtil.newArrayList(); - for (int i = startIndex; i < startIndex + num; i++) { - theNormalList.add(normalTaskList.get(i)); - } - } - } else { //不分页 - theNormalList = CollectionUtil.newArrayList(normalTaskList); - } - } - pageInfo.setCurrentPage(page); - pageInfo.setTotalPage(totalPages); - - taskCheckList.setNormalTaskList(theNormalList); - taskCheckList.setPageInfo(pageInfo); - return taskCheckList; - } - - private List getTaskInfoByProjectIdAndUserId(SysProject project, Long userId, - Long startTime, Long endTime, Set roleList) throws Exception { - List normalTaskList = new ArrayList<>(); - //获取用户的角色 - if (CollectionUtil.isEmpty(roleList)) { - roleList = new HashSet<>(); - //查询此用户在项目中的的所有角色的任务 - List roles = proMemberService.selectRolesByUserIdAndProjectId(userId, project.getId(), null); - for (ProRole role : roles) { - roleList.add(role.getId()); - } -// roles.forEach(role->{ -// roleList.add(role.getId()); -// }); - } - - //获取“全体成员”角色 - ProRole allMember = proRoleService.getAllMember(project.getId()); - if (ObjectUtil.isNotNull(allMember)) { - roleList.add(allMember.getId()); - } - if (CollectionUtil.isNotEmpty(roleList)) { - for (Long roleId : roleList) { -// SysProject sysProject = sysProjectDao.selectByPrimaryKey(role.getProjectId()); - List taskList = - taskDetailDao.selectTaskByRoleAndAllMembers(project.getId(), roleId, null, startTime, endTime, 0); - if (CollectionUtil.isNotEmpty(taskList)) { - for (TaskVo.NormalTask normalTask : taskList) { - //任务的完成状态 - if (normalTask.getProcess() != 2) { - ProSubTimeMember proSubTimeMember = getProcessByUserIdAndTask(userId, normalTask.getId()); - if (ObjectUtil.isNotNull(proSubTimeMember)) { - normalTask.setProcess(proSubTimeMember.getComplatedStatus()); - normalTask.setRealEndTime(proSubTimeMember.getRealFinishTime()); - } else if (normalTask.getProcess() > 2) { - normalTask.setRealEndTime((long) 0); - normalTask.setProcess(0); - } - } - ProRole proRole = proRoleDao.selectByPrimaryKey(normalTask.getExecutorRole()); - if (ObjectUtil.isNotNull(project)) { - normalTask.setProjectId(project.getId()); - normalTask.setProjectName(project.getName()); - } - if (ObjectUtil.isNotNull(proRole)) { - normalTask.setExecutorRoleName(proRole.getName()); - } - } - normalTaskList.addAll(taskList); - } - } - } - return normalTaskList; - } - - /** - * 项目内的任务清单 - */ - @Override - public TaskVo.TaskCheckList selectTaskListByProject(Long currentUserId, TaskDto.SelectListByProject list) throws Exception { - TaskVo.TaskCheckList taskCheckList = new TaskVo.TaskCheckList(); - List normalTaskList = new ArrayList<>(); - TaskVo.PageInfo pageInfo = new TaskVo.PageInfo(); - - //获取日期的开始结束时间 - Long startMillisTime = null; - Long endMillisTime = null; - Map timeMap; - if (StrUtil.isNotEmpty(list.getStart())) { - timeMap = DateUtil.projectFormatDateTime(list.getStart()); - startMillisTime = timeMap.get("startMillisTime"); - } - if (StrUtil.isNotEmpty(list.getEnd())) { - timeMap = DateUtil.projectFormatDateTime(list.getEnd()); - endMillisTime = timeMap.get("endMillisTime"); - } - //获取需查询的角色 - Set roleList = new HashSet<>(); - if (ObjectUtil.isNotNull(list.getRoleList())) { - list.getRoleList().forEach(roleId -> { - ProRole role = proRoleDao.selectByPrimaryKey(roleId); - if (ObjectUtil.isNotNull(role)) { - ProRole parentRole = proRoleDao.selectByPrimaryKey(role.getParentId()); - if (ObjectUtil.isNotNull(parentRole)) { - //若角色为项目经理或MVP,则查询全部角色 - if (role.getName().equalsIgnoreCase(WebConstant.ROLE_NAME.MVP.value) || - parentRole.getName().equalsIgnoreCase(WebConstant.ROLE_NAME.PM.value)) { - //查询项目下所有角色 - List roleInfoList = proRoleService.getRealMemberRolesByProjectId(list.getProjectId()); - if (CollectionUtil.isNotEmpty(roleInfoList)) { - for (ProjectVo.RoleInfo roleInfo : roleInfoList) { -// ProRole proRole = proRoleDao.selectByPrimaryKey(roleInfo.getId()); - roleList.add(roleInfo.getId()); - } - } - } - } - } - }); - if (CollectionUtil.isEmpty(roleList)) { - roleList.addAll(list.getRoleList()); - } - -// //获取指定的角色 -// ProRole role = proRoleDao.selectByPrimaryKey(roleId); -// if(ObjectUtil.isNotNull(role)){ -// ProRole parentRole = proRoleDao.selectByPrimaryKey(role.getParentId()); -// if(ObjectUtil.isNotNull(parentRole)){ -// //若角色为项目经理或MVP,则查询全部角色 -// if (role.getName().equalsIgnoreCase(WebConstant.ROLE_NAME.MVP.value) || -// parentRole.getName().equalsIgnoreCase(WebConstant.ROLE_NAME.PM.value)) { -// //查询项目下所有角色的任务 -// List roleInfoList = proRoleService.getRealMemberRolesByProjectId(projectId); -// if(CollectionUtil.isNotEmpty(roleInfoList)) { -// for (ProjectVo.RoleInfo roleInfo : roleInfoList) { -// ProRole proRole = proRoleDao.selectByPrimaryKey(roleInfo.getId()); -// roleList.add(proRole); -// } -// } -// }else { -// //否则只查询指定角色的任务清单 -// roleList.add(role); -// } -// } -// }else{ -// throw new BaseException(CodeEnum.NOT_ROLE); -// } - } - - //获取项目 - SysProject sysProject = sysProjectDao.selectByPrimaryKey(list.getProjectId()); - if (ObjectUtil.isNotNull(sysProject)) { - List taskList = getTaskInfoByProjectIdAndUserId(sysProject, currentUserId, startMillisTime, endMillisTime, roleList); - if (CollectionUtil.isNotEmpty(taskList)) { - normalTaskList.addAll(taskList); - } - } - //关键词模糊搜索 - if (StrUtil.isNotEmpty(list.getKey())) { - if (CollectionUtil.isNotEmpty(normalTaskList)) { - normalTaskList.removeIf(normalTask -> !normalTask.getName().contains(list.getKey())); -// Iterator it = normalTaskList.iterator(); -// while (it.hasNext()) { -// TaskVo.NormalTask normalTask = it.next(); -// if (!normalTask.getName().contains(key)) { -// it.remove(); -// } -// } - } - } - //业务分页 - List theNormalList = null; - int totalPages = 1; - if (CollectionUtil.isNotEmpty(normalTaskList)) { - //1.计算分页条件 - if (list.getPage() > 0) { - int size = normalTaskList.size(); - totalPages = size / list.getPageSize() + 1; - int num = list.getPageSize(); - int startIndex = list.getPageSize() * (list.getPage() - 1); - if (startIndex >= size) { - startIndex = -1; - } else { - if (startIndex + num > size) { - num = size - startIndex; - } - } - //拷贝分页数据 - if (startIndex >= 0) { - theNormalList = CollectionUtil.newArrayList(); - for (int i = startIndex; i < startIndex + num; i++) { - theNormalList.add(normalTaskList.get(i)); - } - } - } else { //不分页 - theNormalList = CollectionUtil.newArrayList(normalTaskList); - } - } - pageInfo.setCurrentPage(list.getPage()); - pageInfo.setTotalPage(totalPages); - - taskCheckList.setNormalTaskList(theNormalList); - taskCheckList.setPageInfo(pageInfo); - return taskCheckList; - } - - /** - * 任务模糊搜索 - */ - @Override - public List getTaskDetailByKey(Long currentUserId, Long projectId, String key) { -// List taskDetailByKeyList = taskDetailDao.selectTaskByKey(currentUserId, projectId, key); - return taskDetailDao.selectTaskByKey(currentUserId, projectId, key); - } - - /** - * 查询子任务最早的一条 - */ - @Override - public TaskVo.NormalTask selectTaskByParentId(Long parentId, Long startTime, Long endTime) { - return taskDetailDao.selectTaskByParentIdAndTime(parentId, startTime, endTime); - } - - /** - * 查看任务的完成状态 - */ - @Override - public ProSubTimeMember getProcessByUserIdAndTask(Long userId, Long subTimeId) throws Exception { - ProSubTimeMember subTimeMember = null; - ProTaskSubTime subTime = taskSubTimeDao.selectByPrimaryKey(subTimeId); - if (ObjectUtil.isNull(subTime)) { - throw new BaseException(CodeEnum.NOT_TASK); - } - ProTaskDetail taskDetail = taskDetailDao.selectByPrimaryKey(subTime.getTaskDetailId()); - if (ObjectUtil.isNull(taskDetail)) { - throw new BaseException(CodeEnum.NOT_TASK); - } - ProSubTimeMemberExample subTimeMemberExample = new ProSubTimeMemberExample(); - subTimeMemberExample.createCriteria().andTaskSubTimeIdEqualTo(subTimeId).andComplatedStatusEqualTo((byte) 2); - subTimeMemberExample.setOrderByClause("real_finish_time DESC"); - List subTimeMemberList = proSubTimeMemberDao.selectByExample(subTimeMemberExample); - if (CollectionUtil.isNotEmpty(subTimeMemberList)) { - if (taskDetail.getFinishNeedAll() == 0) { - subTimeMember = subTimeMemberList.get(0); - } else { - //查找此用户在任务下的成员 - ProMember porMember = proMemberService.selectByUserId(userId, taskDetail.getProjectId()); - //该用户是否是任务的负责人 - ProRole role = proRoleDao.selectByPrimaryKey(taskDetail.getExecutorRole()); - Boolean isBelongRole = proMemberService.userIsBelongRole(userId, role.getId(), null); - if (isBelongRole) { - for (ProSubTimeMember sTimeMember : subTimeMemberList) { - if (sTimeMember.getMemberId().longValue() == porMember.getId()) { - subTimeMember = sTimeMember; - break; - } - } - } else { - //查找任务负责人下的所有成员 - List memberList = proMemberService.selectByRole(taskDetail.getExecutorRole()); - - if (CollectionUtil.isNotEmpty(memberList)) { - boolean flag = false; - for (ProMember member : memberList) { - ProSubTimeMemberExample sTimeMemberExample = new ProSubTimeMemberExample(); - sTimeMemberExample.createCriteria().andTaskSubTimeIdEqualTo(subTimeId) - .andMemberIdEqualTo(member.getId()).andComplatedStatusEqualTo((byte) 2); - sTimeMemberExample.setOrderByClause("real_finish_time"); - List sTimeMemberList = proSubTimeMemberDao.selectByExample(sTimeMemberExample); - if (CollectionUtil.isEmpty(sTimeMemberList)) { - flag = true; - break; - } - subTimeMember = subTimeMemberList.get(0); - } - if (flag) { - subTimeMember = null; - } - } - } - } - } - - return subTimeMember; - } - - //=================================================================== - - /** - * 删除任务和所有相关信息 - */ - @Override - public void deleteTask(Long currentUserId, Long taskId) throws Exception { - //检查id是详情id还是subTimeId - ProTaskDetail taskDetail; - ProTaskSubTime subTime = taskSubTimeDao.selectByPrimaryKey(taskId); - if (ObjectUtil.isNotNull(subTime)) { - taskDetail = taskDetailDao.selectByPrimaryKey(subTime.getTaskDetailId()); - } else { - taskDetail = taskDetailDao.selectByPrimaryKey(taskId); - } - if (ObjectUtil.isNull(taskDetail)) { - throw new BaseException(CodeEnum.NOT_TASK); - } - //用户在项目中的最高权限 - int power = proRoleService.selectPowerByRoleName(currentUserId, taskDetail.getProjectId()); - if (power > 1) { - if (ObjectUtil.isNotNull(taskDetail)) { - //修改任务删除状态 - taskDetail.setRecStatus(WebConstant.REC_STATUS.Deleted.value); - taskDetailDao.updateByPrimaryKeySelective(taskDetail); - //TODO 删除任务下的子任务 - } - } else { - throw new BaseException(CodeEnum.NOT_POWER); - } - //通过智能助手发送消息 - robotService.deleteTaskRobotSend(currentUserId, taskDetail); - } - - @Override - public void deleteTaskByRoleId(Long roleId) throws Exception { - ProTaskDetailExample taskDetailExample = new ProTaskDetailExample(); - taskDetailExample.createCriteria().andExecutorRoleEqualTo(roleId); - List detailList = taskDetailDao.selectByExample(taskDetailExample); - if (CollectionUtil.isNotEmpty(detailList)) { - for (ProTaskDetail taskDetail : detailList) { - deleteTaskByTaskId(taskDetail.getId()); - } - } - } - - private void deleteTaskByTaskId(Long taskId) throws Exception { - //1、删除交付物相关信息 - taskDeliverService.deleteDeliverByTaskId(taskId); - //2、删除插件 - sysPluginDao.deleteByTaskId(taskId); -// ProTaskPluginExample pluginExample = new ProTaskPluginExample(); -// pluginExample.createCriteria().andTaskDetailIdEqualTo(taskId); -// taskPluginDao.deleteByExample(pluginExample); - //3、删除任务与成员关联表 - ProTaskMemberExample taskMemberExample = new ProTaskMemberExample(); - taskMemberExample.createCriteria().andTaskDetailIdEqualTo(taskId); - List proTaskMemberList = taskMemberDao.selectByExample(taskMemberExample); - if (CollectionUtil.isNotEmpty(proTaskMemberList)) { - for (ProTaskMember proTaskMember : proTaskMemberList) { - proTaskMember.setRecStatus((byte) 2); - taskMemberDao.updateByPrimaryKeySelective(proTaskMember); - } - } -// taskMemberDao.deleteByExample(taskMemberExample); - //4、删除任务、子任务和任务完成表 - taskDetailDao.selectTaskByDetailId(taskId); - } - - /** - * 修改任务信息 - */ - @Override - public TaskVo.NormalTask updateTaskInfo(Long currentUserId, TaskDto.UpdateTaskInfo updateTaskInfo) throws Exception { - TaskVo.NormalTask normalTask; - - ProTaskDetail taskDetail; - ProTaskSubTime taskSubTime = taskSubTimeDao.selectByPrimaryKey(updateTaskInfo.getId()); - if (ObjectUtil.isNotNull(taskSubTime)) { - taskDetail = taskDetailDao.selectByPrimaryKey(taskSubTime.getTaskDetailId()); - } else { - taskDetail = taskDetailDao.selectByPrimaryKey(updateTaskInfo.getId()); //任务详情 - } - if (ObjectUtil.isNotNull(taskDetail)) { - - SysProject project = sysProjectDao.selectByPrimaryKey(taskDetail.getProjectId()); - if (ObjectUtil.isNotNull(project)) { - //查找权限 - int power = proRoleService.selectPowerByRoleName(currentUserId, project.getId()); - //当前用户是否是此任务的负责人 - boolean flag = false; - ProRole executorRole = proRoleDao.selectByPrimaryKey(taskDetail.getExecutorRole()); - if (executorRole.getName().equalsIgnoreCase(WebConstant.ROLE_NAME.AllMember.phase)) { - flag = true; - } else { - ProMemberExample memberExample = new ProMemberExample(); - memberExample.createCriteria().andUserIdEqualTo(currentUserId).andProjectIdEqualTo(project.getId()); - List memberList = proMemberDao.selectByExample(memberExample); - if (CollectionUtil.isNotEmpty(memberList)) { - if (ObjectUtil.isNotNull(executorRole)) { - ProMemberRoleExample memberRoleExample = new ProMemberRoleExample(); - memberRoleExample.createCriteria().andRoleIdEqualTo(executorRole.getId()).andMemberIdEqualTo(memberList.get(0).getId()); - if (proMemberRoleDao.countByExample(memberRoleExample) != 0) { - flag = true; - } - } - } - } - - if (power > 1 || flag) { - //任务名 - if (StrUtil.isNotEmpty(updateTaskInfo.getName())) { - taskDetail.setName(updateTaskInfo.getName()); - } - //详情 - if (StrUtil.isNotEmpty(updateTaskInfo.getDescription())) { - taskDetail.setDescription(updateTaskInfo.getDescription()); - } - //负责人 - if (ObjectUtil.isNotNull(updateTaskInfo.getExecutorRole())) { - taskDetail.setExecutorRole(updateTaskInfo.getExecutorRole()); - } - //奖惩金额 - if (ObjectUtil.isNotNull(updateTaskInfo.getMoney())) { - taskDetail.setMoney(updateTaskInfo.getMoney()); - } - //切换模式 - if (ObjectUtil.isNotNull(updateTaskInfo.getDelay())) { - taskDetail.setDelay((byte) updateTaskInfo.getDelay()); - } - //修改任务优先级 - if (ObjectUtil.isNotNull(updateTaskInfo.getPriority())) { - taskDetail.setPriority(updateTaskInfo.getPriority()); - } - //延迟切换时间 - if (ObjectUtil.isNotNull(updateTaskInfo.getDelayTime()) && - (taskDetail.getDelay() == WebConstant.TASK_DELAY.DelayManual.value)) { - taskDetail.setDelayTime(updateTaskInfo.getDelayTime()); - } - //是否是里程碑 - 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()) || - StrUtil.isNotEmpty(updateTaskInfo.getCycle())) { - //一级任务没有时间,不能修改 -// if (taskDetail.getLevel() != 1 && taskDetail.getLevel() != 0) { - if (taskDetail.getLevel() != 0) { - changeTime(taskDetail, updateTaskInfo.getBeginTime(), updateTaskInfo.getEndTime(), project); - if (StrUtil.isNotEmpty(updateTaskInfo.getCycle())) { - taskDetail.setCycle(updateTaskInfo.getCycle()); - } - //时间赋完值后,检查开始时间是否小于结束时间。(赋值前判断太麻烦) - if (taskDetail.getBeginTime() >= taskDetail.getEndTime()) { - throw new BaseException(CodeEnum.TIME_ERROR_BEGIN); - } - //删掉旧的subTime - ProTaskSubTimeExample subTimeExample = new ProTaskSubTimeExample(); - subTimeExample.createCriteria().andTaskDetailIdEqualTo(taskDetail.getId()); - taskSubTimeDao.deleteByExample(subTimeExample); - //重新生成subTime - partTaskSubTime(taskDetail); - } - } - - //如果传入的插件不为空,先将原来的插件删除, - if (CollectionUtil.isNotEmpty(updateTaskInfo.getPlugins())) { - ProTaskPluginExample pluginExample = new ProTaskPluginExample(); - pluginExample.createCriteria().andTaskDetailIdEqualTo(taskDetail.getId()) - .andMemberRoleIdEqualTo(taskDetail.getExecutorRole()); - List pluginList = taskPluginDao.selectByExample(pluginExample); - if (CollectionUtil.isNotEmpty(pluginList)) { - pluginList.forEach(proTaskPlugin -> { - proTaskPlugin.setRecStatus((byte) 2); - taskPluginDao.updateByPrimaryKeySelective(proTaskPlugin); - }); - } - //将新的插件加入任务 - updateTaskInfo.getPlugins().forEach(taskPlugin -> { - SysPlugin sysPlugin = sysPluginDao.selectByPrimaryKey(taskPlugin); - if (ObjectUtil.isNull(sysPlugin)) { - throw new BaseException(CodeEnum.WBS_NOT_PLUGIN); - } - ProTaskPlugin plugin = new ProTaskPlugin(); - plugin.setId(snowflake.nextId()); - plugin.setTaskDetailId(taskDetail.getId()); - plugin.setPluginId(taskPlugin); - plugin.setMemberRoleId(taskDetail.getExecutorRole()); - taskPluginDao.insertSelective(plugin); - }); - } - //修改交付物信息 - if (CollectionUtil.isNotEmpty(updateTaskInfo.getDeliverList())) { - updateTaskInfo.getDeliverList().forEach(taskDeliver -> { - if (StrUtil.isNotEmpty(taskDeliver.getDeliverName())) { - if (ObjectUtil.isNotNull(taskDeliver.getDeliverId())) { - ProTaskDeliver deliver = taskDeliverDao.selectByPrimaryKey(taskDeliver.getDeliverId()); - if (ObjectUtil.isNotNull(deliver)) { - deliver.setName(taskDeliver.getDeliverName()); - taskDeliverDao.updateByPrimaryKeySelective(deliver); - } - } else { - ProTaskDeliver deliver = new ProTaskDeliver(); - deliver.setId(snowflake.nextId()); - deliver.setTaskDetailId(taskDetail.getId()); - deliver.setName(taskDeliver.getDeliverName()); - deliver.setIsInput(0); - deliver.setIsFinal(1); - taskDeliverService.saveDeliver(deliver); - } - } - }); - } - //修改输入文档信息 - if (CollectionUtil.isNotEmpty(updateTaskInfo.getInputList())) { - updateTaskInfo.getInputList().forEach(taskDeliver -> { - if (StrUtil.isNotEmpty(taskDeliver.getDeliverName())) { - if (ObjectUtil.isNotNull(taskDeliver.getDeliverId())) { - ProTaskInputDoc deliver = proTaskInputDocDao.selectByPrimaryKey(taskDeliver.getDeliverId()); - if (ObjectUtil.isNotNull(deliver)) { - deliver.setName(taskDeliver.getDeliverName()); - proTaskInputDocDao.updateByPrimaryKeySelective(deliver); - } - } else { - ProTaskInputDoc deliver = new ProTaskInputDoc(); - deliver.setId(snowflake.nextId()); - deliver.setTaskDetailId(taskDetail.getId()); - deliver.setName(taskDeliver.getDeliverName()); - deliver.setIsUpload(0); - proTaskInputDocDao.insertSelective(deliver); - } - } - }); - } - //修改项目信息 当前的项目 - 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); - } - } - //把这个任务当作父任务,如果原来任务下的父任务有值 设置为0,修改项目信息 - //taskDetail = taskDetailDao.selectByPrimaryKey(updateTaskInfo.getId()); //任务详情 - if(ObjectUtil.isNotNull(taskDetail.getParentId())){ - taskDetail.setParentId(0L); - taskDetailDao.updateByPrimaryKeySelective(taskDetail); - } - taskDetail.setId(updateTaskInfo.getId()); - taskDetail.setProjectId(updateTaskInfo.getProjectId()); - taskDetailDao.updateByPrimaryKeySelective(taskDetail); - } - } - - //修改数据 - taskDetailDao.updateByPrimaryKeySelective(taskDetail); - //修改提醒信息 - if (CollectionUtil.isNotEmpty(updateTaskInfo.getTaskRemindList())) { - //删除之前的提醒信息 - ProRemindExample proRemindExample = new ProRemindExample(); - proRemindExample.createCriteria().andSubTaskIdEqualTo(updateTaskInfo.getId()); - List proRemindList = proRemindDao.selectByExample(proRemindExample); - if (CollectionUtil.isNotEmpty(proRemindList)) { - proRemindList.forEach(proRemind -> { - proRemind.setRecStatus((byte) 2); - proRemindDao.updateByPrimaryKeySelective(proRemind); - }); - } - updateTaskInfo.getTaskRemindList().forEach(updateTaskRemind -> { - try { - taskSubTimeService.saveRemind(currentUserId, updateTaskRemind); - } catch (Exception e) { - e.printStackTrace(); - } - }); - } - //返回的任务详细信息 - Long subTimeId = taskDeliverService.isTaskOrSubTime(taskDetail.getId()); - normalTask = getTaskInfoByTaskId(currentUserId, project.getId(), subTimeId, null); - - } else { - throw new BaseException(CodeEnum.NOT_POWER); - } - } else { - throw new BaseException(CodeEnum.NOT_POWER); - } - } else { - throw new BaseException(CodeEnum.NOT_TASK); - } - //发送消息 - robotService.changeTaskRobotSend(currentUserId, normalTask); - return normalTask; - } - - private void changeTime(ProTaskDetail taskDetail, Long beginTime, Long endTime, SysProject project) { - if ((ObjectUtil.isNotNull(beginTime) && beginTime >= project.getEndTime()) || - (ObjectUtil.isNotNull(endTime) && endTime <= project.getBeginTime())) { - throw new BaseException(CodeEnum.TIME_ERROR_PROJECT); - } - - if (taskDetail.getLevel() == 2 || taskDetail.getLevel() == 1) { - //组任务不能修改时间(组任务的时间是其子任务的最早和最晚的时间) - if (taskDetail.getHasGroup() == 1) { - throw new BaseException(CodeEnum.HAS_GROUP_TIME_CHANGE); - } else { - if (ObjectUtil.isNotNull(beginTime)) { - taskDetail.setBeginTime(beginTime); - } - if (ObjectUtil.isNotNull(endTime)) { - taskDetail.setEndTime(endTime); - } - } - } else if (taskDetail.getLevel() == 3) { - ProTaskDetail parentTask = taskDetailDao.selectByPrimaryKey(taskDetail.getParentId()); - if (parentTask.getHasGroup() == 1) { - //查找组任务中的最早和最晚时间 - Long bTime = null; - Long eTime = null; - ProTaskDetailExample detailExample = new ProTaskDetailExample(); - detailExample.createCriteria().andParentIdEqualTo(parentTask.getId()); - List groupTaskList = taskDetailDao.selectByExample(detailExample); - if (CollectionUtil.isNotEmpty(groupTaskList)) { - for (ProTaskDetail groupTask : groupTaskList) { - if (groupTask.getId().longValue() == taskDetail.getId().longValue()) { - if (ObjectUtil.isNotNull(beginTime)) { - groupTask.setBeginTime(beginTime); - taskDetail.setBeginTime(beginTime); - } - if (ObjectUtil.isNotNull(endTime)) { - groupTask.setEndTime(endTime); - taskDetail.setEndTime(endTime); - } - } - if (ObjectUtil.isNull(bTime)) { - bTime = groupTask.getBeginTime(); - } - if (ObjectUtil.isNull(eTime)) { - eTime = groupTask.getEndTime(); - } - bTime = bTime < groupTask.getBeginTime() ? bTime : groupTask.getBeginTime(); - eTime = eTime > groupTask.getEndTime() ? eTime : groupTask.getEndTime(); - } - } - //如果子任务最早最晚时间和父任务不同,则修改父任务时间 - if (ObjectUtil.isNotNull(bTime) && ObjectUtil.isNotNull(eTime)) { - if (bTime != parentTask.getBeginTime().longValue() || eTime != parentTask.getEndTime().longValue()) { - parentTask.setBeginTime(bTime); - parentTask.setEndTime(eTime); - taskDetailDao.updateByPrimaryKeySelective(parentTask); - //修改父任务的subTime - ProTaskSubTimeExample subTimeExample = new ProTaskSubTimeExample(); - subTimeExample.createCriteria().andTaskDetailIdEqualTo(parentTask.getId()); - List subTimes = taskSubTimeDao.selectByExample(subTimeExample); - if (CollectionUtil.isNotEmpty(subTimes)) { - ProTaskSubTime subTime = subTimes.get(0); - subTime.setBeginTime(parentTask.getBeginTime()); - subTime.setEndTime(parentTask.getEndTime()); - taskSubTimeDao.updateByPrimaryKeySelective(subTime); - } - } - } - } else { - if (ObjectUtil.isNotNull(beginTime)) { - taskDetail.setBeginTime(beginTime); - } - if (ObjectUtil.isNotNull(endTime)) { - taskDetail.setEndTime(endTime); - } - } - } - } - - private void partTaskSubTime(ProTaskDetail taskDetail) { - //cycle为空或者组任务,只加一条数据 - if (StrUtil.isEmpty(taskDetail.getCycle()) || taskDetail.getHasGroup() == 1) { - ProTaskSubTime proTaskSubTime = new ProTaskSubTime(); - proTaskSubTime.setId(snowflake.nextId()); - proTaskSubTime.setEndTime(taskDetail.getEndTime()); - proTaskSubTime.setBeginTime(taskDetail.getBeginTime()); - proTaskSubTime.setTaskDetailId(taskDetail.getId()); - taskSubTimeDao.insertSelective(proTaskSubTime); - } else { - Date startDate = new Date(taskDetail.getBeginTime()); - Date endDate = new Date(taskDetail.getEndTime()); - List taskDateList = - NatureToDate.generateDates(taskDetail.getCycle(), startDate, endDate); - if (CollectionUtil.isEmpty(taskDateList)) { - return; - } - for (CronConstant.TaskDate taskDate : taskDateList) { - ProTaskSubTime proTaskSubTime = new ProTaskSubTime(); - proTaskSubTime.setId(snowflake.nextId()); - proTaskSubTime.setBeginTime(taskDate.getStartDate().getTime()); - proTaskSubTime.setEndTime(taskDate.getEndDate().getTime()); - proTaskSubTime.setTaskDetailId(taskDetail.getId()); - taskSubTimeDao.insertSelective(proTaskSubTime); - } - } - } - - @Override - public TaskVo.TaskInfoWithFeign getProjectIdByTaskId(Long taskId) { - TaskVo.TaskInfoWithFeign taskInfo = null; - ProTaskDetail detail; - ProTaskSubTime subTime = taskSubTimeDao.selectByPrimaryKey(taskId); - if (ObjectUtil.isNull(subTime)) { - detail = taskDetailDao.selectByPrimaryKey(taskId); - } else { - detail = taskDetailDao.selectByPrimaryKey(subTime.getTaskDetailId()); - } - - if (ObjectUtil.isNotNull(detail)) { - - taskInfo = new TaskVo.TaskInfoWithFeign(); - taskInfo.setId(detail.getId()); - taskInfo.setName(detail.getName()); - taskInfo.setProjectId(detail.getProjectId()); - - SysProject project = sysProjectDao.selectByPrimaryKey(detail.getProjectId()); - if (ObjectUtil.isNotNull(project)) { - taskInfo.setProjectName(project.getName()); - } - } - return taskInfo; - } - - @Override - public TaskVo.NormalTask updateTaskConfig(Long userId, TaskDto.UpdateTaskConfig updateTaskConfig) throws Exception { - //检查任务是否存在 - ProTaskDetail taskDetail = taskDetailDao.selectByPrimaryKey(updateTaskConfig.getTaskId()); - if (ObjectUtil.isNull(taskDetail)) { - ProTaskSubTime taskSubTime = taskSubTimeDao.selectByPrimaryKey(updateTaskConfig.getTaskId()); - if (ObjectUtil.isNull(taskSubTime)) { - throw new BaseException(CodeEnum.NOT_TASK); - } - taskDetail = taskDetailDao.selectByPrimaryKey(taskSubTime.getTaskDetailId()); - } - //查找任务原来的配置 - ProTaskShowExample taskShowExample = new ProTaskShowExample(); - taskShowExample.createCriteria().andTaskDetailIdEqualTo(taskDetail.getId()); - List proTaskShowList = proTaskShowDao.selectByExample(taskShowExample); - if (CollectionUtil.isEmpty(proTaskShowList)) { - //没有则新建配置信息 - ProTaskShow proTaskShow = new ProTaskShow(); - BeanUtil.copyProperties(updateTaskConfig, proTaskShow); - proTaskShow.setId(snowflake.nextId()); - proTaskShow.setProjectId(taskDetail.getProjectId()); - proTaskShow.setTaskDetailId(taskDetail.getId()); - proTaskShowDao.insertSelective(proTaskShow); - } else { - //有则修改 - ProTaskShow proTaskShow = proTaskShowList.get(0); - BeanUtil.copyProperties(updateTaskConfig, proTaskShow); - proTaskShowDao.updateByPrimaryKeySelective(proTaskShow); - } - return getTaskInfoByTaskId(userId, taskDetail.getProjectId(), updateTaskConfig.getTaskId(), null); - } - - @Override - public List queryAllTaskByProjectId(Long currentUserId, TaskDto.QueryAllTaskByProjectId projectIdDto) { - List taskList = new ArrayList<>(); - //1、查找一级任务 - SysProject project = sysProjectDao.selectByPrimaryKey(projectIdDto.getProjectId()); - if (ObjectUtil.isNull(project)) { - throw new BaseException(CodeEnum.NOT_PROJECT); - } - - ProTaskDetailExample proTaskDetailExample = new ProTaskDetailExample(); - proTaskDetailExample.createCriteria().andProjectIdEqualTo(projectIdDto.getProjectId()).andLevelEqualTo((byte) 1); - List firstTaskDetailList = taskDetailDao.selectByExample(proTaskDetailExample); - if (CollectionUtil.isNotEmpty(firstTaskDetailList)) { - firstTaskDetailList.forEach(firstTaskDetail -> { - TaskVo.TaskListByProjectId firstTask = taskDetailDao.getTaskById(firstTaskDetail.getId()); - List secondTaskList = taskDetailDao.getTaskByParentId(firstTaskDetail.getId(), null,null,null); - if (CollectionUtil.isNotEmpty(secondTaskList)) { - secondTaskList.forEach(secondTask -> secondTask.setParentName(firstTaskDetail.getName())); - } - firstTask.setSecondTasks(secondTaskList); - taskList.add(firstTask); - }); - } - 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); - } - } -} 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/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/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 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), ;