From 29526b84319b99e6eeae990a306d1468b9bf811a Mon Sep 17 00:00:00 2001 From: zhanglei Date: Mon, 3 Aug 2026 11:25:07 +0800 Subject: [PATCH 1/3] =?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/AppEvalProjectController.java | 7 +- .../app/AppOrgPersonnelController.java | 2 +- .../institution/EvalProjectExecutor.java | 110 +++++++++++++++++- .../institution/EvalSurveyExecutor.java | 3 + .../api/institution/EvalProjectApi.java | 2 + .../client/co/institution/EvalProjectCO.java | 3 + 6 files changed, 121 insertions(+), 6 deletions(-) diff --git a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/app/AppEvalProjectController.java b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/app/AppEvalProjectController.java index 430d4e1..abb3f88 100644 --- a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/app/AppEvalProjectController.java +++ b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/app/AppEvalProjectController.java @@ -33,11 +33,10 @@ public class AppEvalProjectController { return evalProjectApi.get(Long.parseLong(id)); } - @ApiOperation("分页项目列表") + @ApiOperation("我的项目列表") @GetMapping("/page") - public PageResponse page(@Validated EvalProjectPageQuery query) { - query.setMyProject(true); - return evalProjectApi.page(query); + public PageResponse myPage(@Validated EvalProjectPageQuery query) { + return evalProjectApi.myPage(query); } @ApiOperation("我的项目统计") diff --git a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/app/AppOrgPersonnelController.java b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/app/AppOrgPersonnelController.java index ff6d326..59433ea 100644 --- a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/app/AppOrgPersonnelController.java +++ b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/app/AppOrgPersonnelController.java @@ -20,7 +20,7 @@ import java.math.BigDecimal; */ @Api(tags = "移动端人员信息管理") @RestController -@RequestMapping("/safetyEval/app/app/org-personnel") +@RequestMapping("/safetyEval/app/org-personnel") public class AppOrgPersonnelController { @Resource 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 d10a01a..468f28c 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,6 +1,7 @@ package org.qinan.safetyeval.app.executor.institution; import com.alibaba.fastjson2.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.qinan.safetyeval.app.convertor.EvalProjectCmdConvertor; @@ -24,9 +25,17 @@ import org.qinan.safetyeval.domain.service.EvalProjectDomainService; import org.qinan.safetyeval.domain.waring.model.EvalProjectProcessWaringE; import org.qinan.safetyeval.infrastructure.adapter.ThreadLocalUserInfoAdapter; import org.qinan.safetyeval.infrastructure.adapter.auth.AuthUserContextAdapter; +import org.qinan.safetyeval.infrastructure.convertor.EvalProjectDoConvertor; +import org.qinan.safetyeval.infrastructure.dataobject.EvalCustomerDO; +import org.qinan.safetyeval.infrastructure.dataobject.EvalProjectDO; +import org.qinan.safetyeval.infrastructure.dataobject.EvalProjectMemberDO; +import org.qinan.safetyeval.infrastructure.dataobject.EvalSurveyDO; +import org.qinan.safetyeval.infrastructure.mapper.EvalCustomerMapper; import org.qinan.safetyeval.infrastructure.mapper.EvalProjectMapper; -import org.qinan.safetyeval.infrastructure.support.InstitutionOrgSupport; +import org.qinan.safetyeval.infrastructure.mapper.EvalProjectMemberMapper; +import org.qinan.safetyeval.infrastructure.mapper.EvalSurveyMapper; import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults; +import org.qinan.safetyeval.infrastructure.support.InstitutionOrgSupport; import org.qinan.safetyeval.infrastructure.support.ProjectNoGenerator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; @@ -34,9 +43,13 @@ import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; import java.time.LocalDate; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; @Service @@ -62,6 +75,14 @@ public class EvalProjectExecutor implements EvalProjectApi { private EvalProjectMapper evalProjectMapper; @Autowired private EvalProjectMemberGateway evalProjectMemberGateway; + @Autowired + private EvalCustomerMapper evalCustomerMapper; + @Autowired + private EvalProjectDoConvertor evalProjectDoConvertor; + @Autowired + private EvalSurveyMapper evalSurveyMapper; + @Autowired + private EvalProjectMemberMapper evalProjectMemberMapper; @Override @Transactional(rollbackFor = Exception.class) @@ -129,7 +150,14 @@ public class EvalProjectExecutor implements EvalProjectApi { evalProjectCO.setSurveyType(surveyType); } } + // 获取客户公司名称 + Map customerNameMap = evalCustomerMapper.selectBatchIds(co.stream() + .map(EvalProjectCO::getCustomerId).collect(Collectors.toList())) + .stream().collect(Collectors.toMap(EvalCustomerDO::getId, EvalCustomerDO::getCustomerName)); + co.forEach(item -> item.setCustomerName(customerNameMap.get(Long.valueOf(item.getCustomerId())))); } + + return PageResponse.of( co, pageResult.getTotal()); @@ -201,6 +229,86 @@ public class EvalProjectExecutor implements EvalProjectApi { return PageResponse.of(coList, pageResult.getTotal()); } + @Override + public PageResponse myPage(EvalProjectPageQuery query) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(EvalProjectDO::getDeleteEnum, "false"); + wrapper.eq(EvalProjectDO::getOrgId, ThreadLocalUserInfoAdapter.getOrgId()); + if (StringUtils.hasText(query.getKeyword())) { + wrapper.and(o -> o.like(EvalProjectDO::getProjectName, query.getKeyword()).or().like(EvalProjectDO::getProjectNo, query.getKeyword())); + } + // app查询(已完成的勘察打卡) + List pIds = evalSurveyMapper.selectList(new LambdaQueryWrapper() + .eq(EvalSurveyDO::getPersonnelId, AuthUserContextAdapter.getCurrentUserId()) + .isNotNull(EvalSurveyDO::getSignOutTime)).stream().map(EvalSurveyDO::getProjectId) + .distinct() + .collect(Collectors.toList()); + List myPIds = evalProjectMemberMapper.selectList(new LambdaQueryWrapper() + .eq(EvalProjectMemberDO::getPersonnelId, AuthUserContextAdapter.getCurrentUserId()) + .eq(EvalProjectMemberDO::getOrgId, ThreadLocalUserInfoAdapter.getOrgId())) + .stream().map(EvalProjectMemberDO::getProjectId).distinct().collect(Collectors.toList()); + if (query.getSurveyType() == 1) { + wrapper.in(EvalProjectDO::getId, CollectionUtils.isEmpty(pIds) ? Collections.singletonList(0L) : pIds); + }else if (query.getSurveyType() == 0) { + 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); + } else { + wrapper.in(EvalProjectDO::getId, CollectionUtils.isEmpty(myPIds) ? Collections.singletonList(0L) : myPIds); + } + Page pageResult = evalProjectMapper.selectPage(new Page<>(query.getCurrent(), query.getSize()), wrapper); + List entities = pageResult.getRecords().stream() + .map(evalProjectDoConvertor::convertDoToE) + .collect(Collectors.toList()); + List co = evalProjectCmdConvertor.convertEListToCOList(entities); + 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); + } + }else if (query.getSurveyType() == 1) { + for (EvalProjectCO evalProjectCO : co) { + evalProjectCO.setSurveyType(1); + } + }else { + 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); + } + } + // 获取客户公司名称 + Map customerNameMap = evalCustomerMapper.selectBatchIds(co.stream() + .map(EvalProjectCO::getCustomerId).collect(Collectors.toList())) + .stream().collect(Collectors.toMap(EvalCustomerDO::getId, EvalCustomerDO::getCustomerName)); + co.forEach(item -> item.setCustomerName(customerNameMap.get(Long.valueOf(item.getCustomerId())))); + } + return PageResponse.of(co, pageResult.getTotal()); + } + private CustomerEvalProjectCO convertToCustomerCO(EvalProjectEntity entity) { CustomerEvalProjectCO co = new CustomerEvalProjectCO(); co.setId(entity.getId() == null ? null : String.valueOf(entity.getId())); diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalSurveyExecutor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalSurveyExecutor.java index f072249..9855009 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalSurveyExecutor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/institution/EvalSurveyExecutor.java @@ -89,6 +89,9 @@ public class EvalSurveyExecutor implements EvalSurveyApi { .eq(EvalSurveyDO::getProjectId, projectId) .eq(EvalSurveyDO::getPersonnelId, AuthUserContextAdapter.getCurrentUserId()) .last("limit 1")); + if (CollectionUtils.isEmpty(evalSurveyDOS)) { + return SingleResponse.success(null); + } EvalSurveyEntity evalSurveyEntity = evalSurveyDoConvertor.convertDoToE(evalSurveyDOS.get(0)); return SingleResponse.success(evalSurveyCmdConvertor.convertEToCO(evalSurveyEntity)); } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/institution/EvalProjectApi.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/institution/EvalProjectApi.java index c53dabb..f8302c6 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/institution/EvalProjectApi.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/institution/EvalProjectApi.java @@ -42,4 +42,6 @@ public interface EvalProjectApi { PageResponse customerPage(CustomerEvalProjectPageQuery query); + + PageResponse myPage(EvalProjectPageQuery query); } 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 db5c2d8..5e8c50f 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 @@ -17,6 +17,9 @@ public class EvalProjectCO { @ApiModelProperty("被评价客户id") private String customerId; + @ApiModelProperty("被评价客户名称") + private String customerName; + @ApiModelProperty("项目编号") private String projectNo; From 03f428c266e4edcc772e8cffe7bcd7953303298a Mon Sep 17 00:00:00 2001 From: zhanglei Date: Mon, 3 Aug 2026 11:51:03 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../institution/EvalProjectExecutor.java | 33 +------------------ .../gatewayimpl/EvalProjectGatewayImpl.java | 28 +--------------- 2 files changed, 2 insertions(+), 59 deletions(-) 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 468f28c..25b951a 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 @@ -115,41 +115,10 @@ public class EvalProjectExecutor implements EvalProjectApi { public PageResponse page(EvalProjectPageQuery query) { EvalProjectQuery domainQuery = evalProjectCmdConvertor.convertPageQueryToQ(query); domainQuery.setSurveyType(query.getSurveyType()); + domainQuery.setMyProject(query.getMyProject()); 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); - } - } // 获取客户公司名称 Map customerNameMap = evalCustomerMapper.selectBatchIds(co.stream() .map(EvalProjectCO::getCustomerId).collect(Collectors.toList())) 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 e06f378..67c37f1 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 @@ -16,9 +16,7 @@ import org.qinan.safetyeval.infrastructure.adapter.ThreadLocalUserInfoAdapter; 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; @@ -30,7 +28,6 @@ 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.Objects; import java.util.stream.Collectors; @@ -178,30 +175,7 @@ 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())); } - // 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) { + if (Boolean.TRUE.equals(query.getMyProject())) { wrapper.apply("JSON_CONTAINS(participants_json, JSON_OBJECT('id', {0}))", AuthUserContextAdapter.getCurrentUserId()); } applyProgressStatusFilter(wrapper, query.getProgressStatus()); From 1e8188ff99a6e9ea11a419cd7f3776046a2b2ad6 Mon Sep 17 00:00:00 2001 From: zhanglei Date: Mon, 3 Aug 2026 13:32:32 +0800 Subject: [PATCH 3/3] =?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/executor/institution/EvalSignTaskExecutor.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 131ce25..365d2a5 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 @@ -102,10 +102,12 @@ public class EvalSignTaskExecutor implements EvalSignTaskApi { List evalProjectMemberDOS = evalProjectMemberMapper.selectList(new LambdaQueryWrapper() .eq(EvalProjectMemberDO::getProjectId, evalSignTaskCO.getProjectId()) .eq(EvalProjectMemberDO::getPersonnelId, evalSignTaskCO.getSignerPersonnelId()) - .select(EvalProjectMemberDO::getRole, EvalProjectMemberDO::getPersonnelName) + .select(EvalProjectMemberDO::getRole, EvalProjectMemberDO::getPersonnelName, EvalProjectMemberDO::getId) .last("limit 1")); + if (!CollectionUtils.isEmpty(evalProjectMemberDOS)) { evalSignTaskCO.setSignerPersonnelName(evalProjectMemberDOS.get(0).getPersonnelName()); evalSignTaskCO.setSignerRoles(ProjectStageEnum.fromVals(evalProjectMemberDOS.get(0).getRole())); + } return evalSignTaskCO; }).collect(Collectors.toList()); return PageResponse.of(