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),
;