From 68dee8a936e86ea6945e912e068a09fdfd208bbe Mon Sep 17 00:00:00 2001 From: WendyYang Date: Thu, 21 Mar 2024 10:03:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=B3=BB=E7=BB=9F=E6=9B=BF?= =?UTF-8?q?=E4=BB=A3=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProjectGovSystemReplaceInfoController.java | 33 ++++++++ .../manage/ProjectGovSystemReplaceInfoManage.java | 95 ++++++++++++++++++++++ .../model/vo/UnitProjectGovSystemReplaceVO.java | 32 ++++++++ .../workbench/controller/WorkbenchController.java | 15 +++- .../pm/api/workbench/manage/WorkbenchManage.java | 65 +++++++++++++-- .../api/workbench/model/vo/ProjectTotalViewVO.java | 33 ++++++++ 6 files changed, 261 insertions(+), 12 deletions(-) create mode 100644 hz-pm-api/src/main/java/com/hz/pm/api/projectlib/controller/ProjectGovSystemReplaceInfoController.java create mode 100644 hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ProjectGovSystemReplaceInfoManage.java create mode 100644 hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/vo/UnitProjectGovSystemReplaceVO.java create mode 100644 hz-pm-api/src/main/java/com/hz/pm/api/workbench/model/vo/ProjectTotalViewVO.java diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/controller/ProjectGovSystemReplaceInfoController.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/controller/ProjectGovSystemReplaceInfoController.java new file mode 100644 index 0000000..f96f63a --- /dev/null +++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/controller/ProjectGovSystemReplaceInfoController.java @@ -0,0 +1,33 @@ +package com.hz.pm.api.projectlib.controller; + +import com.hz.pm.api.projectlib.manage.ProjectGovSystemReplaceInfoManage; +import com.hz.pm.api.projectlib.model.vo.UnitProjectGovSystemReplaceVO; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * ProjectGovSystemReplaceInfoController + *

+ * + * @author WendyYang + * @since 15:38 2024/3/20 + */ +@RestController +@RequestMapping("/api/v1/system-replace-info") +@RequiredArgsConstructor +public class ProjectGovSystemReplaceInfoController { + + private final ProjectGovSystemReplaceInfoManage systemReplaceInfoManage; + + @GetMapping("/all") + public List all(@RequestParam(required = false) String targetSystem) { + return systemReplaceInfoManage.systemReplaceInfos(targetSystem); + } + +} diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ProjectGovSystemReplaceInfoManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ProjectGovSystemReplaceInfoManage.java new file mode 100644 index 0000000..51a7df7 --- /dev/null +++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ProjectGovSystemReplaceInfoManage.java @@ -0,0 +1,95 @@ +package com.hz.pm.api.projectlib.manage; + +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.hz.pm.api.projectlib.entity.ProjectGovSystemReplaceInfos; +import com.hz.pm.api.projectlib.model.dto.GovSystemReplaceInfoDTO; +import com.hz.pm.api.projectlib.model.entity.Project; +import com.hz.pm.api.projectlib.model.vo.UnitProjectGovSystemReplaceVO; +import com.hz.pm.api.projectlib.model.vo.UnitProjectGovSystemReplaceVO.ProjectGovSystemReplaceVO; +import com.hz.pm.api.projectlib.service.IProjectGovSystemReplaceInfosService; +import com.hz.pm.api.projectlib.service.IProjectService; +import com.hz.pm.api.user.helper.MhUnitCache; +import com.hz.pm.api.user.model.dto.UnitDTO; +import com.ningdatech.basic.util.CollUtils; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.*; +import java.util.stream.Collectors; + +/** + *

+ * ProjectGovSystemReplaceInfoManage + *

+ * + * @author WendyYang + * @since 15:40 2024/3/20 + */ +@Component +@RequiredArgsConstructor +public class ProjectGovSystemReplaceInfoManage { + + private final IProjectGovSystemReplaceInfosService systemReplaceInfosService; + private final IProjectService projectService; + private final MhUnitCache mhUnitCache; + + + public List systemReplaceInfos(String targetSystem) { + LambdaQueryWrapper pgsriQuery; + if (StrUtil.isNotBlank(targetSystem)) { + pgsriQuery = Wrappers.lambdaQuery(ProjectGovSystemReplaceInfos.class) + .like(ProjectGovSystemReplaceInfos::getTargetSystem, targetSystem); + } else { + pgsriQuery = null; + } + List systemReplaceInfos = systemReplaceInfosService.list(pgsriQuery); + if (systemReplaceInfos.isEmpty()) { + return Collections.emptyList(); + } + Map> projectSystemMap = CollUtils.group(systemReplaceInfos, + ProjectGovSystemReplaceInfos::getProjectId); + List projects = projectService.listByIds(projectSystemMap.keySet()); + Map> unitProjectMap = projects.stream() + .filter(w -> NumberUtil.isNumber(w.getBuildOrgCode())) + .collect(Collectors.groupingBy(w -> Long.parseLong(w.getBuildOrgCode()))); + List retList = new ArrayList<>(); + unitProjectMap.forEach((unitId, tmpProjects) -> { + UnitDTO unit = mhUnitCache.getById(unitId); + UnitProjectGovSystemReplaceVO item = new UnitProjectGovSystemReplaceVO(); + retList.add(item); + item.setUnitName(unit == null ? "" : unit.getName()); + item.setProjectSystemReplaces(new ArrayList<>()); + for (Project proj : tmpProjects) { + List replaceInfos = projectSystemMap.get(proj.getId()); + if (replaceInfos == null) { + continue; + } + ProjectGovSystemReplaceVO projectSystem = new ProjectGovSystemReplaceVO(); + projectSystem.setProjectName(proj.getProjectName()); + item.getProjectSystemReplaces().add(projectSystem); + Map> replaceInfoGroup = CollUtils.group(replaceInfos, + ProjectGovSystemReplaceInfos::getBatchNo); + List replaceInfoList = replaceInfoGroup.entrySet().stream() + .sorted(Comparator.comparingInt(Map.Entry::getKey)) + .map(w -> { + List currBatchValues = w.getValue(); + ProjectGovSystemReplaceInfos firstReplaceInfo = currBatchValues.get(0); + GovSystemReplaceInfoDTO replaceInfo = new GovSystemReplaceInfoDTO(); + replaceInfo.setReplaceType(firstReplaceInfo.getReplaceType()); + replaceInfo.setTargetSystemName(firstReplaceInfo.getTargetSystem()); + List sourceSystemNames = CollUtils.fieldList(currBatchValues, + ProjectGovSystemReplaceInfos::getSourceSystem); + replaceInfo.setSourceSystemNames(sourceSystemNames); + return replaceInfo; + }).collect(Collectors.toList()); + projectSystem.setReplaceSystems(replaceInfoList); + + } + }); + return retList; + } + +} diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/vo/UnitProjectGovSystemReplaceVO.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/vo/UnitProjectGovSystemReplaceVO.java new file mode 100644 index 0000000..d0557f9 --- /dev/null +++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/vo/UnitProjectGovSystemReplaceVO.java @@ -0,0 +1,32 @@ +package com.hz.pm.api.projectlib.model.vo; + +import com.hz.pm.api.projectlib.model.dto.GovSystemReplaceInfoDTO; +import lombok.Data; + +import java.util.List; + +/** + *

+ * ProjectGovSystemReplaceVO + *

+ * + * @author WendyYang + * @since 15:47 2024/3/20 + */ +@Data +public class UnitProjectGovSystemReplaceVO { + + private String unitName; + + private List projectSystemReplaces; + + @Data + public static class ProjectGovSystemReplaceVO { + + private String projectName; + + private List replaceSystems; + + } + +} diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/workbench/controller/WorkbenchController.java b/hz-pm-api/src/main/java/com/hz/pm/api/workbench/controller/WorkbenchController.java index 2f3d53a..64c3f49 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/workbench/controller/WorkbenchController.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/workbench/controller/WorkbenchController.java @@ -1,8 +1,9 @@ package com.hz.pm.api.workbench.controller; -import com.ningdatech.log.annotation.WebLog; import com.hz.pm.api.workbench.manage.WorkbenchManage; +import com.hz.pm.api.workbench.model.vo.ProjectTotalViewVO; import com.hz.pm.api.workbench.model.vo.WorkbenchVO; +import com.ningdatech.log.annotation.WebLog; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; @@ -12,6 +13,7 @@ import java.time.LocalDate; /** * 工作台前端控制器 + * * @author ZPF * @since 2023/03/17 15:35 */ @@ -28,7 +30,7 @@ public class WorkbenchController { * @return \ */ @GetMapping - public WorkbenchVO workbench(@RequestParam(required = false) Integer year){ + public WorkbenchVO workbench(@RequestParam(required = false) Integer year) { if (year == null) { year = LocalDate.now().getYear(); } @@ -38,7 +40,14 @@ public class WorkbenchController { @ApiOperation(value = "催办", notes = "催办") @PostMapping("/urging/{recordId}") @WebLog("催办") - public String urging(@PathVariable Long recordId){ + public String urging(@PathVariable Long recordId) { return workbenchManage.urging(recordId); } + + @GetMapping("/projectTotalView") + @ApiOperation("获取项目总览") + public ProjectTotalViewVO projectTotalView(@RequestParam(required = false) Long unitId) { + return workbenchManage.projectTotalView(unitId); + } + } diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/workbench/manage/WorkbenchManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/workbench/manage/WorkbenchManage.java index 2a80574..336ff78 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/workbench/manage/WorkbenchManage.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/workbench/manage/WorkbenchManage.java @@ -3,6 +3,9 @@ package com.hz.pm.api.workbench.manage; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.StopWatch; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Assert; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -10,10 +13,15 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.google.common.collect.Sets; import com.hz.pm.api.common.helper.UserInfoHelper; import com.hz.pm.api.common.model.constant.BizConst; +import com.hz.pm.api.common.model.entity.KeyValDTO; +import com.hz.pm.api.common.util.DecimalUtil; import com.hz.pm.api.projectdeclared.manage.DefaultDeclaredProjectManage; +import com.hz.pm.api.projectlib.entity.ProjectGovSystemReplaceInfos; import com.hz.pm.api.projectlib.manage.ProjectLibManage; import com.hz.pm.api.projectlib.model.entity.Project; +import com.hz.pm.api.projectlib.model.enumeration.GovSystemReplaceTypeEnum; import com.hz.pm.api.projectlib.model.req.ProjectListReq; +import com.hz.pm.api.projectlib.service.IProjectGovSystemReplaceInfosService; import com.hz.pm.api.projectlib.service.IProjectService; import com.hz.pm.api.sys.enumeration.ProjectEarlyWarningStatusEnum; import com.hz.pm.api.sys.manage.EarlyWarningManage; @@ -29,9 +37,11 @@ import com.hz.pm.api.todocenter.manage.TodoCenterManage; import com.hz.pm.api.todocenter.model.req.ToBeProcessedReq; import com.hz.pm.api.todocenter.model.vo.TodoCenterStatisticsVO; import com.hz.pm.api.todocenter.model.vo.TodoVO; +import com.hz.pm.api.user.helper.MhUnitCache; import com.hz.pm.api.user.security.model.UserFullInfoDTO; import com.hz.pm.api.user.util.LoginUserUtil; import com.hz.pm.api.workbench.converter.WorkbenchConverter; +import com.hz.pm.api.workbench.model.vo.ProjectTotalViewVO; import com.hz.pm.api.workbench.model.vo.WorkbenchVO; import com.hz.pm.api.workbench.model.vo.WorkbenchVO.WarningStatistics; import com.ningdatech.basic.model.PageVo; @@ -45,6 +55,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; +import java.math.BigDecimal; import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; import java.util.*; @@ -64,24 +75,17 @@ import java.util.stream.Collectors; public class WorkbenchManage { private final TodoCenterManage todoCenterManage; - private final DefaultDeclaredProjectManage defaultDeclaredProjectManage; - private final IEarlyWarningRecordsService earlyWarningRecordsService; - private final IEarlyWarningService earlyWarningService; - private final IProjectEarlyWarningService projectEarlyWarningService; - private final NoticeManage noticeManage; - private final UserInfoHelper userInfoHelper; - private final ProjectLibManage projectLibManage; - private final EarlyWarningManage earlyWarningManage; - private final IProjectService projectService; + private final MhUnitCache mhUnitCache; + private final IProjectGovSystemReplaceInfosService systemReplaceInfosService; public WorkbenchVO getWorkbenchData(Integer year) { WorkbenchVO res = new WorkbenchVO(); @@ -349,4 +353,47 @@ public class WorkbenchManage { return "催办成功了" + employees.length + "个人"; } + public ProjectTotalViewVO projectTotalView(Long unitId) { + ProjectTotalViewVO retDetail = new ProjectTotalViewVO(); + if (unitId == null) { + unitId = LoginUserUtil.loginUserDetail().getMhUnitId(); + } + LambdaQueryWrapper query = Wrappers.lambdaQuery(Project.class) + .select(Project::getReviewAmount, Project::getApprovalAmount, Project::getId) + .eq(Project::getNewest, Boolean.TRUE); + List viewUnitIds = mhUnitCache.getChildrenIdsRecursion(unitId); + viewUnitIds.add(unitId); + query.in(Project::getBuildOrgCode, CollUtils.convert(viewUnitIds, String::valueOf)); + List projects = projectService.list(query); + if (projects.isEmpty()) { + return retDetail; + } + BigDecimal approvalAmount = DecimalUtil.sum(projects, Project::getApprovalAmount); + BigDecimal reviewAmount = DecimalUtil.sum(projects, Project::getReviewAmount); + retDetail.setTotalExecuteAmount(BigDecimal.ZERO); + retDetail.setTotalApprovalAmount(approvalAmount); + retDetail.setTotalReviewAmount(reviewAmount); + Wrapper pgsriQuery = Wrappers.lambdaQuery(ProjectGovSystemReplaceInfos.class) + .in(ProjectGovSystemReplaceInfos::getProjectId, + CollUtils.fieldList(projects, Project::getId)); + List systemReplaceInfos = systemReplaceInfosService.list(pgsriQuery); + Map typeCountMap = systemReplaceInfos.stream() + .map(w -> StrUtil.split(w.getReplaceType(), ",")) + .flatMap(Collection::stream) + .collect(Collectors.groupingBy(w -> { + if (NumberUtil.isNumber(w)) { + return "其他"; + } else { + return GovSystemReplaceTypeEnum.get(Integer.parseInt(w)) + .flatMap(t -> Optional.of(t.getVal())) + .orElse("其他"); + } + }, Collectors.counting())); + List> systemTypes = typeCountMap.entrySet().stream() + .map(w -> KeyValDTO.of(w.getKey(), w.getValue().intValue())) + .collect(Collectors.toList()); + retDetail.setSystemTypes(systemTypes); + return retDetail; + } + } diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/workbench/model/vo/ProjectTotalViewVO.java b/hz-pm-api/src/main/java/com/hz/pm/api/workbench/model/vo/ProjectTotalViewVO.java new file mode 100644 index 0000000..eff8cd3 --- /dev/null +++ b/hz-pm-api/src/main/java/com/hz/pm/api/workbench/model/vo/ProjectTotalViewVO.java @@ -0,0 +1,33 @@ +package com.hz.pm.api.workbench.model.vo; + +import com.hz.pm.api.common.model.entity.KeyValDTO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +/** + *

+ * ProjectTotalViewVO + *

+ * + * @author WendyYang + * @since 11:54 2024/3/20 + */ +@Data +public class ProjectTotalViewVO { + + @ApiModelProperty("系统类型(替代类型)") + private List> systemTypes; + + @ApiModelProperty("评审金额") + private BigDecimal totalReviewAmount; + + @ApiModelProperty("下达金额") + private BigDecimal totalApprovalAmount; + + @ApiModelProperty("执行金额") + private BigDecimal totalExecuteAmount; + +}