diff --git a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/QualFilingChangeController.java b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/QualFilingChangeController.java index bf0a2fd..5d2e4ef 100644 --- a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/QualFilingChangeController.java +++ b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/QualFilingChangeController.java @@ -4,6 +4,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.qinan.safetyeval.client.api.QualFilingChangeApi; +import org.qinan.safetyeval.client.co.QualFilingChangeAggregationCO; import org.qinan.safetyeval.client.co.QualFilingChangeCO; import org.qinan.safetyeval.client.co.QualFilingChangeComplianceCheckResultCO; import org.qinan.safetyeval.client.dto.*; @@ -105,4 +106,10 @@ public class QualFilingChangeController { qualFilingChangeApi.review(cmd); return SingleResponse.success(); } + + @ApiOperation("备案变更详情(5表聚合)") + @GetMapping("/detail") + public SingleResponse detail(@ApiParam("主键ID") @RequestParam Long id) { + return qualFilingChangeApi.detail(id); + } } diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/change/convertor/QualFilingCommitmentChangeCmdConvertor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/change/convertor/QualFilingCommitmentChangeCmdConvertor.java index a67f4e3..5ea84a2 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/change/convertor/QualFilingCommitmentChangeCmdConvertor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/change/convertor/QualFilingCommitmentChangeCmdConvertor.java @@ -4,6 +4,7 @@ import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.qinan.safetyeval.client.change.request.QualFilingCommitmentChangeAddCmd; import org.qinan.safetyeval.client.change.request.QualFilingCommitmentChangeUpdateCmd; +import org.qinan.safetyeval.client.co.QualFilingCommitmentCO; import org.qinan.safetyeval.domain.change.model.QualFilingCommitmentChangeE; import org.qinan.safetyeval.domain.entity.QualFilingCommitmentEntity; @@ -41,4 +42,10 @@ public interface QualFilingCommitmentChangeCmdConvertor { @Mapping(target = "tenantId", ignore = true) @Mapping(target = "orgId", ignore = true) QualFilingCommitmentEntity convertChangeEToEntity(QualFilingCommitmentChangeE changeE); + + /** + * 变更承诺书转承诺书CO + */ + @Mapping(source = "filingChangeId", target = "filingId") + QualFilingCommitmentCO convertChangeEToCO(QualFilingCommitmentChangeE changeE); } diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/change/convertor/QualFilingEquipmentChangeCmdConvertor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/change/convertor/QualFilingEquipmentChangeCmdConvertor.java index e6a6156..66647c4 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/change/convertor/QualFilingEquipmentChangeCmdConvertor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/change/convertor/QualFilingEquipmentChangeCmdConvertor.java @@ -4,6 +4,7 @@ import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.qinan.safetyeval.client.change.request.QualFilingEquipmentChangeAddCmd; import org.qinan.safetyeval.client.change.request.QualFilingEquipmentChangeUpdateCmd; +import org.qinan.safetyeval.client.co.QualFilingEquipmentCO; import org.qinan.safetyeval.domain.change.model.QualFilingEquipmentChangeE; import org.qinan.safetyeval.domain.entity.QualFilingEquipmentEntity; @@ -48,4 +49,15 @@ public interface QualFilingEquipmentChangeCmdConvertor { * 批量转换 */ List convertChangeEListToEntityList(List changeEs); + + /** + * 变更装备转装备CO + */ + @Mapping(source = "filingChangeId", target = "filingId") + QualFilingEquipmentCO convertChangeEToCO(QualFilingEquipmentChangeE changeE); + + /** + * 批量转换变更装备为CO + */ + List convertChangeEListToCOList(List changeEs); } diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/change/convertor/QualFilingMaterialChangeCmdConvertor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/change/convertor/QualFilingMaterialChangeCmdConvertor.java index 139d00c..c9a9117 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/change/convertor/QualFilingMaterialChangeCmdConvertor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/change/convertor/QualFilingMaterialChangeCmdConvertor.java @@ -4,6 +4,7 @@ import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.qinan.safetyeval.client.change.request.QualFilingMaterialChangeAddCmd; import org.qinan.safetyeval.client.change.request.QualFilingMaterialChangeUpdateCmd; +import org.qinan.safetyeval.client.co.QualFilingMaterialCO; import org.qinan.safetyeval.domain.change.model.QualFilingMaterialChangeE; import org.qinan.safetyeval.domain.entity.QualFilingMaterialEntity; @@ -48,4 +49,16 @@ public interface QualFilingMaterialChangeCmdConvertor { * 批量转换 */ List convertChangeEListToEntityList(List changeEs); + + /** + * 变更材料转材料CO + */ + @Mapping(source = "filingChangeId", target = "filingId") + @Mapping(target = "materialType", ignore = true) + QualFilingMaterialCO convertChangeEToCO(QualFilingMaterialChangeE changeE); + + /** + * 批量转换变更材料为CO + */ + List convertChangeEListToCOList(List changeEs); } diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/change/convertor/QualFilingPersonnelCertChangeCmdConvertor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/change/convertor/QualFilingPersonnelCertChangeCmdConvertor.java index df4f6f9..78ec511 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/change/convertor/QualFilingPersonnelCertChangeCmdConvertor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/change/convertor/QualFilingPersonnelCertChangeCmdConvertor.java @@ -4,6 +4,7 @@ import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.qinan.safetyeval.client.change.request.QualFilingPersonnelCertChangeAddCmd; import org.qinan.safetyeval.client.change.request.QualFilingPersonnelCertChangeUpdateCmd; +import org.qinan.safetyeval.client.co.QualFilingPersonnelCertCO; import org.qinan.safetyeval.domain.change.model.QualFilingPersonnelCertChangeE; import org.qinan.safetyeval.domain.entity.QualFilingPersonnelCertEntity; @@ -48,4 +49,15 @@ public interface QualFilingPersonnelCertChangeCmdConvertor { * 批量转换 */ List convertChangeEListToEntityList(List changeEs); + + /** + * 变更人员证书转人员证书CO + */ + @Mapping(source = "filingChangeId", target = "filingId") + QualFilingPersonnelCertCO convertChangeEToCO(QualFilingPersonnelCertChangeE changeE); + + /** + * 批量转换变更人员证书为CO + */ + List convertChangeEListToCOList(List changeEs); } diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/change/convertor/QualFilingPersonnelChangeCmdConvertor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/change/convertor/QualFilingPersonnelChangeCmdConvertor.java index 04b3405..8ed2f24 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/change/convertor/QualFilingPersonnelChangeCmdConvertor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/change/convertor/QualFilingPersonnelChangeCmdConvertor.java @@ -4,6 +4,7 @@ import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.qinan.safetyeval.client.change.request.QualFilingPersonnelChangeAddCmd; import org.qinan.safetyeval.client.change.request.QualFilingPersonnelChangeUpdateCmd; +import org.qinan.safetyeval.client.co.QualFilingPersonnelCO; import org.qinan.safetyeval.domain.change.model.QualFilingPersonnelChangeE; import org.qinan.safetyeval.domain.entity.QualFilingPersonnelEntity; @@ -48,4 +49,15 @@ public interface QualFilingPersonnelChangeCmdConvertor { * 批量转换 */ List convertChangeEListToEntityList(List changeEs); + + /** + * 变更人员转人员CO + */ + @Mapping(source = "filingChangeId", target = "filingId") + QualFilingPersonnelCO convertChangeEToCO(QualFilingPersonnelChangeE changeE); + + /** + * 批量转换变更人员为CO + */ + List convertChangeEListToCOList(List changeEs); } 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 b9bf76c..f286b4c 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 @@ -3,11 +3,13 @@ package org.qinan.safetyeval.app.executor; import org.qinan.safetyeval.app.change.convertor.*; import org.qinan.safetyeval.app.orchestrator.QualFilingOrchestrator; import org.qinan.safetyeval.client.api.QualFilingChangeApi; +import org.qinan.safetyeval.client.co.QualFilingChangeAggregationCO; import org.qinan.safetyeval.client.co.QualFilingChangeCO; import org.qinan.safetyeval.client.co.QualFilingChangeComplianceCheckResultCO; import org.qinan.safetyeval.client.co.QualFilingChangeHistoryCO; import org.qinan.safetyeval.client.dto.*; import org.qinan.safetyeval.domain.change.gateway.*; +import org.qinan.safetyeval.domain.gateway.QualFilingChangeDetailGateway; import org.qinan.safetyeval.domain.change.model.*; import org.qinan.safetyeval.domain.constant.QualFilingFormStepEnum; import org.qinan.safetyeval.domain.constant.QualFilingReviewResultEnum; @@ -21,6 +23,7 @@ import org.qinan.safetyeval.domain.service.QualFilingChangeDomainService; import org.qinan.safetyeval.domain.service.QualFilingDomainService; import org.qinan.safetyeval.domain.service.QualFilingReviewDomainService; import org.qinan.safetyeval.infrastructure.adapter.auth.AuthUserContextAdapter; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -78,6 +81,9 @@ public class QualFilingChangeExecutor implements QualFilingChangeApi { @Resource private QualFilingPersonnelCertChangeGateway qualFilingPersonnelCertChangeGateway; + @Resource + private QualFilingChangeDetailGateway qualFilingChangeDetailGateway; + @Override public SingleResponse add(QualFilingChangeAddCmd cmd) { QualFilingChangeEntity entity = new QualFilingChangeEntity(); @@ -203,6 +209,7 @@ public class QualFilingChangeExecutor implements QualFilingChangeApi { } @Override + @Transactional(rollbackFor = Exception.class) public SingleResponse aggregationSaveOrEdit(AggregationSaveOrEditQualFilingChangeCmd cmd) { validateBeforeSaveOrEdit(cmd); @@ -235,17 +242,29 @@ public class QualFilingChangeExecutor implements QualFilingChangeApi { .collect(Collectors.toList()); } - Long id = qualFilingChangeDomainService.aggregationSaveOrEdit(entity, commitmentEntity - , equipmentEntities, materialEntities, personnelEntities, personnelCertEntities); - // 编辑场景:对比请求数据与已有变更数据,生成变更明细 if (!cmd.isAdd()) { - List details = diffFromCmd(cmd.getQualFilingChangeAddCmd().getId() + Long changeId = cmd.getQualFilingChangeAddCmd().getId(); + List details = diffFromCmd(changeId , entity, commitmentEntity, equipmentEntities , materialEntities, personnelEntities, personnelCertEntities); - // TODO: 后续可将details传入domainService进行持久化 + // 根据changeId先删除原有变更明细,再新增 + List existingDetails = qualFilingChangeDetailGateway.listByChangeId(changeId); + if (!CollectionUtils.isEmpty(existingDetails)) { + existingDetails.forEach(d -> qualFilingChangeDetailGateway.delete(d.getId())); + } + if (!CollectionUtils.isEmpty(details)) { + String operatorName = AuthUserContextAdapter.getCurrentUserName(); + details.forEach(d -> { + d.setCreateName(operatorName); + qualFilingChangeDetailGateway.save(d); + }); + } } + Long id = qualFilingChangeDomainService.aggregationSaveOrEdit(entity, commitmentEntity + , equipmentEntities, materialEntities, personnelEntities, personnelCertEntities); + QualFilingChangeCO co = new QualFilingChangeCO(); co.setId(id); return SingleResponse.success(co); @@ -325,6 +344,55 @@ public class QualFilingChangeExecutor implements QualFilingChangeApi { qualFilingChangeDomainService.modify(updateE); } + @Override + public SingleResponse detail(Long id) { + // 查询变更主记录 + QualFilingChangeEntity changeEntity = qualFilingChangeDomainService.get(id); + if (changeEntity == null) { + throw new BizException(ErrorCode.QUAL_FILING_CHANGE_NOT_FOUND); + } + + QualFilingChangeAggregationCO detail = new QualFilingChangeAggregationCO(); + BeanUtils.copyProperties(toCO(changeEntity), detail); + + Long changeFilingId = changeEntity.getChangeFilingId(); + if (changeFilingId == null) { + return SingleResponse.success(detail); + } + + // 承诺书 + QualFilingCommitmentChangeE commitmentChangeE = qualFilingCommitmentChangeGateway.getByFilingId(changeFilingId); + if (commitmentChangeE != null) { + detail.setCommitment(qualFilingCommitmentChangeCmdConvertor.convertChangeEToCO(commitmentChangeE)); + } + + // 装备清单 + List equipmentChangeEs = qualFilingEquipmentChangeGateway.listByFilingId(changeFilingId); + if (!CollectionUtils.isEmpty(equipmentChangeEs)) { + detail.setEquipmentList(qualFilingEquipmentChangeCmdConvertor.convertChangeEListToCOList(equipmentChangeEs)); + } + + // 材料清单 + List materialChangeEs = qualFilingMaterialChangeGateway.listByFilingId(changeFilingId); + if (!CollectionUtils.isEmpty(materialChangeEs)) { + detail.setMaterialList(qualFilingMaterialChangeCmdConvertor.convertChangeEListToCOList(materialChangeEs)); + } + + // 人员清单 + List personnelChangeEs = qualFilingPersonnelChangeGateway.listByFilingId(changeFilingId); + if (!CollectionUtils.isEmpty(personnelChangeEs)) { + detail.setPersonnelList(qualFilingPersonnelChangeCmdConvertor.convertChangeEListToCOList(personnelChangeEs)); + } + + // 人员证书清单 + List personnelCertChangeEs = qualFilingPersonnelCertChangeGateway.listByFilingId(changeFilingId); + if (!CollectionUtils.isEmpty(personnelCertChangeEs)) { + detail.setPersonnelCertList(qualFilingPersonnelCertChangeCmdConvertor.convertChangeEListToCOList(personnelCertChangeEs)); + } + + return SingleResponse.success(detail); + } + /** * 聚合保存或编辑前的状态校验 *
    diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/QualFilingChangeApi.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/QualFilingChangeApi.java index ab3f870..62e30b3 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/QualFilingChangeApi.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/QualFilingChangeApi.java @@ -1,5 +1,6 @@ package org.qinan.safetyeval.client.api; +import org.qinan.safetyeval.client.co.QualFilingChangeAggregationCO; import org.qinan.safetyeval.client.co.QualFilingChangeComplianceCheckResultCO; import org.qinan.safetyeval.client.co.QualFilingChangeHistoryCO; import org.qinan.safetyeval.client.co.QualFilingChangeCO; @@ -45,4 +46,6 @@ public interface QualFilingChangeApi { SingleResponse aggregationSaveOrEdit(AggregationSaveOrEditQualFilingChangeCmd cmd); void review(QualFilingChangeReviewAddCmd cmd); + + SingleResponse detail(Long id); } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/QualFilingChangeAggregationCO.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/QualFilingChangeAggregationCO.java new file mode 100644 index 0000000..3af4db4 --- /dev/null +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/QualFilingChangeAggregationCO.java @@ -0,0 +1,32 @@ +package org.qinan.safetyeval.client.co; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * 备案变更详情聚合 CO(5 个子表聚合) + * + * @author safety-eval + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class QualFilingChangeAggregationCO extends QualFilingChangeCO { + + @ApiModelProperty(value = "法定代表人承诺书") + private QualFilingCommitmentCO commitment; + + @ApiModelProperty(value = "变更装备列表") + private List equipmentList; + + @ApiModelProperty(value = "变更材料列表") + private List materialList; + + @ApiModelProperty(value = "变更人员列表") + private List personnelList; + + @ApiModelProperty(value = "变更人员证书列表") + private List personnelCertList; +} \ No newline at end of file