新需求,资质管理下发app签字管理

dev
zhanglei 2026-08-04 14:38:40 +08:00
parent 3ead1e18b5
commit be9b06b765
11 changed files with 117 additions and 12 deletions

View File

@ -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<QualFilingCommitmentCO> page(@Validated QualFilingCommitmentPageQuery query) {
query.setLegalRepPersonnelId(AuthUserContextAdapter.getCurrentUserId());
return qualFilingCommitmentApi.page(query);
}
@ApiOperation("上传法定代表人签名")
@PostMapping("/upload-signature")
public SingleResponse<QualFilingCommitmentCO> uploadSignature(
@Validated @RequestBody QualFilingAttachmentUploadCmd cmd) {
return qualFilingCommitmentApi.uploadSignature(cmd);
}
@ApiOperation("签字统计")
@PostMapping("/signStatistics")
public SingleResponse<EvalSignTaskStatisticsCO> signStatistics(@RequestBody EvalSignTaskPageQuery cmd) {
if (!StringUtils.hasText(cmd.getSignerPersonnelId())) {
cmd.setSignerPersonnelId(String.valueOf(AuthUserContextAdapter.getCurrentUserId()));
}
return qualFilingCommitmentApi.signStatistics(cmd);
}
}

View File

@ -1,20 +1,25 @@
package org.qinan.safetyeval.app.executor; 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.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.co.QualFilingCommitmentCO;
import org.qinan.safetyeval.client.dto.QualFilingCommitmentAddCmd; import org.qinan.safetyeval.client.co.institution.EvalSignTaskStatisticsCO;
import org.qinan.safetyeval.client.dto.QualFilingCommitmentModifyCmd; import org.qinan.safetyeval.client.dto.*;
import org.qinan.safetyeval.client.dto.QualFilingCommitmentPageQuery; import org.qinan.safetyeval.client.dto.institution.EvalSignTaskPageQuery;
import org.qinan.safetyeval.domain.entity.QualFilingCommitmentEntity; 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.PageResult;
import org.qinan.safetyeval.domain.query.QualFilingCommitmentQuery;
import org.qinan.safetyeval.domain.service.QualFilingCommitmentDomainService; import org.qinan.safetyeval.domain.service.QualFilingCommitmentDomainService;
import org.qinan.safetyeval.infrastructure.adapter.auth.AuthUserContextAdapter; 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.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Objects;
/** /**
* App * App
@ -27,6 +32,8 @@ public class QualFilingCommitmentExecutor implements QualFilingCommitmentApi {
@Lazy @Lazy
@Autowired(required = false) @Autowired(required = false)
private QualFilingCommitmentDomainService qualFilingCommitmentDomainService; private QualFilingCommitmentDomainService qualFilingCommitmentDomainService;
@Autowired
private QualFilingCommitmentMapper qualFilingCommitmentMapper;
@Override @Override
public SingleResponse<QualFilingCommitmentCO> add(QualFilingCommitmentAddCmd cmd) { public SingleResponse<QualFilingCommitmentCO> add(QualFilingCommitmentAddCmd cmd) {
@ -74,6 +81,7 @@ public class QualFilingCommitmentExecutor implements QualFilingCommitmentApi {
domainQuery.setPageSize(query.getSize()); domainQuery.setPageSize(query.getSize());
domainQuery.setTenantId(AuthUserContextAdapter.getCurrentTenantId()); domainQuery.setTenantId(AuthUserContextAdapter.getCurrentTenantId());
domainQuery.setFilingId(query.getFilingId()); domainQuery.setFilingId(query.getFilingId());
domainQuery.setLegalRepPersonnelId(query.getLegalRepPersonnelId());
PageResult<QualFilingCommitmentEntity> pageResult = qualFilingCommitmentDomainService.page(domainQuery); PageResult<QualFilingCommitmentEntity> pageResult = qualFilingCommitmentDomainService.page(domainQuery);
@ -144,6 +152,22 @@ public class QualFilingCommitmentExecutor implements QualFilingCommitmentApi {
return SingleResponse.success(toCO(qualFilingCommitmentDomainService.modify(existing))); return SingleResponse.success(toCO(qualFilingCommitmentDomainService.modify(existing)));
} }
@Override
public SingleResponse<EvalSignTaskStatisticsCO> signStatistics(EvalSignTaskPageQuery cmd) {
EvalSignTaskStatisticsCO evalSignTaskStatisticsCO = new EvalSignTaskStatisticsCO();
List<QualFilingCommitmentDO> qualFilingCommitmentDOS = qualFilingCommitmentMapper.selectList(new LambdaQueryWrapper<QualFilingCommitmentDO>()
.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) { private QualFilingCommitmentCO toCO(QualFilingCommitmentEntity entity) {
if (entity == null) { if (entity == null) {
return null; return null;

View File

@ -1,11 +1,13 @@
package org.qinan.safetyeval.client.api; package org.qinan.safetyeval.client.api;
import org.qinan.safetyeval.client.co.QualFilingCommitmentCO; 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.PageResponse;
import org.qinan.safetyeval.client.dto.SingleResponse; import org.qinan.safetyeval.client.dto.SingleResponse;
import org.qinan.safetyeval.client.dto.QualFilingCommitmentAddCmd; import org.qinan.safetyeval.client.dto.QualFilingCommitmentAddCmd;
import org.qinan.safetyeval.client.dto.QualFilingCommitmentModifyCmd; import org.qinan.safetyeval.client.dto.QualFilingCommitmentModifyCmd;
import org.qinan.safetyeval.client.dto.QualFilingCommitmentPageQuery; import org.qinan.safetyeval.client.dto.QualFilingCommitmentPageQuery;
import org.qinan.safetyeval.client.dto.institution.EvalSignTaskPageQuery;
/** /**
* Client * Client
@ -27,4 +29,6 @@ public interface QualFilingCommitmentApi {
SingleResponse<QualFilingCommitmentCO> saveOrUpdate(QualFilingCommitmentModifyCmd cmd); SingleResponse<QualFilingCommitmentCO> saveOrUpdate(QualFilingCommitmentModifyCmd cmd);
SingleResponse<QualFilingCommitmentCO> uploadSignature(org.qinan.safetyeval.client.dto.QualFilingAttachmentUploadCmd cmd); SingleResponse<QualFilingCommitmentCO> uploadSignature(org.qinan.safetyeval.client.dto.QualFilingAttachmentUploadCmd cmd);
SingleResponse<EvalSignTaskStatisticsCO> signStatistics(EvalSignTaskPageQuery cmd);
} }

View File

@ -1,9 +1,9 @@
package org.qinan.safetyeval.client.co; package org.qinan.safetyeval.client.co;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDate; import java.time.LocalDate;
import lombok.Data;
/** /**
* COClient Object * COClient Object

View File

@ -13,6 +13,9 @@ import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
public class QualFilingCommitmentPageQuery extends BasePageQuery { public class QualFilingCommitmentPageQuery extends BasePageQuery {
@ApiModelProperty(value = "备案申请id") @ApiModelProperty(value = "(pc使用)备案申请id")
private Long filingId; private Long filingId;
@ApiModelProperty(value = "App法定代表人id,不传值默认填充当前登录人")
private Long legalRepPersonnelId;
} }

View File

@ -12,6 +12,6 @@ public class EvalSignTaskPageQuery extends BasePageQuery {
@ApiModelProperty("项目id") @ApiModelProperty("项目id")
private String projectId; private String projectId;
@ApiModelProperty("待签人员id") @ApiModelProperty("待签人员id, 不传默认当前登录人")
private String signerPersonnelId; private String signerPersonnelId;
} }

View File

@ -16,6 +16,7 @@ public enum QualFilingComplianceCheckEnum {
KEY_POSITION("负责人配备", "每个业务范围配备专职技术负责人;另配过程控制负责人", "负责人备案.技术负责人、负责人备案.过程控制负责人"), KEY_POSITION("负责人配备", "每个业务范围配备专职技术负责人;另配过程控制负责人", "负责人备案.技术负责人、负责人备案.过程控制负责人"),
MANAGEMENT_SYSTEM("制度与过程控制体系", "具有健全内部管理制度和安全评价过程控制体系", "制度文件.版本、过程控制.节点记录"), MANAGEMENT_SYSTEM("制度与过程控制体系", "具有健全内部管理制度和安全评价过程控制体系", "制度文件.版本、过程控制.节点记录"),
COMMITMENT("承诺书/网站/报告查询", "法定代表人承诺书已出具;网站正常运行并可查询机构信息和报告", "承诺书.上传状态、网站备案.报告查询状态"), COMMITMENT("承诺书/网站/报告查询", "法定代表人承诺书已出具;网站正常运行并可查询机构信息和报告", "承诺书.上传状态、网站备案.报告查询状态"),
COMMITMENT_SIGNATURE("承诺书签字", "法定代表人承诺书签字", "承诺书签字"),
CREDIT_RECORD("三年重大违法失信记录", "截至申请或核查日三年内无重大违法失信记录", "信用核查.重大违法失信记录"), CREDIT_RECORD("三年重大违法失信记录", "截至申请或核查日三年内无重大违法失信记录", "信用核查.重大违法失信记录"),
TERRITORIAL("属地满足情况", "在注册地所在直辖市、设区市行政区域范围内满足资质条件", "异地备案.注册地、本市社保.缴纳人数、场所核验.属地"), TERRITORIAL("属地满足情况", "在注册地所在直辖市、设区市行政区域范围内满足资质条件", "异地备案.注册地、本市社保.缴纳人数、场所核验.属地"),
; ;

View File

@ -1,6 +1,5 @@
package org.qinan.safetyeval.domain.entity; package org.qinan.safetyeval.domain.entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.time.LocalDate; import java.time.LocalDate;

View File

@ -21,4 +21,6 @@ public class QualFilingCommitmentQuery {
/** 备案ID */ /** 备案ID */
private Long filingId; private Long filingId;
private Long legalRepPersonnelId;
} }

View File

@ -5,13 +5,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.qinan.safetyeval.domain.entity.QualFilingCommitmentEntity; import org.qinan.safetyeval.domain.entity.QualFilingCommitmentEntity;
import org.qinan.safetyeval.domain.gateway.QualFilingCommitmentGateway; 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.PageResult;
import org.qinan.safetyeval.domain.query.QualFilingCommitmentQuery;
import org.qinan.safetyeval.infrastructure.dataobject.QualFilingCommitmentDO; import org.qinan.safetyeval.infrastructure.dataobject.QualFilingCommitmentDO;
import org.qinan.safetyeval.infrastructure.mapper.QualFilingCommitmentMapper; import org.qinan.safetyeval.infrastructure.mapper.QualFilingCommitmentMapper;
import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults; import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.List; import java.util.List;
@ -79,6 +78,11 @@ public class QualFilingCommitmentGatewayImpl implements QualFilingCommitmentGate
if (query.getFilingId() != null) { if (query.getFilingId() != null) {
wrapper.eq(QualFilingCommitmentDO::getFilingId, query.getFilingId()); wrapper.eq(QualFilingCommitmentDO::getFilingId, query.getFilingId());
} }
if (query.getLegalRepPersonnelId() != null) {
wrapper.eq(QualFilingCommitmentDO::getLegalRepPersonnelId, query.getLegalRepPersonnelId());
}
wrapper.orderByDesc(QualFilingCommitmentDO::getId);
Page<QualFilingCommitmentDO> page = new Page<>(query.getPageNum(), query.getPageSize()); Page<QualFilingCommitmentDO> page = new Page<>(query.getPageNum(), query.getPageSize());
IPage<QualFilingCommitmentDO> result = qualFilingCommitmentMapper.selectPage(page, wrapper); IPage<QualFilingCommitmentDO> result = qualFilingCommitmentMapper.selectPage(page, wrapper);

View File

@ -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.domainobject.OrgPersonnelLeaderCountDO;
import org.qinan.safetyeval.infrastructure.persistence.mapper.IndustryProfessionalStandardsMapper; import org.qinan.safetyeval.infrastructure.persistence.mapper.IndustryProfessionalStandardsMapper;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.*; import java.util.*;
@ -79,6 +80,8 @@ public class ComplianceCheckUtil {
// 9. 承诺书/网站/报告查询 // 9. 承诺书/网站/报告查询
results.add(checkCommitment(cmd.getQualFilingCommitmentAddCmd(), filing)); results.add(checkCommitment(cmd.getQualFilingCommitmentAddCmd(), filing));
// 承诺书签字管理
results.add(checkCommitmentSignature(cmd.getQualFilingCommitmentAddCmd(), filing));
// 10. 三年重大违法失信记录 // 10. 三年重大违法失信记录
results.add(checkCreditRecord(materialList)); results.add(checkCreditRecord(materialList));
@ -90,6 +93,16 @@ public class ComplianceCheckUtil {
return results; 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;
}
/** /**
* *
* <p> * <p>