From 4f65a8da0cb97f46f328e30bea0b1a186f0266a6 Mon Sep 17 00:00:00 2001 From: gejunhao <1421207006@qq.com> Date: Wed, 18 Dec 2024 16:05:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=9C=80=E6=B1=821218?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SysUserRoleServiceImpl.java | 2 +- .../admin/common/constant/CommonConstant.java | 10 +- .../huzhou/dao/HuzhouPlaninfoMapper.java | 10 + .../modules/huzhou/entity/HuzhouPlaninfo.java | 22 ++ .../huzhou/entity/HuzhouProjectinfo.java | 1 + .../huzhou/entity/HuzhouUserproject.java | 5 +- .../impl/HuzhouPlaninfoServiceImpl.java | 207 +++++++++++++----- .../impl/HuzhouSubProjectinfoServiceImpl.java | 63 ++++-- .../impl/HuzhouUserprojectServiceImpl.java | 5 +- .../service/impl/WorkflowServiceImpl.java | 11 +- .../modules/huzhou/vo/HuzhouPlaninfoOV.java | 5 +- 11 files changed, 260 insertions(+), 81 deletions(-) diff --git a/easy-sys/src/main/java/com/easy/admin/auth/service/impl/SysUserRoleServiceImpl.java b/easy-sys/src/main/java/com/easy/admin/auth/service/impl/SysUserRoleServiceImpl.java index 68aa417..9095ecf 100644 --- a/easy-sys/src/main/java/com/easy/admin/auth/service/impl/SysUserRoleServiceImpl.java +++ b/easy-sys/src/main/java/com/easy/admin/auth/service/impl/SysUserRoleServiceImpl.java @@ -31,7 +31,7 @@ public class SysUserRoleServiceImpl extends ServiceImpl roles) { // 根据用户id查询所在部门权限,验证是否越权 List hasRoleList = baseMapper.selectAllRoleByUserId(userId, CommonStatus.ENABLE.getCode()); - checkUltraVires(hasRoleList, roles); + //checkUltraVires(hasRoleList, roles); // 删除原权限 remove(new QueryWrapper().eq("user_id", userId)); if (Validator.isNotEmpty(roles)) { diff --git a/huzhou/src/main/java/com/easy/admin/common/constant/CommonConstant.java b/huzhou/src/main/java/com/easy/admin/common/constant/CommonConstant.java index 2fa1133..6563914 100644 --- a/huzhou/src/main/java/com/easy/admin/common/constant/CommonConstant.java +++ b/huzhou/src/main/java/com/easy/admin/common/constant/CommonConstant.java @@ -75,6 +75,14 @@ public interface CommonConstant { /**访问权限认证未通过 510*/ Integer SC_JEECG_NO_AUTHZ=510; + /**项目计划完成状态 0未开始 1进行中 2已完成*/ + String PRO_PLAN_APPLY ="1"; + String PRO_PLAN_UNFINISHED="0"; + String PRO_PLAN_FINISHED="2"; + + String PROJECTLEVEL_MAJOR="0"; + String PROJECTLEVEL_SUB="1"; + /** 登录用户Shiro权限缓存KEY前缀 */ public static String PREFIX_USER_SHIRO_CACHE = "shiro:cache:com.easy.admin.config.shiro.ShiroRealm.authorizationCache:"; /** 登录用户Token令牌缓存KEY前缀 */ @@ -572,5 +580,5 @@ public interface CommonConstant { */ public static final String SAAS_MODE_TENANT = "tenant"; //update-end---author:scott ---date::2023-09-10 for:积木报表常量---- - + } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/HuzhouPlaninfoMapper.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/HuzhouPlaninfoMapper.java index 54d9c7d..aeb781c 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/HuzhouPlaninfoMapper.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/HuzhouPlaninfoMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import com.easy.admin.modules.huzhou.entity.HuzhouPlaninfo; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import java.util.List; import java.util.Map; @@ -18,4 +19,13 @@ public interface HuzhouPlaninfoMapper extends BaseMapper { String getTaskName(@Param("projectId") String projectId,@Param("taskLevel") String taskLevel); List getIsOffline(@Param("projectId") String projectId); + + /** + * 查询出所有下级任务级别集合 + * @param projectId + * @return + */ + @Select("SELECT DISTINCT task_level FROM huzhou_planinfo WHERE project_id = #{projectId} AND superior != '0' ORDER BY task_level ASC") + //@Select("SELECT DISTINCT task_level FROM huzhou_planinfo WHERE project_id = #{projectId} ORDER BY task_level ASC") + List selectDistinctLowerTaskLevels(String projectId); } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouPlaninfo.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouPlaninfo.java index db163ce..73d2a63 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouPlaninfo.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouPlaninfo.java @@ -58,11 +58,33 @@ public class HuzhouPlaninfo extends BaseEntity implements Serializable { @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd") private Date actualEndTime; + /** + * 任务级别 + */ private String taskLevel; + + /** + * 任务文件 + */ private String taskFile; + /** + * 上级任务 + */ private String superior; + + /** + *是否完成任务 + */ private String isfinish; + + /** + * 分组字段 + */ private String groupId; + + /** + * 线下是否已完成 0未完成,1已完成 + */ private String isoffline; } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouProjectinfo.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouProjectinfo.java index 17d454d..085771c 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouProjectinfo.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouProjectinfo.java @@ -1,5 +1,6 @@ package com.easy.admin.modules.huzhou.entity; +import com.baomidou.mybatisplus.annotation.TableField; import lombok.Data; /** diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouUserproject.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouUserproject.java index 97237dc..9645658 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouUserproject.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouUserproject.java @@ -31,7 +31,10 @@ public class HuzhouUserproject implements Serializable { */ private String issubproject; - + /** + * 关联的主项目id + */ + private String majorProjectId; } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfoServiceImpl.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfoServiceImpl.java index a3cc4b1..621d89e 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfoServiceImpl.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfoServiceImpl.java @@ -1,5 +1,6 @@ package com.easy.admin.modules.huzhou.service.impl; +import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -8,20 +9,20 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.easy.admin.auth.model.SysUser; import com.easy.admin.auth.service.SysUserService; +import com.easy.admin.common.constant.CommonConstant; import com.easy.admin.common.core.common.select.Select; import com.easy.admin.common.core.exception.EasyException; -import com.easy.admin.modules.huzhou.dao.HuzhouPlaninfoHistoryMapper; import com.easy.admin.modules.huzhou.dao.HuzhouPlaninfoMapper; import com.easy.admin.modules.huzhou.dao.HuzhouPlaninfofileMapper; import com.easy.admin.modules.huzhou.dao.HuzhouProcessinfoMapper; +import com.easy.admin.modules.huzhou.dao.HuzhouSubProjectinfoMapper; import com.easy.admin.modules.huzhou.entity.*; import com.easy.admin.modules.huzhou.service.*; import com.easy.admin.modules.huzhou.vo.HuzhouProjectinfoOV; import com.easy.admin.sys.model.SysDict; import com.easy.admin.sys.service.SysDictService; import com.easy.admin.util.ShiroUtil; -import com.google.common.collect.Lists; -import groovyjarjarantlr4.v4.parse.v4ParserException; +import lombok.extern.slf4j.Slf4j; import org.activiti.engine.HistoryService; import org.activiti.engine.RuntimeService; import org.activiti.engine.TaskService; @@ -38,7 +39,6 @@ import com.easy.admin.modules.huzhou.vo.HuzhouPlaninfoOV; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.FileCopyUtils; @@ -51,9 +51,9 @@ import java.io.IOException; import java.io.InputStream; import java.math.BigDecimal; import java.math.BigInteger; +import java.math.RoundingMode; import java.text.SimpleDateFormat; import java.time.LocalDate; -import java.time.Period; import java.time.ZoneId; import java.time.temporal.ChronoUnit; import java.util.*; @@ -68,6 +68,7 @@ import java.util.stream.Collectors; */ @Service @Transactional +@Slf4j public class HuzhouPlaninfoServiceImpl extends ServiceImpl implements IHuzhouPlaninfoService { @Value(value = "${jeecg.path.upload}") private String uploadpath; @@ -96,8 +97,12 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl getPlanInfoListFromFile(MultipartFile multipartFile,String projectid) throws Exception { HashMap resHashMap = new HashMap<>(); @@ -276,57 +281,141 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl getPlanInfoMainTimelineList(String projectid) { + public ArrayList getPlanInfoMainTimelineList(String projectId) { //查询父计划 LambdaQueryWrapper planinfoLambdaQueryWrapper = new LambdaQueryWrapper<>(); - planinfoLambdaQueryWrapper.eq(HuzhouPlaninfo::getProjectId,projectid); - planinfoLambdaQueryWrapper.eq(HuzhouPlaninfo::getSuperior,"0"); + planinfoLambdaQueryWrapper.eq(HuzhouPlaninfo::getProjectId, projectId); + planinfoLambdaQueryWrapper.eq(HuzhouPlaninfo::getSuperior, "0"); planinfoLambdaQueryWrapper.orderByAsc(HuzhouPlaninfo::getTaskLevel); - List huzhouPlaninfoList = this.list(planinfoLambdaQueryWrapper); - ArrayList mapArrayList = new ArrayList<>(); - long totalCount =0; //计划总数量 - long totalFinishCount =0;//已完成的数量 - for (HuzhouPlaninfo info:huzhouPlaninfoList) { + // 查询 huzhou_planinfo 项目计划表 查询本级任务进度的信息 + List superPlanInfoList = this.list(planinfoLambdaQueryWrapper); + + // 1.判断该项目是否存在子项目 + List subProjectIds = getSubProjectIds(projectId); + if (CollectionUtil.isNotEmpty(subProjectIds)) { + log.info("存在子项目需重新计算主项目进度"); + // 2.获取所有子项目对应的任务级别 (不考虑任务本级) + List taskLevelList = planInfoMapper.selectDistinctLowerTaskLevels(projectId); + log.info("下级任务级别集合为:{}", taskLevelList); + + // 3.获取子项目的计划进度 (huzhou_planinfo) + LambdaQueryWrapper subPlanInfoWrapper = new LambdaQueryWrapper<>(); + subPlanInfoWrapper.in(HuzhouPlaninfo::getProjectId, subProjectIds); + List subPlanInfoList = this.list(subPlanInfoWrapper); + + // 4.获取主任务各阶段计划表 + LambdaQueryWrapper mainInfoWrapper = new LambdaQueryWrapper<>(); + mainInfoWrapper.eq(HuzhouPlaninfo::getProjectId, projectId); + mainInfoWrapper.orderByAsc(HuzhouPlaninfo::getTaskLevel); + List mainPlanInfoList = planInfoMapper.selectList(mainInfoWrapper); + + // 5.遍历子项目的各子级别,所有子完成则主完成 + dealMainTaskLevelIsFinish(projectId, taskLevelList, subPlanInfoList, mainPlanInfoList); + } + ArrayList resultList = new ArrayList<>(); + long totalCount = 0; //计划总数量 + long totalFinishCount = 0;//已完成的数量 + + for (HuzhouPlaninfo info:superPlanInfoList) { HuzhouPlaninfoOV huzhouPlaninfoOV = new HuzhouPlaninfoOV(); BeanUtils.copyProperties(info,huzhouPlaninfoOV); - //当前计划如果在流程中,判断是否可编辑 - HuzhouPlaninfoOV setchilddata = setchild(huzhouPlaninfoOV); - if("1".equals(setchilddata.getIsfinish())){ - String isEdit = getPlanFileApprovalInfoByPlaninfoId(setchilddata.getId()).get("isEdit"); - setchilddata.setIsEdit(isEdit); + + HuzhouPlaninfoOV setChildData = setchild(huzhouPlaninfoOV); + + //当前计划如果在流程中,判断是否可编辑 isfinish字段值含义:0未开始 1审批中 2已完成 + if(CommonConstant.PRO_PLAN_APPLY.equals(setChildData.getIsfinish())){ + String isEdit = getPlanFileApprovalInfoByPlaninfoId(setChildData.getId()).get("isEdit"); + setChildData.setIsEdit(isEdit); } String taskLevel = info.getTaskLevel(); - //查询任务整体进度情况 + //查询主任务整体进度情况 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.likeRight(HuzhouPlaninfo::getTaskLevel,taskLevel+"."); - queryWrapper.eq(HuzhouPlaninfo::getProjectId,projectid); - //所有:所有下级还要加他自己 - long count = this.count(queryWrapper)+1; + queryWrapper.eq(HuzhouPlaninfo::getProjectId,projectId); + //所有:所有下级还要加他自己 (下级阶段数+本级阶段数 1.% +1 ) + long lowerCount = this.count(queryWrapper)+1; + //查询完成的数量 - queryWrapper.eq(HuzhouPlaninfo::getIsfinish,"2"); - long finishCount = this.count(queryWrapper); - if("2".equals(info.getIsfinish())){ + queryWrapper.eq(HuzhouPlaninfo::getIsfinish, CommonConstant.PRO_PLAN_FINISHED); + long lowerFinishiCount = this.count(queryWrapper); + if( CommonConstant.PRO_PLAN_FINISHED.equals(info.getIsfinish())){ //如果自己也完成了 则加1 - finishCount++; + lowerFinishiCount++; } - totalCount+=count; - totalFinishCount+=finishCount; - BigDecimal a = new BigDecimal(count); - BigDecimal b = new BigDecimal(finishCount); - String percent = b.divide(a, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).toString(); + log.info("本阶段的完成数为:{}-----本阶段的总数为:{}",lowerFinishiCount,lowerCount); + totalCount+=lowerCount; + totalFinishCount+=lowerFinishiCount; + log.info("整体累计完成数为:{}----整体累计总数为:{}",totalFinishCount,totalCount); + // 计算子阶段的百分比 + BigDecimal a = new BigDecimal(lowerCount); + BigDecimal b = new BigDecimal(lowerFinishiCount); + + String percent = b.divide(a, 2, RoundingMode.HALF_UP) + .multiply(BigDecimal.valueOf(100)) + .toString(); percent = percent.substring(0,percent.indexOf(".")); - setchilddata.setPercent(percent); - mapArrayList.add(setchilddata); + // 设置百分比(小) + setChildData.setPercent(percent); + resultList.add(setChildData); } + // 设置整体百分比 String totalPercent="0"; if(totalCount>0){ - totalPercent = new BigDecimal(totalFinishCount).divide(new BigDecimal(totalCount), 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).toString(); + totalPercent = new BigDecimal(totalFinishCount) + .divide(new BigDecimal(totalCount), 2, RoundingMode.HALF_UP) + .multiply(BigDecimal.valueOf(100)) + .toString(); totalPercent = totalPercent.substring(0,totalPercent.indexOf(".")); - mapArrayList.get(0).setTotalPercent(totalPercent); - }else{ - totalPercent="0"; + resultList.get(0).setTotalPercent(totalPercent); } - return mapArrayList; + return resultList; + } + + private void dealMainTaskLevelIsFinish(String projectId, List taskLevelList, List subPlanInfoList, List mainPlanInfoList) { + for (String taskLevel : taskLevelList) { + // 检查该 taskLevel 下的所有子项目是否都已完成 + boolean allSubTasksFinished = subPlanInfoList.stream() + .filter(info -> taskLevel.equals(info.getTaskLevel())) // 过滤出当前 taskLevel 的子项目 + .allMatch(info -> "2".equals(info.getIsfinish())); // 检查是否所有子项目的该 taskLevel 已完成 + + if (allSubTasksFinished) { + // 更新主项目的对应 taskLevel 的 isFinish 状态为 2(已完成) + mainPlanInfoList.stream() + .filter(info -> taskLevel.equals(info.getTaskLevel())) + .findFirst() + // 处于正在执行中暂不考虑(后续根据要求再加即可) + .ifPresent(mainProject -> { + mainProject.setIsfinish(CommonConstant.PRO_PLAN_FINISHED); + this.updateById(mainProject); + log.info("更新主项目 {} 的 taskLevel {} 为已完成", projectId, taskLevel); +// if (!"1".equals(mainProject.getIsfinish())) { +// } + }); + } else { + mainPlanInfoList.stream() + .filter(info -> taskLevel.equals(info.getTaskLevel())) + .findFirst() + .ifPresent(mainProject -> { + mainProject.setIsfinish(CommonConstant.PRO_PLAN_UNFINISHED); + this.updateById(mainProject); + log.info("更新主项目 {} 的 taskLevel {} 为未完成", projectId, taskLevel); +// if (!"1".equals(mainProject.getIsfinish())) { +// } + }); + } + } + } + + private List getSubProjectIds(String projectId) { + LambdaQueryWrapper userProjectWrapper = new LambdaQueryWrapper<>(); + userProjectWrapper.eq(HuzhouSubProjectinfo::getProjectId, projectId) + .select(HuzhouSubProjectinfo::getId); + List subProjectInfos = subProjectinfoService.list(userProjectWrapper); + List subProjectIds = subProjectInfos + .stream().map(HuzhouSubProjectinfo::getId) + .collect(Collectors.toList()); + log.info("该主项目id为:{} 子项目数量为:{} 子项目id集合为:{}", projectId,subProjectIds.size(),subProjectIds); + return subProjectIds != null ? subProjectIds : new ArrayList<>(); } @Override @@ -560,14 +649,17 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl hashMap =new HashMap<>(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(HuzhouProcessinfo::getProjectid,planinfoid); + //0已作废,1流程中,2已结束 queryWrapper.eq(HuzhouProcessinfo::getProcessstatus,"1"); + // 查询处于流程中的项目查询:huzhou_processinfo表 HuzhouProcessinfo huzhouProcessinfo = processinfoMapper.selectOne(queryWrapper); String processInstanceId = huzhouProcessinfo.getProcessinstanceid(); + // 工作流引擎 List list = historyService.createHistoricTaskInstanceQuery() .processInstanceId(processInstanceId) .orderByTaskCreateTime().desc().list(); String taskId=list.get(0).getId(); - + log.info("name:{}",list.get(0).getName()); // //根据流程实例查询当前流所在位置 List taskList = taskService.createTaskQuery() .processInstanceId(processInstanceId) @@ -849,27 +941,30 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl mapArrayList = new ArrayList<>(); String taskLevel = planinfoOV.getTaskLevel(); - HuzhouPlaninfo planinfo = new HuzhouPlaninfo(); - BeanUtils.copyProperties(planinfoOV,planinfo); - List childTaskBySuperior = planinfoMapper.getChildTaskBySuperior(planinfo); -// LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); -// queryWrapper.eq(HuzhouPlaninfo::getSuperior,taskLevel.toString()); -// queryWrapper.eq(HuzhouPlaninfo::getProjectId,planinfoOV.getProjectId()); -//// queryWrapper.orderByAsc(HuzhouPlaninfo::getTaskLevel); -// List huzhouPlaninfoList = this.list(queryWrapper); + HuzhouPlaninfo planInfo = new HuzhouPlaninfo(); + BeanUtils.copyProperties(planinfoOV,planInfo); + // 根据上级任务获取子任务 + List childTaskBySuperior = planInfoMapper.getChildTaskBySuperior(planInfo); + log.info("本级任务级别为{},该任务的下级任务数量为{}",taskLevel,childTaskBySuperior.size()); + if(childTaskBySuperior.size()!=0){ for(HuzhouPlaninfo childInfo:childTaskBySuperior){ - HuzhouPlaninfoOV huzhouPlaninfoOV = new HuzhouPlaninfoOV(); - BeanUtils.copyProperties(childInfo,huzhouPlaninfoOV); - HuzhouPlaninfoOV setchildmap = setchild(huzhouPlaninfoOV); - mapArrayList.add(setchildmap); + HuzhouPlaninfoOV huzhouPlanInfoOV = new HuzhouPlaninfoOV(); + BeanUtils.copyProperties(childInfo,huzhouPlanInfoOV); + HuzhouPlaninfoOV setChildMap = setchild(huzhouPlanInfoOV); + mapArrayList.add(setChildMap); + log.info("当前添加的下级任务名称为:{},{}",setChildMap.getTaskName(),setChildMap.getTaskLevel()); } + // 封装下级任务 planinfoOV.setChildren(mapArrayList); } return planinfoOV; @@ -998,11 +1093,11 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl query = new LambdaQueryWrapper<>(new HuzhouPlaninfo()) .in(HuzhouPlaninfo::getProjectId,projectIds) .select(HuzhouPlaninfo::getProjectId,HuzhouPlaninfo::getId); - List planInfoList=planinfoMapper.selectList(query); + List planInfoList= planInfoMapper.selectList(query); List planIds = planInfoList.stream().map(x -> x.getId()).collect(Collectors.toList()); List result= new ArrayList<>(); if(planIds.size()!=0){ - result = planinfoMapper.selectBatchIds(planIds); + result = planInfoMapper.selectBatchIds(planIds); } return result; @@ -1028,13 +1123,13 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl query=new LambdaUpdateWrapper<>(); query.eq(HuzhouPlaninfo::getProjectId,projectId); - int result = planinfoMapper.selectList(query).isEmpty() ? 0 : planinfoMapper.selectList(query).size(); + int result = planInfoMapper.selectList(query).isEmpty() ? 0 : planInfoMapper.selectList(query).size(); return result; } @Override public Integer getStartedProjectNum(List projectIds) { - Integer result = planinfoMapper.getStartedProjectNum(projectIds); + Integer result = planInfoMapper.getStartedProjectNum(projectIds); return result; } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouSubProjectinfoServiceImpl.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouSubProjectinfoServiceImpl.java index e957064..07138d8 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouSubProjectinfoServiceImpl.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouSubProjectinfoServiceImpl.java @@ -1,17 +1,15 @@ package com.easy.admin.modules.huzhou.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.easy.admin.common.constant.CommonConstant; import com.easy.admin.common.core.exception.EasyException; import com.easy.admin.modules.huzhou.dao.HuzhouSubProjectinfoMapper; -import com.easy.admin.modules.huzhou.entity.HuzhouPlaninfo; -import com.easy.admin.modules.huzhou.entity.HuzhouProjectinfo; -import com.easy.admin.modules.huzhou.entity.HuzhouSubProjectinfo; -import com.easy.admin.modules.huzhou.service.IHuzhouPlaninfoService; -import com.easy.admin.modules.huzhou.service.IHuzhouProjectinfoService; -import com.easy.admin.modules.huzhou.service.IHuzhouSubProjectinfoService; -import com.easy.admin.modules.huzhou.service.IHuzhouUserprojectService; +import com.easy.admin.modules.huzhou.entity.*; +import com.easy.admin.modules.huzhou.service.*; import com.easy.admin.modules.huzhou.vo.HuzhouPlaninfoOV; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; @@ -21,11 +19,12 @@ import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; +import java.util.regex.Pattern; import java.util.stream.Collectors; @Service @Transactional - +@Slf4j public class HuzhouSubProjectinfoServiceImpl extends ServiceImpl implements IHuzhouSubProjectinfoService { @Autowired @@ -41,21 +40,55 @@ public class HuzhouSubProjectinfoServiceImpl extends ServiceImpl planInfoMainTimelineList = planinfoService.getPlanInfoMainTimelineList(projectInfoId); + String mainProjectId = subprojectinfo.getId(); + ArrayList planInfoMainTimelineList = planinfoService.getPlanInfoMainTimelineList(mainProjectId); String isFinish = planInfoMainTimelineList.get(0).getIsfinish(); - // 项目立项阶段完成才能添加子任务 1完成 0未完成 - if (isFinish.equals("1")){ - subprojectinfo.setProjectId(projectInfoId); + // "项目立项阶段"完成才能添加子任务 + if (isFinish.equals(CommonConstant.PRO_PLAN_FINISHED)){ + // 把主项目的id 设置为子项目的projectId + subprojectinfo.setProjectId(mainProjectId); subprojectinfo.setId(null); - subprojectinfo.setStage("2"); + //项目计划执行中 5 + subprojectinfo.setStage("5"); //setIsModify 默认不能为空 subprojectinfo.setIsmodify(""); save(subprojectinfo); - userprojectService.saveFromProject(subprojectinfo,"1"); + log.info("新增子项目成功!"); + log.info("新增的子项目projectId为:{}---父项目projectId为:{}",subprojectinfo.getId(),mainProjectId); + userprojectService.saveFromProject(subprojectinfo,CommonConstant.PROJECTLEVEL_SUB); + + //查询父计划 同步主任务阶段 + LambdaQueryWrapper planinfoLambdaQueryWrapper = new LambdaQueryWrapper<>(); + planinfoLambdaQueryWrapper.eq(HuzhouPlaninfo::getProjectId,mainProjectId); + planinfoLambdaQueryWrapper.orderByAsc(HuzhouPlaninfo::getTaskLevel); + // 查询 huzhou_planinfo 表 + List huzhouPlaninfoList = planinfoService.list(planinfoLambdaQueryWrapper); + // huzhou_sub_projectinfo中获取子项目的id + String subProjectId = subprojectinfo.getId(); + // 封装子任务信息 + List updatedHuzhouPlaninfoList = huzhouPlaninfoList.stream() + .peek(item -> { + item.setProjectId(subProjectId); + item.setId(null); + // 子项目默认1阶段全部完成 + if (item.getTaskLevel() != null && PATTERN_PREFIX_1.matcher(item.getTaskLevel()).find()){ + item.setIsfinish(CommonConstant.PRO_PLAN_FINISHED); + log.info("阶段:{},完成情况:{}",item.getTaskLevel(),item.getIsfinish()); + }else { + item.setIsfinish(CommonConstant.PRO_PLAN_UNFINISHED); + } + }) + .collect(Collectors.toList()); + log.info("saveBatch数量 {} ,updatedHuzhouPlaninfoList:{} " ,updatedHuzhouPlaninfoList.size(),updatedHuzhouPlaninfoList); + planinfoService.saveBatch(updatedHuzhouPlaninfoList); + }else { throw new EasyException("主项目立项阶段未完成,新增子项目失败"); } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouUserprojectServiceImpl.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouUserprojectServiceImpl.java index 2e0a712..4483450 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouUserprojectServiceImpl.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouUserprojectServiceImpl.java @@ -191,8 +191,9 @@ public class HuzhouUserprojectServiceImpl extends ServiceImpl processinfosDb = processinfoService.list(queryWrapper); + if (processinfosDb.size()>0){ + HuzhouProcessinfo huzhouProcessinfo = processinfosDb.get(0); + processInstanceId=huzhouProcessinfo.getProcessinstanceid(); + } } List list = historyService.createHistoricTaskInstanceQuery() .processInstanceId(processInstanceId) diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/vo/HuzhouPlaninfoOV.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/vo/HuzhouPlaninfoOV.java index 16cecc5..99f0425 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/vo/HuzhouPlaninfoOV.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/vo/HuzhouPlaninfoOV.java @@ -8,7 +8,7 @@ import java.util.List; public class HuzhouPlaninfoOV extends HuzhouPlaninfo { private List children; /** - * 项目进度 + * 项目进度(小) */ private String percent; /** @@ -19,6 +19,9 @@ public class HuzhouPlaninfoOV extends HuzhouPlaninfo { * 任务完成节点 */ private String status; + /** + * 项目进度(整体) + */ private String totalPercent; private String isEdit; }