diff --git a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/config/GbsUserSyncInterceptor.java b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/config/GbsUserSyncInterceptor.java index 036fde8..1621cd5 100644 --- a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/config/GbsUserSyncInterceptor.java +++ b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/config/GbsUserSyncInterceptor.java @@ -37,7 +37,8 @@ public class GbsUserSyncInterceptor implements WebMvcConfigurer { "/**/org-info/save/**", "/**/account/save/**", "/**/account/sendMessage/**", - "/**/file/**" + "/**/file/**", + "/**/tree/**" }; @Override public void addInterceptors(InterceptorRegistry registry) { diff --git a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/OrgDepartmentController.java b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/OrgDepartmentController.java index 3df95e2..d6e84a3 100644 --- a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/OrgDepartmentController.java +++ b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/OrgDepartmentController.java @@ -1,18 +1,12 @@ package org.qinan.safetyeval.adapter.web; import io.swagger.annotations.Api; -import org.qinan.safetyeval.client.dto.PageResponse; -import org.qinan.safetyeval.client.dto.SingleResponse; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.qinan.safetyeval.client.api.OrgDepartmentApi; import org.qinan.safetyeval.client.co.OrgDepartmentCO; -import org.qinan.safetyeval.client.dto.OrgDepartmentAddCmd; -import org.qinan.safetyeval.client.dto.OrgDepartmentModifyCmd; -import org.qinan.safetyeval.client.dto.OrgDepartmentPageQuery; -import org.qinan.safetyeval.infrastructure.adapter.auth.AuthUserContextAdapter; -import org.qinan.safetyeval.infrastructure.adapter.auth.AuthUserInfo; -import org.springframework.beans.factory.annotation.Autowired; +import org.qinan.safetyeval.client.dto.*; +import org.qinan.safetyeval.infrastructure.dataobject.base.Req; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -53,8 +47,8 @@ public class OrgDepartmentController { @ApiOperation("删除部门") @PostMapping("/delete") - public SingleResponse delete(@ApiParam("主键ID") @RequestParam String id) { - return orgDepartmentApi.delete(Long.parseLong(id)); + public SingleResponse delete(@ApiParam("主键ID") @RequestBody Req req) { + return orgDepartmentApi.delete(req.getData()); } @ApiOperation("分页查询部门") diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/orchestrator/QualFilingOrchestrator.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/orchestrator/QualFilingOrchestrator.java index bbb3b79..5d42722 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/orchestrator/QualFilingOrchestrator.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/orchestrator/QualFilingOrchestrator.java @@ -15,6 +15,7 @@ import org.qinan.safetyeval.domain.exception.ErrorCode; import org.qinan.safetyeval.domain.gateway.*; import org.qinan.safetyeval.domain.query.PageResult; import org.qinan.safetyeval.domain.query.QualFilingQuery; +import org.qinan.safetyeval.domain.support.QualFilingExpertCheckSupport; import org.qinan.safetyeval.infrastructure.adapter.auth.AuthUserContextAdapter; import org.qinan.safetyeval.infrastructure.support.OrgContextResolver; import org.springframework.beans.BeanUtils; @@ -28,7 +29,9 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -76,6 +79,9 @@ public class QualFilingOrchestrator { @Resource private QualFilingStatusGuard statusGuard; + @Resource + private QualFilingReviewGateway qualFilingReviewGateway; + @Resource private QualFilingMaterialTemplateProvider materialTemplateProvider; @@ -210,17 +216,49 @@ public class QualFilingOrchestrator { domainQuery.setFilingUnitName(query.getFilingUnitName()); domainQuery.setFilingUnitTypeName(query.getFilingUnitTypeName()); domainQuery.setBusinessScope(query.getBusinessScope()); + domainQuery.setNeedExpertCheck(query.getNeedExpertCheck()); domainQuery.setFilingStatusCode(query.getFilingStatusCode()); domainQuery.setApplyTypeCode(query.getApplyTypeCode()); domainQuery.setFilingTerritoryCode(query.getFilingTerritoryCode()); domainQuery.setSupervision(query.getSupervision()); PageResult pageResult = qualFilingGateway.page(domainQuery); + Map reviewMap = loadReviewMap(pageResult.getRecords()); List records = pageResult.getRecords().stream() - .map(this::toCO) + .map(entity -> toListCO(entity, reviewMap)) .collect(Collectors.toList()); return PageResult.of(records, pageResult.getTotal(), pageResult.getPageNum(), pageResult.getPageSize()); } + private Map loadReviewMap(List filings) { + Map reviewMap = new HashMap<>(); + if (filings == null) { + return reviewMap; + } + for (QualFilingEntity filing : filings) { + Long reviewId = filing.getFilingReviewId(); + if (reviewId == null || reviewMap.containsKey(reviewId)) { + continue; + } + QualFilingReviewEntity review = qualFilingReviewGateway.get(reviewId); + if (review != null) { + reviewMap.put(reviewId, review); + } + } + return reviewMap; + } + + private QualFilingCO toListCO(QualFilingEntity entity, Map reviewMap) { + QualFilingCO co = toCO(entity); + if (co == null) { + return null; + } + co.setNeedExpertCheck(QualFilingExpertCheckSupport.needsExpertCheck(entity.getFilingUnitTypeName())); + QualFilingReviewEntity review = entity.getFilingReviewId() != null + ? reviewMap.get(entity.getFilingReviewId()) : null; + co.setExpertStatus(QualFilingExpertCheckSupport.resolveExpertStatus(entity.getFilingUnitTypeName(), review)); + return co; + } + @Transactional public void initMaterialTemplate(Long filingId) { QualFilingEntity filing = qualFilingGateway.get(filingId); diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/QualFilingCO.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/QualFilingCO.java index e1de879..2b1a491 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/QualFilingCO.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/QualFilingCO.java @@ -105,6 +105,12 @@ public class QualFilingCO { @ApiModelProperty(value = "审核id") private Long filingReviewId; + @ApiModelProperty(value = "是否需专家核验(查询聚合,非表字段)") + private Boolean needExpertCheck; + + @ApiModelProperty(value = "专家核验状态(arranging/pending/passed,查询聚合,非表字段)") + private String expertStatus; + @ApiModelProperty(value = "提交时间") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/QualFilingPageQuery.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/QualFilingPageQuery.java index a4873e1..59d8be4 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/QualFilingPageQuery.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/QualFilingPageQuery.java @@ -30,6 +30,9 @@ public class QualFilingPageQuery extends BasePageQuery { @ApiModelProperty(value = "安全评价业务范围") private String businessScope; + @ApiModelProperty(value = "是否专家核验(yes-是 no-否,异地单位需专家核验)") + private String needExpertCheck; + @ApiModelProperty(value = "备案状态编码(1已备案2审核中3已打回4变更审核中5暂存)") private Integer filingStatusCode; diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/query/QualFilingQuery.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/query/QualFilingQuery.java index 12351a6..23dccf3 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/query/QualFilingQuery.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/query/QualFilingQuery.java @@ -37,6 +37,9 @@ public class QualFilingQuery { /** 安全评价业务范围 */ private String businessScope; + /** 是否专家核验(yes/no) */ + private String needExpertCheck; + /** 备案状态 */ private Integer filingStatusCode; diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/support/QualFilingExpertCheckSupport.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/support/QualFilingExpertCheckSupport.java new file mode 100644 index 0000000..40dca82 --- /dev/null +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/support/QualFilingExpertCheckSupport.java @@ -0,0 +1,36 @@ +package org.qinan.safetyeval.domain.support; + +import org.qinan.safetyeval.domain.entity.QualFilingReviewEntity; +import org.springframework.util.StringUtils; + +/** + * 资质备案专家核验判定(异地单位需专家核验) + */ +public final class QualFilingExpertCheckSupport { + + private static final String REMOTE_UNIT_KEYWORD = "异地"; + + private QualFilingExpertCheckSupport() { + } + + public static boolean needsExpertCheck(String filingUnitTypeName) { + return StringUtils.hasText(filingUnitTypeName) + && filingUnitTypeName.contains(REMOTE_UNIT_KEYWORD); + } + + /** + * @return arranging=待安排, pending=待核验, passed=已核验;本地单位返回 null + */ + public static String resolveExpertStatus(String filingUnitTypeName, QualFilingReviewEntity review) { + if (!needsExpertCheck(filingUnitTypeName)) { + return null; + } + if (review == null || review.getFilingExpertId() == null) { + return "arranging"; + } + if ("1".equals(review.getReviewResult())) { + return "passed"; + } + return "pending"; + } +} diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/QualFilingGatewayImpl.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/QualFilingGatewayImpl.java index fd8f297..6d258fd 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/QualFilingGatewayImpl.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/QualFilingGatewayImpl.java @@ -119,6 +119,13 @@ public class QualFilingGatewayImpl implements QualFilingGateway { if (StringUtils.hasText(query.getBusinessScope())) { wrapper.like(QualFilingDO::getBusinessScope, query.getBusinessScope()); } + if (StringUtils.hasText(query.getNeedExpertCheck())) { + if ("yes".equalsIgnoreCase(query.getNeedExpertCheck())) { + wrapper.like(QualFilingDO::getFilingUnitTypeName, "异地"); + } else if ("no".equalsIgnoreCase(query.getNeedExpertCheck())) { + wrapper.like(QualFilingDO::getFilingUnitTypeName, "本地"); + } + } if (StringUtils.hasText(query.getFilingTerritoryCode())) { String territory = query.getFilingTerritoryCode(); wrapper.and(w -> w.eq(QualFilingDO::getFilingTerritoryCode, territory)