Compare commits

..

2 Commits

Author SHA1 Message Date
luotaiqian 119945d782 Merge remote-tracking branch 'origin/dev' into dev 2026-07-02 16:31:38 +08:00
luotaiqian a773232cff /compliance-check 2026-07-02 16:31:29 +08:00
17 changed files with 243 additions and 5 deletions

View File

@ -1,12 +1,12 @@
package org.qinan.safetyeval.adapter.web;
import io.swagger.annotations.Api;
import org.qinan.safetyeval.client.dto.*;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.qinan.safetyeval.client.api.QualFilingChangeApi;
import org.qinan.safetyeval.client.co.QualFilingChangeCO;
import org.qinan.safetyeval.client.co.QualFilingChangeComplianceCheckResultCO;
import org.qinan.safetyeval.client.dto.*;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -98,4 +98,11 @@ public class QualFilingChangeController {
public SingleResponse<List<QualFilingChangeComplianceCheckResultCO>> complianceCheck(@ApiParam("主键ID") @RequestParam Long id) {
return qualFilingChangeApi.complianceCheck(id);
}
@ApiOperation("审核")
@PostMapping("/review")
public SingleResponse<Void> review(@Validated @RequestBody QualFilingChangeReviewAddCmd cmd) {
qualFilingChangeApi.review(cmd);
return SingleResponse.success();
}
}

View File

@ -1,8 +1,10 @@
package org.qinan.safetyeval.app.change.convertor;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.qinan.safetyeval.client.dto.QualFilingChangeAddCmd;
import org.qinan.safetyeval.domain.entity.QualFilingChangeEntity;
import org.qinan.safetyeval.domain.entity.QualFilingEntity;
/**
*
@ -19,4 +21,17 @@ public interface QualFilingChangeCmdConvertor {
* @return
*/
QualFilingChangeEntity convertCmdToE(QualFilingChangeAddCmd qualFilingChangeAddCmd);
/**
*
* id 使 changeFilingId
*/
@Mapping(target = "id", ignore = true)
@Mapping(target = "originFilingId", ignore = true)
@Mapping(target = "rejectReason", ignore = true)
@Mapping(target = "submitTime", ignore = true)
@Mapping(target = "approveTime", ignore = true)
@Mapping(target = "applyTypeCode", ignore = true)
@Mapping(target = "applyTypeName", ignore = true)
QualFilingEntity convertChangeEToEntity(QualFilingChangeEntity changeEntity);
}

View File

@ -5,6 +5,7 @@ import org.mapstruct.Mapping;
import org.qinan.safetyeval.client.change.request.QualFilingCommitmentChangeAddCmd;
import org.qinan.safetyeval.client.change.request.QualFilingCommitmentChangeUpdateCmd;
import org.qinan.safetyeval.domain.change.model.QualFilingCommitmentChangeE;
import org.qinan.safetyeval.domain.entity.QualFilingCommitmentEntity;
/**
* -
@ -31,4 +32,13 @@ public interface QualFilingCommitmentChangeCmdConvertor {
*/
@Mapping(target = "qualFilingCommitmentChangeGateway", ignore = true)
QualFilingCommitmentChangeE convertCmdToE(QualFilingCommitmentChangeUpdateCmd qualFilingCommitmentChangeUpdateCmd);
/**
*
*/
@Mapping(target = "id", ignore = true)
@Mapping(target = "filingId", ignore = true)
@Mapping(target = "tenantId", ignore = true)
@Mapping(target = "orgId", ignore = true)
QualFilingCommitmentEntity convertChangeEToEntity(QualFilingCommitmentChangeE changeE);
}

View File

@ -5,6 +5,9 @@ import org.mapstruct.Mapping;
import org.qinan.safetyeval.client.change.request.QualFilingEquipmentChangeAddCmd;
import org.qinan.safetyeval.client.change.request.QualFilingEquipmentChangeUpdateCmd;
import org.qinan.safetyeval.domain.change.model.QualFilingEquipmentChangeE;
import org.qinan.safetyeval.domain.entity.QualFilingEquipmentEntity;
import java.util.List;
/**
* -
@ -31,4 +34,18 @@ public interface QualFilingEquipmentChangeCmdConvertor {
*/
@Mapping(target = "qualFilingEquipmentChangeGateway", ignore = true)
QualFilingEquipmentChangeE convertCmdToE(QualFilingEquipmentChangeUpdateCmd qualFilingEquipmentChangeUpdateCmd);
/**
*
*/
@Mapping(target = "id", ignore = true)
@Mapping(target = "filingId", ignore = true)
@Mapping(target = "tenantId", ignore = true)
@Mapping(target = "orgId", ignore = true)
QualFilingEquipmentEntity convertChangeEToEntity(QualFilingEquipmentChangeE changeE);
/**
*
*/
List<QualFilingEquipmentEntity> convertChangeEListToEntityList(List<QualFilingEquipmentChangeE> changeEs);
}

View File

@ -5,6 +5,9 @@ import org.mapstruct.Mapping;
import org.qinan.safetyeval.client.change.request.QualFilingMaterialChangeAddCmd;
import org.qinan.safetyeval.client.change.request.QualFilingMaterialChangeUpdateCmd;
import org.qinan.safetyeval.domain.change.model.QualFilingMaterialChangeE;
import org.qinan.safetyeval.domain.entity.QualFilingMaterialEntity;
import java.util.List;
/**
* -
@ -31,4 +34,18 @@ public interface QualFilingMaterialChangeCmdConvertor {
*/
@Mapping(target = "qualFilingMaterialChangeGateway", ignore = true)
QualFilingMaterialChangeE convertCmdToE(QualFilingMaterialChangeUpdateCmd qualFilingMaterialChangeUpdateCmd);
/**
*
*/
@Mapping(target = "id", ignore = true)
@Mapping(target = "filingId", ignore = true)
@Mapping(target = "tenantId", ignore = true)
@Mapping(target = "orgId", ignore = true)
QualFilingMaterialEntity convertChangeEToEntity(QualFilingMaterialChangeE changeE);
/**
*
*/
List<QualFilingMaterialEntity> convertChangeEListToEntityList(List<QualFilingMaterialChangeE> changeEs);
}

View File

@ -5,6 +5,9 @@ import org.mapstruct.Mapping;
import org.qinan.safetyeval.client.change.request.QualFilingPersonnelCertChangeAddCmd;
import org.qinan.safetyeval.client.change.request.QualFilingPersonnelCertChangeUpdateCmd;
import org.qinan.safetyeval.domain.change.model.QualFilingPersonnelCertChangeE;
import org.qinan.safetyeval.domain.entity.QualFilingPersonnelCertEntity;
import java.util.List;
/**
*
@ -31,4 +34,18 @@ public interface QualFilingPersonnelCertChangeCmdConvertor {
*/
@Mapping(target = "qualFilingPersonnelCertChangeGateway", ignore = true)
QualFilingPersonnelCertChangeE convertCmdToE(QualFilingPersonnelCertChangeUpdateCmd qualFilingPersonnelCertChangeUpdateCmd);
/**
*
*/
@Mapping(target = "id", ignore = true)
@Mapping(target = "filingId", ignore = true)
@Mapping(target = "tenantId", ignore = true)
@Mapping(target = "orgId", ignore = true)
QualFilingPersonnelCertEntity convertChangeEToEntity(QualFilingPersonnelCertChangeE changeE);
/**
*
*/
List<QualFilingPersonnelCertEntity> convertChangeEListToEntityList(List<QualFilingPersonnelCertChangeE> changeEs);
}

View File

@ -5,6 +5,9 @@ import org.mapstruct.Mapping;
import org.qinan.safetyeval.client.change.request.QualFilingPersonnelChangeAddCmd;
import org.qinan.safetyeval.client.change.request.QualFilingPersonnelChangeUpdateCmd;
import org.qinan.safetyeval.domain.change.model.QualFilingPersonnelChangeE;
import org.qinan.safetyeval.domain.entity.QualFilingPersonnelEntity;
import java.util.List;
/**
* -
@ -31,4 +34,18 @@ public interface QualFilingPersonnelChangeCmdConvertor {
*/
@Mapping(target = "qualFilingPersonnelChangeGateway", ignore = true)
QualFilingPersonnelChangeE convertCmdToE(QualFilingPersonnelChangeUpdateCmd qualFilingPersonnelChangeUpdateCmd);
/**
*
*/
@Mapping(target = "id", ignore = true)
@Mapping(target = "filingId", ignore = true)
@Mapping(target = "tenantId", ignore = true)
@Mapping(target = "orgId", ignore = true)
QualFilingPersonnelEntity convertChangeEToEntity(QualFilingPersonnelChangeE changeE);
/**
*
*/
List<QualFilingPersonnelEntity> convertChangeEListToEntityList(List<QualFilingPersonnelChangeE> changeEs);
}

View File

@ -10,18 +10,21 @@ 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.QualFilingFormStepEnum;
import org.qinan.safetyeval.domain.constant.QualFilingReviewResultEnum;
import org.qinan.safetyeval.domain.constant.QualFilingStatusEnum;
import org.qinan.safetyeval.domain.entity.QualFilingChangeDetailEntity;
import org.qinan.safetyeval.domain.entity.QualFilingChangeEntity;
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.query.PageResult;
import org.qinan.safetyeval.domain.query.QualFilingChangeQuery;
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.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
@ -41,6 +44,14 @@ public class QualFilingChangeExecutor implements QualFilingChangeApi {
@Autowired(required = false)
private QualFilingChangeDomainService qualFilingChangeDomainService;
@Lazy
@Autowired(required = false)
private QualFilingDomainService qualFilingDomainService;
@Lazy
@Autowired(required = false)
private QualFilingReviewDomainService qualFilingReviewDomainService;
@Resource
private QualFilingOrchestrator qualFilingOrchestrator;
@Resource
@ -240,6 +251,80 @@ public class QualFilingChangeExecutor implements QualFilingChangeApi {
return SingleResponse.success(co);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void review(QualFilingChangeReviewAddCmd cmd) {
Long changeFilingId = cmd.getChangeFilingId();
// 查询变更基本信息
QualFilingChangeEntity changeEntity = qualFilingChangeDomainService.get(changeFilingId);
if (changeEntity == null) {
throw new BizException(ErrorCode.QUAL_FILING_CHANGE_NOT_FOUND);
}
QualFilingChangeEntity updateE = qualFilingChangeDomainService.get(changeFilingId);
updateE.setId(changeFilingId);
// 构建并保存审核记录
QualFilingReviewEntity reviewEntity = new QualFilingReviewEntity();
reviewEntity.setFilingId(changeEntity.getChangeFilingId());
reviewEntity.setReviewResult(cmd.getReviewResult());
reviewEntity.setFilingExpertId(cmd.getFilingExpertId());
reviewEntity.setFilingExpertName(cmd.getFilingExpertName());
reviewEntity.setReviewOpinion(cmd.getReviewOpinion());
reviewEntity = qualFilingReviewDomainService.add(reviewEntity);
// 更新变更记录的 filing_review_id 和 filing_status_code
updateE.setFilingReviewId(reviewEntity.getId());
// 审核通过:将变更数据同步到正式备案表
if (QualFilingReviewResultEnum.PASS.getName().equals(cmd.getReviewResult())) {
updateE.setFilingStatusCode(QualFilingStatusEnum.FILED.getCode());
updateE.setFilingStatusName(QualFilingStatusEnum.FILED.getName());
// 转换变更基本信息 → 备案实体
QualFilingEntity entity = qualFilingChangeCmdConvertor.convertChangeEToEntity(changeEntity);
entity.setId(changeEntity.getChangeFilingId());
// 查询并转换承诺书
QualFilingCommitmentChangeE commitmentChangeE = qualFilingCommitmentChangeGateway.getByFilingId(changeFilingId);
QualFilingCommitmentEntity commitmentEntity = null;
if (commitmentChangeE != null) {
commitmentEntity = qualFilingCommitmentChangeCmdConvertor.convertChangeEToEntity(commitmentChangeE);
commitmentEntity.setFilingId(changeEntity.getChangeFilingId());
}
// 查询并转换装备清单
List<QualFilingEquipmentChangeE> equipmentChangeEs = qualFilingEquipmentChangeGateway.listByFilingId(changeFilingId);
List<QualFilingEquipmentEntity> equipmentEntities = qualFilingEquipmentChangeCmdConvertor.convertChangeEListToEntityList(equipmentChangeEs);
equipmentEntities.forEach(e -> e.setFilingId(changeEntity.getChangeFilingId()));
// 查询并转换材料清单
List<QualFilingMaterialChangeE> materialChangeEs = qualFilingMaterialChangeGateway.listByFilingId(changeFilingId);
List<QualFilingMaterialEntity> materialEntities = qualFilingMaterialChangeCmdConvertor.convertChangeEListToEntityList(materialChangeEs);
materialEntities.forEach(e -> e.setFilingId(changeEntity.getChangeFilingId()));
// 查询并转换人员
List<QualFilingPersonnelChangeE> personnelChangeEs = qualFilingPersonnelChangeGateway.listByFilingId(changeFilingId);
List<QualFilingPersonnelEntity> personnelEntities = qualFilingPersonnelChangeCmdConvertor.convertChangeEListToEntityList(personnelChangeEs);
personnelEntities.forEach(e -> e.setFilingId(changeEntity.getChangeFilingId()));
// 查询并转换人员证书
List<QualFilingPersonnelCertChangeE> personnelCertChangeEs = qualFilingPersonnelCertChangeGateway.listByFilingId(changeFilingId);
List<QualFilingPersonnelCertEntity> personnelCertEntities = qualFilingPersonnelCertChangeCmdConvertor.convertChangeEListToEntityList(personnelCertChangeEs);
personnelCertEntities.forEach(e -> e.setFilingId(changeEntity.getChangeFilingId()));
// 调用聚合保存,将变更数据写入正式备案表
qualFilingDomainService.aggregationSaveOrEdit(entity, commitmentEntity, equipmentEntities, materialEntities, personnelEntities, personnelCertEntities);
} else {
updateE.setFilingStatusCode(QualFilingStatusEnum.REJECTED.getCode());
updateE.setFilingStatusName(QualFilingStatusEnum.REJECTED.getName());
}
// 更新变更记录
qualFilingChangeDomainService.modify(updateE);
}
/**
*
* <ul>

View File

@ -9,6 +9,7 @@ import org.qinan.safetyeval.client.dto.SingleResponse;
import org.qinan.safetyeval.client.dto.QualFilingChangeAddCmd;
import org.qinan.safetyeval.client.dto.QualFilingChangeModifyCmd;
import org.qinan.safetyeval.client.dto.QualFilingChangePageQuery;
import org.qinan.safetyeval.client.dto.QualFilingChangeReviewAddCmd;
import org.qinan.safetyeval.client.dto.QualFilingChangeSubmitCmd;
import org.qinan.safetyeval.client.dto.QualFilingRejectCmd;
@ -42,4 +43,6 @@ public interface QualFilingChangeApi {
SingleResponse<List<QualFilingChangeComplianceCheckResultCO>> complianceCheck(Long id);
SingleResponse<QualFilingChangeCO> aggregationSaveOrEdit(AggregationSaveOrEditQualFilingChangeCmd cmd);
void review(QualFilingChangeReviewAddCmd cmd);
}

View File

@ -18,6 +18,9 @@ public class QualFilingChangeCO {
@ApiModelProperty(value = "备案申请ID")
private Long filingId;
@ApiModelProperty(value = "审核ID")
private Long filingReviewId;
@ApiModelProperty(value = "变更备案ID")
private Long changeFilingId;

View File

@ -1,9 +1,10 @@
package org.qinan.safetyeval.client.dto;
import io.swagger.annotations.ApiModelProperty;
import java.math.BigDecimal;
import lombok.Data;
import java.math.BigDecimal;
/**
*
*

View File

@ -0,0 +1,37 @@
package org.qinan.safetyeval.client.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.qinan.safetyeval.domain.constant.QualFilingReviewResultEnum;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
*
*
* @author safety-eval
*/
@Data
public class QualFilingChangeReviewAddCmd {
@ApiModelProperty(value = "变更备案申请id")
@NotNull(message = "备案申请id 不能为空")
private Long changeFilingId;
@ApiModelProperty(value = "备案审核id", hidden = true)
private Long filingReviewId;
@ApiModelProperty(value = QualFilingReviewResultEnum.REMARKS)
@NotBlank(message = "审核结果 不能为空")
private String reviewResult;
@ApiModelProperty(value = "专家id")
private Long filingExpertId;
@ApiModelProperty(value = "专家名称")
private String filingExpertName;
@ApiModelProperty(value = "综合审核意见")
private String reviewOpinion;
}

View File

@ -14,6 +14,8 @@ public enum QualFilingReviewResultEnum {
private final int code;
private final String name;
public static final String REMARKS = "审核结果(1通过2待定3不通过)";
QualFilingReviewResultEnum(int code, String name) {
this.code = code;
this.name = name;

View File

@ -27,6 +27,9 @@ public class QualFilingChangeEntity {
/** 打回原因 */
private String rejectReason;
/** 审核ID */
private Long filingReviewId;
/** 提交时间 */
private java.time.LocalDateTime submitTime;

View File

@ -21,6 +21,7 @@ public class QualFilingChangeDO {
private Long changeFilingId;
private String rejectReason;
private LocalDateTime submitTime;
private Long filingReviewId;
private String filingTerritoryCode;
private String filingTerritoryName;
private String filingUnitName;

View File

@ -228,6 +228,7 @@ public class QualFilingChangeGatewayImpl implements QualFilingChangeGateway {
dataObject.setFilingId(entity.getFilingId());
dataObject.setChangeFilingId(entity.getChangeFilingId());
dataObject.setRejectReason(entity.getRejectReason());
dataObject.setFilingReviewId(entity.getFilingReviewId());
dataObject.setSubmitTime(entity.getSubmitTime());
dataObject.setFilingTerritoryCode(entity.getFilingTerritoryCode());
dataObject.setFilingTerritoryName(entity.getFilingTerritoryName());
@ -265,6 +266,7 @@ public class QualFilingChangeGatewayImpl implements QualFilingChangeGateway {
entity.setFilingId(dataObject.getFilingId());
entity.setChangeFilingId(dataObject.getChangeFilingId());
entity.setRejectReason(dataObject.getRejectReason());
entity.setFilingReviewId(dataObject.getFilingReviewId());
entity.setSubmitTime(dataObject.getSubmitTime());
entity.setFilingTerritoryCode(dataObject.getFilingTerritoryCode());
entity.setFilingTerritoryName(dataObject.getFilingTerritoryName());

View File

@ -9,6 +9,7 @@
<result column="filing_id" property="filingId"/>
<result column="change_filing_id" property="changeFilingId"/>
<result column="reject_reason" property="rejectReason"/>
<result column="filing_review_id" property="filingReviewId"/>
<result column="submit_time" property="submitTime"/>
<result column="filing_territory_code" property="filingTerritoryCode"/>
<result column="filing_territory_name" property="filingTerritoryName"/>
@ -48,7 +49,7 @@
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
`id`, `org_id`, `filing_id`, `change_filing_id`, `reject_reason`, `submit_time`, `filing_territory_code`, `filing_territory_name`, `filing_unit_name`, `filing_unit_type_code`, `filing_unit_type_name`, `filing_no`, `business_scope`, `register_address`, `office_address`, `credit_code`, `qual_cert_no`, `legal_person_phone`, `contact_phone`, `info_disclosure_url`, `fixed_asset_amount`, `archive_room_area`, `fulltime_evaluator_count`, `registered_engineer_count`, `workplace_area`, `unit_intro`, `attachment_url`, `filing_status_code`, `filing_status_name`, `delete_enum`, `remarks`, `create_name`, `update_name`, `tenant_id`, `version`, `create_time`, `update_time`, `create_id`, `update_id`, `env`
`id`, `org_id`, `filing_id`, `change_filing_id`, `filing_review_id`, `reject_reason`, `submit_time`, `filing_territory_code`, `filing_territory_name`, `filing_unit_name`, `filing_unit_type_code`, `filing_unit_type_name`, `filing_no`, `business_scope`, `register_address`, `office_address`, `credit_code`, `qual_cert_no`, `legal_person_phone`, `contact_phone`, `info_disclosure_url`, `fixed_asset_amount`, `archive_room_area`, `fulltime_evaluator_count`, `registered_engineer_count`, `workplace_area`, `unit_intro`, `attachment_url`, `filing_status_code`, `filing_status_name`, `delete_enum`, `remarks`, `create_name`, `update_name`, `tenant_id`, `version`, `create_time`, `update_time`, `create_id`, `update_id`, `env`
</sql>
</mapper>