diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 5f8cba0..168e6c6 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -120,21 +120,17 @@ } /** - * 证书打印作废,原始记录和证书都需要变更为作废, - * - * 同时复制为两个作为新的基本信息生成新的消息,标志为作废 - * 原记录编号是多少, * @param idDTO * @return */ @ApiOperation("证书打印-作废") @PostMapping("/invalid") - public ReturnDTO invalidPrint(@RequestBody @Valid IdDTO idDTO) { + public ReturnDTO invalidPrint(@RequestBody @Valid IdDTO idDTO) throws Exception{ Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); //将证书状态置为作废状态 - return certificatePrintService.certificatePrintStatus(idDTO.getId(), "4"); + return certificatePrintService.invalidPrint(idDTO.getId()); } @ApiOperation("证书打印审批-发起申请") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 5f8cba0..168e6c6 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -120,21 +120,17 @@ } /** - * 证书打印作废,原始记录和证书都需要变更为作废, - * - * 同时复制为两个作为新的基本信息生成新的消息,标志为作废 - * 原记录编号是多少, * @param idDTO * @return */ @ApiOperation("证书打印-作废") @PostMapping("/invalid") - public ReturnDTO invalidPrint(@RequestBody @Valid IdDTO idDTO) { + public ReturnDTO invalidPrint(@RequestBody @Valid IdDTO idDTO) throws Exception{ Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); //将证书状态置为作废状态 - return certificatePrintService.certificatePrintStatus(idDTO.getId(), "4"); + return certificatePrintService.invalidPrint(idDTO.getId()); } @ApiOperation("证书打印审批-发起申请") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 62b8b3e..cb7f4a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -191,9 +191,13 @@ @TableField("is_del") private Boolean isDel; - @ApiModelProperty(value = "实验室id", dataType = "Long") - @TableField("lab_executive_id") - private Long labExecutiveId; + @ApiModelProperty(value = "作废标志", dataType = "Long") + @TableField("invalid") + private Boolean invalid; + + @ApiModelProperty(value = "旧的证书编号", dataType = "Long") + @TableField("old_certificate_code") + private String oldCertificateCode; @TableField("create_user") @ApiModelProperty(value = "流程实例id(未通过编辑接口必传参数)", dataType = "String") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 5f8cba0..168e6c6 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -120,21 +120,17 @@ } /** - * 证书打印作废,原始记录和证书都需要变更为作废, - * - * 同时复制为两个作为新的基本信息生成新的消息,标志为作废 - * 原记录编号是多少, * @param idDTO * @return */ @ApiOperation("证书打印-作废") @PostMapping("/invalid") - public ReturnDTO invalidPrint(@RequestBody @Valid IdDTO idDTO) { + public ReturnDTO invalidPrint(@RequestBody @Valid IdDTO idDTO) throws Exception{ Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); //将证书状态置为作废状态 - return certificatePrintService.certificatePrintStatus(idDTO.getId(), "4"); + return certificatePrintService.invalidPrint(idDTO.getId()); } @ApiOperation("证书打印审批-发起申请") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 62b8b3e..cb7f4a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -191,9 +191,13 @@ @TableField("is_del") private Boolean isDel; - @ApiModelProperty(value = "实验室id", dataType = "Long") - @TableField("lab_executive_id") - private Long labExecutiveId; + @ApiModelProperty(value = "作废标志", dataType = "Long") + @TableField("invalid") + private Boolean invalid; + + @ApiModelProperty(value = "旧的证书编号", dataType = "Long") + @TableField("old_certificate_code") + private String oldCertificateCode; @TableField("create_user") @ApiModelProperty(value = "流程实例id(未通过编辑接口必传参数)", dataType = "String") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java index 5630860..ca1a4de 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java @@ -117,5 +117,6 @@ @TableField("update_time") private String updateTime; - + @TableField("invalid") + private Boolean invalid; } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 5f8cba0..168e6c6 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -120,21 +120,17 @@ } /** - * 证书打印作废,原始记录和证书都需要变更为作废, - * - * 同时复制为两个作为新的基本信息生成新的消息,标志为作废 - * 原记录编号是多少, * @param idDTO * @return */ @ApiOperation("证书打印-作废") @PostMapping("/invalid") - public ReturnDTO invalidPrint(@RequestBody @Valid IdDTO idDTO) { + public ReturnDTO invalidPrint(@RequestBody @Valid IdDTO idDTO) throws Exception{ Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); //将证书状态置为作废状态 - return certificatePrintService.certificatePrintStatus(idDTO.getId(), "4"); + return certificatePrintService.invalidPrint(idDTO.getId()); } @ApiOperation("证书打印审批-发起申请") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 62b8b3e..cb7f4a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -191,9 +191,13 @@ @TableField("is_del") private Boolean isDel; - @ApiModelProperty(value = "实验室id", dataType = "Long") - @TableField("lab_executive_id") - private Long labExecutiveId; + @ApiModelProperty(value = "作废标志", dataType = "Long") + @TableField("invalid") + private Boolean invalid; + + @ApiModelProperty(value = "旧的证书编号", dataType = "Long") + @TableField("old_certificate_code") + private String oldCertificateCode; @TableField("create_user") @ApiModelProperty(value = "流程实例id(未通过编辑接口必传参数)", dataType = "String") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java index 5630860..ca1a4de 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java @@ -117,5 +117,6 @@ @TableField("update_time") private String updateTime; - + @TableField("invalid") + private Boolean invalid; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java index d2ada0c..7b60ff2 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java @@ -125,14 +125,17 @@ @ApiModelProperty(value = "备注", dataType = "String") private String remark; - - @ApiModelProperty(value = "实验室id", dataType = "Long") - @TableField("lab_executive_id") - private Long labExecutiveId; - @TableField("is_del") private Boolean isDel; + @ApiModelProperty(value = "作废标志", dataType = "Boolean") + @TableField("invalid") + private Boolean invalid; + + @ApiModelProperty(value = "旧的原始记录编号", dataType = "String") + @TableField("old_record_code") + private String oldRecordCode; + @TableField("create_user") private Long createUser; @@ -143,10 +146,9 @@ private String updateTime; - @TableField("deliver_time") @ApiModelProperty(value = "接收时间", dataType = "String") - private String deliverTime; + private String deliverTime; @TableField("appearance_status") @ApiModelProperty(value = "外观状态", dataType = "String") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 5f8cba0..168e6c6 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -120,21 +120,17 @@ } /** - * 证书打印作废,原始记录和证书都需要变更为作废, - * - * 同时复制为两个作为新的基本信息生成新的消息,标志为作废 - * 原记录编号是多少, * @param idDTO * @return */ @ApiOperation("证书打印-作废") @PostMapping("/invalid") - public ReturnDTO invalidPrint(@RequestBody @Valid IdDTO idDTO) { + public ReturnDTO invalidPrint(@RequestBody @Valid IdDTO idDTO) throws Exception{ Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); //将证书状态置为作废状态 - return certificatePrintService.certificatePrintStatus(idDTO.getId(), "4"); + return certificatePrintService.invalidPrint(idDTO.getId()); } @ApiOperation("证书打印审批-发起申请") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 62b8b3e..cb7f4a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -191,9 +191,13 @@ @TableField("is_del") private Boolean isDel; - @ApiModelProperty(value = "实验室id", dataType = "Long") - @TableField("lab_executive_id") - private Long labExecutiveId; + @ApiModelProperty(value = "作废标志", dataType = "Long") + @TableField("invalid") + private Boolean invalid; + + @ApiModelProperty(value = "旧的证书编号", dataType = "Long") + @TableField("old_certificate_code") + private String oldCertificateCode; @TableField("create_user") @ApiModelProperty(value = "流程实例id(未通过编辑接口必传参数)", dataType = "String") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java index 5630860..ca1a4de 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java @@ -117,5 +117,6 @@ @TableField("update_time") private String updateTime; - + @TableField("invalid") + private Boolean invalid; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java index d2ada0c..7b60ff2 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java @@ -125,14 +125,17 @@ @ApiModelProperty(value = "备注", dataType = "String") private String remark; - - @ApiModelProperty(value = "实验室id", dataType = "Long") - @TableField("lab_executive_id") - private Long labExecutiveId; - @TableField("is_del") private Boolean isDel; + @ApiModelProperty(value = "作废标志", dataType = "Boolean") + @TableField("invalid") + private Boolean invalid; + + @ApiModelProperty(value = "旧的原始记录编号", dataType = "String") + @TableField("old_record_code") + private String oldRecordCode; + @TableField("create_user") private Long createUser; @@ -143,10 +146,9 @@ private String updateTime; - @TableField("deliver_time") @ApiModelProperty(value = "接收时间", dataType = "String") - private String deliverTime; + private String deliverTime; @TableField("appearance_status") @ApiModelProperty(value = "外观状态", dataType = "String") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 4f69872..4139168 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -1,8 +1,10 @@ package com.casic.missiles.service.Impl.business; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.stream.CollectorUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.base.service.IBaseExportService; @@ -16,25 +18,37 @@ import com.casic.missiles.dto.flowable.ApprovalAgreeRequest; import com.casic.missiles.dto.flowable.ApprovalRefuseRequest; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; +import com.casic.missiles.enums.PrefixCodeEnum; +import com.casic.missiles.enums.business.MonitorCodeEnum; +import com.casic.missiles.enums.sample.SampleStatusEnum; import com.casic.missiles.enums.system.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.ExportEnum; import com.casic.missiles.enums.business.CertificatePrintStatusEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.business.BusinessCertificatePrintMapper; -import com.casic.missiles.model.business.BusinessCertificatePrint; +import com.casic.missiles.mapper.business.BusinessCertificateReportMapper; +import com.casic.missiles.mapper.business.BusinessLabExecutiveInfoMapper; +import com.casic.missiles.mapper.business.BusinessOriginalRecordMapper; +import com.casic.missiles.model.business.*; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.service.IBaseApprovalService; import com.casic.missiles.service.business.IBusinessCertificatePrintService; +import com.casic.missiles.service.business.IBusinessCertificateReportService; +import com.casic.missiles.service.business.IBusinessOriginalRecordService; import com.casic.missiles.service.flowable.ApprovalOperateService; import com.casic.missiles.utils.DictCodeUtils; +import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.AllArgsConstructor; +import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.docx4j.wml.R; import org.flowable.engine.RuntimeService; import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.util.ObjectUtils; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; @@ -45,14 +59,16 @@ * @author cz */ @Service -@AllArgsConstructor +@RequiredArgsConstructor public class BusinessCertificatePrintServiceImpl extends ServiceImpl implements IBusinessCertificatePrintService, CertificatePrintStatusEnum { private final IBaseApprovalService baseApprovalService; private final IBaseExportService iBaseExportService; private final ApprovalOperateService approvalOperateService; - @Resource - private RuntimeService runtimeService; + private final RuntimeService runtimeService; + private final BusinessCertificateReportMapper certificateReportMapper; + private final BusinessOriginalRecordMapper recordMapper; + private final BusinessLabExecutiveInfoMapper executiveInfoMapper; @Override public Page certificatePrintListPage(CertificateListRequest request, Page page) throws Exception { @@ -147,6 +163,110 @@ } /** + * 1、证书打印作废,原始记录和证书都需要变更为作废标志,备注新增旧的编号,原来的备注标记为作废 + * 2、同时复制为两个作为新的基本信息生成新的消息 + * 3、查询获取到最新的原始记录和 + * 4、生成一条新的实验室信息,并在老的实验室信息备注 + * + * @param id + * @return + */ + @Transactional + @Override + public ReturnDTO invalidPrint(Long id) throws Exception { + CertificatePrintDetail certificatePrintDetail = this.baseMapper.selectPrintDetailById(id); + //修改为作废状态 + this.certificatePrintStatus(id, "4"); + //作废旧的证书报告,并重新生成新的证书报告 + String oldCertificateCode = againCreateCertificateReport(certificatePrintDetail.getCertificateReportCode()); + //作废旧的原始记录,并重新生成新的原始记录 + againCreateOriginalRecord(certificatePrintDetail.getOriginalRecordId()); + //作废旧的实验室检定记录,重新生成新的检定记录在我的检测中 + againCreateLabInfo(certificatePrintDetail.getSampleId(), certificatePrintDetail.getOrderId(), oldCertificateCode); + return ReturnUtil.success(); + } + + private void againCreateLabInfo(Long sampleId, Long orderId, String oldCertificateCode) throws Exception { + if (ObjectUtils.isEmpty(sampleId) || ObjectUtils.isEmpty(orderId)) { + return; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("sample_id", sampleId); + queryWrapper.eq("order_id", orderId); + queryWrapper.and( + wrapper -> wrapper.eq("invalid", 0) + .or() + .isNull("invalid") + ); + BusinessLabExecutiveInfo labExecutiveInfo = executiveInfoMapper.selectOne(queryWrapper); + labExecutiveInfo.setInvalid(true); + if (!StringUtils.isEmpty(oldCertificateCode)) { + labExecutiveInfo.setRemark("重检,原证书编号是" + oldCertificateCode); + } + executiveInfoMapper.updateById(labExecutiveInfo); + labExecutiveInfo.setInvalid(false); + labExecutiveInfo.setMeasureStatus(SampleStatusEnum.IN_MEASURE); + labExecutiveInfo.setId(null); + executiveInfoMapper.insert(labExecutiveInfo); + } + + + private void againCreateOriginalRecord(Long originalRecordId) throws Exception { + if (ObjectUtils.isEmpty(originalRecordId)) { + return; + } + BusinessOriginalRecord originalRecord = recordMapper.selectById(originalRecordId); + originalRecord.setInvalid(true); + recordMapper.updateById(originalRecord); + originalRecord.setRemark("已作废"); + originalRecord.setInvalid(false); + Long maxNo = recordMapper.selectMaxCode(); + //保存旧的原始记录编号 + originalRecord.setOldRecordCode(originalRecord.getOriginalRecordCode()); + originalRecord.setRemark(originalRecord.getOriginalRecordCode()); + String originNo = NumberGeneratorUtil.getContactNo(PrefixCodeEnum.ORIGIN_PREFIX, maxNo); + //生成新的原始记录编号 + originalRecord.setOriginalRecordCode(originNo); + originalRecord.setTemplateId(null); + originalRecord.setId(null); + originalRecord.setCreateTime(DateUtil.formatDateTime(new Date())); + recordMapper.insert(originalRecord); + } + + private String againCreateCertificateReport(String certificateReportCode) throws Exception { + if (StringUtils.isEmpty(certificateReportCode)) { + return null; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("certificate_report_code", certificateReportCode); + BusinessCertificateReport certificateReport = certificateReportMapper.selectOne(queryWrapper); + certificateReport.setRemark("已作废"); + certificateReport.setInvalid(true); + certificateReportMapper.updateById(certificateReport); + //重新生成新的证书报告 + certificateReport.setInvalid(false); + //保存旧的原始记录编号 + certificateReport.setOldCertificateCode(certificateReport.getCertificateReportCode()); + certificateReport.setRemark(certificateReport.getCertificateReportCode()); + //重新生成证书编号 + String prefix = MonitorCodeEnum.getByCode(certificateReport.getCalibrationMajor()).getValue() + + DateUtil.format(new Date(), "YYYYMM"); +// String prefix = DateUtil.format(new Date(), "YYYYMM"); + Long maxNo = certificateReportMapper.selectMaxCode(prefix); + //生成证书编号 + String certificateReportNo = NumberGeneratorUtil.getCode( + MonitorCodeEnum.getByCode(certificateReport.getCalibrationMajor()).getValue(), maxNo); + certificateReport.setApprovalStatus(""); + certificateReport.setId(null); + certificateReport.setCertificateReportCode(certificateReportNo); + certificateReport.setTemplateId(null); + certificateReport.setCreateTime(DateUtil.formatDateTime(new Date())); + certificateReportMapper.insert(certificateReport); + return certificateReport.getOldCertificateCode(); + } + + + /** * 提交审批流程,修改证书审批状态为待审批,打印状态为审批中 */ @Transactional @@ -182,7 +302,7 @@ */ private Page noScopeHandleApprovalStatus(Page page, CertificateLisSearchRequest request) throws Exception { //查询所有的打印记录 - Page approvalList = this.baseMapper.searchForApprovalList(page, request); + Page approvalList = this.baseMapper.searchForApprovalList(page, request); List> staffList = this.baseMapper.getMeterStaffList(); Map staffMap = staffList.stream().collect( Collectors.toMap(e -> Long.valueOf(String.valueOf(e.get("id"))), e -> String.valueOf(e.get("name"))) diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 5f8cba0..168e6c6 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -120,21 +120,17 @@ } /** - * 证书打印作废,原始记录和证书都需要变更为作废, - * - * 同时复制为两个作为新的基本信息生成新的消息,标志为作废 - * 原记录编号是多少, * @param idDTO * @return */ @ApiOperation("证书打印-作废") @PostMapping("/invalid") - public ReturnDTO invalidPrint(@RequestBody @Valid IdDTO idDTO) { + public ReturnDTO invalidPrint(@RequestBody @Valid IdDTO idDTO) throws Exception{ Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); //将证书状态置为作废状态 - return certificatePrintService.certificatePrintStatus(idDTO.getId(), "4"); + return certificatePrintService.invalidPrint(idDTO.getId()); } @ApiOperation("证书打印审批-发起申请") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 62b8b3e..cb7f4a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -191,9 +191,13 @@ @TableField("is_del") private Boolean isDel; - @ApiModelProperty(value = "实验室id", dataType = "Long") - @TableField("lab_executive_id") - private Long labExecutiveId; + @ApiModelProperty(value = "作废标志", dataType = "Long") + @TableField("invalid") + private Boolean invalid; + + @ApiModelProperty(value = "旧的证书编号", dataType = "Long") + @TableField("old_certificate_code") + private String oldCertificateCode; @TableField("create_user") @ApiModelProperty(value = "流程实例id(未通过编辑接口必传参数)", dataType = "String") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java index 5630860..ca1a4de 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java @@ -117,5 +117,6 @@ @TableField("update_time") private String updateTime; - + @TableField("invalid") + private Boolean invalid; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java index d2ada0c..7b60ff2 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java @@ -125,14 +125,17 @@ @ApiModelProperty(value = "备注", dataType = "String") private String remark; - - @ApiModelProperty(value = "实验室id", dataType = "Long") - @TableField("lab_executive_id") - private Long labExecutiveId; - @TableField("is_del") private Boolean isDel; + @ApiModelProperty(value = "作废标志", dataType = "Boolean") + @TableField("invalid") + private Boolean invalid; + + @ApiModelProperty(value = "旧的原始记录编号", dataType = "String") + @TableField("old_record_code") + private String oldRecordCode; + @TableField("create_user") private Long createUser; @@ -143,10 +146,9 @@ private String updateTime; - @TableField("deliver_time") @ApiModelProperty(value = "接收时间", dataType = "String") - private String deliverTime; + private String deliverTime; @TableField("appearance_status") @ApiModelProperty(value = "外观状态", dataType = "String") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 4f69872..4139168 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -1,8 +1,10 @@ package com.casic.missiles.service.Impl.business; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.stream.CollectorUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.base.service.IBaseExportService; @@ -16,25 +18,37 @@ import com.casic.missiles.dto.flowable.ApprovalAgreeRequest; import com.casic.missiles.dto.flowable.ApprovalRefuseRequest; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; +import com.casic.missiles.enums.PrefixCodeEnum; +import com.casic.missiles.enums.business.MonitorCodeEnum; +import com.casic.missiles.enums.sample.SampleStatusEnum; import com.casic.missiles.enums.system.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.ExportEnum; import com.casic.missiles.enums.business.CertificatePrintStatusEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.business.BusinessCertificatePrintMapper; -import com.casic.missiles.model.business.BusinessCertificatePrint; +import com.casic.missiles.mapper.business.BusinessCertificateReportMapper; +import com.casic.missiles.mapper.business.BusinessLabExecutiveInfoMapper; +import com.casic.missiles.mapper.business.BusinessOriginalRecordMapper; +import com.casic.missiles.model.business.*; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.service.IBaseApprovalService; import com.casic.missiles.service.business.IBusinessCertificatePrintService; +import com.casic.missiles.service.business.IBusinessCertificateReportService; +import com.casic.missiles.service.business.IBusinessOriginalRecordService; import com.casic.missiles.service.flowable.ApprovalOperateService; import com.casic.missiles.utils.DictCodeUtils; +import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.AllArgsConstructor; +import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.docx4j.wml.R; import org.flowable.engine.RuntimeService; import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.util.ObjectUtils; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; @@ -45,14 +59,16 @@ * @author cz */ @Service -@AllArgsConstructor +@RequiredArgsConstructor public class BusinessCertificatePrintServiceImpl extends ServiceImpl implements IBusinessCertificatePrintService, CertificatePrintStatusEnum { private final IBaseApprovalService baseApprovalService; private final IBaseExportService iBaseExportService; private final ApprovalOperateService approvalOperateService; - @Resource - private RuntimeService runtimeService; + private final RuntimeService runtimeService; + private final BusinessCertificateReportMapper certificateReportMapper; + private final BusinessOriginalRecordMapper recordMapper; + private final BusinessLabExecutiveInfoMapper executiveInfoMapper; @Override public Page certificatePrintListPage(CertificateListRequest request, Page page) throws Exception { @@ -147,6 +163,110 @@ } /** + * 1、证书打印作废,原始记录和证书都需要变更为作废标志,备注新增旧的编号,原来的备注标记为作废 + * 2、同时复制为两个作为新的基本信息生成新的消息 + * 3、查询获取到最新的原始记录和 + * 4、生成一条新的实验室信息,并在老的实验室信息备注 + * + * @param id + * @return + */ + @Transactional + @Override + public ReturnDTO invalidPrint(Long id) throws Exception { + CertificatePrintDetail certificatePrintDetail = this.baseMapper.selectPrintDetailById(id); + //修改为作废状态 + this.certificatePrintStatus(id, "4"); + //作废旧的证书报告,并重新生成新的证书报告 + String oldCertificateCode = againCreateCertificateReport(certificatePrintDetail.getCertificateReportCode()); + //作废旧的原始记录,并重新生成新的原始记录 + againCreateOriginalRecord(certificatePrintDetail.getOriginalRecordId()); + //作废旧的实验室检定记录,重新生成新的检定记录在我的检测中 + againCreateLabInfo(certificatePrintDetail.getSampleId(), certificatePrintDetail.getOrderId(), oldCertificateCode); + return ReturnUtil.success(); + } + + private void againCreateLabInfo(Long sampleId, Long orderId, String oldCertificateCode) throws Exception { + if (ObjectUtils.isEmpty(sampleId) || ObjectUtils.isEmpty(orderId)) { + return; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("sample_id", sampleId); + queryWrapper.eq("order_id", orderId); + queryWrapper.and( + wrapper -> wrapper.eq("invalid", 0) + .or() + .isNull("invalid") + ); + BusinessLabExecutiveInfo labExecutiveInfo = executiveInfoMapper.selectOne(queryWrapper); + labExecutiveInfo.setInvalid(true); + if (!StringUtils.isEmpty(oldCertificateCode)) { + labExecutiveInfo.setRemark("重检,原证书编号是" + oldCertificateCode); + } + executiveInfoMapper.updateById(labExecutiveInfo); + labExecutiveInfo.setInvalid(false); + labExecutiveInfo.setMeasureStatus(SampleStatusEnum.IN_MEASURE); + labExecutiveInfo.setId(null); + executiveInfoMapper.insert(labExecutiveInfo); + } + + + private void againCreateOriginalRecord(Long originalRecordId) throws Exception { + if (ObjectUtils.isEmpty(originalRecordId)) { + return; + } + BusinessOriginalRecord originalRecord = recordMapper.selectById(originalRecordId); + originalRecord.setInvalid(true); + recordMapper.updateById(originalRecord); + originalRecord.setRemark("已作废"); + originalRecord.setInvalid(false); + Long maxNo = recordMapper.selectMaxCode(); + //保存旧的原始记录编号 + originalRecord.setOldRecordCode(originalRecord.getOriginalRecordCode()); + originalRecord.setRemark(originalRecord.getOriginalRecordCode()); + String originNo = NumberGeneratorUtil.getContactNo(PrefixCodeEnum.ORIGIN_PREFIX, maxNo); + //生成新的原始记录编号 + originalRecord.setOriginalRecordCode(originNo); + originalRecord.setTemplateId(null); + originalRecord.setId(null); + originalRecord.setCreateTime(DateUtil.formatDateTime(new Date())); + recordMapper.insert(originalRecord); + } + + private String againCreateCertificateReport(String certificateReportCode) throws Exception { + if (StringUtils.isEmpty(certificateReportCode)) { + return null; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("certificate_report_code", certificateReportCode); + BusinessCertificateReport certificateReport = certificateReportMapper.selectOne(queryWrapper); + certificateReport.setRemark("已作废"); + certificateReport.setInvalid(true); + certificateReportMapper.updateById(certificateReport); + //重新生成新的证书报告 + certificateReport.setInvalid(false); + //保存旧的原始记录编号 + certificateReport.setOldCertificateCode(certificateReport.getCertificateReportCode()); + certificateReport.setRemark(certificateReport.getCertificateReportCode()); + //重新生成证书编号 + String prefix = MonitorCodeEnum.getByCode(certificateReport.getCalibrationMajor()).getValue() + + DateUtil.format(new Date(), "YYYYMM"); +// String prefix = DateUtil.format(new Date(), "YYYYMM"); + Long maxNo = certificateReportMapper.selectMaxCode(prefix); + //生成证书编号 + String certificateReportNo = NumberGeneratorUtil.getCode( + MonitorCodeEnum.getByCode(certificateReport.getCalibrationMajor()).getValue(), maxNo); + certificateReport.setApprovalStatus(""); + certificateReport.setId(null); + certificateReport.setCertificateReportCode(certificateReportNo); + certificateReport.setTemplateId(null); + certificateReport.setCreateTime(DateUtil.formatDateTime(new Date())); + certificateReportMapper.insert(certificateReport); + return certificateReport.getOldCertificateCode(); + } + + + /** * 提交审批流程,修改证书审批状态为待审批,打印状态为审批中 */ @Transactional @@ -182,7 +302,7 @@ */ private Page noScopeHandleApprovalStatus(Page page, CertificateLisSearchRequest request) throws Exception { //查询所有的打印记录 - Page approvalList = this.baseMapper.searchForApprovalList(page, request); + Page approvalList = this.baseMapper.searchForApprovalList(page, request); List> staffList = this.baseMapper.getMeterStaffList(); Map staffMap = staffList.stream().collect( Collectors.toMap(e -> Long.valueOf(String.valueOf(e.get("id"))), e -> String.valueOf(e.get("name"))) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java index 605ad7b..bd20c07 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java @@ -50,7 +50,6 @@ import com.casic.missiles.utils.PageUtil; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; -import org.flowable.engine.TaskService; import org.flowable.engine.runtime.ProcessInstance; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -495,7 +494,7 @@ private void initCertificateReport(BusinessCertificateReport certificateReport) { String prefix = MonitorCodeEnum.getByCode(certificateReport.getCalibrationMajor()).getValue() - + DateUtil.format(new Date(), "YYYYMM"); + + DateUtil.format(new Date(), "YYYYMMDD"); // String prefix = DateUtil.format(new Date(), "YYYYMM"); Long maxNo = this.baseMapper.selectMaxCode(prefix); //生成证书编号 diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 5f8cba0..168e6c6 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -120,21 +120,17 @@ } /** - * 证书打印作废,原始记录和证书都需要变更为作废, - * - * 同时复制为两个作为新的基本信息生成新的消息,标志为作废 - * 原记录编号是多少, * @param idDTO * @return */ @ApiOperation("证书打印-作废") @PostMapping("/invalid") - public ReturnDTO invalidPrint(@RequestBody @Valid IdDTO idDTO) { + public ReturnDTO invalidPrint(@RequestBody @Valid IdDTO idDTO) throws Exception{ Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); //将证书状态置为作废状态 - return certificatePrintService.certificatePrintStatus(idDTO.getId(), "4"); + return certificatePrintService.invalidPrint(idDTO.getId()); } @ApiOperation("证书打印审批-发起申请") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 62b8b3e..cb7f4a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -191,9 +191,13 @@ @TableField("is_del") private Boolean isDel; - @ApiModelProperty(value = "实验室id", dataType = "Long") - @TableField("lab_executive_id") - private Long labExecutiveId; + @ApiModelProperty(value = "作废标志", dataType = "Long") + @TableField("invalid") + private Boolean invalid; + + @ApiModelProperty(value = "旧的证书编号", dataType = "Long") + @TableField("old_certificate_code") + private String oldCertificateCode; @TableField("create_user") @ApiModelProperty(value = "流程实例id(未通过编辑接口必传参数)", dataType = "String") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java index 5630860..ca1a4de 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java @@ -117,5 +117,6 @@ @TableField("update_time") private String updateTime; - + @TableField("invalid") + private Boolean invalid; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java index d2ada0c..7b60ff2 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java @@ -125,14 +125,17 @@ @ApiModelProperty(value = "备注", dataType = "String") private String remark; - - @ApiModelProperty(value = "实验室id", dataType = "Long") - @TableField("lab_executive_id") - private Long labExecutiveId; - @TableField("is_del") private Boolean isDel; + @ApiModelProperty(value = "作废标志", dataType = "Boolean") + @TableField("invalid") + private Boolean invalid; + + @ApiModelProperty(value = "旧的原始记录编号", dataType = "String") + @TableField("old_record_code") + private String oldRecordCode; + @TableField("create_user") private Long createUser; @@ -143,10 +146,9 @@ private String updateTime; - @TableField("deliver_time") @ApiModelProperty(value = "接收时间", dataType = "String") - private String deliverTime; + private String deliverTime; @TableField("appearance_status") @ApiModelProperty(value = "外观状态", dataType = "String") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 4f69872..4139168 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -1,8 +1,10 @@ package com.casic.missiles.service.Impl.business; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.stream.CollectorUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.base.service.IBaseExportService; @@ -16,25 +18,37 @@ import com.casic.missiles.dto.flowable.ApprovalAgreeRequest; import com.casic.missiles.dto.flowable.ApprovalRefuseRequest; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; +import com.casic.missiles.enums.PrefixCodeEnum; +import com.casic.missiles.enums.business.MonitorCodeEnum; +import com.casic.missiles.enums.sample.SampleStatusEnum; import com.casic.missiles.enums.system.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.ExportEnum; import com.casic.missiles.enums.business.CertificatePrintStatusEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.business.BusinessCertificatePrintMapper; -import com.casic.missiles.model.business.BusinessCertificatePrint; +import com.casic.missiles.mapper.business.BusinessCertificateReportMapper; +import com.casic.missiles.mapper.business.BusinessLabExecutiveInfoMapper; +import com.casic.missiles.mapper.business.BusinessOriginalRecordMapper; +import com.casic.missiles.model.business.*; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.service.IBaseApprovalService; import com.casic.missiles.service.business.IBusinessCertificatePrintService; +import com.casic.missiles.service.business.IBusinessCertificateReportService; +import com.casic.missiles.service.business.IBusinessOriginalRecordService; import com.casic.missiles.service.flowable.ApprovalOperateService; import com.casic.missiles.utils.DictCodeUtils; +import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.AllArgsConstructor; +import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.docx4j.wml.R; import org.flowable.engine.RuntimeService; import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.util.ObjectUtils; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; @@ -45,14 +59,16 @@ * @author cz */ @Service -@AllArgsConstructor +@RequiredArgsConstructor public class BusinessCertificatePrintServiceImpl extends ServiceImpl implements IBusinessCertificatePrintService, CertificatePrintStatusEnum { private final IBaseApprovalService baseApprovalService; private final IBaseExportService iBaseExportService; private final ApprovalOperateService approvalOperateService; - @Resource - private RuntimeService runtimeService; + private final RuntimeService runtimeService; + private final BusinessCertificateReportMapper certificateReportMapper; + private final BusinessOriginalRecordMapper recordMapper; + private final BusinessLabExecutiveInfoMapper executiveInfoMapper; @Override public Page certificatePrintListPage(CertificateListRequest request, Page page) throws Exception { @@ -147,6 +163,110 @@ } /** + * 1、证书打印作废,原始记录和证书都需要变更为作废标志,备注新增旧的编号,原来的备注标记为作废 + * 2、同时复制为两个作为新的基本信息生成新的消息 + * 3、查询获取到最新的原始记录和 + * 4、生成一条新的实验室信息,并在老的实验室信息备注 + * + * @param id + * @return + */ + @Transactional + @Override + public ReturnDTO invalidPrint(Long id) throws Exception { + CertificatePrintDetail certificatePrintDetail = this.baseMapper.selectPrintDetailById(id); + //修改为作废状态 + this.certificatePrintStatus(id, "4"); + //作废旧的证书报告,并重新生成新的证书报告 + String oldCertificateCode = againCreateCertificateReport(certificatePrintDetail.getCertificateReportCode()); + //作废旧的原始记录,并重新生成新的原始记录 + againCreateOriginalRecord(certificatePrintDetail.getOriginalRecordId()); + //作废旧的实验室检定记录,重新生成新的检定记录在我的检测中 + againCreateLabInfo(certificatePrintDetail.getSampleId(), certificatePrintDetail.getOrderId(), oldCertificateCode); + return ReturnUtil.success(); + } + + private void againCreateLabInfo(Long sampleId, Long orderId, String oldCertificateCode) throws Exception { + if (ObjectUtils.isEmpty(sampleId) || ObjectUtils.isEmpty(orderId)) { + return; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("sample_id", sampleId); + queryWrapper.eq("order_id", orderId); + queryWrapper.and( + wrapper -> wrapper.eq("invalid", 0) + .or() + .isNull("invalid") + ); + BusinessLabExecutiveInfo labExecutiveInfo = executiveInfoMapper.selectOne(queryWrapper); + labExecutiveInfo.setInvalid(true); + if (!StringUtils.isEmpty(oldCertificateCode)) { + labExecutiveInfo.setRemark("重检,原证书编号是" + oldCertificateCode); + } + executiveInfoMapper.updateById(labExecutiveInfo); + labExecutiveInfo.setInvalid(false); + labExecutiveInfo.setMeasureStatus(SampleStatusEnum.IN_MEASURE); + labExecutiveInfo.setId(null); + executiveInfoMapper.insert(labExecutiveInfo); + } + + + private void againCreateOriginalRecord(Long originalRecordId) throws Exception { + if (ObjectUtils.isEmpty(originalRecordId)) { + return; + } + BusinessOriginalRecord originalRecord = recordMapper.selectById(originalRecordId); + originalRecord.setInvalid(true); + recordMapper.updateById(originalRecord); + originalRecord.setRemark("已作废"); + originalRecord.setInvalid(false); + Long maxNo = recordMapper.selectMaxCode(); + //保存旧的原始记录编号 + originalRecord.setOldRecordCode(originalRecord.getOriginalRecordCode()); + originalRecord.setRemark(originalRecord.getOriginalRecordCode()); + String originNo = NumberGeneratorUtil.getContactNo(PrefixCodeEnum.ORIGIN_PREFIX, maxNo); + //生成新的原始记录编号 + originalRecord.setOriginalRecordCode(originNo); + originalRecord.setTemplateId(null); + originalRecord.setId(null); + originalRecord.setCreateTime(DateUtil.formatDateTime(new Date())); + recordMapper.insert(originalRecord); + } + + private String againCreateCertificateReport(String certificateReportCode) throws Exception { + if (StringUtils.isEmpty(certificateReportCode)) { + return null; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("certificate_report_code", certificateReportCode); + BusinessCertificateReport certificateReport = certificateReportMapper.selectOne(queryWrapper); + certificateReport.setRemark("已作废"); + certificateReport.setInvalid(true); + certificateReportMapper.updateById(certificateReport); + //重新生成新的证书报告 + certificateReport.setInvalid(false); + //保存旧的原始记录编号 + certificateReport.setOldCertificateCode(certificateReport.getCertificateReportCode()); + certificateReport.setRemark(certificateReport.getCertificateReportCode()); + //重新生成证书编号 + String prefix = MonitorCodeEnum.getByCode(certificateReport.getCalibrationMajor()).getValue() + + DateUtil.format(new Date(), "YYYYMM"); +// String prefix = DateUtil.format(new Date(), "YYYYMM"); + Long maxNo = certificateReportMapper.selectMaxCode(prefix); + //生成证书编号 + String certificateReportNo = NumberGeneratorUtil.getCode( + MonitorCodeEnum.getByCode(certificateReport.getCalibrationMajor()).getValue(), maxNo); + certificateReport.setApprovalStatus(""); + certificateReport.setId(null); + certificateReport.setCertificateReportCode(certificateReportNo); + certificateReport.setTemplateId(null); + certificateReport.setCreateTime(DateUtil.formatDateTime(new Date())); + certificateReportMapper.insert(certificateReport); + return certificateReport.getOldCertificateCode(); + } + + + /** * 提交审批流程,修改证书审批状态为待审批,打印状态为审批中 */ @Transactional @@ -182,7 +302,7 @@ */ private Page noScopeHandleApprovalStatus(Page page, CertificateLisSearchRequest request) throws Exception { //查询所有的打印记录 - Page approvalList = this.baseMapper.searchForApprovalList(page, request); + Page approvalList = this.baseMapper.searchForApprovalList(page, request); List> staffList = this.baseMapper.getMeterStaffList(); Map staffMap = staffList.stream().collect( Collectors.toMap(e -> Long.valueOf(String.valueOf(e.get("id"))), e -> String.valueOf(e.get("name"))) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java index 605ad7b..bd20c07 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java @@ -50,7 +50,6 @@ import com.casic.missiles.utils.PageUtil; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; -import org.flowable.engine.TaskService; import org.flowable.engine.runtime.ProcessInstance; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -495,7 +494,7 @@ private void initCertificateReport(BusinessCertificateReport certificateReport) { String prefix = MonitorCodeEnum.getByCode(certificateReport.getCalibrationMajor()).getValue() - + DateUtil.format(new Date(), "YYYYMM"); + + DateUtil.format(new Date(), "YYYYMMDD"); // String prefix = DateUtil.format(new Date(), "YYYYMM"); Long maxNo = this.baseMapper.selectMaxCode(prefix); //生成证书编号 diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java index 57aa8f9..8033e90 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java @@ -41,6 +41,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.util.ObjectUtils; import java.util.*; import java.util.stream.Collector; @@ -342,13 +343,15 @@ //当前检定环节:具体实验室,已出具证书:查询证书报告表,证书总数:具体实验室 case MeasureStatusEnum.IN_MEASURE: List originalRecords = originalRecordMapper.selectList(null); - Map originalRecordMap = originalRecords.stream() + Map originalRecordMap = originalRecords.stream() //过滤调作废的证书 - .collect(Collectors.toMap(BusinessOriginalRecord::getLabExecutiveId, BusinessOriginalRecord::getId, (e1, e2) -> e1)); + .filter(e -> ObjectUtils.isEmpty(e.getInvalid()) || !e.getInvalid()) + .collect(Collectors.toMap(e -> String.valueOf(e.getSampleId()) + e.getOrderId(), BusinessOriginalRecord::getId, (e1, e2) -> e1)); //需要审批状态, List certificateReportList = certificateReportMapper.selectList(null); - Map certificateReportMap = certificateReportList.stream() - .collect(Collectors.toMap(e -> e.getLabExecutiveId(), e -> e, (e1, e2) -> e1)); + Map certificateReportMap = certificateReportList.stream() + .filter(e -> ObjectUtils.isEmpty(e.getInvalid()) || !e.getInvalid()) + .collect(Collectors.toMap(e -> String.valueOf(e.getSampleId()) + e.getOrderId(), e -> e, (e1, e2) -> e1)); resultPage = labExecutiveInfoMapper.selectListByUserIdAndStatus(page, labExecutiveListRequest, userId, MeasureStatusEnum.IN_MEASURE); //获取所有的原始记录和证书 @@ -381,16 +384,17 @@ /** * 判断文件的状态 */ - private void sampleFIleStatus(Map originalRecordMap, Map certificateReportMap, SampleLabExecutiveListResponse lab) { - Long key = lab.getId(); + private void sampleFIleStatus(Map originalRecordMap, Map certificateReportMap, SampleLabExecutiveListResponse lab) { + String key = String.valueOf(lab.getSampleId()) + lab.getOrderId(); //判断不含原始记录的情况 if (!originalRecordMap.containsKey(key)) { lab.setSampleFileStatus(NOT_EXIST_FILE); return; } + lab.setOriginalRecordId(originalRecordMap.get(key)); //判断不含有证书的情况 if (!certificateReportMap.containsKey(key)) { - lab.setOriginalRecordId(originalRecordMap.get(key)); + lab.setSampleFileStatus(ORIGINAL_RECORD); return; } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 5f8cba0..168e6c6 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -120,21 +120,17 @@ } /** - * 证书打印作废,原始记录和证书都需要变更为作废, - * - * 同时复制为两个作为新的基本信息生成新的消息,标志为作废 - * 原记录编号是多少, * @param idDTO * @return */ @ApiOperation("证书打印-作废") @PostMapping("/invalid") - public ReturnDTO invalidPrint(@RequestBody @Valid IdDTO idDTO) { + public ReturnDTO invalidPrint(@RequestBody @Valid IdDTO idDTO) throws Exception{ Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); //将证书状态置为作废状态 - return certificatePrintService.certificatePrintStatus(idDTO.getId(), "4"); + return certificatePrintService.invalidPrint(idDTO.getId()); } @ApiOperation("证书打印审批-发起申请") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 62b8b3e..cb7f4a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -191,9 +191,13 @@ @TableField("is_del") private Boolean isDel; - @ApiModelProperty(value = "实验室id", dataType = "Long") - @TableField("lab_executive_id") - private Long labExecutiveId; + @ApiModelProperty(value = "作废标志", dataType = "Long") + @TableField("invalid") + private Boolean invalid; + + @ApiModelProperty(value = "旧的证书编号", dataType = "Long") + @TableField("old_certificate_code") + private String oldCertificateCode; @TableField("create_user") @ApiModelProperty(value = "流程实例id(未通过编辑接口必传参数)", dataType = "String") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java index 5630860..ca1a4de 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java @@ -117,5 +117,6 @@ @TableField("update_time") private String updateTime; - + @TableField("invalid") + private Boolean invalid; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java index d2ada0c..7b60ff2 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java @@ -125,14 +125,17 @@ @ApiModelProperty(value = "备注", dataType = "String") private String remark; - - @ApiModelProperty(value = "实验室id", dataType = "Long") - @TableField("lab_executive_id") - private Long labExecutiveId; - @TableField("is_del") private Boolean isDel; + @ApiModelProperty(value = "作废标志", dataType = "Boolean") + @TableField("invalid") + private Boolean invalid; + + @ApiModelProperty(value = "旧的原始记录编号", dataType = "String") + @TableField("old_record_code") + private String oldRecordCode; + @TableField("create_user") private Long createUser; @@ -143,10 +146,9 @@ private String updateTime; - @TableField("deliver_time") @ApiModelProperty(value = "接收时间", dataType = "String") - private String deliverTime; + private String deliverTime; @TableField("appearance_status") @ApiModelProperty(value = "外观状态", dataType = "String") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 4f69872..4139168 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -1,8 +1,10 @@ package com.casic.missiles.service.Impl.business; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.stream.CollectorUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.base.service.IBaseExportService; @@ -16,25 +18,37 @@ import com.casic.missiles.dto.flowable.ApprovalAgreeRequest; import com.casic.missiles.dto.flowable.ApprovalRefuseRequest; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; +import com.casic.missiles.enums.PrefixCodeEnum; +import com.casic.missiles.enums.business.MonitorCodeEnum; +import com.casic.missiles.enums.sample.SampleStatusEnum; import com.casic.missiles.enums.system.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.ExportEnum; import com.casic.missiles.enums.business.CertificatePrintStatusEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.business.BusinessCertificatePrintMapper; -import com.casic.missiles.model.business.BusinessCertificatePrint; +import com.casic.missiles.mapper.business.BusinessCertificateReportMapper; +import com.casic.missiles.mapper.business.BusinessLabExecutiveInfoMapper; +import com.casic.missiles.mapper.business.BusinessOriginalRecordMapper; +import com.casic.missiles.model.business.*; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.service.IBaseApprovalService; import com.casic.missiles.service.business.IBusinessCertificatePrintService; +import com.casic.missiles.service.business.IBusinessCertificateReportService; +import com.casic.missiles.service.business.IBusinessOriginalRecordService; import com.casic.missiles.service.flowable.ApprovalOperateService; import com.casic.missiles.utils.DictCodeUtils; +import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.AllArgsConstructor; +import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.docx4j.wml.R; import org.flowable.engine.RuntimeService; import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.util.ObjectUtils; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; @@ -45,14 +59,16 @@ * @author cz */ @Service -@AllArgsConstructor +@RequiredArgsConstructor public class BusinessCertificatePrintServiceImpl extends ServiceImpl implements IBusinessCertificatePrintService, CertificatePrintStatusEnum { private final IBaseApprovalService baseApprovalService; private final IBaseExportService iBaseExportService; private final ApprovalOperateService approvalOperateService; - @Resource - private RuntimeService runtimeService; + private final RuntimeService runtimeService; + private final BusinessCertificateReportMapper certificateReportMapper; + private final BusinessOriginalRecordMapper recordMapper; + private final BusinessLabExecutiveInfoMapper executiveInfoMapper; @Override public Page certificatePrintListPage(CertificateListRequest request, Page page) throws Exception { @@ -147,6 +163,110 @@ } /** + * 1、证书打印作废,原始记录和证书都需要变更为作废标志,备注新增旧的编号,原来的备注标记为作废 + * 2、同时复制为两个作为新的基本信息生成新的消息 + * 3、查询获取到最新的原始记录和 + * 4、生成一条新的实验室信息,并在老的实验室信息备注 + * + * @param id + * @return + */ + @Transactional + @Override + public ReturnDTO invalidPrint(Long id) throws Exception { + CertificatePrintDetail certificatePrintDetail = this.baseMapper.selectPrintDetailById(id); + //修改为作废状态 + this.certificatePrintStatus(id, "4"); + //作废旧的证书报告,并重新生成新的证书报告 + String oldCertificateCode = againCreateCertificateReport(certificatePrintDetail.getCertificateReportCode()); + //作废旧的原始记录,并重新生成新的原始记录 + againCreateOriginalRecord(certificatePrintDetail.getOriginalRecordId()); + //作废旧的实验室检定记录,重新生成新的检定记录在我的检测中 + againCreateLabInfo(certificatePrintDetail.getSampleId(), certificatePrintDetail.getOrderId(), oldCertificateCode); + return ReturnUtil.success(); + } + + private void againCreateLabInfo(Long sampleId, Long orderId, String oldCertificateCode) throws Exception { + if (ObjectUtils.isEmpty(sampleId) || ObjectUtils.isEmpty(orderId)) { + return; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("sample_id", sampleId); + queryWrapper.eq("order_id", orderId); + queryWrapper.and( + wrapper -> wrapper.eq("invalid", 0) + .or() + .isNull("invalid") + ); + BusinessLabExecutiveInfo labExecutiveInfo = executiveInfoMapper.selectOne(queryWrapper); + labExecutiveInfo.setInvalid(true); + if (!StringUtils.isEmpty(oldCertificateCode)) { + labExecutiveInfo.setRemark("重检,原证书编号是" + oldCertificateCode); + } + executiveInfoMapper.updateById(labExecutiveInfo); + labExecutiveInfo.setInvalid(false); + labExecutiveInfo.setMeasureStatus(SampleStatusEnum.IN_MEASURE); + labExecutiveInfo.setId(null); + executiveInfoMapper.insert(labExecutiveInfo); + } + + + private void againCreateOriginalRecord(Long originalRecordId) throws Exception { + if (ObjectUtils.isEmpty(originalRecordId)) { + return; + } + BusinessOriginalRecord originalRecord = recordMapper.selectById(originalRecordId); + originalRecord.setInvalid(true); + recordMapper.updateById(originalRecord); + originalRecord.setRemark("已作废"); + originalRecord.setInvalid(false); + Long maxNo = recordMapper.selectMaxCode(); + //保存旧的原始记录编号 + originalRecord.setOldRecordCode(originalRecord.getOriginalRecordCode()); + originalRecord.setRemark(originalRecord.getOriginalRecordCode()); + String originNo = NumberGeneratorUtil.getContactNo(PrefixCodeEnum.ORIGIN_PREFIX, maxNo); + //生成新的原始记录编号 + originalRecord.setOriginalRecordCode(originNo); + originalRecord.setTemplateId(null); + originalRecord.setId(null); + originalRecord.setCreateTime(DateUtil.formatDateTime(new Date())); + recordMapper.insert(originalRecord); + } + + private String againCreateCertificateReport(String certificateReportCode) throws Exception { + if (StringUtils.isEmpty(certificateReportCode)) { + return null; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("certificate_report_code", certificateReportCode); + BusinessCertificateReport certificateReport = certificateReportMapper.selectOne(queryWrapper); + certificateReport.setRemark("已作废"); + certificateReport.setInvalid(true); + certificateReportMapper.updateById(certificateReport); + //重新生成新的证书报告 + certificateReport.setInvalid(false); + //保存旧的原始记录编号 + certificateReport.setOldCertificateCode(certificateReport.getCertificateReportCode()); + certificateReport.setRemark(certificateReport.getCertificateReportCode()); + //重新生成证书编号 + String prefix = MonitorCodeEnum.getByCode(certificateReport.getCalibrationMajor()).getValue() + + DateUtil.format(new Date(), "YYYYMM"); +// String prefix = DateUtil.format(new Date(), "YYYYMM"); + Long maxNo = certificateReportMapper.selectMaxCode(prefix); + //生成证书编号 + String certificateReportNo = NumberGeneratorUtil.getCode( + MonitorCodeEnum.getByCode(certificateReport.getCalibrationMajor()).getValue(), maxNo); + certificateReport.setApprovalStatus(""); + certificateReport.setId(null); + certificateReport.setCertificateReportCode(certificateReportNo); + certificateReport.setTemplateId(null); + certificateReport.setCreateTime(DateUtil.formatDateTime(new Date())); + certificateReportMapper.insert(certificateReport); + return certificateReport.getOldCertificateCode(); + } + + + /** * 提交审批流程,修改证书审批状态为待审批,打印状态为审批中 */ @Transactional @@ -182,7 +302,7 @@ */ private Page noScopeHandleApprovalStatus(Page page, CertificateLisSearchRequest request) throws Exception { //查询所有的打印记录 - Page approvalList = this.baseMapper.searchForApprovalList(page, request); + Page approvalList = this.baseMapper.searchForApprovalList(page, request); List> staffList = this.baseMapper.getMeterStaffList(); Map staffMap = staffList.stream().collect( Collectors.toMap(e -> Long.valueOf(String.valueOf(e.get("id"))), e -> String.valueOf(e.get("name"))) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java index 605ad7b..bd20c07 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java @@ -50,7 +50,6 @@ import com.casic.missiles.utils.PageUtil; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; -import org.flowable.engine.TaskService; import org.flowable.engine.runtime.ProcessInstance; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -495,7 +494,7 @@ private void initCertificateReport(BusinessCertificateReport certificateReport) { String prefix = MonitorCodeEnum.getByCode(certificateReport.getCalibrationMajor()).getValue() - + DateUtil.format(new Date(), "YYYYMM"); + + DateUtil.format(new Date(), "YYYYMMDD"); // String prefix = DateUtil.format(new Date(), "YYYYMM"); Long maxNo = this.baseMapper.selectMaxCode(prefix); //生成证书编号 diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java index 57aa8f9..8033e90 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java @@ -41,6 +41,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.util.ObjectUtils; import java.util.*; import java.util.stream.Collector; @@ -342,13 +343,15 @@ //当前检定环节:具体实验室,已出具证书:查询证书报告表,证书总数:具体实验室 case MeasureStatusEnum.IN_MEASURE: List originalRecords = originalRecordMapper.selectList(null); - Map originalRecordMap = originalRecords.stream() + Map originalRecordMap = originalRecords.stream() //过滤调作废的证书 - .collect(Collectors.toMap(BusinessOriginalRecord::getLabExecutiveId, BusinessOriginalRecord::getId, (e1, e2) -> e1)); + .filter(e -> ObjectUtils.isEmpty(e.getInvalid()) || !e.getInvalid()) + .collect(Collectors.toMap(e -> String.valueOf(e.getSampleId()) + e.getOrderId(), BusinessOriginalRecord::getId, (e1, e2) -> e1)); //需要审批状态, List certificateReportList = certificateReportMapper.selectList(null); - Map certificateReportMap = certificateReportList.stream() - .collect(Collectors.toMap(e -> e.getLabExecutiveId(), e -> e, (e1, e2) -> e1)); + Map certificateReportMap = certificateReportList.stream() + .filter(e -> ObjectUtils.isEmpty(e.getInvalid()) || !e.getInvalid()) + .collect(Collectors.toMap(e -> String.valueOf(e.getSampleId()) + e.getOrderId(), e -> e, (e1, e2) -> e1)); resultPage = labExecutiveInfoMapper.selectListByUserIdAndStatus(page, labExecutiveListRequest, userId, MeasureStatusEnum.IN_MEASURE); //获取所有的原始记录和证书 @@ -381,16 +384,17 @@ /** * 判断文件的状态 */ - private void sampleFIleStatus(Map originalRecordMap, Map certificateReportMap, SampleLabExecutiveListResponse lab) { - Long key = lab.getId(); + private void sampleFIleStatus(Map originalRecordMap, Map certificateReportMap, SampleLabExecutiveListResponse lab) { + String key = String.valueOf(lab.getSampleId()) + lab.getOrderId(); //判断不含原始记录的情况 if (!originalRecordMap.containsKey(key)) { lab.setSampleFileStatus(NOT_EXIST_FILE); return; } + lab.setOriginalRecordId(originalRecordMap.get(key)); //判断不含有证书的情况 if (!certificateReportMap.containsKey(key)) { - lab.setOriginalRecordId(originalRecordMap.get(key)); + lab.setSampleFileStatus(ORIGINAL_RECORD); return; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificatePrintService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificatePrintService.java index b8e159f..f8c334a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificatePrintService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificatePrintService.java @@ -25,6 +25,8 @@ ReturnDTO refuseAgainPrint(CertificateRefusePrintRequest request); + ReturnDTO invalidPrint(Long id)throws Exception; + ReturnDTO submitAgainPrint(BaseApprovalSubmitRequest request); } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java index 5f8cba0..168e6c6 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificatePrintController.java @@ -120,21 +120,17 @@ } /** - * 证书打印作废,原始记录和证书都需要变更为作废, - * - * 同时复制为两个作为新的基本信息生成新的消息,标志为作废 - * 原记录编号是多少, * @param idDTO * @return */ @ApiOperation("证书打印-作废") @PostMapping("/invalid") - public ReturnDTO invalidPrint(@RequestBody @Valid IdDTO idDTO) { + public ReturnDTO invalidPrint(@RequestBody @Valid IdDTO idDTO) throws Exception{ Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); //将证书状态置为作废状态 - return certificatePrintService.certificatePrintStatus(idDTO.getId(), "4"); + return certificatePrintService.invalidPrint(idDTO.getId()); } @ApiOperation("证书打印审批-发起申请") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 62b8b3e..cb7f4a7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -191,9 +191,13 @@ @TableField("is_del") private Boolean isDel; - @ApiModelProperty(value = "实验室id", dataType = "Long") - @TableField("lab_executive_id") - private Long labExecutiveId; + @ApiModelProperty(value = "作废标志", dataType = "Long") + @TableField("invalid") + private Boolean invalid; + + @ApiModelProperty(value = "旧的证书编号", dataType = "Long") + @TableField("old_certificate_code") + private String oldCertificateCode; @TableField("create_user") @ApiModelProperty(value = "流程实例id(未通过编辑接口必传参数)", dataType = "String") diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java index 5630860..ca1a4de 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessLabExecutiveInfo.java @@ -117,5 +117,6 @@ @TableField("update_time") private String updateTime; - + @TableField("invalid") + private Boolean invalid; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java index d2ada0c..7b60ff2 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java @@ -125,14 +125,17 @@ @ApiModelProperty(value = "备注", dataType = "String") private String remark; - - @ApiModelProperty(value = "实验室id", dataType = "Long") - @TableField("lab_executive_id") - private Long labExecutiveId; - @TableField("is_del") private Boolean isDel; + @ApiModelProperty(value = "作废标志", dataType = "Boolean") + @TableField("invalid") + private Boolean invalid; + + @ApiModelProperty(value = "旧的原始记录编号", dataType = "String") + @TableField("old_record_code") + private String oldRecordCode; + @TableField("create_user") private Long createUser; @@ -143,10 +146,9 @@ private String updateTime; - @TableField("deliver_time") @ApiModelProperty(value = "接收时间", dataType = "String") - private String deliverTime; + private String deliverTime; @TableField("appearance_status") @ApiModelProperty(value = "外观状态", dataType = "String") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java index 4f69872..4139168 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificatePrintServiceImpl.java @@ -1,8 +1,10 @@ package com.casic.missiles.service.Impl.business; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.stream.CollectorUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.base.service.IBaseExportService; @@ -16,25 +18,37 @@ import com.casic.missiles.dto.flowable.ApprovalAgreeRequest; import com.casic.missiles.dto.flowable.ApprovalRefuseRequest; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; +import com.casic.missiles.enums.PrefixCodeEnum; +import com.casic.missiles.enums.business.MonitorCodeEnum; +import com.casic.missiles.enums.sample.SampleStatusEnum; import com.casic.missiles.enums.system.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.ExportEnum; import com.casic.missiles.enums.business.CertificatePrintStatusEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.business.BusinessCertificatePrintMapper; -import com.casic.missiles.model.business.BusinessCertificatePrint; +import com.casic.missiles.mapper.business.BusinessCertificateReportMapper; +import com.casic.missiles.mapper.business.BusinessLabExecutiveInfoMapper; +import com.casic.missiles.mapper.business.BusinessOriginalRecordMapper; +import com.casic.missiles.model.business.*; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.service.IBaseApprovalService; import com.casic.missiles.service.business.IBusinessCertificatePrintService; +import com.casic.missiles.service.business.IBusinessCertificateReportService; +import com.casic.missiles.service.business.IBusinessOriginalRecordService; import com.casic.missiles.service.flowable.ApprovalOperateService; import com.casic.missiles.utils.DictCodeUtils; +import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.AllArgsConstructor; +import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.docx4j.wml.R; import org.flowable.engine.RuntimeService; import org.flowable.engine.runtime.ProcessInstance; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.util.ObjectUtils; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; @@ -45,14 +59,16 @@ * @author cz */ @Service -@AllArgsConstructor +@RequiredArgsConstructor public class BusinessCertificatePrintServiceImpl extends ServiceImpl implements IBusinessCertificatePrintService, CertificatePrintStatusEnum { private final IBaseApprovalService baseApprovalService; private final IBaseExportService iBaseExportService; private final ApprovalOperateService approvalOperateService; - @Resource - private RuntimeService runtimeService; + private final RuntimeService runtimeService; + private final BusinessCertificateReportMapper certificateReportMapper; + private final BusinessOriginalRecordMapper recordMapper; + private final BusinessLabExecutiveInfoMapper executiveInfoMapper; @Override public Page certificatePrintListPage(CertificateListRequest request, Page page) throws Exception { @@ -147,6 +163,110 @@ } /** + * 1、证书打印作废,原始记录和证书都需要变更为作废标志,备注新增旧的编号,原来的备注标记为作废 + * 2、同时复制为两个作为新的基本信息生成新的消息 + * 3、查询获取到最新的原始记录和 + * 4、生成一条新的实验室信息,并在老的实验室信息备注 + * + * @param id + * @return + */ + @Transactional + @Override + public ReturnDTO invalidPrint(Long id) throws Exception { + CertificatePrintDetail certificatePrintDetail = this.baseMapper.selectPrintDetailById(id); + //修改为作废状态 + this.certificatePrintStatus(id, "4"); + //作废旧的证书报告,并重新生成新的证书报告 + String oldCertificateCode = againCreateCertificateReport(certificatePrintDetail.getCertificateReportCode()); + //作废旧的原始记录,并重新生成新的原始记录 + againCreateOriginalRecord(certificatePrintDetail.getOriginalRecordId()); + //作废旧的实验室检定记录,重新生成新的检定记录在我的检测中 + againCreateLabInfo(certificatePrintDetail.getSampleId(), certificatePrintDetail.getOrderId(), oldCertificateCode); + return ReturnUtil.success(); + } + + private void againCreateLabInfo(Long sampleId, Long orderId, String oldCertificateCode) throws Exception { + if (ObjectUtils.isEmpty(sampleId) || ObjectUtils.isEmpty(orderId)) { + return; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("sample_id", sampleId); + queryWrapper.eq("order_id", orderId); + queryWrapper.and( + wrapper -> wrapper.eq("invalid", 0) + .or() + .isNull("invalid") + ); + BusinessLabExecutiveInfo labExecutiveInfo = executiveInfoMapper.selectOne(queryWrapper); + labExecutiveInfo.setInvalid(true); + if (!StringUtils.isEmpty(oldCertificateCode)) { + labExecutiveInfo.setRemark("重检,原证书编号是" + oldCertificateCode); + } + executiveInfoMapper.updateById(labExecutiveInfo); + labExecutiveInfo.setInvalid(false); + labExecutiveInfo.setMeasureStatus(SampleStatusEnum.IN_MEASURE); + labExecutiveInfo.setId(null); + executiveInfoMapper.insert(labExecutiveInfo); + } + + + private void againCreateOriginalRecord(Long originalRecordId) throws Exception { + if (ObjectUtils.isEmpty(originalRecordId)) { + return; + } + BusinessOriginalRecord originalRecord = recordMapper.selectById(originalRecordId); + originalRecord.setInvalid(true); + recordMapper.updateById(originalRecord); + originalRecord.setRemark("已作废"); + originalRecord.setInvalid(false); + Long maxNo = recordMapper.selectMaxCode(); + //保存旧的原始记录编号 + originalRecord.setOldRecordCode(originalRecord.getOriginalRecordCode()); + originalRecord.setRemark(originalRecord.getOriginalRecordCode()); + String originNo = NumberGeneratorUtil.getContactNo(PrefixCodeEnum.ORIGIN_PREFIX, maxNo); + //生成新的原始记录编号 + originalRecord.setOriginalRecordCode(originNo); + originalRecord.setTemplateId(null); + originalRecord.setId(null); + originalRecord.setCreateTime(DateUtil.formatDateTime(new Date())); + recordMapper.insert(originalRecord); + } + + private String againCreateCertificateReport(String certificateReportCode) throws Exception { + if (StringUtils.isEmpty(certificateReportCode)) { + return null; + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("certificate_report_code", certificateReportCode); + BusinessCertificateReport certificateReport = certificateReportMapper.selectOne(queryWrapper); + certificateReport.setRemark("已作废"); + certificateReport.setInvalid(true); + certificateReportMapper.updateById(certificateReport); + //重新生成新的证书报告 + certificateReport.setInvalid(false); + //保存旧的原始记录编号 + certificateReport.setOldCertificateCode(certificateReport.getCertificateReportCode()); + certificateReport.setRemark(certificateReport.getCertificateReportCode()); + //重新生成证书编号 + String prefix = MonitorCodeEnum.getByCode(certificateReport.getCalibrationMajor()).getValue() + + DateUtil.format(new Date(), "YYYYMM"); +// String prefix = DateUtil.format(new Date(), "YYYYMM"); + Long maxNo = certificateReportMapper.selectMaxCode(prefix); + //生成证书编号 + String certificateReportNo = NumberGeneratorUtil.getCode( + MonitorCodeEnum.getByCode(certificateReport.getCalibrationMajor()).getValue(), maxNo); + certificateReport.setApprovalStatus(""); + certificateReport.setId(null); + certificateReport.setCertificateReportCode(certificateReportNo); + certificateReport.setTemplateId(null); + certificateReport.setCreateTime(DateUtil.formatDateTime(new Date())); + certificateReportMapper.insert(certificateReport); + return certificateReport.getOldCertificateCode(); + } + + + /** * 提交审批流程,修改证书审批状态为待审批,打印状态为审批中 */ @Transactional @@ -182,7 +302,7 @@ */ private Page noScopeHandleApprovalStatus(Page page, CertificateLisSearchRequest request) throws Exception { //查询所有的打印记录 - Page approvalList = this.baseMapper.searchForApprovalList(page, request); + Page approvalList = this.baseMapper.searchForApprovalList(page, request); List> staffList = this.baseMapper.getMeterStaffList(); Map staffMap = staffList.stream().collect( Collectors.toMap(e -> Long.valueOf(String.valueOf(e.get("id"))), e -> String.valueOf(e.get("name"))) diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java index 605ad7b..bd20c07 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java @@ -50,7 +50,6 @@ import com.casic.missiles.utils.PageUtil; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.RuntimeService; -import org.flowable.engine.TaskService; import org.flowable.engine.runtime.ProcessInstance; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -495,7 +494,7 @@ private void initCertificateReport(BusinessCertificateReport certificateReport) { String prefix = MonitorCodeEnum.getByCode(certificateReport.getCalibrationMajor()).getValue() - + DateUtil.format(new Date(), "YYYYMM"); + + DateUtil.format(new Date(), "YYYYMMDD"); // String prefix = DateUtil.format(new Date(), "YYYYMM"); Long maxNo = this.baseMapper.selectMaxCode(prefix); //生成证书编号 diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java index 57aa8f9..8033e90 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessLabExecutiveInfoServiceImpl.java @@ -41,6 +41,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.util.ObjectUtils; import java.util.*; import java.util.stream.Collector; @@ -342,13 +343,15 @@ //当前检定环节:具体实验室,已出具证书:查询证书报告表,证书总数:具体实验室 case MeasureStatusEnum.IN_MEASURE: List originalRecords = originalRecordMapper.selectList(null); - Map originalRecordMap = originalRecords.stream() + Map originalRecordMap = originalRecords.stream() //过滤调作废的证书 - .collect(Collectors.toMap(BusinessOriginalRecord::getLabExecutiveId, BusinessOriginalRecord::getId, (e1, e2) -> e1)); + .filter(e -> ObjectUtils.isEmpty(e.getInvalid()) || !e.getInvalid()) + .collect(Collectors.toMap(e -> String.valueOf(e.getSampleId()) + e.getOrderId(), BusinessOriginalRecord::getId, (e1, e2) -> e1)); //需要审批状态, List certificateReportList = certificateReportMapper.selectList(null); - Map certificateReportMap = certificateReportList.stream() - .collect(Collectors.toMap(e -> e.getLabExecutiveId(), e -> e, (e1, e2) -> e1)); + Map certificateReportMap = certificateReportList.stream() + .filter(e -> ObjectUtils.isEmpty(e.getInvalid()) || !e.getInvalid()) + .collect(Collectors.toMap(e -> String.valueOf(e.getSampleId()) + e.getOrderId(), e -> e, (e1, e2) -> e1)); resultPage = labExecutiveInfoMapper.selectListByUserIdAndStatus(page, labExecutiveListRequest, userId, MeasureStatusEnum.IN_MEASURE); //获取所有的原始记录和证书 @@ -381,16 +384,17 @@ /** * 判断文件的状态 */ - private void sampleFIleStatus(Map originalRecordMap, Map certificateReportMap, SampleLabExecutiveListResponse lab) { - Long key = lab.getId(); + private void sampleFIleStatus(Map originalRecordMap, Map certificateReportMap, SampleLabExecutiveListResponse lab) { + String key = String.valueOf(lab.getSampleId()) + lab.getOrderId(); //判断不含原始记录的情况 if (!originalRecordMap.containsKey(key)) { lab.setSampleFileStatus(NOT_EXIST_FILE); return; } + lab.setOriginalRecordId(originalRecordMap.get(key)); //判断不含有证书的情况 if (!certificateReportMap.containsKey(key)) { - lab.setOriginalRecordId(originalRecordMap.get(key)); + lab.setSampleFileStatus(ORIGINAL_RECORD); return; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificatePrintService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificatePrintService.java index b8e159f..f8c334a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificatePrintService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificatePrintService.java @@ -25,6 +25,8 @@ ReturnDTO refuseAgainPrint(CertificateRefusePrintRequest request); + ReturnDTO invalidPrint(Long id)throws Exception; + ReturnDTO submitAgainPrint(BaseApprovalSubmitRequest request); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/certificate/CertificateReportApprovalData.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/certificate/CertificateReportApprovalData.java index 86d089c..42aae6f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/certificate/CertificateReportApprovalData.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/certificate/CertificateReportApprovalData.java @@ -17,7 +17,7 @@ import java.util.Map; @Slf4j -@Component(PrintFileDataBeanNameAliasEnum.CERTIFICATE_REPORT) +@Component(PrintFileDataBeanNameAliasEnum.CERTIFICATE_REPORT_APPROVAL) public class CertificateReportApprovalData extends PrintFileDataSupport implements PrintFileDataGeneric { @Autowired