diff --git a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/QualOnSiteReviewController.java b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/QualOnSiteReviewController.java index d8ee576..9a3a2dc 100644 --- a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/QualOnSiteReviewController.java +++ b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/QualOnSiteReviewController.java @@ -11,6 +11,7 @@ import org.qinan.safetyeval.client.review.request.QualOnSiteReviewAddCmd; import org.qinan.safetyeval.client.review.request.QualOnSiteReviewMonitorPageQry; import org.qinan.safetyeval.client.review.request.QualOnSiteReviewOrgPageQry; import org.qinan.safetyeval.client.review.request.QualOnSiteReviewPageQry; +import org.qinan.safetyeval.client.review.request.QualOnSiteReviewResultUploadCmd; import org.qinan.safetyeval.client.review.request.QualOnSiteReviewUpdateCmd; import org.qinan.safetyeval.client.review.response.QualOnSiteReviewCo; import org.qinan.safetyeval.client.review.response.QualOnSiteReviewMonitorCo; @@ -79,6 +80,13 @@ public class QualOnSiteReviewController implements Serializable { return Response.buildSuccess(); } + @PostMapping("/result-upload") + @ApiOperation("审查结果上传") + public Response uploadReviewResult(@Validated @RequestBody QualOnSiteReviewResultUploadCmd qualOnSiteReviewResultUploadCmd) { + qualOnSiteReviewServiceI.uploadReviewResult(qualOnSiteReviewResultUploadCmd); + return Response.buildSuccess(); + } + @DeleteMapping("/{id}") @ApiOperation("删除资质现场核查(单个)") public Response deletedById(@PathVariable("id") Long id) { diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/change/convertor/QualFilingChangeCmdConvertor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/change/convertor/QualFilingChangeCmdConvertor.java index 708af74..1777515 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/change/convertor/QualFilingChangeCmdConvertor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/change/convertor/QualFilingChangeCmdConvertor.java @@ -9,6 +9,7 @@ import org.qinan.safetyeval.client.dto.QualFilingAddCmd; import org.qinan.safetyeval.client.dto.QualFilingChangeAddCmd; import org.qinan.safetyeval.domain.entity.QualFilingChangeEntity; import org.qinan.safetyeval.domain.entity.QualFilingEntity; +import org.qinan.safetyeval.infrastructure.dataobject.QualFilingDO; import java.util.List; @@ -69,4 +70,23 @@ public interface QualFilingChangeCmdConvertor { @Mapping(target = "applyTypeCode", ignore = true) @Mapping(target = "applyTypeName", ignore = true) QualFilingAddCmd convertChangeEToFilingCmd(QualFilingChangeEntity changeEntity); + + /** + * 备案DO转变更Cmd(审核通过同步变更记录时使用) + *

+ * 原 BeanUtils.copyProperties(qualFilingDO, cmd, "id") 行为: + * - id 不拷贝 + * - filingId 由 DO.id 设置 + * - businessScope 由 JSON 字符串解析为 List + */ + @Mapping(target = "id", ignore = true) + @Mapping(target = "filingId", source = "id") + @Mapping(target = "changeFilingId", ignore = true) + @Mapping(target = "businessScope", source = "businessScope", qualifiedByName = "jsonStringToList") + QualFilingChangeAddCmd convertDOToCmd(QualFilingDO qualFilingDO); + + @Named("jsonStringToList") + default List jsonStringToList(String json) { + return json == null ? null : JSON.parseArray(json, String.class); + } } 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 e9d41da..639447c 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 @@ -8,6 +8,7 @@ import org.qinan.safetyeval.client.co.QualFilingCommitmentCO; import org.qinan.safetyeval.client.dto.QualFilingCommitmentAddCmd; import org.qinan.safetyeval.domain.change.model.QualFilingCommitmentChangeE; import org.qinan.safetyeval.domain.entity.QualFilingCommitmentEntity; +import org.qinan.safetyeval.infrastructure.dataobject.QualFilingCommitmentDO; import java.time.LocalDate; import java.time.LocalDateTime; @@ -63,7 +64,18 @@ public interface QualFilingCommitmentChangeCmdConvertor { */ QualFilingCommitmentAddCmd convertChangeEToCmd(QualFilingCommitmentChangeE changeE); + /** + * 备案承诺书DO转变更Cmd(审核通过同步变更记录时使用) + * signDate 由 LocalDate 转为 LocalDateTime + */ + @Mapping(target = "filingChangeId", ignore = true) + QualFilingCommitmentChangeAddCmd convertDOToCmd(QualFilingCommitmentDO qualFilingCommitmentDO); + default LocalDate map(LocalDateTime dateTime) { return dateTime == null ? null : dateTime.toLocalDate(); } + + default LocalDateTime map(LocalDate date) { + return date == null ? null : date.atStartOfDay(); + } } 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 66647c4..a56df15 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 @@ -7,6 +7,7 @@ import org.qinan.safetyeval.client.change.request.QualFilingEquipmentChangeUpdat import org.qinan.safetyeval.client.co.QualFilingEquipmentCO; import org.qinan.safetyeval.domain.change.model.QualFilingEquipmentChangeE; import org.qinan.safetyeval.domain.entity.QualFilingEquipmentEntity; +import org.qinan.safetyeval.infrastructure.dataobject.QualFilingEquipmentDO; import java.util.List; @@ -60,4 +61,15 @@ public interface QualFilingEquipmentChangeCmdConvertor { * 批量转换变更装备为CO */ List convertChangeEListToCOList(List changeEs); + + /** + * 备案装备DO转变更Cmd(审核通过同步变更记录时使用) + */ + @Mapping(target = "filingChangeId", ignore = true) + QualFilingEquipmentChangeAddCmd convertDOToCmd(QualFilingEquipmentDO qualFilingEquipmentDO); + + /** + * 批量转换备案装备DO为变更Cmd + */ + List convertDOListToCmdList(List qualFilingEquipmentDOs); } 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 13326c1..8b83ae1 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 @@ -8,6 +8,7 @@ import org.qinan.safetyeval.client.co.QualFilingMaterialCO; import org.qinan.safetyeval.client.dto.QualFilingMaterialAddCmd; import org.qinan.safetyeval.domain.change.model.QualFilingMaterialChangeE; import org.qinan.safetyeval.domain.entity.QualFilingMaterialEntity; +import org.qinan.safetyeval.infrastructure.dataobject.QualFilingMaterialDO; import java.util.List; @@ -80,4 +81,15 @@ public interface QualFilingMaterialChangeCmdConvertor { * 批量转换变更实体为备案Cmd */ List convertChangeEListToCmdList(List changeEs); + + /** + * 备案材料DO转变更Cmd(审核通过同步变更记录时使用) + */ + @Mapping(target = "filingChangeId", ignore = true) + QualFilingMaterialChangeAddCmd convertDOToCmd(QualFilingMaterialDO qualFilingMaterialDO); + + /** + * 批量转换备案材料DO为变更Cmd + */ + List convertDOListToCmdList(List qualFilingMaterialDOs); } 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 dc3cfcc..59a2943 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 @@ -8,6 +8,7 @@ import org.qinan.safetyeval.client.co.QualFilingPersonnelCO; import org.qinan.safetyeval.client.dto.QualFilingPersonnelAddCmd; import org.qinan.safetyeval.domain.change.model.QualFilingPersonnelChangeE; import org.qinan.safetyeval.domain.entity.QualFilingPersonnelEntity; +import org.qinan.safetyeval.infrastructure.dataobject.QualFilingPersonnelDO; import java.time.LocalDate; import java.time.LocalDateTime; @@ -84,7 +85,23 @@ public interface QualFilingPersonnelChangeCmdConvertor { */ List convertChangeEListToCmdList(List changeEs); + /** + * 备案人员DO转变更Cmd(审核通过同步变更记录时使用) + * birthDate / joinWorkDate 由 LocalDate 转为 LocalDateTime + */ + @Mapping(target = "filingChangeId", ignore = true) + QualFilingPersonnelChangeAddCmd convertDOToCmd(QualFilingPersonnelDO qualFilingPersonnelDO); + + /** + * 批量转换备案人员DO为变更Cmd + */ + List convertDOListToCmdList(List qualFilingPersonnelDOs); + default LocalDate map(LocalDateTime dateTime) { return dateTime == null ? null : dateTime.toLocalDate(); } + + default LocalDateTime map(LocalDate date) { + return date == null ? null : date.atStartOfDay(); + } } 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 883fbe8..e902114 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 @@ -16,6 +16,7 @@ import org.qinan.safetyeval.client.dto.*; import org.qinan.safetyeval.domain.constant.BooleanQAEnum; import org.qinan.safetyeval.domain.constant.QualFilingApplyTypeEnum; import org.qinan.safetyeval.domain.constant.QualFilingReviewResultEnum; +import org.qinan.safetyeval.domain.constant.QualFilingStatusEnum; import org.qinan.safetyeval.domain.entity.*; import org.qinan.safetyeval.domain.exception.BizException; import org.qinan.safetyeval.domain.exception.ErrorCode; @@ -225,49 +226,8 @@ public class QualFilingExecutor implements QualFilingApi { @Override @Transactional(rollbackFor = Exception.class) public void review(QualFilingReviewAddCmd cmd) { - qualFilingDomainService.review(cmd.getFilingId(), cmd.getReviewResult(), cmd.getReviewResultRemark(), cmd.getFilingExpertId(), cmd.getFilingExpertName(), cmd.getReviewOpinion()); - if (QualFilingReviewResultEnum.PASS.getCode() == Integer.parseInt(cmd.getReviewResult())) { - // 审核通过,需要新增资质变更记录 - AggregationSaveOrEditQualFilingChangeCmd cmdSync = new AggregationSaveOrEditQualFilingChangeCmd(); - // 基本信息 - QualFilingDO qualFilingDO = qualFilingMapper.selectById(cmd.getFilingId()); - QualFilingChangeAddCmd qualFilingChangeAddCmd = new QualFilingChangeAddCmd(); - BeanUtils.copyProperties(qualFilingDO, qualFilingChangeAddCmd, "id"); - qualFilingChangeAddCmd.setBusinessScope(JSON.parseArray(qualFilingDO.getBusinessScope(), String.class)); - qualFilingChangeAddCmd.setFilingId(qualFilingDO.getId()); - cmdSync.setQualFilingChangeAddCmd(qualFilingChangeAddCmd); - // 备案承诺书 - QualFilingCommitmentDO qualFilingCommitmentDO = qualFilingCommitmentMapper.selectOne(new LambdaQueryWrapper() - .eq(QualFilingCommitmentDO::getFilingId, cmd.getFilingId())); - QualFilingCommitmentChangeAddCmd qualFilingCommitmentChangeAddCmd = new QualFilingCommitmentChangeAddCmd(); - BeanUtils.copyProperties(qualFilingCommitmentDO, qualFilingCommitmentChangeAddCmd); - cmdSync.setQualFilingCommitmentChangeAddCmd(qualFilingCommitmentChangeAddCmd); - // 备案装备 - List qualFilingEquipmentDOs = qualFilingEquipmentMapper.selectList(new LambdaQueryWrapper() - .eq(QualFilingEquipmentDO::getFilingId, cmd.getFilingId())); - cmdSync.setQualFilingEquipmentChangeAddCmds(qualFilingEquipmentDOs.stream().map(item -> { - QualFilingEquipmentChangeAddCmd qualFilingEquipmentChangeAddCmd = new QualFilingEquipmentChangeAddCmd(); - BeanUtils.copyProperties(item, qualFilingEquipmentChangeAddCmd); - return qualFilingEquipmentChangeAddCmd; - }).collect(Collectors.toList())); - // 备案材料清单 - List qualFilingMaterialDOs = qualFilingMaterialMapper.selectList(new LambdaQueryWrapper() - .eq(QualFilingMaterialDO::getFilingId, cmd.getFilingId())); - cmdSync.setQualFilingMaterialChangeAddCmds(qualFilingMaterialDOs.stream().map(item -> { - QualFilingMaterialChangeAddCmd qualFilingMaterialChangeAddCmd = new QualFilingMaterialChangeAddCmd(); - BeanUtils.copyProperties(item, qualFilingMaterialChangeAddCmd); - return qualFilingMaterialChangeAddCmd; - }).collect(Collectors.toList())); - // 备案人员 - List qualFilingPersonnelDOs = qualFilingPersonnelMapper.selectList(new LambdaQueryWrapper() - .eq(QualFilingPersonnelDO::getFilingId, cmd.getFilingId())); - cmdSync.setQualFilingPersonnelChangeAddCmds(qualFilingPersonnelDOs.stream().map(item -> { - QualFilingPersonnelChangeAddCmd qualFilingPersonnelChangeAddCmd = new QualFilingPersonnelChangeAddCmd(); - BeanUtils.copyProperties(item, qualFilingPersonnelChangeAddCmd); - return qualFilingPersonnelChangeAddCmd; - }).collect(Collectors.toList())); - qualFilingChangeExecutor.aggregationSaveOrEdit(cmdSync, true); - } + qualFilingDomainService.review(cmd.getFilingId(), cmd.getReviewResult() + , cmd.getReviewResultRemark(), cmd.getFilingExpertId(), cmd.getFilingExpertName(), cmd.getReviewOpinion()); } @Override diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/review/executor/command/QualOnSiteReviewUpdateCmdExe.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/review/executor/command/QualOnSiteReviewUpdateCmdExe.java index 81bd266..2fcb682 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/review/executor/command/QualOnSiteReviewUpdateCmdExe.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/review/executor/command/QualOnSiteReviewUpdateCmdExe.java @@ -1,14 +1,32 @@ package org.qinan.safetyeval.app.review.executor.command; import com.alibaba.cola.exception.BizException; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.AllArgsConstructor; +import org.qinan.safetyeval.app.change.convertor.*; +import org.qinan.safetyeval.app.executor.QualFilingChangeExecutor; +import org.qinan.safetyeval.app.file.convertor.QualOnSiteReviewFileCmdConvertor; import org.qinan.safetyeval.app.review.convertor.QualOnSiteReviewCmdConvertor; +import org.qinan.safetyeval.client.dto.AggregationSaveOrEditQualFilingChangeCmd; +import org.qinan.safetyeval.client.file.request.QualOnSiteReviewFileAddCmd; +import org.qinan.safetyeval.client.review.request.QualOnSiteReviewResultUploadCmd; import org.qinan.safetyeval.client.review.request.QualOnSiteReviewUpdateCmd; +import org.qinan.safetyeval.domain.constant.QualFilingStatusEnum; +import org.qinan.safetyeval.domain.constant.QualOnSiteReviewStatusEnum; +import org.qinan.safetyeval.domain.entity.QualFilingEntity; +import org.qinan.safetyeval.domain.file.model.QualOnSiteReviewFileE; +import org.qinan.safetyeval.domain.gateway.QualFilingGateway; import org.qinan.safetyeval.domain.review.ability.QualOnSiteReviewAbility; import org.qinan.safetyeval.domain.review.model.QualOnSiteReviewE; +import org.qinan.safetyeval.infrastructure.dataobject.*; +import org.qinan.safetyeval.infrastructure.mapper.*; +import org.qinan.safetyeval.infrastructure.persistence.domainobject.QualOnSiteReviewDO; import org.qinan.safetyeval.infrastructure.persistence.queryservice.QualOnSiteReviewQueryService; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.util.List; /** * 修改资质现场核查资源执行器 @@ -22,6 +40,19 @@ public class QualOnSiteReviewUpdateCmdExe { private final QualOnSiteReviewQueryService qualOnSiteReviewQueryService; private final QualOnSiteReviewCmdConvertor qualOnSiteReviewCmdConvertor; private final QualOnSiteReviewAbility qualOnSiteReviewAbility; + private final QualOnSiteReviewFileCmdConvertor qualOnSiteReviewFileCmdConvertor; + private final QualFilingGateway qualFilingGateway; + private final QualFilingMapper qualFilingMapper; + private final QualFilingCommitmentMapper qualFilingCommitmentMapper; + private final QualFilingEquipmentMapper qualFilingEquipmentMapper; + private final QualFilingMaterialMapper qualFilingMaterialMapper; + private final QualFilingPersonnelMapper qualFilingPersonnelMapper; + private final QualFilingChangeExecutor qualFilingChangeExecutor; + private final QualFilingChangeCmdConvertor qualFilingChangeCmdConvertor; + private final QualFilingCommitmentChangeCmdConvertor qualFilingCommitmentChangeCmdConvertor; + private final QualFilingEquipmentChangeCmdConvertor qualFilingEquipmentChangeCmdConvertor; + private final QualFilingMaterialChangeCmdConvertor qualFilingMaterialChangeCmdConvertor; + private final QualFilingPersonnelChangeCmdConvertor qualFilingPersonnelChangeCmdConvertor; /** * 修改资质现场核查 @@ -38,4 +69,100 @@ public class QualOnSiteReviewUpdateCmdExe { } return true; } + + /** + * 审查结果上传 + *

+ * 1. 更新现场核查状态(通过/不通过)及审查意见 + * 2. 审查通过时,将对应备案记录状态更新为已备案 + * 3. 保存审查结果文件 + * + * @param cmd 审查结果上传对象 + * @return 结果 + */ + @Transactional(rollbackFor = Exception.class) + public boolean execute(QualOnSiteReviewResultUploadCmd cmd) { + QualOnSiteReviewDO reviewDO = qualOnSiteReviewQueryService.getById(cmd.getId()); + if (reviewDO == null) { + throw new BizException("资质现场核查记录不存在"); + } + + // 解析审查结论 + boolean passed = cmd.getReviewResult(); + String status = passed ? QualOnSiteReviewStatusEnum.REVIEW_PASSED.getCode() + : QualOnSiteReviewStatusEnum.REVIEW_FAILED.getCode(); + + // 更新现场核查状态及审查意见 + QualOnSiteReviewE reviewE = QualOnSiteReviewE.of(); + reviewE.setId(cmd.getId()); + reviewE.setStatus(status); + reviewE.setReviewOpinion(cmd.getReviewOpinion()); + Boolean updateRes = reviewE.update(); + if (!updateRes) { + throw new BizException("数据已被更新,请刷新重试"); + } + + // 审查通过时,更新备案状态为已备案 + if (passed && reviewDO.getBizId() != null) { + QualFilingEntity filingEntity = new QualFilingEntity(); + filingEntity.setId(reviewDO.getBizId()); + filingEntity.setFilingStatusCode(QualFilingStatusEnum.FILED.getCode()); + filingEntity.setFilingStatusName(QualFilingStatusEnum.FILED.getName()); + qualFilingGateway.modify(filingEntity); + + // 审核通过,同步生成资质变更记录 + passedSaveToChange(reviewDO.getOrgId()); + } + + // 保存审查结果文件 + saveFileList(cmd.getId(), cmd.getFileList()); + + return true; + } + + + private void saveFileList(Long reviewId, List fileList) { + if (CollectionUtils.isEmpty(fileList)) { + return; + } + for (QualOnSiteReviewFileAddCmd fileCmd : fileList) { + QualOnSiteReviewFileE fileE = qualOnSiteReviewFileCmdConvertor.convertCmdToE(fileCmd); + fileE.setQualOnSiteReviewId(reviewId); + boolean res = fileE.add(); + if (!res) { + throw new BizException("审查结果文件保存失败"); + } + } + } + + private void passedSaveToChange(Long orgId) { + // 基本信息 + QualFilingDO qualFilingDO = qualFilingMapper.selectByOrgIdLastOne(orgId); + if (qualFilingDO == null) { + throw new BizException("未找到该机构的资质备案记录"); + } + Long filingId = qualFilingDO.getId(); + + // 审核通过,需要新增资质变更记录 + AggregationSaveOrEditQualFilingChangeCmd cmdSync = new AggregationSaveOrEditQualFilingChangeCmd(); + + cmdSync.setQualFilingChangeAddCmd(qualFilingChangeCmdConvertor.convertDOToCmd(qualFilingDO)); + // 备案承诺书 + QualFilingCommitmentDO qualFilingCommitmentDO = qualFilingCommitmentMapper.selectOne(new LambdaQueryWrapper() + .eq(QualFilingCommitmentDO::getFilingId, filingId)); + cmdSync.setQualFilingCommitmentChangeAddCmd(qualFilingCommitmentChangeCmdConvertor.convertDOToCmd(qualFilingCommitmentDO)); + // 备案装备 + List qualFilingEquipmentDOs = qualFilingEquipmentMapper.selectList(new LambdaQueryWrapper() + .eq(QualFilingEquipmentDO::getFilingId, filingId)); + cmdSync.setQualFilingEquipmentChangeAddCmds(qualFilingEquipmentChangeCmdConvertor.convertDOListToCmdList(qualFilingEquipmentDOs)); + // 备案材料清单 + List qualFilingMaterialDOs = qualFilingMaterialMapper.selectList(new LambdaQueryWrapper() + .eq(QualFilingMaterialDO::getFilingId, filingId)); + cmdSync.setQualFilingMaterialChangeAddCmds(qualFilingMaterialChangeCmdConvertor.convertDOListToCmdList(qualFilingMaterialDOs)); + // 备案人员 + List qualFilingPersonnelDOs = qualFilingPersonnelMapper.selectList(new LambdaQueryWrapper() + .eq(QualFilingPersonnelDO::getFilingId, filingId)); + cmdSync.setQualFilingPersonnelChangeAddCmds(qualFilingPersonnelChangeCmdConvertor.convertDOListToCmdList(qualFilingPersonnelDOs)); + qualFilingChangeExecutor.aggregationSaveOrEdit(cmdSync, true); + } } diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/review/service/QualOnSiteReviewServiceI.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/review/service/QualOnSiteReviewServiceI.java index ccbe053..c3b023b 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/review/service/QualOnSiteReviewServiceI.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/review/service/QualOnSiteReviewServiceI.java @@ -5,6 +5,7 @@ import org.qinan.safetyeval.client.review.request.QualOnSiteReviewAddCmd; import org.qinan.safetyeval.client.review.request.QualOnSiteReviewMonitorPageQry; import org.qinan.safetyeval.client.review.request.QualOnSiteReviewOrgPageQry; import org.qinan.safetyeval.client.review.request.QualOnSiteReviewPageQry; +import org.qinan.safetyeval.client.review.request.QualOnSiteReviewResultUploadCmd; import org.qinan.safetyeval.client.review.request.QualOnSiteReviewUpdateCmd; import org.qinan.safetyeval.client.review.response.QualOnSiteReviewCo; import org.qinan.safetyeval.client.review.response.QualOnSiteReviewMonitorCo; @@ -81,5 +82,13 @@ public interface QualOnSiteReviewServiceI { */ boolean deletedQualOnSiteReviewByIds(Long[] ids); + /** + * 审查结果上传 + * + * @param qualOnSiteReviewResultUploadCmd 审查结果上传对象 + * @return 结果 + */ + boolean uploadReviewResult(QualOnSiteReviewResultUploadCmd qualOnSiteReviewResultUploadCmd); + } diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/review/service/impl/QualOnSiteReviewServiceImpl.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/review/service/impl/QualOnSiteReviewServiceImpl.java index ca90d32..869854c 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/review/service/impl/QualOnSiteReviewServiceImpl.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/review/service/impl/QualOnSiteReviewServiceImpl.java @@ -12,6 +12,7 @@ import org.qinan.safetyeval.client.review.request.QualOnSiteReviewAddCmd; import org.qinan.safetyeval.client.review.request.QualOnSiteReviewMonitorPageQry; import org.qinan.safetyeval.client.review.request.QualOnSiteReviewOrgPageQry; import org.qinan.safetyeval.client.review.request.QualOnSiteReviewPageQry; +import org.qinan.safetyeval.client.review.request.QualOnSiteReviewResultUploadCmd; import org.qinan.safetyeval.client.review.request.QualOnSiteReviewUpdateCmd; import org.qinan.safetyeval.client.review.response.QualOnSiteReviewCo; import org.qinan.safetyeval.client.review.response.QualOnSiteReviewMonitorCo; @@ -74,4 +75,9 @@ public class QualOnSiteReviewServiceImpl implements QualOnSiteReviewServiceI { return qualOnSiteReviewDelCommandExe.execute(ids); } + @Override + public boolean uploadReviewResult(QualOnSiteReviewResultUploadCmd qualOnSiteReviewResultUploadCmd) { + return qualOnSiteReviewUpdateCommandExe.execute(qualOnSiteReviewResultUploadCmd); + } + } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/file/request/QualOnSiteReviewFileAddCmd.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/file/request/QualOnSiteReviewFileAddCmd.java index 5faaf76..7744312 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/file/request/QualOnSiteReviewFileAddCmd.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/file/request/QualOnSiteReviewFileAddCmd.java @@ -32,4 +32,10 @@ public class QualOnSiteReviewFileAddCmd implements Serializable { @NotBlank(message = "文件url不能为空") @Size(max = 1024, message = "文件url不能超过1024个字符") private String fileUrl; + + /** + * 审查意见 + */ + @ApiModelProperty(value = "审查意见") + private String reviewOpinion; } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/file/request/QualOnSiteReviewFileUpdateCmd.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/file/request/QualOnSiteReviewFileUpdateCmd.java index 4fde464..153218b 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/file/request/QualOnSiteReviewFileUpdateCmd.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/file/request/QualOnSiteReviewFileUpdateCmd.java @@ -36,4 +36,10 @@ public class QualOnSiteReviewFileUpdateCmd implements Serializable { @NotBlank(message = "文件url不能为空") @Size(max = 1024, message = "文件url不能超过1024个字符") private String fileUrl; + + /** + * 审查意见 + */ + @ApiModelProperty(value = "审查意见") + private String reviewOpinion; } diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/file/response/QualOnSiteReviewFileCo.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/file/response/QualOnSiteReviewFileCo.java index 1f529a6..5e3bb12 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/file/response/QualOnSiteReviewFileCo.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/file/response/QualOnSiteReviewFileCo.java @@ -31,6 +31,11 @@ public class QualOnSiteReviewFileCo extends ClientObject { */ @ApiModelProperty(value = "文件url") private String fileUrl; + /** + * 审查意见 + */ + @ApiModelProperty(value = "审查意见") + private String reviewOpinion; /** * 环境 */ diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/request/QualOnSiteReviewAddCmd.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/request/QualOnSiteReviewAddCmd.java index ce99a20..9a0dd52 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/request/QualOnSiteReviewAddCmd.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/request/QualOnSiteReviewAddCmd.java @@ -64,6 +64,11 @@ public class QualOnSiteReviewAddCmd implements Serializable { */ @ApiModelProperty(value = QualOnSiteReviewStatusEnum.REMARKS, required = true) private String status; + /** + * 审查意见 + */ + @ApiModelProperty(value = "审查意见") + private String reviewOpinion; /** * 环境 */ diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/request/QualOnSiteReviewResultUploadCmd.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/request/QualOnSiteReviewResultUploadCmd.java new file mode 100644 index 0000000..dcf0345 --- /dev/null +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/request/QualOnSiteReviewResultUploadCmd.java @@ -0,0 +1,43 @@ +package org.qinan.safetyeval.client.review.request; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.qinan.safetyeval.client.file.request.QualOnSiteReviewFileAddCmd; + +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.io.Serializable; +import java.util.List; + +/** + * 资质现场核查-审查结果上传Cmd + * + * @Author: ltq + * @date 2026-07-20 15:17:00 + */ +@Data +public class QualOnSiteReviewResultUploadCmd implements Serializable { + private static final long serialVersionUID = 1L; + + @JsonFormat(shape = JsonFormat.Shape.STRING) + @NotNull(message = "资质现场核查id不能为空") + @ApiModelProperty(value = "资质现场核查id", required = true) + private Long id; + + @NotBlank(message = "审查结论不能为空") + @ApiModelProperty(value = "审查结论:true通过/false不通过", required = true) + @NotNull + private Boolean reviewResult; + + @ApiModelProperty(value = "审查意见") + private String reviewOpinion; + + @ApiModelProperty(value = "审查结果文件") + @NotNull + @Size(max = 100) + @Valid + private List fileList; +} diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/request/QualOnSiteReviewUpdateCmd.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/request/QualOnSiteReviewUpdateCmd.java index b2d6cf2..7a855ce 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/request/QualOnSiteReviewUpdateCmd.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/request/QualOnSiteReviewUpdateCmd.java @@ -66,6 +66,11 @@ public class QualOnSiteReviewUpdateCmd implements Serializable { @ApiModelProperty(value = "现场审查状态(AGENCY_PENDING_CONFIRMATION机构待确认、AGENCY_CONFIRMED机构已确认、REVIEW_PASSED核查通过、REVIEW_FAILED核查不通过)", required = true) @NotNull(message = "现场审查状态(AGENCY_PENDING_CONFIRMATION机构待确认、AGENCY_CONFIRMED机构已确认、REVIEW_PASSED核查通过、REVIEW_FAILED核查不通过)不能为空") private String status; + /** + * 审查意见 + */ + @ApiModelProperty(value = "审查意见") + private String reviewOpinion; /** * 环境 */ diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/response/QualOnSiteReviewCo.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/response/QualOnSiteReviewCo.java index 1610ece..fb2165d 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/response/QualOnSiteReviewCo.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/response/QualOnSiteReviewCo.java @@ -64,6 +64,11 @@ public class QualOnSiteReviewCo extends ClientObject { */ @ApiModelProperty(value = "现场审查状态(AGENCY_PENDING_CONFIRMATION机构待确认、AGENCY_CONFIRMED机构已确认、REVIEW_PASSED核查通过、REVIEW_FAILED核查不通过)") private String status; + /** + * 审查意见 + */ + @ApiModelProperty(value = "审查意见") + private String reviewOpinion; /** * 环境 */ diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/response/QualOnSiteReviewMonitorCo.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/response/QualOnSiteReviewMonitorCo.java index 5dab357..5716836 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/response/QualOnSiteReviewMonitorCo.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/response/QualOnSiteReviewMonitorCo.java @@ -67,6 +67,11 @@ public class QualOnSiteReviewMonitorCo extends ClientObject { */ @ApiModelProperty(value = "现场审查状态(AGENCY_PENDING_CONFIRMATION机构待确认、AGENCY_CONFIRMED机构已确认、REVIEW_PASSED核查通过、REVIEW_FAILED核查不通过)") private String status; + /** + * 审查意见 + */ + @ApiModelProperty(value = "审查意见") + private String reviewOpinion; /** * 环境 */ diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/response/QualOnSiteReviewOrgCo.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/response/QualOnSiteReviewOrgCo.java index 73ef838..9c2c31a 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/response/QualOnSiteReviewOrgCo.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/review/response/QualOnSiteReviewOrgCo.java @@ -66,6 +66,11 @@ public class QualOnSiteReviewOrgCo extends ClientObject { */ @ApiModelProperty(value = "现场审查状态(AGENCY_PENDING_CONFIRMATION机构待确认、AGENCY_CONFIRMED机构已确认、REVIEW_PASSED核查通过、REVIEW_FAILED核查不通过)") private String status; + /** + * 审查意见 + */ + @ApiModelProperty(value = "审查意见") + private String reviewOpinion; /** * 环境 */ diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/file/model/QualOnSiteReviewFileE.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/file/model/QualOnSiteReviewFileE.java index 101d04a..cd8ccad 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/file/model/QualOnSiteReviewFileE.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/file/model/QualOnSiteReviewFileE.java @@ -32,6 +32,10 @@ public class QualOnSiteReviewFileE extends BaseE { * 文件url */ private String fileUrl; + /** + * 审查意见 + */ + private String reviewOpinion; /** * 环境 */ diff --git a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/review/model/QualOnSiteReviewE.java b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/review/model/QualOnSiteReviewE.java index 2342a08..4501a40 100644 --- a/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/review/model/QualOnSiteReviewE.java +++ b/safety-eval-domain/src/main/java/org/qinan/safetyeval/domain/review/model/QualOnSiteReviewE.java @@ -58,6 +58,10 @@ public class QualOnSiteReviewE extends BaseE { * 现场审查状态(AGENCY_PENDING_CONFIRMATION机构待确认、AGENCY_CONFIRMED机构已确认、REVIEW_PASSED核查通过、REVIEW_FAILED核查不通过) */ private String status; + /** + * 审查意见 + */ + private String reviewOpinion; /** * 环境 */ diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/QualFilingGatewayImpl.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/QualFilingGatewayImpl.java index ce97cb5..b7afc93 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/QualFilingGatewayImpl.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/gatewayimpl/QualFilingGatewayImpl.java @@ -8,8 +8,8 @@ import org.qinan.safetyeval.domain.entity.*; import org.qinan.safetyeval.domain.exception.BizException; import org.qinan.safetyeval.domain.exception.ErrorCode; import org.qinan.safetyeval.domain.gateway.QualFilingGateway; -import org.qinan.safetyeval.domain.query.QualFilingQuery; import org.qinan.safetyeval.domain.query.PageResult; +import org.qinan.safetyeval.domain.query.QualFilingQuery; import org.qinan.safetyeval.infrastructure.dataobject.*; import org.qinan.safetyeval.infrastructure.mapper.*; import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults; @@ -71,7 +71,8 @@ public class QualFilingGatewayImpl implements QualFilingGateway { QualFilingDO dataObject = qualFilingMapper.selectById(id); return toEntity(dataObject); } -@Override + + @Override public QualFilingEntity getByFilingNo(String filingNo) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(QualFilingDO::getFilingNo, filingNo); @@ -156,11 +157,12 @@ public class QualFilingGatewayImpl implements QualFilingGateway { /** * 聚合保存 - * @param entity 基础信息 - * @param commitmentEntity 备案承诺书 - * @param equipmentEntities 备件 - * @param materialEntities 备案材料 - * @param personnelEntities 备案人员 + * + * @param entity 基础信息 + * @param commitmentEntity 备案承诺书 + * @param equipmentEntities 备件 + * @param materialEntities 备案材料 + * @param personnelEntities 备案人员 * @param personnelCertEntities 备案人员证书 */ @@ -257,12 +259,13 @@ public class QualFilingGatewayImpl implements QualFilingGateway { /** * 备案审核 - * @param filingId 机构id - * @param reviewResult 审核结果(1通过2待定3不通过) + * + * @param filingId 机构id + * @param reviewResult 审核结果(1通过2待定3不通过) * @param reviewResultRemark 审核结果文字描述 - * @param filingExpertId 专家id - * @param filingExpertName 专家名称 - * @param reviewOpinion 审核意见 + * @param filingExpertId 专家id + * @param filingExpertName 专家名称 + * @param reviewOpinion 审核意见 */ @Override public void review(Long filingId, String reviewResult, String reviewResultRemark, Long filingExpertId, String filingExpertName, String reviewOpinion) { @@ -279,6 +282,8 @@ public class QualFilingGatewayImpl implements QualFilingGateway { // 更新备案状态 QualFilingDO filing = new QualFilingDO(); QualFilingStatusEnum qualFilingStatusEnum = QualFilingStatusEnum.ofCode(Integer.valueOf(reviewResult)); + qualFilingStatusEnum = qualFilingStatusEnum == QualFilingStatusEnum.FILED + ? QualFilingStatusEnum.CONDITION_COMPLIANCE_PASS : qualFilingStatusEnum; filing.setFilingStatusCode(qualFilingStatusEnum.getCode()); filing.setFilingStatusName(qualFilingStatusEnum.getName()); filing.setApproveTime(LocalDateTime.now()); diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/mapper/QualFilingMapper.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/mapper/QualFilingMapper.java index 5880a39..7ca291e 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/mapper/QualFilingMapper.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/mapper/QualFilingMapper.java @@ -16,4 +16,12 @@ public interface QualFilingMapper extends BaseMapper { List qualificationMonitoringPage(@Param("page") Page page, @Param("query") QualificationMonitoringQuery query); QualFilingStatisticsCO qualificationMonitoringPageStatistics(); + + /** + * 根据机构id查询最新一条资质备案记录 + * + * @param orgId 机构id + * @return 最新一条资质备案记录 + */ + QualFilingDO selectByOrgIdLastOne(@Param("orgId") Long orgId); } diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/persistence/domainobject/QualOnSiteReviewDO.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/persistence/domainobject/QualOnSiteReviewDO.java index 9a11098..310c587 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/persistence/domainobject/QualOnSiteReviewDO.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/persistence/domainobject/QualOnSiteReviewDO.java @@ -57,6 +57,10 @@ public class QualOnSiteReviewDO extends BaseDO { * 现场审查状态(AGENCY_PENDING_CONFIRMATION机构待确认、AGENCY_CONFIRMED机构已确认、REVIEW_PASSED核查通过、REVIEW_FAILED核查不通过) */ private String status; + /** + * 审查意见 + */ + private String reviewOpinion; /** * 环境 */ diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/persistence/domainobject/QualOnSiteReviewFileDO.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/persistence/domainobject/QualOnSiteReviewFileDO.java index 3aef3e1..a63596b 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/persistence/domainobject/QualOnSiteReviewFileDO.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/persistence/domainobject/QualOnSiteReviewFileDO.java @@ -29,6 +29,10 @@ public class QualOnSiteReviewFileDO extends BaseDO { * 文件url */ private String fileUrl; + /** + * 审查意见 + */ + private String reviewOpinion; /** * 环境 */ diff --git a/safety-eval-infrastructure/src/main/resources/mapper/QualFilingMapper.xml b/safety-eval-infrastructure/src/main/resources/mapper/QualFilingMapper.xml index a286b0a..586ba60 100644 --- a/safety-eval-infrastructure/src/main/resources/mapper/QualFilingMapper.xml +++ b/safety-eval-infrastructure/src/main/resources/mapper/QualFilingMapper.xml @@ -84,4 +84,14 @@ where info.delete_enum = 'false'; + + diff --git a/safety-eval-infrastructure/src/main/resources/mapper/QualOnSiteReviewMapper.xml b/safety-eval-infrastructure/src/main/resources/mapper/QualOnSiteReviewMapper.xml index 530aeff..6416c03 100644 --- a/safety-eval-infrastructure/src/main/resources/mapper/QualOnSiteReviewMapper.xml +++ b/safety-eval-infrastructure/src/main/resources/mapper/QualOnSiteReviewMapper.xml @@ -16,6 +16,7 @@ + @@ -41,6 +42,7 @@ supervisor_contact, contact_phone, status, + review_opinion, delete_enum, remarks, create_name,