From 677042a75d518efc888da3b041cbd5e563f08257 Mon Sep 17 00:00:00 2001 From: zhanglei Date: Thu, 30 Jul 2026 11:12:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/AppEvalSignTaskController.java | 7 +++++ .../institution/EvalSignTaskExecutor.java | 27 ++++++++++++++++--- .../api/institution/EvalSignTaskApi.java | 3 +++ .../institution/EvalSignTaskStatisticsCO.java | 26 ++++++++++++++++++ 4 files changed, 60 insertions(+), 3 deletions(-) create mode 100644 safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalSignTaskStatisticsCO.java diff --git a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/app/AppEvalSignTaskController.java b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/app/AppEvalSignTaskController.java index b1033a9..d9b7135 100644 --- a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/app/AppEvalSignTaskController.java +++ b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/app/AppEvalSignTaskController.java @@ -4,6 +4,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.qinan.safetyeval.client.api.institution.EvalSignTaskApi; import org.qinan.safetyeval.client.co.institution.EvalSignTaskCO; +import org.qinan.safetyeval.client.co.institution.EvalSignTaskStatisticsCO; import org.qinan.safetyeval.client.dto.PageResponse; import org.qinan.safetyeval.client.dto.SingleResponse; import org.qinan.safetyeval.client.dto.institution.EditSignTaskSaveCmd; @@ -37,4 +38,10 @@ public class AppEvalSignTaskController { public SingleResponse signAndUpload(@RequestBody EditSignTaskSaveCmd cmd) { return evalSignTaskApi.signAndUpload(cmd); } + + @ApiOperation("签字统计") + @PostMapping("/signStatistics") + public SingleResponse signStatistics(@RequestBody EvalSignTaskPageQuery cmd) { + return evalSignTaskApi.signStatistics(cmd); + } } diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalSignTaskExecutor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalSignTaskExecutor.java index a43217d..131ce25 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalSignTaskExecutor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalSignTaskExecutor.java @@ -7,6 +7,7 @@ import org.qinan.safetyeval.client.api.institution.EvalSignTaskApi; import org.qinan.safetyeval.client.co.institution.EnumOptionCO; import org.qinan.safetyeval.client.co.institution.EvalSignTaskCO; import org.qinan.safetyeval.client.co.institution.EvalSignTaskEnumsCO; +import org.qinan.safetyeval.client.co.institution.EvalSignTaskStatisticsCO; import org.qinan.safetyeval.client.dto.PageResponse; import org.qinan.safetyeval.client.dto.SingleResponse; import org.qinan.safetyeval.client.dto.institution.EditSignTaskSaveCmd; @@ -28,6 +29,7 @@ import org.qinan.safetyeval.infrastructure.support.InstitutionOrgSupport; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.Arrays; @@ -91,8 +93,9 @@ public class EvalSignTaskExecutor implements EvalSignTaskApi { EvalSignTaskQuery domainQuery = evalSignTaskCmdConvertor.convertPageQueryToQ(query); domainQuery.setOrgId(institutionOrgSupport.resolveCurrentOrgId()); PageResult pageResult = evalSignTaskDomainService.page(domainQuery); - List co = evalSignTaskCmdConvertor.convertEListToCOList(pageResult.getRecords()); - for (EvalSignTaskCO evalSignTaskCO : co) { + List co = pageResult.getRecords().stream().map(item -> { + EvalSignTaskCO evalSignTaskCO = evalSignTaskCmdConvertor.convertEToCO(item); + evalSignTaskCO.setProjectId(String.valueOf(item.getProjectId())); EvalProjectDO evalProjectDO = evalProjectMapper.selectById(evalSignTaskCO.getProjectId()); evalSignTaskCO.setProjectName(evalProjectDO.getProjectName()); evalSignTaskCO.setNodeName(Objects.requireNonNull(ProjectStageEnum.fromVal(evalSignTaskCO.getNodeCode())).getMsg()); @@ -103,7 +106,8 @@ public class EvalSignTaskExecutor implements EvalSignTaskApi { .last("limit 1")); evalSignTaskCO.setSignerPersonnelName(evalProjectMemberDOS.get(0).getPersonnelName()); evalSignTaskCO.setSignerRoles(ProjectStageEnum.fromVals(evalProjectMemberDOS.get(0).getRole())); - } + return evalSignTaskCO; + }).collect(Collectors.toList()); return PageResponse.of( co , pageResult.getTotal()); @@ -161,4 +165,21 @@ public class EvalSignTaskExecutor implements EvalSignTaskApi { } return SingleResponse.success(true); } + + @Override + public SingleResponse signStatistics(EvalSignTaskPageQuery cmd) { + EvalSignTaskStatisticsCO evalSignTaskStatisticsCO = new EvalSignTaskStatisticsCO(); + List evalSignTaskDOS = evalSignTaskMapper.selectList(new LambdaQueryWrapper() + .eq(EvalSignTaskDO::getProjectId, cmd.getProjectId()) + .eq(EvalSignTaskDO::getSignerPersonnelId, cmd.getSignerPersonnelId())); + if (!CollectionUtils.isEmpty(evalSignTaskDOS)) { + long pendingSign = evalSignTaskDOS.stream().filter(f -> f.getTaskStatusCode() == 1).count(); + long completed = evalSignTaskDOS.stream().filter(f -> f.getTaskStatusCode() == 2).count(); + long allTasks = evalSignTaskDOS.size(); + evalSignTaskStatisticsCO.setPendingSign(Math.toIntExact(pendingSign)); + evalSignTaskStatisticsCO.setCompleted(Math.toIntExact(completed)); + evalSignTaskStatisticsCO.setAllTasks(Math.toIntExact(allTasks)); + } + return SingleResponse.success(evalSignTaskStatisticsCO); + } } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/institution/EvalSignTaskApi.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/institution/EvalSignTaskApi.java index b9d46f3..84863df 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/institution/EvalSignTaskApi.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/institution/EvalSignTaskApi.java @@ -2,6 +2,7 @@ package org.qinan.safetyeval.client.api.institution; import org.qinan.safetyeval.client.co.institution.EvalSignTaskCO; import org.qinan.safetyeval.client.co.institution.EvalSignTaskEnumsCO; +import org.qinan.safetyeval.client.co.institution.EvalSignTaskStatisticsCO; import org.qinan.safetyeval.client.dto.PageResponse; import org.qinan.safetyeval.client.dto.SingleResponse; import org.qinan.safetyeval.client.dto.institution.EditSignTaskSaveCmd; @@ -17,4 +18,6 @@ public interface EvalSignTaskApi { SingleResponse enums(); SingleResponse signAndUpload(EditSignTaskSaveCmd cmd); + + SingleResponse signStatistics(EvalSignTaskPageQuery cmd); } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalSignTaskStatisticsCO.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalSignTaskStatisticsCO.java new file mode 100644 index 0000000..463164d --- /dev/null +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalSignTaskStatisticsCO.java @@ -0,0 +1,26 @@ +package org.qinan.safetyeval.client.co.institution; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class EvalSignTaskStatisticsCO { + + /** + * 待签字数量 + */ + @ApiModelProperty("待签字数量") + private int pendingSign = 0; + + /** + * 已完成数量 + */ + @ApiModelProperty("已完成数量") + private int completed = 0; + + /** + * 全部任务数量 + */ + @ApiModelProperty("全部任务数量") + private int allTasks = 0; +}