From 5391d208de5d0abb3c25b959dea008dc839d8992 Mon Sep 17 00:00:00 2001 From: luotaiqian <1147642922@qq.com> Date: Fri, 14 Aug 2026 14:42:07 +0800 Subject: [PATCH 1/7] job --- .../safetyeval/domain/entity/CapabilityAssessmentDTO.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/CapabilityAssessmentDTO.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/CapabilityAssessmentDTO.java index 38d634ad..787c9efb 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/CapabilityAssessmentDTO.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/entity/CapabilityAssessmentDTO.java @@ -13,6 +13,11 @@ import java.io.Serializable; public class CapabilityAssessmentDTO implements Serializable { private static final long serialVersionUID = 1L; + /** + * 专业能力编码,取值见 + * {@link org.qinan.safetyeval.domain.constant.basic.IndustryEnum} + */ + private String industryCode; /** * 专业能力编码,取值见 From 358d4e56fa7e3f2757f55e1f0b10d1f935bee6f5 Mon Sep 17 00:00:00 2001 From: zhanglei Date: Fri, 14 Aug 2026 14:50:14 +0800 Subject: [PATCH 2/7] bug --- .../app/executor/QualFilingChangeExecutor.java | 4 +--- .../RegulatorEvalProjectMonitorExecutor.java | 17 +++++++++-------- .../client/dto/QualFilingChangePageQuery.java | 3 +++ .../domain/query/QualFilingChangeQuery.java | 1 + .../QualFilingChangeGatewayImpl.java | 3 +++ 5 files changed, 17 insertions(+), 11 deletions(-) diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/QualFilingChangeExecutor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/QualFilingChangeExecutor.java index 1ca2f536..7d9fd670 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/QualFilingChangeExecutor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/QualFilingChangeExecutor.java @@ -31,7 +31,6 @@ import org.qinan.safetyeval.infrastructure.mapper.QualFilingMaterialMapper; import org.qinan.safetyeval.infrastructure.mapper.QualFilingPersonnelCertMapper; import org.qinan.safetyeval.infrastructure.persistence.mapper.QualFilingPersonnelChangeMapper; import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults; -import org.qinan.safetyeval.infrastructure.utils.CommonUtil; import org.qinan.safetyeval.infrastructure.utils.ComplianceCheckUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -199,6 +198,7 @@ public class QualFilingChangeExecutor implements QualFilingChangeApi { domainQuery.setFilingUnitName(query.getFilingUnitName()); domainQuery.setFilingTerritoryCode(query.getFilingTerritoryCode()); domainQuery.setFilingStatusCode(query.getFilingStatusCode()); + domainQuery.setCreditCode(query.getCreditCode()); PageResult pageResult = qualFilingChangeDomainService.page(domainQuery); return PageResponse.of( pageResult.getRecords().stream().map(this::toCO).collect(java.util.stream.Collectors.toList()), @@ -279,8 +279,6 @@ public class QualFilingChangeExecutor implements QualFilingChangeApi { public SingleResponse> aggregationSaveOrEdit( AggregationSaveOrEditQualFilingChangeCmd cmd, boolean throwException) { validateBeforeSaveOrEdit(cmd); - - cmd.getQualFilingCommitmentChangeAddCmd().setLegalRepSignatureUrl(CommonUtil.COLON); // 合规性校验:只要有一项未通过则抛出异常 AggregationSaveOrEditQualFilingCmd qualFilingCmd = convertToQualFilingCmd(cmd); List complianceResults = ComplianceCheckUtil.complianceCheck(qualFilingCmd, throwException); diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/regulator/RegulatorEvalProjectMonitorExecutor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/regulator/RegulatorEvalProjectMonitorExecutor.java index b06d20c8..52162349 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/regulator/RegulatorEvalProjectMonitorExecutor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/regulator/RegulatorEvalProjectMonitorExecutor.java @@ -5,19 +5,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.qinan.safetyeval.app.executor.support.EvalProjectNodeOverviewAssembler; import org.qinan.safetyeval.app.executor.support.RegulatorMonitorCoConverter; import org.qinan.safetyeval.client.api.regulator.RegulatorEvalProjectMonitorApi; -import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectMonitorCO; -import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectMonitorPageCO; -import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectMonitorStatCO; -import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectNodeOverviewCO; -import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectSurveyPageCO; -import org.qinan.safetyeval.client.co.regulator.RegulatorEvalProjectSurveyStatCO; -import org.qinan.safetyeval.client.co.regulator.RegulatorEvalSurveyClockInCO; +import org.qinan.safetyeval.client.co.regulator.*; import org.qinan.safetyeval.client.dto.PageResponse; import org.qinan.safetyeval.client.dto.SingleResponse; import org.qinan.safetyeval.client.dto.regulator.RegulatorEvalProjectMonitorPageQuery; import org.qinan.safetyeval.client.dto.regulator.RegulatorEvalProjectMonitorRealtimePageQuery; import org.qinan.safetyeval.client.dto.regulator.RegulatorEvalProjectSurveyPageQuery; import org.qinan.safetyeval.domain.constant.ProjectProcessWaringStatusEnum; +import org.qinan.safetyeval.domain.constant.ProjectRoleEnum; import org.qinan.safetyeval.domain.entity.EvalProjectEntity; import org.qinan.safetyeval.domain.exception.BizException; import org.qinan.safetyeval.domain.exception.ErrorCode; @@ -136,7 +131,13 @@ public class RegulatorEvalProjectMonitorExecutor implements RegulatorEvalProject @Override public SingleResponse> surveyClockInList(String projectId) { - return SingleResponse.success(evalProjectMapper.selectRegulatorSurveyClockInList(Long.parseLong(projectId))); + List regulatorEvalSurveyClockInCOS = evalProjectMapper.selectRegulatorSurveyClockInList(Long.parseLong(projectId)); + for (RegulatorEvalSurveyClockInCO regulatorEvalSurveyClockInCO : regulatorEvalSurveyClockInCOS) { + if (regulatorEvalSurveyClockInCO.getRole() != null) { + regulatorEvalSurveyClockInCO.setRole(ProjectRoleEnum.fromVals(regulatorEvalSurveyClockInCO.getRole())); + } + } + return SingleResponse.success(regulatorEvalSurveyClockInCOS); } private void fillDisplayFields(RegulatorEvalProjectMonitorPageCO co) { diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/QualFilingChangePageQuery.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/QualFilingChangePageQuery.java index 6099a9ee..0f6de8d7 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/QualFilingChangePageQuery.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/QualFilingChangePageQuery.java @@ -27,4 +27,7 @@ public class QualFilingChangePageQuery extends BasePageQuery { @ApiModelProperty(value = "备案状态编码(1已备案2审核中3已打回4变更审核中5暂存)") private Long filingStatusCode; + + @ApiModelProperty(value = "统一社会信用代码") + private String creditCode; } diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/query/QualFilingChangeQuery.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/query/QualFilingChangeQuery.java index 034214ef..0282c70d 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/query/QualFilingChangeQuery.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/query/QualFilingChangeQuery.java @@ -38,4 +38,5 @@ public class QualFilingChangeQuery { /** 备案状态 */ private Long filingStatusCode; + private String creditCode; } diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/QualFilingChangeGatewayImpl.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/QualFilingChangeGatewayImpl.java index c7d4d806..69e35231 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/QualFilingChangeGatewayImpl.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/QualFilingChangeGatewayImpl.java @@ -128,6 +128,9 @@ public class QualFilingChangeGatewayImpl implements QualFilingChangeGateway { if (StringUtils.hasText(query.getFilingUnitName())) { wrapper.like(QualFilingChangeDO::getFilingUnitName, query.getFilingUnitName()); } + if (StringUtils.hasText(query.getCreditCode())) { + wrapper.eq(QualFilingChangeDO::getCreditCode, query.getCreditCode()); + } if (StringUtils.hasText(query.getFilingTerritoryCode())) { String territory = query.getFilingTerritoryCode(); wrapper.and(w -> w.eq(QualFilingChangeDO::getFilingTerritoryCode, territory) From 5d601c0aa452966912d2ba6ebfc0670775224efb Mon Sep 17 00:00:00 2001 From: luotaiqian <1147642922@qq.com> Date: Fri, 14 Aug 2026 15:26:03 +0800 Subject: [PATCH 3/7] job --- .../executor/QualFilingChangeExecutor.java | 277 +++++++++++++++++- .../app/executor/QualFilingExecutor.java | 11 +- 2 files changed, 276 insertions(+), 12 deletions(-) diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/QualFilingChangeExecutor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/QualFilingChangeExecutor.java index 1ca2f536..2db0dac3 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/QualFilingChangeExecutor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/QualFilingChangeExecutor.java @@ -25,16 +25,12 @@ import org.qinan.safetyeval.domain.service.QualFilingReviewDomainService; import org.qinan.safetyeval.infrastructure.adapter.ThreadLocalUserInfoAdapter; import org.qinan.safetyeval.infrastructure.adapter.auth.AuthUserContextAdapter; import org.qinan.safetyeval.infrastructure.dataobject.*; -import org.qinan.safetyeval.infrastructure.mapper.QualFilingChangeMapper; -import org.qinan.safetyeval.infrastructure.mapper.QualFilingMapper; -import org.qinan.safetyeval.infrastructure.mapper.QualFilingMaterialMapper; -import org.qinan.safetyeval.infrastructure.mapper.QualFilingPersonnelCertMapper; +import org.qinan.safetyeval.infrastructure.mapper.*; import org.qinan.safetyeval.infrastructure.persistence.mapper.QualFilingPersonnelChangeMapper; import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults; import org.qinan.safetyeval.infrastructure.utils.CommonUtil; import org.qinan.safetyeval.infrastructure.utils.ComplianceCheckUtil; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -105,8 +101,8 @@ public class QualFilingChangeExecutor implements QualFilingChangeApi { @Resource private QualFilingChangeDetailGateway qualFilingChangeDetailGateway; - @Value("${def.reviewEnable:false}") - private Boolean reviewEnable; + @Resource + private QualFilingCommitmentMapper qualFilingCommitmentMapper; @Override public SingleResponse add(QualFilingChangeAddCmd cmd) { @@ -344,6 +340,8 @@ public class QualFilingChangeExecutor implements QualFilingChangeApi { Long changeId = cmd.getOriginChangeFilingId(); List details = new ArrayList<>(); details.addAll(diffBasicInfoDetail(changeId, entity, cmd)); + details.addAll(diffCommitmentDetail(changeId, commitmentEntity, cmd)); + details.addAll(diffEquipmentDetail(changeId, equipmentEntities, cmd)); details.addAll(diffMaterialDetail(changeId, materialEntities, cmd)); details.addAll(diffManagementPersonnelDetail(changeId, personnelEntities, cmd)); // 根据changeId先删除原有变更明细,再新增 @@ -599,6 +597,42 @@ public class QualFilingChangeExecutor implements QualFilingChangeApi { return diffBasicInfo(changeId, filingDO, newEntity); } + /** + * 法定代表人承诺书变更明细(对比原表 qual_filing_commitment,根据 filing_id 查询) + */ + private List diffCommitmentDetail( + Long changeId, QualFilingCommitmentChangeE newCommitment, AggregationSaveOrEditQualFilingChangeCmd cmd) { + QualFilingCommitmentDO existCommitment = qualFilingCommitmentMapper.selectOne( + new LambdaQueryWrapper() + .select(QualFilingCommitmentDO::getLegalRepPersonnelId, + QualFilingCommitmentDO::getLegalRepName) + .eq(QualFilingCommitmentDO::getFilingId, cmd.getQualFilingChangeAddCmd().getFilingId())); + if (existCommitment == null) { + return Collections.emptyList(); + } + List details = new ArrayList<>(); + // 法定代表人机构人员id + if (!Objects.equals(existCommitment.getLegalRepPersonnelId(), newCommitment != null ? newCommitment.getLegalRepPersonnelId() : null)) { + String beforeName = Objects.toString(existCommitment.getLegalRepName(), ""); + String afterName = Objects.toString(newCommitment != null ? newCommitment.getLegalRepName() : null, ""); + details.add(fieldDetail(changeId, QualFilingFormStepEnum.COMMITMENT, "法定代表人承诺书变更", + "法定代表人", beforeName, afterName)); + } + return details; + } + + /** + * 装备清单变更明细(对比原表 qual_filing_equipment,根据 filing_id 查询) + * 检测装备的增减和字段修改 + */ + private List diffEquipmentDetail( + Long changeId, List newEquipments, AggregationSaveOrEditQualFilingChangeCmd cmd) { + List existingEquipments = qualFilingEquipmentMapper.selectList( + new LambdaQueryWrapper() + .eq(QualFilingEquipmentDO::getFilingId, cmd.getQualFilingChangeAddCmd().getFilingId())); + return diffEquipment(changeId, existingEquipments, newEquipments); + } + /** * 材料变更明细 */ @@ -624,10 +658,89 @@ public class QualFilingChangeExecutor implements QualFilingChangeApi { } /** - * 基本信息变更明细(仅对比法定代表人、专职安全评价师数量、注册安全工程师数量) + * 基本信息变更明细 */ private List diffBasicInfo(Long changeId, QualFilingDO exist, QualFilingChangeEntity newEntity) { List details = new ArrayList<>(); + // 备案属地编码 + if (!Objects.equals(exist.getFilingTerritoryCode(), newEntity.getFilingTerritoryCode())) { + details.add(fieldDetail(changeId, QualFilingFormStepEnum.BASIC_INFO, "备案基本信息变更", + "备案属地编码", + Objects.toString(exist.getFilingTerritoryCode(), ""), + Objects.toString(newEntity.getFilingTerritoryCode(), ""))); + } + // 备案属地名称 + if (!Objects.equals(exist.getFilingTerritoryName(), newEntity.getFilingTerritoryName())) { + details.add(fieldDetail(changeId, QualFilingFormStepEnum.BASIC_INFO, "备案基本信息变更", + "备案属地名称", + Objects.toString(exist.getFilingTerritoryName(), ""), + Objects.toString(newEntity.getFilingTerritoryName(), ""))); + } + // 备案单位 + if (!Objects.equals(exist.getFilingUnitName(), newEntity.getFilingUnitName())) { + details.add(fieldDetail(changeId, QualFilingFormStepEnum.BASIC_INFO, "备案基本信息变更", + "备案单位", + Objects.toString(exist.getFilingUnitName(), ""), + Objects.toString(newEntity.getFilingUnitName(), ""))); + } + // 备案单位类型编码 + if (!Objects.equals(exist.getFilingUnitTypeCode(), newEntity.getFilingUnitTypeCode())) { + details.add(fieldDetail(changeId, QualFilingFormStepEnum.BASIC_INFO, "备案基本信息变更", + "备案单位类型编码", + Objects.toString(exist.getFilingUnitTypeCode(), ""), + Objects.toString(newEntity.getFilingUnitTypeCode(), ""))); + } + // 备案单位类型名称 + if (!Objects.equals(exist.getFilingUnitTypeName(), newEntity.getFilingUnitTypeName())) { + details.add(fieldDetail(changeId, QualFilingFormStepEnum.BASIC_INFO, "备案基本信息变更", + "备案单位类型名称", + Objects.toString(exist.getFilingUnitTypeName(), ""), + Objects.toString(newEntity.getFilingUnitTypeName(), ""))); + } + // 备案编号 + if (!Objects.equals(exist.getFilingNo(), newEntity.getFilingNo())) { + details.add(fieldDetail(changeId, QualFilingFormStepEnum.BASIC_INFO, "备案基本信息变更", + "备案编号", + Objects.toString(exist.getFilingNo(), ""), + Objects.toString(newEntity.getFilingNo(), ""))); + } + // 备案安全评价业务范围 + String existBusinessScope = exist.getBusinessScope(); + String newBusinessScope = newEntity.getBusinessScope() != null ? String.join(",", newEntity.getBusinessScope()) : ""; + if (!Objects.equals(existBusinessScope, newBusinessScope)) { + details.add(fieldDetail(changeId, QualFilingFormStepEnum.BASIC_INFO, "备案基本信息变更", + "备案安全评价业务范围", + Objects.toString(existBusinessScope, ""), + newBusinessScope)); + } + // 注册地址 + if (!Objects.equals(exist.getRegisterAddress(), newEntity.getRegisterAddress())) { + details.add(fieldDetail(changeId, QualFilingFormStepEnum.BASIC_INFO, "备案基本信息变更", + "注册地址", + Objects.toString(exist.getRegisterAddress(), ""), + Objects.toString(newEntity.getRegisterAddress(), ""))); + } + // 办公地址 + if (!Objects.equals(exist.getOfficeAddress(), newEntity.getOfficeAddress())) { + details.add(fieldDetail(changeId, QualFilingFormStepEnum.BASIC_INFO, "备案基本信息变更", + "办公地址", + Objects.toString(exist.getOfficeAddress(), ""), + Objects.toString(newEntity.getOfficeAddress(), ""))); + } + // 统一社会信用代码 + if (!Objects.equals(exist.getCreditCode(), newEntity.getCreditCode())) { + details.add(fieldDetail(changeId, QualFilingFormStepEnum.BASIC_INFO, "备案基本信息变更", + "统一社会信用代码", + Objects.toString(exist.getCreditCode(), ""), + Objects.toString(newEntity.getCreditCode(), ""))); + } + // 资质证书编号 + if (!Objects.equals(exist.getQualCertNo(), newEntity.getQualCertNo())) { + details.add(fieldDetail(changeId, QualFilingFormStepEnum.BASIC_INFO, "备案基本信息变更", + "资质证书编号", + Objects.toString(exist.getQualCertNo(), ""), + Objects.toString(newEntity.getQualCertNo(), ""))); + } // 法定代表人 if (!Objects.equals(exist.getLegalRepresentative(), newEntity.getLegalRepresentative())) { details.add(fieldDetail(changeId, QualFilingFormStepEnum.BASIC_INFO, "备案基本信息变更", @@ -635,6 +748,55 @@ public class QualFilingChangeExecutor implements QualFilingChangeApi { Objects.toString(exist.getLegalRepresentative(), ""), Objects.toString(newEntity.getLegalRepresentative(), ""))); } + // 法人代表及电话 + if (!Objects.equals(exist.getLegalPersonPhone(), newEntity.getLegalPersonPhone())) { + details.add(fieldDetail(changeId, QualFilingFormStepEnum.BASIC_INFO, "备案基本信息变更", + "法人代表及电话", + Objects.toString(exist.getLegalPersonPhone(), ""), + Objects.toString(newEntity.getLegalPersonPhone(), ""))); + } + // 联系人 + if (!Objects.equals(exist.getContactName(), newEntity.getContactName())) { + details.add(fieldDetail(changeId, QualFilingFormStepEnum.BASIC_INFO, "备案基本信息变更", + "联系人", + Objects.toString(exist.getContactName(), ""), + Objects.toString(newEntity.getContactName(), ""))); + } + // 联系人及电话 + if (!Objects.equals(exist.getContactPhone(), newEntity.getContactPhone())) { + details.add(fieldDetail(changeId, QualFilingFormStepEnum.BASIC_INFO, "备案基本信息变更", + "联系人及电话", + Objects.toString(exist.getContactPhone(), ""), + Objects.toString(newEntity.getContactPhone(), ""))); + } + // 传真 + if (!Objects.equals(exist.getFax(), newEntity.getFax())) { + details.add(fieldDetail(changeId, QualFilingFormStepEnum.BASIC_INFO, "备案基本信息变更", + "传真", + Objects.toString(exist.getFax(), ""), + Objects.toString(newEntity.getFax(), ""))); + } + // 信息公开网址 + if (!Objects.equals(exist.getInfoDisclosureUrl(), newEntity.getInfoDisclosureUrl())) { + details.add(fieldDetail(changeId, QualFilingFormStepEnum.BASIC_INFO, "备案基本信息变更", + "信息公开网址", + Objects.toString(exist.getInfoDisclosureUrl(), ""), + Objects.toString(newEntity.getInfoDisclosureUrl(), ""))); + } + // 固定资产总值 + if (!Objects.equals(exist.getFixedAssetAmount(), newEntity.getFixedAssetAmount())) { + details.add(fieldDetail(changeId, QualFilingFormStepEnum.BASIC_INFO, "备案基本信息变更", + "固定资产总值(单位:分)", + Objects.toString(exist.getFixedAssetAmount(), ""), + Objects.toString(newEntity.getFixedAssetAmount(), ""))); + } + // 档案室面积(平方米) + if (!Objects.equals(exist.getArchiveRoomArea(), newEntity.getArchiveRoomArea())) { + details.add(fieldDetail(changeId, QualFilingFormStepEnum.BASIC_INFO, "备案基本信息变更", + "档案室面积(平方米)", + Objects.toString(exist.getArchiveRoomArea(), ""), + Objects.toString(newEntity.getArchiveRoomArea(), ""))); + } // 专职安全评价师数量(人) if (!Objects.equals(exist.getFulltimeEvaluatorCount(), newEntity.getFulltimeEvaluatorCount())) { details.add(fieldDetail(changeId, QualFilingFormStepEnum.BASIC_INFO, "备案基本信息变更", @@ -649,6 +811,27 @@ public class QualFilingChangeExecutor implements QualFilingChangeApi { Objects.toString(exist.getRegisteredEngineerCount(), ""), Objects.toString(newEntity.getRegisteredEngineerCount(), ""))); } + // 工作场所建筑面积(平方米) + if (!Objects.equals(exist.getWorkplaceArea(), newEntity.getWorkplaceArea())) { + details.add(fieldDetail(changeId, QualFilingFormStepEnum.BASIC_INFO, "备案基本信息变更", + "工作场所建筑面积(平方米)", + Objects.toString(exist.getWorkplaceArea(), ""), + Objects.toString(newEntity.getWorkplaceArea(), ""))); + } + // 单位基本情况介绍 + if (!Objects.equals(exist.getUnitIntro(), newEntity.getUnitIntro())) { + details.add(fieldDetail(changeId, QualFilingFormStepEnum.BASIC_INFO, "备案基本信息变更", + "单位基本情况介绍", + Objects.toString(exist.getUnitIntro(), ""), + Objects.toString(newEntity.getUnitIntro(), ""))); + } + // 单位基本情况附件地址 + if (!Objects.equals(exist.getAttachmentUrl(), newEntity.getAttachmentUrl())) { + details.add(fieldDetail(changeId, QualFilingFormStepEnum.BASIC_INFO, "备案基本信息变更", + "单位基本情况附件地址", + Objects.toString(exist.getAttachmentUrl(), ""), + Objects.toString(newEntity.getAttachmentUrl(), ""))); + } return details; } @@ -705,6 +888,84 @@ public class QualFilingChangeExecutor implements QualFilingChangeApi { return details; } + /** + * 装备清单变更明细。 + * existList 为原表 qual_filing_equipment 数据,newList 为本次提交的装备变更。 + * 按 sourceEquipmentId 对比增减,对共有装备逐字段对比修改。 + */ + private List diffEquipment(Long changeId + , List existList, List newList) { + List details = new ArrayList<>(); + // 原始装备: sourceEquipmentId -> DO + Map existingMap = safeList(existList).stream() + .filter(e -> e.getSourceEquipmentId() != null) + .collect(Collectors.toMap(QualFilingEquipmentDO::getSourceEquipmentId, e -> e, (a, b) -> a)); + // 新装备: sourceEquipmentId -> ChangeE + Map newMap = safeList(newList).stream() + .filter(e -> e.getSourceEquipmentId() != null) + .collect(Collectors.toMap(QualFilingEquipmentChangeE::getSourceEquipmentId, e -> e, (a, b) -> a)); + + // 增加 + for (Map.Entry entry : newMap.entrySet()) { + if (!existingMap.containsKey(entry.getKey())) { + QualFilingEquipmentChangeE e = entry.getValue(); + String desc = equipmentDesc(e.getDeviceName(), e.getDeviceModel()); + details.add(fieldDetail(changeId, QualFilingFormStepEnum.EQUIPMENT, "装备清单变更", + "增加", "", desc)); + } + } + // 减少 + for (Map.Entry entry : existingMap.entrySet()) { + if (!newMap.containsKey(entry.getKey())) { + QualFilingEquipmentDO e = entry.getValue(); + String desc = equipmentDesc(e.getDeviceName(), e.getDeviceModel()); + details.add(fieldDetail(changeId, QualFilingFormStepEnum.EQUIPMENT, "装备清单变更", + "减少", desc, "")); + } + } + // 修改(逐字段对比) + for (Map.Entry entry : newMap.entrySet()) { + QualFilingEquipmentDO oldE = existingMap.get(entry.getKey()); + if (oldE == null) { + continue; + } + QualFilingEquipmentChangeE newE = entry.getValue(); + String prefix = equipmentDesc(oldE.getDeviceName(), oldE.getDeviceModel()); + diffEquipmentField(details, changeId, prefix, "设备名称", oldE.getDeviceName(), newE.getDeviceName()); + diffEquipmentField(details, changeId, prefix, "设备型号", oldE.getDeviceModel(), newE.getDeviceModel()); + diffEquipmentField(details, changeId, prefix, "仪器类型编码", oldE.getInstrumentTypeCode(), newE.getInstrumentTypeCode()); + diffEquipmentField(details, changeId, prefix, "仪器类型名称", oldE.getInstrumentTypeName(), newE.getInstrumentTypeName()); + diffEquipmentField(details, changeId, prefix, "设备类型编码", oldE.getDeviceTypeCode(), newE.getDeviceTypeCode()); + diffEquipmentField(details, changeId, prefix, "设备类型名称", oldE.getDeviceTypeName(), newE.getDeviceTypeName()); + diffEquipmentField(details, changeId, prefix, "厂家", oldE.getManufacturer(), newE.getManufacturer()); + diffEquipmentField(details, changeId, prefix, "设备价值", oldE.getEquipmentValue(), newE.getEquipmentValue()); + diffEquipmentField(details, changeId, prefix, "设备流量说明", oldE.getFlowDesc(), newE.getFlowDesc()); + diffEquipmentField(details, changeId, prefix, "最小流量", oldE.getMinFlow(), newE.getMinFlow()); + diffEquipmentField(details, changeId, prefix, "最大流量", oldE.getMaxFlow(), newE.getMaxFlow()); + diffEquipmentField(details, changeId, prefix, "校准单位", oldE.getCalibrationUnit(), newE.getCalibrationUnit()); + diffEquipmentField(details, changeId, prefix, "校准初始值", oldE.getCalibrationInitValue(), newE.getCalibrationInitValue()); + diffEquipmentField(details, changeId, prefix, "现场校验类型编码", oldE.getFieldCalibrationTypeCode(), newE.getFieldCalibrationTypeCode()); + diffEquipmentField(details, changeId, prefix, "现场校验类型名称", oldE.getFieldCalibrationTypeName(), newE.getFieldCalibrationTypeName()); + diffEquipmentField(details, changeId, prefix, "是否双路", oldE.getDualChannelFlag(), newE.getDualChannelFlag()); + diffEquipmentField(details, changeId, prefix, "计量检定报告地址", oldE.getCalibrationReportUrl(), newE.getCalibrationReportUrl()); + } + return details; + } + + private void diffEquipmentField(List details, Long changeId, + String prefix, String fieldName, Object before, Object after) { + if (!Objects.equals(before, after)) { + details.add(fieldDetail(changeId, QualFilingFormStepEnum.EQUIPMENT, "装备清单变更", + prefix + "-" + fieldName, + Objects.toString(before, ""), + Objects.toString(after, ""))); + } + } + + private String equipmentDesc(String deviceName, String deviceModel) { + return Objects.toString(deviceName, "") + (deviceModel != null ? "(" + deviceModel + ")" : ""); + } + /** * 管理人员变更明细。 * existList 为从 qual_filing_personnel 关联 org_personnel 查出的管理人员,newList 为本次提交的人员变更。 diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/QualFilingExecutor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/QualFilingExecutor.java index 725a23e7..b36de292 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/QualFilingExecutor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/QualFilingExecutor.java @@ -185,8 +185,9 @@ public class QualFilingExecutor implements QualFilingApi { @Override @Transactional(rollbackFor = Exception.class) public SingleResponse> aggregationSaveOrEdit(AggregationSaveOrEditQualFilingCmd cmd) { - if (cmd.getQualFilingAddCmd().getFilingStatusCode() != null - && cmd.getQualFilingAddCmd().getFilingStatusCode() != QualFilingStatusEnum.DRAFT.getCode()) { + boolean nonDraft = cmd.getQualFilingAddCmd().getFilingStatusCode() != null + && cmd.getQualFilingAddCmd().getFilingStatusCode() != QualFilingStatusEnum.DRAFT.getCode(); + if (nonDraft) { List complianceResults = ComplianceCheckUtil.complianceCheck(cmd, false); complianceResults = complianceResults.stream() .filter(r -> QualFilingComplianceCheckEnum.STATUS_FAIL.equals(r.getStatus())) @@ -198,12 +199,14 @@ public class QualFilingExecutor implements QualFilingApi { // 新增时校验:用当前id查询记录获取org_id,若同机构已存在其他资质备案记录则不允许新增 Long currentId = cmd.getQualFilingAddCmd().getId(); if (currentId == null) { - Long count = qualFilingMapper.selectCount(new LambdaQueryWrapper() + QualFilingDO one = qualFilingMapper.selectOne(new LambdaQueryWrapper() + .select(QualFilingDO::getId) .eq(QualFilingDO::getOrgId, ThreadLocalUserInfoAdapter.getOrgId()) .eq(QualFilingDO::getDeleteEnum, BooleanQAEnum.FALSE.getValue())); - if (count != null && count > 0) { + if (nonDraft && one != null) { throw new BizException(ErrorCode.QUAL_FILING_ALREADY_EXISTS); } + cmd.getQualFilingAddCmd().setId(one != null ? one.getId() : null); } QualFilingCO co = qualFilingAddCmdConvertor.convertFilingCmdToCO(cmd.getQualFilingAddCmd()); From 9ac15c2ddfd6d00d03f89a681267bb54dca95042 Mon Sep 17 00:00:00 2001 From: luotaiqian <1147642922@qq.com> Date: Fri, 14 Aug 2026 15:31:40 +0800 Subject: [PATCH 4/7] job --- .../safetyeval/app/executor/QualFilingChangeExecutor.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/QualFilingChangeExecutor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/QualFilingChangeExecutor.java index c8ed8543..c0474b20 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/QualFilingChangeExecutor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/QualFilingChangeExecutor.java @@ -102,6 +102,8 @@ public class QualFilingChangeExecutor implements QualFilingChangeApi { @Resource private QualFilingCommitmentMapper qualFilingCommitmentMapper; + @Resource + private QualFilingEquipmentMapper qualFilingEquipmentMapper; @Override public SingleResponse add(QualFilingChangeAddCmd cmd) { @@ -951,7 +953,7 @@ public class QualFilingChangeExecutor implements QualFilingChangeApi { } private void diffEquipmentField(List details, Long changeId, - String prefix, String fieldName, Object before, Object after) { + String prefix, String fieldName, Object before, Object after) { if (!Objects.equals(before, after)) { details.add(fieldDetail(changeId, QualFilingFormStepEnum.EQUIPMENT, "装备清单变更", prefix + "-" + fieldName, From b5799d8cdbfaa2a7fb04c51a13ee8e487e2ac42f Mon Sep 17 00:00:00 2001 From: luotaiqian <1147642922@qq.com> Date: Fri, 14 Aug 2026 15:45:03 +0800 Subject: [PATCH 5/7] job --- .../executor/QualFilingChangeExecutor.java | 1 - .../co/QualFilingPersonnelChangeInfoCO.java | 6 +- .../QualFilingPersonnelChangeMapper.xml | 93 ++++++++++--------- 3 files changed, 52 insertions(+), 48 deletions(-) diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/QualFilingChangeExecutor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/QualFilingChangeExecutor.java index c0474b20..2b681ca4 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/QualFilingChangeExecutor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/QualFilingChangeExecutor.java @@ -466,7 +466,6 @@ public class QualFilingChangeExecutor implements QualFilingChangeApi { // 人员清单 List personnelList = qualFilingPersonnelChangeMapper.getFillingChangePersonInfo(changeFilingId); if (!CollectionUtils.isEmpty(personnelList)) { - setProfessionalCapabilityCodeList(personnelList); detail.setPersonnelList(personnelList); } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/QualFilingPersonnelChangeInfoCO.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/QualFilingPersonnelChangeInfoCO.java index 37d33041..8517a264 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/QualFilingPersonnelChangeInfoCO.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/QualFilingPersonnelChangeInfoCO.java @@ -54,6 +54,7 @@ public class QualFilingPersonnelChangeInfoCO { @ApiModelProperty(value = "能力认定") private List capabilityAssessment; + @ApiModelProperty(value = "职称(多个逗号分隔)") private List titleCodeArr; @@ -66,6 +67,9 @@ public class QualFilingPersonnelChangeInfoCO { @ApiModelProperty(value = "学历") private String educationName; - @ApiModelProperty(value = "是否管理人员") + @ApiModelProperty(value = "是否技术负责人(0否1是)") private Boolean technicalDirectorFlag; + + @ApiModelProperty(value = "是否过程控制负责人(0否1是)") + private Boolean processControlLeaderFlag; } diff --git a/safety-eval-infrastructure/src/main/resources/mapper/QualFilingPersonnelChangeMapper.xml b/safety-eval-infrastructure/src/main/resources/mapper/QualFilingPersonnelChangeMapper.xml index 35e5e3a5..37a7820a 100644 --- a/safety-eval-infrastructure/src/main/resources/mapper/QualFilingPersonnelChangeMapper.xml +++ b/safety-eval-infrastructure/src/main/resources/mapper/QualFilingPersonnelChangeMapper.xml @@ -3,7 +3,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - @@ -47,42 +46,42 @@ select id, - filing_change_id, - source_personnel_id, - person_name, - person_type_code, - position_name, - title_code_arr, - gender_code, - gender_name, - birth_date, - join_work_date, - id_card_no, - current_address, - office_address, - education_code, - education_name, - graduate_school, - major, - qual_scope, - publications, - professional_level_cert, - register_engineer_flag, - ability_declaration, - work_experience, - proof_material_url, - delete_enum, - remarks, - create_name, - update_name, - tenant_id, - org_id, - version, - create_time, - update_time, - create_id, - update_id, - env + filing_change_id, + source_personnel_id, + person_name, + person_type_code, + position_name, + title_code_arr, + gender_code, + gender_name, + birth_date, + join_work_date, + id_card_no, + current_address, + office_address, + education_code, + education_name, + graduate_school, + major, + qual_scope, + publications, + professional_level_cert, + register_engineer_flag, + ability_declaration, + work_experience, + proof_material_url, + delete_enum, + remarks, + create_name, + update_name, + tenant_id, + org_id, + version, + create_time, + update_time, + create_id, + update_id, + env from qual_filing_personnel_change @@ -96,17 +95,20 @@ @@ -116,8 +118,7 @@ FROM qual_filing_personnel qfp JOIN org_personnel op ON qfp.source_personnel_id = op.id WHERE qfp.filing_id = #{filingId} - AND qfp.delete_enum = 'false' - AND (op.technical_director_flag = 1 OR op.process_control_leader_flag = 1) + AND qfp.delete_enum = 'false' + AND (op.technical_director_flag = 1 OR op.process_control_leader_flag = 1) - \ No newline at end of file From 5c759f12ed0a2c8c796e4c4b2bcc50c941df8405 Mon Sep 17 00:00:00 2001 From: zhanglei Date: Fri, 14 Aug 2026 15:52:49 +0800 Subject: [PATCH 6/7] bug --- .../review/request/QualOnSiteReviewMonitorPageQry.java | 4 +++- .../review/request/QualOnSiteReviewOrgPageQry.java | 4 +++- .../main/resources/mapper/QualOnSiteReviewMapper.xml | 10 ++++++++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/request/QualOnSiteReviewMonitorPageQry.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/request/QualOnSiteReviewMonitorPageQry.java index 2b566ac4..7ad36ae0 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/request/QualOnSiteReviewMonitorPageQry.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/request/QualOnSiteReviewMonitorPageQry.java @@ -7,7 +7,6 @@ import org.qinan.safetyeval.client.dto.BasePageQuery; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDate; -import java.time.LocalDateTime; /** * 资质现场核查监管端分页查询Qry @@ -46,4 +45,7 @@ public class QualOnSiteReviewMonitorPageQry extends BasePageQuery { @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate reviewDateStartEnd; + @ApiModelProperty(value = "关键字") + private String keyword; + } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/request/QualOnSiteReviewOrgPageQry.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/request/QualOnSiteReviewOrgPageQry.java index 352d5592..84db44ee 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/request/QualOnSiteReviewOrgPageQry.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/request/QualOnSiteReviewOrgPageQry.java @@ -8,7 +8,6 @@ import org.qinan.safetyeval.client.dto.BasePageQuery; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDate; -import java.time.LocalDateTime; /** * 资质现场核查机构端分页查询Qry @@ -48,4 +47,7 @@ public class QualOnSiteReviewOrgPageQry extends BasePageQuery { @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate reviewDateStartEnd; + @ApiModelProperty(value = "关键字") + private String keyword; + } diff --git a/safety-eval-infrastructure/src/main/resources/mapper/QualOnSiteReviewMapper.xml b/safety-eval-infrastructure/src/main/resources/mapper/QualOnSiteReviewMapper.xml index 649a8df7..2f14e1ac 100644 --- a/safety-eval-infrastructure/src/main/resources/mapper/QualOnSiteReviewMapper.xml +++ b/safety-eval-infrastructure/src/main/resources/mapper/QualOnSiteReviewMapper.xml @@ -67,6 +67,9 @@ and info.unit_name like concat('%', #{query.unitName}, '%') + + and review.id = #{query.keyword} + and review.status = #{query.status} @@ -74,7 +77,7 @@ and review.review_date_start >= #{query.reviewDateStartBegin} - and review.review_date_start <= #{query.reviewDateStartEnd} + and review.review_date_start <= DATE_ADD(#{query.reviewDateStartEnd}, INTERVAL 1 DAY) order by review.id desc @@ -95,6 +98,9 @@ from qual_on_site_review review where review.delete_enum = 'false' and review.org_id = #{query.orgId} + + and review.id = #{query.keyword} + and review.status = #{query.status} @@ -102,7 +108,7 @@ and review.review_date_start >= #{query.reviewDateStartBegin} - and review.review_date_start <= #{query.reviewDateStartEnd} + and review.review_date_start <= DATE_ADD(#{query.reviewDateStartEnd}, INTERVAL 1 DAY) order by review.id desc From 94c47a6e114490e0f32c1cdaf58471b765807d1d Mon Sep 17 00:00:00 2001 From: zhanglei Date: Fri, 14 Aug 2026 16:30:04 +0800 Subject: [PATCH 7/7] bug --- .../org/qinan/safetyeval/app/executor/AccountExecutor.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/AccountExecutor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/AccountExecutor.java index c949dec6..b4cb8000 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/AccountExecutor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/AccountExecutor.java @@ -63,7 +63,9 @@ public class AccountExecutor implements AccountApi { public SingleResponse add(AccountAddCmd cmd) { smsRemote.signValidCode(cmd.getPhone(), cmd.getVerificationCode()); AccountEntity entity = new AccountEntity(); - entity.setUserName(cmd.getUserName()); + if (cmd.getUserName() == null) { + entity.setUserName(cmd.getAccount()); + } entity.setAccount(cmd.getAccount()); entity.setPhone(cmd.getPhone()); entity.setPassword(cmd.getPassword());