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 71552f07..d772caf8 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 @@ -1,5 +1,6 @@ package org.qinan.safetyeval.app.executor; +import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -12,6 +13,7 @@ import org.qinan.safetyeval.client.dto.*; import org.qinan.safetyeval.domain.change.gateway.*; import org.qinan.safetyeval.domain.change.model.*; import org.qinan.safetyeval.domain.constant.*; +import org.qinan.safetyeval.domain.constant.basic.IndustryEnum; import org.qinan.safetyeval.domain.entity.*; import org.qinan.safetyeval.domain.exception.BizException; import org.qinan.safetyeval.domain.exception.ErrorCode; @@ -689,170 +691,163 @@ 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())) { + if (!valueEquals(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())) { + if (!valueEquals(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())) { + if (!valueEquals(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())) { + if (!valueEquals(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())) { + if (!valueEquals(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())) { + if (!valueEquals(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)); - } + diffBusinessScope(changeId, exist.getBusinessScope(), newEntity.getBusinessScope(), details); // 注册地址 - if (!Objects.equals(exist.getRegisterAddress(), newEntity.getRegisterAddress())) { + if (!valueEquals(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())) { + if (!valueEquals(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())) { + if (!valueEquals(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())) { + if (!valueEquals(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())) { + if (!valueEquals(exist.getLegalRepresentative(), newEntity.getLegalRepresentative())) { details.add(fieldDetail(changeId, QualFilingFormStepEnum.BASIC_INFO, "备案基本信息变更", "法定代表人", Objects.toString(exist.getLegalRepresentative(), ""), Objects.toString(newEntity.getLegalRepresentative(), ""))); } // 法人代表及电话 - if (!Objects.equals(exist.getLegalPersonPhone(), newEntity.getLegalPersonPhone())) { + if (!valueEquals(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())) { + if (!valueEquals(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())) { + if (!valueEquals(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())) { + if (!valueEquals(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())) { + if (!valueEquals(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())) { + if (!valueEquals(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())) { + if (!valueEquals(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())) { + if (!valueEquals(exist.getFulltimeEvaluatorCount(), newEntity.getFulltimeEvaluatorCount())) { details.add(fieldDetail(changeId, QualFilingFormStepEnum.BASIC_INFO, "备案基本信息变更", "专职安全评价师数量(人)", Objects.toString(exist.getFulltimeEvaluatorCount(), ""), Objects.toString(newEntity.getFulltimeEvaluatorCount(), ""))); } // 注册安全工程师数量(人) - if (!Objects.equals(exist.getRegisteredEngineerCount(), newEntity.getRegisteredEngineerCount())) { + if (!valueEquals(exist.getRegisteredEngineerCount(), newEntity.getRegisteredEngineerCount())) { details.add(fieldDetail(changeId, QualFilingFormStepEnum.BASIC_INFO, "备案基本信息变更", "注册安全工程师数量(人)", Objects.toString(exist.getRegisteredEngineerCount(), ""), Objects.toString(newEntity.getRegisteredEngineerCount(), ""))); } // 工作场所建筑面积(平方米) - if (!bigDecimalEquals(exist.getWorkplaceArea(), newEntity.getWorkplaceArea())) { + if (!valueEquals(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())) { + if (!valueEquals(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())) { + if (!valueEquals(exist.getAttachmentUrl(), newEntity.getAttachmentUrl())) { details.add(fieldDetail(changeId, QualFilingFormStepEnum.BASIC_INFO, "备案基本信息变更", "单位基本情况附件地址", Objects.toString(exist.getAttachmentUrl(), ""), @@ -861,6 +856,44 @@ public class QualFilingChangeExecutor implements QualFilingChangeApi { return details; } + /** + * 备案安全评价业务范围变更明细(转 Set 比较,忽略顺序与重复;编码转换为行业名称展示) + */ + private void diffBusinessScope(Long changeId, String existScopeJson, List newScope, + List details) { + Set existScopeSet = toIndustryCodeSet(existScopeJson); + Set newScopeSet = newScope == null ? new LinkedHashSet<>() : new LinkedHashSet<>(newScope); + if (Objects.equals(existScopeSet, newScopeSet)) { + return; + } + details.add(fieldDetail(changeId, QualFilingFormStepEnum.BASIC_INFO, "备案基本信息变更", + "备案安全评价业务范围", + toIndustryNames(existScopeSet), + toIndustryNames(newScopeSet))); + } + + /** + * 业务范围 JSON 数组字符串转编码集合 + */ + private Set toIndustryCodeSet(String scopeJson) { + if (!StringUtils.hasText(scopeJson)) { + return new LinkedHashSet<>(); + } + return new LinkedHashSet<>(JSONUtil.toList(scopeJson, String.class)); + } + + /** + * 行业编码集合转行业名称,多个以逗号分隔(未匹配到枚举时保留原编码) + */ + private String toIndustryNames(Set codes) { + return codes.stream() + .map(code -> { + String value = IndustryEnum.getValueByCode(code); + return value != null ? value : code; + }) + .collect(Collectors.joining(",")); + } + private boolean commitmentChanged(QualFilingCommitmentChangeE exist, QualFilingCommitmentChangeE newEntity) { String existSig = exist == null ? "" : exist.getCommitmentContent() + "|" + exist.getLegalRepSignatureUrl() + "|" + exist.getSignDate() + "|" + exist.getLegalRepPersonnelId() + "|" + exist.getLegalRepName();