From 457183cafa878c5fc2b1ffac9794f49564d164f7 Mon Sep 17 00:00:00 2001 From: zhanglei Date: Tue, 28 Jul 2026 17:12:32 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20app=E6=9F=A5=E8=AF=A2=E6=88=91=E7=9A=84?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../institution/EvalCustomerExecutor.java | 8 +++- .../institution/EvalProjectExecutor.java | 39 ++++++++++++++++++- .../client/co/institution/EvalProjectCO.java | 3 ++ .../dto/institution/EvalProjectPageQuery.java | 3 ++ .../domain/query/EvalProjectQuery.java | 2 + .../gatewayimpl/EvalProjectGatewayImpl.java | 35 ++++++++++++++++- .../mapper/EvalProjectMapper.java | 1 + .../resources/mapper/EvalProjectMapper.xml | 5 +++ 8 files changed, 93 insertions(+), 3 deletions(-) diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalCustomerExecutor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalCustomerExecutor.java index 011cecc..5f3bad9 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalCustomerExecutor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalCustomerExecutor.java @@ -24,6 +24,7 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import java.util.Arrays; +import java.util.List; import java.util.stream.Collectors; @Service @@ -89,8 +90,13 @@ public class EvalCustomerExecutor implements EvalCustomerApi { EvalCustomerQuery domainQuery = evalCustomerCmdConvertor.convertPageQueryToQ(query); domainQuery.setOrgId(institutionOrgSupport.resolveCurrentOrgId()); PageResult pageResult = evalCustomerDomainService.page(domainQuery); + List co = evalCustomerCmdConvertor.convertEListToCOList(pageResult.getRecords()); + for (EvalCustomerCO evalCustomerCO : co) { + long projectCount = evalCustomerDomainService.countProjects(Long.valueOf(evalCustomerCO.getId()), null); + evalCustomerCO.setProjectCount(projectCount); + } return PageResponse.of( - evalCustomerCmdConvertor.convertEListToCOList(pageResult.getRecords()), + co, pageResult.getTotal()); } diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalProjectExecutor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalProjectExecutor.java index b994719..5393a34 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalProjectExecutor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalProjectExecutor.java @@ -1,5 +1,6 @@ package org.qinan.safetyeval.app.executor.institution; +import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.qinan.safetyeval.app.convertor.EvalProjectCmdConvertor; @@ -92,9 +93,45 @@ public class EvalProjectExecutor implements EvalProjectApi { @Override public PageResponse page(EvalProjectPageQuery query) { EvalProjectQuery domainQuery = evalProjectCmdConvertor.convertPageQueryToQ(query); + domainQuery.setSurveyType(query.getSurveyType()); PageResult pageResult = evalProjectDomainService.page(domainQuery); + List co = evalProjectCmdConvertor.convertEListToCOList(pageResult.getRecords()); + if (!CollectionUtils.isEmpty(co)) { + if (query.getSurveyType() == 0) { + // 未完成,有可能其他人已经上传检查表(已完成),但是当前人员没有去打卡, 需要判断节点是否完成, 如完成,设置为完成 + for (EvalProjectCO evalProjectCO : co) { + int surveyType = 0; + List projectNodeCOS = JSON.parseArray(evalProjectCO.getProjectNode(), ProjectNodeCO.class); + for (ProjectNodeCO projectNodeCO : projectNodeCOS) { + if (ProjectStageEnum.SITE_SURVEY.getVal().equals(projectNodeCO.getType()) && projectNodeCO.getState() == 1) { + surveyType = 1; + break; + } + } + evalProjectCO.setSurveyType(surveyType); + } + } + if (query.getSurveyType() == 1) { + for (EvalProjectCO evalProjectCO : co) { + evalProjectCO.setSurveyType(1); + } + } + if (query.getSurveyType() == 2) { + for (EvalProjectCO evalProjectCO : co) { + int surveyType = 0; + List projectNodeCOS = JSON.parseArray(evalProjectCO.getProjectNode(), ProjectNodeCO.class); + for (ProjectNodeCO projectNodeCO : projectNodeCOS) { + if (ProjectStageEnum.SITE_SURVEY.getVal().equals(projectNodeCO.getType()) && projectNodeCO.getState() == 1) { + surveyType = 1; + break; + } + } + evalProjectCO.setSurveyType(surveyType); + } + } + } return PageResponse.of( - evalProjectCmdConvertor.convertEListToCOList(pageResult.getRecords()), + co, pageResult.getTotal()); } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProjectCO.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProjectCO.java index 00c749c..732dfbe 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProjectCO.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/institution/EvalProjectCO.java @@ -86,4 +86,7 @@ public class EvalProjectCO { @ApiModelProperty("项目阶段名称:正常/延期") private String projectPhaseName; + + @ApiModelProperty("app项目勘察类型: 0-待勘察, 1-已完成") + private int surveyType; } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalProjectPageQuery.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalProjectPageQuery.java index 36082ee..50d670b 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalProjectPageQuery.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalProjectPageQuery.java @@ -28,4 +28,7 @@ public class EvalProjectPageQuery extends BasePageQuery { @ApiModelProperty("app关键字搜素") private String keyword; + + @ApiModelProperty("app项目勘察类型: 0-待勘察, 1-已完成, 2-全部(默认)") + private int surveyType = 2; } diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/query/EvalProjectQuery.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/query/EvalProjectQuery.java index 695dc91..15e9404 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/query/EvalProjectQuery.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/query/EvalProjectQuery.java @@ -38,4 +38,6 @@ public class EvalProjectQuery { @ApiModelProperty("app关键字搜素") private String keyword; + @ApiModelProperty("app项目勘察类型: 0-待勘察, 1-已完成, 2-全部") + private int surveyType; } diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/EvalProjectGatewayImpl.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/EvalProjectGatewayImpl.java index c1f1ffc..b84974b 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/EvalProjectGatewayImpl.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/EvalProjectGatewayImpl.java @@ -14,15 +14,21 @@ import org.qinan.safetyeval.domain.query.PageResult; import org.qinan.safetyeval.infrastructure.adapter.auth.AuthUserContextAdapter; import org.qinan.safetyeval.infrastructure.convertor.EvalProjectDoConvertor; import org.qinan.safetyeval.infrastructure.dataobject.EvalProjectDO; +import org.qinan.safetyeval.infrastructure.dataobject.EvalSurveyDO; import org.qinan.safetyeval.infrastructure.mapper.EvalProjectMapper; +import org.qinan.safetyeval.infrastructure.mapper.EvalSignTaskMapper; +import org.qinan.safetyeval.infrastructure.mapper.EvalSurveyMapper; import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults; import org.qinan.safetyeval.infrastructure.support.OrgContextResolver; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import javax.annotation.Resource; import java.time.LocalDate; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -37,6 +43,10 @@ public class EvalProjectGatewayImpl implements EvalProjectGateway { @Resource private OrgContextResolver orgContextResolver; + @Autowired + private EvalSignTaskMapper evalSignTaskMapper; + @Autowired + private EvalSurveyMapper evalSurveyMapper; @Override public EvalProjectEntity save(EvalProjectEntity entity) { @@ -160,7 +170,30 @@ public class EvalProjectGatewayImpl implements EvalProjectGateway { if (StringUtils.hasText(query.getKeyword())) { wrapper.and(o -> o.like(EvalProjectDO::getProjectName, query.getKeyword()).or().like(EvalProjectDO::getProjectNo, query.getKeyword())); } - if (Boolean.TRUE.equals(query.getMyProject())) { + // app查询(已完成的勘察打卡) + List pIds = evalSurveyMapper.selectList(new LambdaQueryWrapper() + .eq(EvalSurveyDO::getPersonnelId, AuthUserContextAdapter.getCurrentUserId()) + .isNotNull(EvalSurveyDO::getSignOutTime)).stream().map(EvalSurveyDO::getProjectId) + .distinct() + .collect(Collectors.toList()); + if (query.getSurveyType() == 1) { + wrapper.in(EvalProjectDO::getId, CollectionUtils.isEmpty(pIds) ? Collections.singletonList(0L) : pIds); + } + if (query.getSurveyType() == 0) { + List myPIds = evalProjectMapper.getByPersonnelId(AuthUserContextAdapter.getCurrentUserId()); + List unfinishedIds = new ArrayList<>(); + if (!CollectionUtils.isEmpty(pIds)) { + for (Long peId : myPIds) { + if (!pIds.contains(peId)) { + unfinishedIds.add(peId); + } + } + } else { + unfinishedIds.addAll(myPIds); + } + wrapper.in(EvalProjectDO::getId, CollectionUtils.isEmpty(unfinishedIds) ? Collections.singletonList(0L) : unfinishedIds); + } + if (Boolean.TRUE.equals(query.getMyProject()) && query.getSurveyType() == 2) { wrapper.apply("JSON_CONTAINS(participants_json, JSON_OBJECT('id', {0}))", AuthUserContextAdapter.getCurrentUserId()); } applyProgressStatusFilter(wrapper, query.getProgressStatus()); diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/mapper/EvalProjectMapper.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/mapper/EvalProjectMapper.java index 878c65f..a250f79 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/mapper/EvalProjectMapper.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/mapper/EvalProjectMapper.java @@ -76,4 +76,5 @@ public interface EvalProjectMapper extends BaseMapper { */ List selectRegulatorSurveyClockInList(@Param("projectId") Long projectId); + List getByPersonnelId(@Param("currentUserId") Long currentUserId); } diff --git a/safety-eval-infrastructure/src/main/resources/mapper/EvalProjectMapper.xml b/safety-eval-infrastructure/src/main/resources/mapper/EvalProjectMapper.xml index 76ed6db..59dab8a 100644 --- a/safety-eval-infrastructure/src/main/resources/mapper/EvalProjectMapper.xml +++ b/safety-eval-infrastructure/src/main/resources/mapper/EvalProjectMapper.xml @@ -253,5 +253,10 @@ AND s.project_id = #{projectId} ORDER BY s.id ASC +