From ac25103eeb3e39f3a9fcae1b0a33aa02a24cb4c6 Mon Sep 17 00:00:00 2001 From: hyy-alt <1041001226@qq.com> Date: Thu, 29 Apr 2021 09:44:09 +0800 Subject: [PATCH 1/2] 4.29 --- .../tall/service/ProTaskDetailService.java | 1801 +++++++++++++++++ 1 file changed, 1801 insertions(+) create mode 100644 tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java diff --git a/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java b/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java new file mode 100644 index 00000000..7fc9ffee --- /dev/null +++ b/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java @@ -0,0 +1,1801 @@ +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; + //判断是任务详情id还是分解id + Long taskOrSubTime = taskDeliverService.isTaskOrSubTime(subTimeId); + ProTaskSubTime subTime = taskSubTimeDao.selectByPrimaryKey(taskOrSubTime); + 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); + } + } +} From b5487fc36c9dd5aa9cc23a7837b6382b7b781edd Mon Sep 17 00:00:00 2001 From: hyy-alt <1041001226@qq.com> Date: Thu, 29 Apr 2021 12:44:50 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E8=BF=94=E5=9B=9E=E7=88=B6=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?id=E5=92=8C=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ccsens/tall/bean/vo/TaskVo.java | 2 ++ .../tall/service/ProTaskDetailService.java | 17 +++++++++++++++-- tall/src/main/resources/application.yml | 4 ++-- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/tall/src/main/java/com/ccsens/tall/bean/vo/TaskVo.java b/tall/src/main/java/com/ccsens/tall/bean/vo/TaskVo.java index 33fd1b2e..ed605d3b 100644 --- a/tall/src/main/java/com/ccsens/tall/bean/vo/TaskVo.java +++ b/tall/src/main/java/com/ccsens/tall/bean/vo/TaskVo.java @@ -93,6 +93,8 @@ public class TaskVo { private String name; @ApiModelProperty("详细描述") private String description; + @ApiModelProperty("父任务id") + private Long parentId; @ApiModelProperty("父任务名称") private String parentName; @ApiModelProperty("所属项目id") diff --git a/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java b/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java index 36210788..6d3568e5 100644 --- a/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java +++ b/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java @@ -792,6 +792,16 @@ public class ProTaskDetailService implements IProTaskDetailService { if (ObjectUtil.isNotNull(subTimeId)) { groupTask = taskDetailDao.selectTaskByTaskId(subTimeId, detail.getId(), detail.getExecutorRole()); if (ObjectUtil.isNotNull(groupTask)) { + + ProTaskDetail proTaskDetail = taskDetailDao.selectByPrimaryKey(groupTask.getDetailId()); + if(ObjectUtil.isNotNull(proTaskDetail.getParentId())){ + groupTask.setParentId(proTaskDetail.getParentId()); + ProTaskDetail proTaskDetail1 = taskDetailDao.selectByPrimaryKey(proTaskDetail.getParentId()); + groupTask.setParentName(proTaskDetail1.getName()); + }else{ + groupTask.setParentId(proTaskDetail.getParentId()); + } + //处理查询到的任务的插件 managePlugin(currentUserId, task.getExecutorRole(), taskDetail, imitation); //任务的完成状态 @@ -1507,10 +1517,9 @@ public class ProTaskDetailService implements IProTaskDetailService { proTaskDetailExample.createCriteria().andIdEqualTo(updateTaskInfo.getParentId()).andProjectIdEqualTo(updateTaskInfo.getProjectId()); long l = taskDetailDao.countByExample(proTaskDetailExample); if (l > 0) { -// throw new BaseException(CodeEnum.NOT_TASK); taskDetail.setProjectId(updateTaskInfo.getProjectId()); taskDetail.setParentId(updateTaskInfo.getParentId()); - } else { //在的话则修改项目信息 + } else { throw new BaseException(CodeEnum.PARENT_PROJECT_NOT_MATCHING); } } else { @@ -1526,6 +1535,10 @@ public class ProTaskDetailService implements IProTaskDetailService { proTaskDetail.setParentId(0L); taskDetailDao.updateByPrimaryKeySelective(proTaskDetail); }); + + for (ProTaskDetail proTaskDetail : proTaskDetailList) { + + } } } else { //父任务id diff --git a/tall/src/main/resources/application.yml b/tall/src/main/resources/application.yml index ebc544af..b5408a3a 100644 --- a/tall/src/main/resources/application.yml +++ b/tall/src/main/resources/application.yml @@ -1,5 +1,5 @@ spring: profiles: - active: test - include: util-test,common + active: dev + include: util-dev,common