From be9b06b76541d9ce29749425be4291cffdc8af9b Mon Sep 17 00:00:00 2001 From: zhanglei Date: Tue, 4 Aug 2026 14:38:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E9=9C=80=E6=B1=82,=E8=B5=84=E8=B4=A8?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E4=B8=8B=E5=8F=91app=E7=AD=BE=E5=AD=97?= =?UTF-8?q?=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AppQualFilingCommitmentController.java | 55 +++++++++++++++++++ .../QualFilingCommitmentExecutor.java | 36 ++++++++++-- .../client/api/QualFilingCommitmentApi.java | 4 ++ .../client/co/QualFilingCommitmentCO.java | 2 +- .../dto/QualFilingCommitmentPageQuery.java | 5 +- .../institution/EvalSignTaskPageQuery.java | 2 +- .../QualFilingComplianceCheckEnum.java | 1 + .../entity/QualFilingCommitmentEntity.java | 1 - .../query/QualFilingCommitmentQuery.java | 2 + .../QualFilingCommitmentGatewayImpl.java | 8 ++- .../utils/ComplianceCheckUtil.java | 13 +++++ 11 files changed, 117 insertions(+), 12 deletions(-) create mode 100644 safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/app/AppQualFilingCommitmentController.java diff --git a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/app/AppQualFilingCommitmentController.java b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/app/AppQualFilingCommitmentController.java new file mode 100644 index 0000000..d49f5c4 --- /dev/null +++ b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/institution/app/AppQualFilingCommitmentController.java @@ -0,0 +1,55 @@ +package org.qinan.safetyeval.adapter.web.institution.app; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.qinan.safetyeval.client.api.QualFilingCommitmentApi; +import org.qinan.safetyeval.client.co.QualFilingCommitmentCO; +import org.qinan.safetyeval.client.co.institution.EvalSignTaskStatisticsCO; +import org.qinan.safetyeval.client.dto.PageResponse; +import org.qinan.safetyeval.client.dto.QualFilingAttachmentUploadCmd; +import org.qinan.safetyeval.client.dto.QualFilingCommitmentPageQuery; +import org.qinan.safetyeval.client.dto.SingleResponse; +import org.qinan.safetyeval.client.dto.institution.EvalSignTaskPageQuery; +import org.qinan.safetyeval.infrastructure.adapter.auth.AuthUserContextAdapter; +import org.springframework.util.StringUtils; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + * 法定代表人承诺书适配层(Controller) + * + * @author safety-eval + */ +@Api(tags = "移动资质签字管理") +@RestController +@RequestMapping("/safetyEval/app/qual-filing-commitment") +public class AppQualFilingCommitmentController { + + @Resource + private QualFilingCommitmentApi qualFilingCommitmentApi; + + @ApiOperation("分页查询法定代表人承诺书") + @GetMapping("/page") + public PageResponse page(@Validated QualFilingCommitmentPageQuery query) { + query.setLegalRepPersonnelId(AuthUserContextAdapter.getCurrentUserId()); + return qualFilingCommitmentApi.page(query); + } + + @ApiOperation("上传法定代表人签名") + @PostMapping("/upload-signature") + public SingleResponse uploadSignature( + @Validated @RequestBody QualFilingAttachmentUploadCmd cmd) { + return qualFilingCommitmentApi.uploadSignature(cmd); + } + + @ApiOperation("签字统计") + @PostMapping("/signStatistics") + public SingleResponse signStatistics(@RequestBody EvalSignTaskPageQuery cmd) { + if (!StringUtils.hasText(cmd.getSignerPersonnelId())) { + cmd.setSignerPersonnelId(String.valueOf(AuthUserContextAdapter.getCurrentUserId())); + } + return qualFilingCommitmentApi.signStatistics(cmd); + } +} diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/QualFilingCommitmentExecutor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/QualFilingCommitmentExecutor.java index 070d293..35c8bfd 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/QualFilingCommitmentExecutor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/QualFilingCommitmentExecutor.java @@ -1,20 +1,25 @@ package org.qinan.safetyeval.app.executor; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.qinan.safetyeval.client.api.QualFilingCommitmentApi; -import org.qinan.safetyeval.client.dto.PageResponse; -import org.qinan.safetyeval.client.dto.SingleResponse; import org.qinan.safetyeval.client.co.QualFilingCommitmentCO; -import org.qinan.safetyeval.client.dto.QualFilingCommitmentAddCmd; -import org.qinan.safetyeval.client.dto.QualFilingCommitmentModifyCmd; -import org.qinan.safetyeval.client.dto.QualFilingCommitmentPageQuery; +import org.qinan.safetyeval.client.co.institution.EvalSignTaskStatisticsCO; +import org.qinan.safetyeval.client.dto.*; +import org.qinan.safetyeval.client.dto.institution.EvalSignTaskPageQuery; import org.qinan.safetyeval.domain.entity.QualFilingCommitmentEntity; -import org.qinan.safetyeval.domain.query.QualFilingCommitmentQuery; import org.qinan.safetyeval.domain.query.PageResult; +import org.qinan.safetyeval.domain.query.QualFilingCommitmentQuery; import org.qinan.safetyeval.domain.service.QualFilingCommitmentDomainService; import org.qinan.safetyeval.infrastructure.adapter.auth.AuthUserContextAdapter; +import org.qinan.safetyeval.infrastructure.dataobject.QualFilingCommitmentDO; +import org.qinan.safetyeval.infrastructure.mapper.QualFilingCommitmentMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Objects; /** * 法定代表人承诺书执行器(App层) @@ -27,6 +32,8 @@ public class QualFilingCommitmentExecutor implements QualFilingCommitmentApi { @Lazy @Autowired(required = false) private QualFilingCommitmentDomainService qualFilingCommitmentDomainService; + @Autowired + private QualFilingCommitmentMapper qualFilingCommitmentMapper; @Override public SingleResponse add(QualFilingCommitmentAddCmd cmd) { @@ -74,6 +81,7 @@ public class QualFilingCommitmentExecutor implements QualFilingCommitmentApi { domainQuery.setPageSize(query.getSize()); domainQuery.setTenantId(AuthUserContextAdapter.getCurrentTenantId()); domainQuery.setFilingId(query.getFilingId()); + domainQuery.setLegalRepPersonnelId(query.getLegalRepPersonnelId()); PageResult pageResult = qualFilingCommitmentDomainService.page(domainQuery); @@ -144,6 +152,22 @@ public class QualFilingCommitmentExecutor implements QualFilingCommitmentApi { return SingleResponse.success(toCO(qualFilingCommitmentDomainService.modify(existing))); } + @Override + public SingleResponse signStatistics(EvalSignTaskPageQuery cmd) { + EvalSignTaskStatisticsCO evalSignTaskStatisticsCO = new EvalSignTaskStatisticsCO(); + List qualFilingCommitmentDOS = qualFilingCommitmentMapper.selectList(new LambdaQueryWrapper() + .eq(QualFilingCommitmentDO::getLegalRepSignatureUrl, cmd.getSignerPersonnelId())); + if (!CollectionUtils.isEmpty(qualFilingCommitmentDOS)) { + long pendingSign = qualFilingCommitmentDOS.stream().filter(f -> Objects.isNull(f.getLegalRepSignatureUrl())).count(); + long completed = qualFilingCommitmentDOS.stream().filter(f -> Objects.nonNull(f.getLegalRepSignatureUrl())).count(); + long allTasks = qualFilingCommitmentDOS.size(); + evalSignTaskStatisticsCO.setPendingSign(Math.toIntExact(pendingSign)); + evalSignTaskStatisticsCO.setCompleted(Math.toIntExact(completed)); + evalSignTaskStatisticsCO.setAllTasks(Math.toIntExact(allTasks)); + } + return SingleResponse.success(evalSignTaskStatisticsCO); + } + private QualFilingCommitmentCO toCO(QualFilingCommitmentEntity entity) { if (entity == null) { return null; diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/QualFilingCommitmentApi.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/QualFilingCommitmentApi.java index 081d02f..e953ea1 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/QualFilingCommitmentApi.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/QualFilingCommitmentApi.java @@ -1,11 +1,13 @@ package org.qinan.safetyeval.client.api; import org.qinan.safetyeval.client.co.QualFilingCommitmentCO; +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.QualFilingCommitmentAddCmd; import org.qinan.safetyeval.client.dto.QualFilingCommitmentModifyCmd; import org.qinan.safetyeval.client.dto.QualFilingCommitmentPageQuery; +import org.qinan.safetyeval.client.dto.institution.EvalSignTaskPageQuery; /** * 法定代表人承诺书接口定义(Client层) @@ -27,4 +29,6 @@ public interface QualFilingCommitmentApi { SingleResponse saveOrUpdate(QualFilingCommitmentModifyCmd cmd); SingleResponse uploadSignature(org.qinan.safetyeval.client.dto.QualFilingAttachmentUploadCmd cmd); + + SingleResponse signStatistics(EvalSignTaskPageQuery cmd); } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/QualFilingCommitmentCO.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/QualFilingCommitmentCO.java index 360237b..b14ee21 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/QualFilingCommitmentCO.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/QualFilingCommitmentCO.java @@ -1,9 +1,9 @@ package org.qinan.safetyeval.client.co; import io.swagger.annotations.ApiModelProperty; +import lombok.Data; import java.time.LocalDate; -import lombok.Data; /** * 法定代表人承诺书CO(Client Object) diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/QualFilingCommitmentPageQuery.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/QualFilingCommitmentPageQuery.java index 04bcd8e..53f42e5 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/QualFilingCommitmentPageQuery.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/QualFilingCommitmentPageQuery.java @@ -13,6 +13,9 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) public class QualFilingCommitmentPageQuery extends BasePageQuery { - @ApiModelProperty(value = "备案申请id") + @ApiModelProperty(value = "(pc使用)备案申请id") private Long filingId; + + @ApiModelProperty(value = "App法定代表人id,不传值默认填充当前登录人") + private Long legalRepPersonnelId; } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalSignTaskPageQuery.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalSignTaskPageQuery.java index 05f1cb2..62f3b17 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalSignTaskPageQuery.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/institution/EvalSignTaskPageQuery.java @@ -12,6 +12,6 @@ public class EvalSignTaskPageQuery extends BasePageQuery { @ApiModelProperty("项目id") private String projectId; - @ApiModelProperty("待签人员id") + @ApiModelProperty("待签人员id, 不传默认当前登录人") private String signerPersonnelId; } diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/QualFilingComplianceCheckEnum.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/QualFilingComplianceCheckEnum.java index fc24656..8bf92aa 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/QualFilingComplianceCheckEnum.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/constant/QualFilingComplianceCheckEnum.java @@ -16,6 +16,7 @@ public enum QualFilingComplianceCheckEnum { KEY_POSITION("负责人配备", "每个业务范围配备专职技术负责人;另配过程控制负责人", "负责人备案.技术负责人、负责人备案.过程控制负责人"), MANAGEMENT_SYSTEM("制度与过程控制体系", "具有健全内部管理制度和安全评价过程控制体系", "制度文件.版本、过程控制.节点记录"), COMMITMENT("承诺书/网站/报告查询", "法定代表人承诺书已出具;网站正常运行并可查询机构信息和报告", "承诺书.上传状态、网站备案.报告查询状态"), + COMMITMENT_SIGNATURE("承诺书签字", "法定代表人承诺书签字", "承诺书签字"), CREDIT_RECORD("三年重大违法失信记录", "截至申请或核查日三年内无重大违法失信记录", "信用核查.重大违法失信记录"), TERRITORIAL("属地满足情况", "在注册地所在直辖市、设区市行政区域范围内满足资质条件", "异地备案.注册地、本市社保.缴纳人数、场所核验.属地"), ; diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/QualFilingCommitmentEntity.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/QualFilingCommitmentEntity.java index 9f26e55..d0f3435 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/QualFilingCommitmentEntity.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/QualFilingCommitmentEntity.java @@ -1,6 +1,5 @@ package org.qinan.safetyeval.domain.entity; -import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.time.LocalDate; diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/query/QualFilingCommitmentQuery.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/query/QualFilingCommitmentQuery.java index 4ac0d56..d4b1af3 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/query/QualFilingCommitmentQuery.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/query/QualFilingCommitmentQuery.java @@ -21,4 +21,6 @@ public class QualFilingCommitmentQuery { /** 备案ID */ private Long filingId; + + private Long legalRepPersonnelId; } diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/QualFilingCommitmentGatewayImpl.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/QualFilingCommitmentGatewayImpl.java index aa43e70..45fb1a4 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/QualFilingCommitmentGatewayImpl.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/QualFilingCommitmentGatewayImpl.java @@ -5,13 +5,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.qinan.safetyeval.domain.entity.QualFilingCommitmentEntity; import org.qinan.safetyeval.domain.gateway.QualFilingCommitmentGateway; -import org.qinan.safetyeval.domain.query.QualFilingCommitmentQuery; import org.qinan.safetyeval.domain.query.PageResult; +import org.qinan.safetyeval.domain.query.QualFilingCommitmentQuery; import org.qinan.safetyeval.infrastructure.dataobject.QualFilingCommitmentDO; import org.qinan.safetyeval.infrastructure.mapper.QualFilingCommitmentMapper; import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults; import org.springframework.stereotype.Component; -import org.springframework.util.StringUtils; import javax.annotation.Resource; import java.util.List; @@ -79,6 +78,11 @@ public class QualFilingCommitmentGatewayImpl implements QualFilingCommitmentGate if (query.getFilingId() != null) { wrapper.eq(QualFilingCommitmentDO::getFilingId, query.getFilingId()); } + if (query.getLegalRepPersonnelId() != null) { + wrapper.eq(QualFilingCommitmentDO::getLegalRepPersonnelId, query.getLegalRepPersonnelId()); + } + + wrapper.orderByDesc(QualFilingCommitmentDO::getId); Page page = new Page<>(query.getPageNum(), query.getPageSize()); IPage result = qualFilingCommitmentMapper.selectPage(page, wrapper); diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/utils/ComplianceCheckUtil.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/utils/ComplianceCheckUtil.java index 574cbb6..d66c6d7 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/utils/ComplianceCheckUtil.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/utils/ComplianceCheckUtil.java @@ -17,6 +17,7 @@ import org.qinan.safetyeval.infrastructure.persistence.domainobject.IndustryProf import org.qinan.safetyeval.infrastructure.persistence.domainobject.OrgPersonnelLeaderCountDO; import org.qinan.safetyeval.infrastructure.persistence.mapper.IndustryProfessionalStandardsMapper; import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; import java.math.BigDecimal; import java.util.*; @@ -79,6 +80,8 @@ public class ComplianceCheckUtil { // 9. 承诺书/网站/报告查询 results.add(checkCommitment(cmd.getQualFilingCommitmentAddCmd(), filing)); + // 承诺书签字管理 + results.add(checkCommitmentSignature(cmd.getQualFilingCommitmentAddCmd(), filing)); // 10. 三年重大违法失信记录 results.add(checkCreditRecord(materialList)); @@ -90,6 +93,16 @@ public class ComplianceCheckUtil { return results; } + private static QualFilingComplianceCheckResultCO checkCommitmentSignature(QualFilingCommitmentAddCmd commitment, QualFilingAddCmd filing) { + QualFilingComplianceCheckResultCO qualFilingComplianceCheckResultCO = new QualFilingComplianceCheckResultCO(); + qualFilingComplianceCheckResultCO.setTitle(QualFilingComplianceCheckEnum.COMMITMENT_SIGNATURE.getTitle()); + qualFilingComplianceCheckResultCO.setDescription(QualFilingComplianceCheckEnum.COMMITMENT_SIGNATURE.getDescription()); + qualFilingComplianceCheckResultCO.setStatus(Objects.nonNull(commitment) && StringUtils.hasText(commitment.getLegalRepSignatureUrl()) ? QualFilingComplianceCheckEnum.STATUS_PASS : QualFilingComplianceCheckEnum.STATUS_FAIL); + qualFilingComplianceCheckResultCO.setCurrentValue(Objects.nonNull(commitment) && StringUtils.hasText(commitment.getLegalRepSignatureUrl()) ? "法定代表人已签字" : "法定代表人未签字"); + qualFilingComplianceCheckResultCO.setSourceColumn(QualFilingComplianceCheckEnum.COMMITMENT_SIGNATURE.getSourceColumn()); + return qualFilingComplianceCheckResultCO; + } + /** * 查询人员证书专业能力信息 *