diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index a5f9ad1..ce53a75 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -80,8 +80,10 @@ ITEM_CATEGORY_IS_NULL(2616, "检定类型为空,页面逻辑错误,不能执行打印"), ITEM_CATEGORY_NOT_NULL(2617, "该检定类型没有证书,请注意"), TEST_CATEGORY_IS_NONE(2618, "测试报告没有检定证书,请注意"), - MEASURE_APPROVAL_UPDATE_FAILED(2619, "检定审批更新至草稿箱失败"), - MEASURE_FILE_CREATE_FAILED(2620, "检定数据审批文件生成失败"), + MEASURE_APPROVAL_UPDATE_FAILED(2619, "多功能检定审批更新至草稿箱失败"), + MEASURE_FILE_CREATE_FAILED(2620, "多功能检定数据审批文件生成失败"), + CHECK_APPROVAL_UPDATE_FAILED(2621, "多功能核查审批更新至草稿箱失败"), + CHECK_FILE_CREATE_FAILED(2622, "多功能核查数据审批文件生成失败"), /** * 历史遗留备用 diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index a5f9ad1..ce53a75 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -80,8 +80,10 @@ ITEM_CATEGORY_IS_NULL(2616, "检定类型为空,页面逻辑错误,不能执行打印"), ITEM_CATEGORY_NOT_NULL(2617, "该检定类型没有证书,请注意"), TEST_CATEGORY_IS_NONE(2618, "测试报告没有检定证书,请注意"), - MEASURE_APPROVAL_UPDATE_FAILED(2619, "检定审批更新至草稿箱失败"), - MEASURE_FILE_CREATE_FAILED(2620, "检定数据审批文件生成失败"), + MEASURE_APPROVAL_UPDATE_FAILED(2619, "多功能检定审批更新至草稿箱失败"), + MEASURE_FILE_CREATE_FAILED(2620, "多功能检定数据审批文件生成失败"), + CHECK_APPROVAL_UPDATE_FAILED(2621, "多功能核查审批更新至草稿箱失败"), + CHECK_FILE_CREATE_FAILED(2622, "多功能核查数据审批文件生成失败"), /** * 历史遗留备用 diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java index 46831fe..2f0877f 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java @@ -22,6 +22,7 @@ String CUSTOMER_EXAMINE_FORM = "要求、委托书及合同评审表"; String MEASURE_DATA = "检定数据管理"; + String MULTIFUNCTION_CHECK_DATA = "多功能核查数据"; String FILE_CHANGE_FORM = "文件更改申请单"; String FILE_GRANT_NOTICE_FORM = "文件发放通知单"; diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index a5f9ad1..ce53a75 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -80,8 +80,10 @@ ITEM_CATEGORY_IS_NULL(2616, "检定类型为空,页面逻辑错误,不能执行打印"), ITEM_CATEGORY_NOT_NULL(2617, "该检定类型没有证书,请注意"), TEST_CATEGORY_IS_NONE(2618, "测试报告没有检定证书,请注意"), - MEASURE_APPROVAL_UPDATE_FAILED(2619, "检定审批更新至草稿箱失败"), - MEASURE_FILE_CREATE_FAILED(2620, "检定数据审批文件生成失败"), + MEASURE_APPROVAL_UPDATE_FAILED(2619, "多功能检定审批更新至草稿箱失败"), + MEASURE_FILE_CREATE_FAILED(2620, "多功能检定数据审批文件生成失败"), + CHECK_APPROVAL_UPDATE_FAILED(2621, "多功能核查审批更新至草稿箱失败"), + CHECK_FILE_CREATE_FAILED(2622, "多功能核查数据审批文件生成失败"), /** * 历史遗留备用 diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java index 46831fe..2f0877f 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java @@ -22,6 +22,7 @@ String CUSTOMER_EXAMINE_FORM = "要求、委托书及合同评审表"; String MEASURE_DATA = "检定数据管理"; + String MULTIFUNCTION_CHECK_DATA = "多功能核查数据"; String FILE_CHANGE_FORM = "文件更改申请单"; String FILE_GRANT_NOTICE_FORM = "文件发放通知单"; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java index 04ab11f..91097b7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java @@ -329,4 +329,8 @@ @TableField(exist = false) private Integer approvalType; + + @ApiModelProperty(value = "设备类型(打印扩展使用,任何时候不需要传)", dataType = "String") + @TableField(exist = false) + private String equipmentType; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index a5f9ad1..ce53a75 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -80,8 +80,10 @@ ITEM_CATEGORY_IS_NULL(2616, "检定类型为空,页面逻辑错误,不能执行打印"), ITEM_CATEGORY_NOT_NULL(2617, "该检定类型没有证书,请注意"), TEST_CATEGORY_IS_NONE(2618, "测试报告没有检定证书,请注意"), - MEASURE_APPROVAL_UPDATE_FAILED(2619, "检定审批更新至草稿箱失败"), - MEASURE_FILE_CREATE_FAILED(2620, "检定数据审批文件生成失败"), + MEASURE_APPROVAL_UPDATE_FAILED(2619, "多功能检定审批更新至草稿箱失败"), + MEASURE_FILE_CREATE_FAILED(2620, "多功能检定数据审批文件生成失败"), + CHECK_APPROVAL_UPDATE_FAILED(2621, "多功能核查审批更新至草稿箱失败"), + CHECK_FILE_CREATE_FAILED(2622, "多功能核查数据审批文件生成失败"), /** * 历史遗留备用 diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java index 46831fe..2f0877f 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java @@ -22,6 +22,7 @@ String CUSTOMER_EXAMINE_FORM = "要求、委托书及合同评审表"; String MEASURE_DATA = "检定数据管理"; + String MULTIFUNCTION_CHECK_DATA = "多功能核查数据"; String FILE_CHANGE_FORM = "文件更改申请单"; String FILE_GRANT_NOTICE_FORM = "文件发放通知单"; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java index 04ab11f..91097b7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java @@ -329,4 +329,8 @@ @TableField(exist = false) private Integer approvalType; + + @ApiModelProperty(value = "设备类型(打印扩展使用,任何时候不需要传)", dataType = "String") + @TableField(exist = false) + private String equipmentType; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentStandardCheckRecordApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentStandardCheckRecordApproval.java index b7c52f1..a5d6456 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentStandardCheckRecordApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentStandardCheckRecordApproval.java @@ -12,6 +12,7 @@ import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.io.Serializable; +import java.util.List; /** *

@@ -143,4 +144,33 @@ @TableField(exist = false) private String checkEquipmentModel; + @ApiModelProperty(value = "核查记录文件名称", dataType = "String") + private String checkRecordFile; + + @ApiModelProperty(value = "检查日期(打印)", dataType = "String") + @TableField(exist = false) + private String checkDate; + + + @ApiModelProperty(value = "检测地址(打印)", dataType = "String") + @TableField(exist = false) + private String checkAddress; + + @ApiModelProperty(value = "温度(打印)", dataType = "String") + @TableField(exist = false) + private String temperature; + + @ApiModelProperty(value = "湿度(打印)", dataType = "String") + @TableField(exist = false) + private String humidity; + + @ApiModelProperty(value = "核查标准设备(打印)", dataType = "Object") + @TableField(exist = false) + private List checkEquipmentList; + + + @ApiModelProperty(value = "被核查标准设备(打印)", dataType = "Object") + @TableField(exist = false) + private BizEquipmentInfo equipmentInfo; + } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index a5f9ad1..ce53a75 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -80,8 +80,10 @@ ITEM_CATEGORY_IS_NULL(2616, "检定类型为空,页面逻辑错误,不能执行打印"), ITEM_CATEGORY_NOT_NULL(2617, "该检定类型没有证书,请注意"), TEST_CATEGORY_IS_NONE(2618, "测试报告没有检定证书,请注意"), - MEASURE_APPROVAL_UPDATE_FAILED(2619, "检定审批更新至草稿箱失败"), - MEASURE_FILE_CREATE_FAILED(2620, "检定数据审批文件生成失败"), + MEASURE_APPROVAL_UPDATE_FAILED(2619, "多功能检定审批更新至草稿箱失败"), + MEASURE_FILE_CREATE_FAILED(2620, "多功能检定数据审批文件生成失败"), + CHECK_APPROVAL_UPDATE_FAILED(2621, "多功能核查审批更新至草稿箱失败"), + CHECK_FILE_CREATE_FAILED(2622, "多功能核查数据审批文件生成失败"), /** * 历史遗留备用 diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java index 46831fe..2f0877f 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java @@ -22,6 +22,7 @@ String CUSTOMER_EXAMINE_FORM = "要求、委托书及合同评审表"; String MEASURE_DATA = "检定数据管理"; + String MULTIFUNCTION_CHECK_DATA = "多功能核查数据"; String FILE_CHANGE_FORM = "文件更改申请单"; String FILE_GRANT_NOTICE_FORM = "文件发放通知单"; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java index 04ab11f..91097b7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java @@ -329,4 +329,8 @@ @TableField(exist = false) private Integer approvalType; + + @ApiModelProperty(value = "设备类型(打印扩展使用,任何时候不需要传)", dataType = "String") + @TableField(exist = false) + private String equipmentType; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentStandardCheckRecordApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentStandardCheckRecordApproval.java index b7c52f1..a5d6456 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentStandardCheckRecordApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentStandardCheckRecordApproval.java @@ -12,6 +12,7 @@ import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.io.Serializable; +import java.util.List; /** *

@@ -143,4 +144,33 @@ @TableField(exist = false) private String checkEquipmentModel; + @ApiModelProperty(value = "核查记录文件名称", dataType = "String") + private String checkRecordFile; + + @ApiModelProperty(value = "检查日期(打印)", dataType = "String") + @TableField(exist = false) + private String checkDate; + + + @ApiModelProperty(value = "检测地址(打印)", dataType = "String") + @TableField(exist = false) + private String checkAddress; + + @ApiModelProperty(value = "温度(打印)", dataType = "String") + @TableField(exist = false) + private String temperature; + + @ApiModelProperty(value = "湿度(打印)", dataType = "String") + @TableField(exist = false) + private String humidity; + + @ApiModelProperty(value = "核查标准设备(打印)", dataType = "Object") + @TableField(exist = false) + private List checkEquipmentList; + + + @ApiModelProperty(value = "被核查标准设备(打印)", dataType = "Object") + @TableField(exist = false) + private BizEquipmentInfo equipmentInfo; + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BizBusinessDeviceMeasureApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BizBusinessDeviceMeasureApprovalServiceImpl.java index bb66382..acf9ef6 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BizBusinessDeviceMeasureApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BizBusinessDeviceMeasureApprovalServiceImpl.java @@ -26,6 +26,7 @@ import com.casic.missiles.model.business.BizBusinessDeviceMeasureDataCalibrator; import com.casic.missiles.model.business.BizBusinessDeviceMeasureInfo; import com.casic.missiles.service.Impl.GeneralApprovalServiceImpl; +import com.casic.missiles.service.Impl.eqpt.GenericEqptDataProvider; import com.casic.missiles.service.business.IBizBusinessDeviceMeasureApprovalService; import com.casic.missiles.service.listeners.register.PrintFileRegister; import com.casic.missiles.utils.DictCodeUtils; @@ -52,13 +53,12 @@ * @since 2023-10-11 */ @Service -public class BizBusinessDeviceMeasureApprovalServiceImpl extends GeneralApprovalServiceImpl implements IBizBusinessDeviceMeasureApprovalService, PrintFileModuleNameEnum, MeasureCategoryEnum { +public class BizBusinessDeviceMeasureApprovalServiceImpl extends GeneralApprovalServiceImpl implements IBizBusinessDeviceMeasureApprovalService{ @Resource private BusinessLabExecutiveInfoMapper labExecutiveInfoMapper; @Autowired - private PrintFileRegister printFileRegister; - @Resource - private SnowflakeUtil snowflakeUtil; + private GenericEqptDataProvider genericEqptDataProvider; + @Override public ReturnDTO addMeasureApproval(BizBusinessDeviceMeasureApproval request) { @@ -76,235 +76,14 @@ Assert.isFalse(row <= 0, () -> { throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_SAVE_FAILED); }); - updateCertificateTask(request); + genericEqptDataProvider.measureCertificateTask(request); DeviceMeasureApprovalSaveResponse saveResponse = new DeviceMeasureApprovalSaveResponse(); saveResponse.setId(request.getId()); saveResponse.setCertNo(certNo); return ReturnUtil.success(saveResponse); } - /** - * 生成更新证书的任务,内部类 - */ - public void updateCertificateTask(BizBusinessDeviceMeasureApproval request) { - ThreadPoolExecutor threadPool = new ThreadPoolExecutor(2, 5, 100, - TimeUnit.SECONDS, new LinkedBlockingQueue<>(5)); - //生成证书报告的 - CompletableFuture certificateFutureTask = CompletableFuture.supplyAsync( - () -> createCertificateFile(request), threadPool); - //生成原始记录的线程 - CompletableFuture originalFutureTask = CompletableFuture.supplyAsync( - () -> createOriginalFile(request), threadPool); - //等到所有线程异步结束 - CompletableFuture combinedFuture = CompletableFuture.allOf(certificateFutureTask, originalFutureTask); - combinedFuture.thenRun(() -> { - try { - //获取结果 - String certificateFileUrl = certificateFutureTask.join(); - String originalRecordFileUrl = originalFutureTask.join(); - BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); - if (StringUtils.isNotEmpty(certificateFileUrl) || StringUtils.isNotEmpty(originalRecordFileUrl)) { - //生成证书文件 - request.setCertificateFile(certificateFileUrl); - //原始记录文件 - request.setOriginalRecordFile(originalRecordFileUrl); - //更新记录 - int updateFlag = bizBusinessMapper.updateById(request); - Assert.isFalse(updateFlag <= 0, () -> { - throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); - }); - } else { - //生成证书失败,删除保存的记录 - bizBusinessMapper.deleteById(request); - throw new BusinessException(BusinessExceptionEnum.MEASURE_FILE_CREATE_FAILED); - } - } catch (Exception ex) { - throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); - } - }).join(); - } - - private String createCertificateFile(BizBusinessDeviceMeasureApproval measureItemInfo) { - try { - //过滤不能生成原始记录的报告 - if (checkOutUnablePrint(measureItemInfo)) { - return ""; - } - if (CollectionUtil.isEmpty(measureItemInfo.getMeasureDataCalibratorList())) { - List bizBusinessDeviceMeasureDataCalibrators = new ArrayList<>(); - bizBusinessDeviceMeasureDataCalibrators.add(new BizBusinessDeviceMeasureDataCalibrator()); - measureItemInfo.setMeasureDataCalibratorList(bizBusinessDeviceMeasureDataCalibrators); - } - Map map = BeanUtil.beanToMap(measureItemInfo); - //准备封面参数 - prepareCoverParams(map, measureItemInfo.getLabCode()); - List customTemplateUrls = new ArrayList<>(); - BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); - //这一块逻辑比较复杂 - customTemplateUrls.add(bizBusinessMapper.customTemplateUrl(MEASURE_DATA, "2", measureItemInfo.getMeasureCategoryName())); - customTemplateUrls.add(bizBusinessMapper.customTemplateUrl(MEASURE_DATA, "2", "数字记录表内容")); - map.put("id", snowflakeUtil.nextId()); - //除了选用的模板不一致,模板配置流程是一致的 - return printFileRegister.registerPrintFile(MEASURE_DATA, "证书打印", null, map, true, null, customTemplateUrls); - } catch (Exception ex) { - throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); - } - } - - /** - * 创建原始记录文件 - */ - private String createOriginalFile(BizBusinessDeviceMeasureApproval measureItemInfo) { - try { - if (CollectionUtil.isEmpty(measureItemInfo.getMeasureDataCalibratorList())) { - List bizBusinessDeviceMeasureDataCalibrators = new ArrayList<>(); - bizBusinessDeviceMeasureDataCalibrators.add(new BizBusinessDeviceMeasureDataCalibrator()); - measureItemInfo.setMeasureDataCalibratorList(bizBusinessDeviceMeasureDataCalibrators); - } - Map map = BeanUtil.beanToMap(measureItemInfo); - List customTemplateUrls = new ArrayList<>(); - BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); - //准备封面参数 - prepareCoverParams(map, measureItemInfo.getLabCode()); - //定制化原始记录参数 - prepareCustomCoverParams(map, measureItemInfo.getMeasureDataCalibratorList()); - //这一块逻辑比较复杂 - customTemplateUrls.add(bizBusinessMapper.customTemplateUrl(MEASURE_DATA, "1", measureItemInfo.getItemCategoryName())); - //与证书模板区分 - map.put("id", snowflakeUtil.nextId()); - //除了选用的模板不一致,模板配置流程是一致的 - return printFileRegister.registerPrintFile(MEASURE_DATA, "原始记录打印", null, map, true, null, customTemplateUrls); - } catch (Exception ex) { - throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); - } - } - - /** - * 检查是否能生成证书 - */ - private Boolean checkOutUnablePrint(BizBusinessDeviceMeasureApproval measureItemInfo) { - //通过检定项名称,获取对应的模块配置列表 - if (StringUtils.isNotEmpty(measureItemInfo.getItemCategoryName())) { - if (MEASURE_ITEMS_WITHOUT_CERTIFICATE.contains(measureItemInfo.getItemCategoryName())) { - log.warn(BusinessExceptionEnum.ITEM_CATEGORY_NOT_NULL.getMessage()); - return true; - } - if (CHECKOUT_REPORT.equals(measureItemInfo.getMeasureCategoryName())) { - log.warn(BusinessExceptionEnum.TEST_CATEGORY_IS_NONE.getMessage()); - return true; - } - } else { - log.warn(BusinessExceptionEnum.ITEM_CATEGORY_IS_NULL.getMessage()); - return true; - } - return false; - } - - /** - * 填充固定的信息参数 - */ - private void prepareCoverParams(Map map, String labCode) { - //技术文件处理 - if (map.containsKey("technologyFile") && ObjectUtils.isNotEmpty(map.get("technologyFile"))) { - //技术文件用逗号隔开 - String[] technologyFiles = ((String) map.get("technologyFile")).split(","); - List technologyFileList = Arrays.asList(technologyFiles); - map.put("technologyFileList", technologyFileList); - } - //健壮性校验 - if (StringUtils.isEmpty(labCode)) { - log.warn("组织接口不能传入为空,打印文档生成文档填充组织失败..."); - return; - } - //西昌海口基本信息录入 - if ("x".equals(labCode)) { - map.put("s", XICHANG); - map.put("communicationAddress", XICHANG_ADDRESS); - map.put("labAddress", XICHANG_ADDRESS); - map.put("phone", XICHANG_PHONE); - map.put("postalCode", XICHANG_POSTAL_CODE); - } else { - map.put("s", HAIKOU); - map.put("communicationAddress", HAIKOU_ADDRESS); - map.put("labAddress", HAIKOU_ADDRESS); - map.put("phone", HAIKOU_PHONE); - map.put("postalCode", HAIKOU_POSTAL_CODE); - } - } - - private void prepareCustomCoverParams(Map map, List measureDataCalibrators) { - //定制参数 - doCustomParam(map, measureDataCalibrators); - //初始化方框 - map.put("test", "\uF0A3"); - map.put("calibrate", "\uF0A3"); - map.put("measure", "\uF0A3"); - //选择方框 - switch ((String) map.get("measureCategoryName")) { - case TEST_REPORT: - map.put("test", "\uF052"); - break; - case CALIBRATE_REPORT: - map.put("calibrate", "\uF052"); - break; - case MEASURE_REPORT: - map.put("measure", "\uF052"); - break; - default: - return; - } - //填充有效日期 - if (ObjectUtils.isNotEmpty(map.get(MEASURE_VALID_DATE))) { - String measureValidDate = (String) map.get(MEASURE_VALID_DATE); - Calendar calendar = Calendar.getInstance(); - try { - calendar.setTime(new SimpleDateFormat("yyyy-MM-dd").parse(measureValidDate)); - } catch (Exception e) { - throw new BusinessException(1500, String.format(measureValidDate, "检定有效日期,格式不正确")); - } - //设置时间 - map.put(MEASURE_VALID_Y, calendar.get(Calendar.YEAR)); - map.put(MEASURE_VALID_M, calendar.get(Calendar.MONTH) + 1); - map.put(MEASURE_VALID_D, calendar.get(Calendar.DAY_OF_MONTH)); - } - - } - - /** - * 直流电压表没有HZ - * 多功能 - * - * @param map - */ - private void doCustomParam(Map map, List measureDataCalibrators) { - if (StringUtils.isNotEmpty((String) map.get("itemCategoryName"))) { - //直流表,交流表 75mv电压表定制表格内容 - if (((String) map.get("itemCategoryName")).contains("交流")) { - map.put("fName", "频率:"); - map.put("frequency", measureDataCalibrators.get(0).getFrequency()); - map.put("frequencyUnit", measureDataCalibrators.get(0).getFrequencyUnit()); - } - //多功能电力参数仪定制表格内容 - if (((String) map.get("itemCategoryName")).contains("多功能")) { - Map> measureDataMap = measureDataCalibrators.stream().collect( - Collectors.groupingBy(BizBusinessDeviceMeasureDataCalibrator::getParams) - ); - if (measureDataMap.containsKey("ACV") && CollectionUtils.isNotEmpty(measureDataMap.get("ACV"))) { - map.put("frequency2", measureDataMap.get("ACV").get(0).getFrequency()); - map.put("frequencyUnit2", measureDataMap.get("ACV").get(0).getFrequencyUnit()); - map.put("unit2", measureDataMap.get("ACV").get(0).getUnit()); - map.put("measureDataCalibratorListV", measureDataMap.get("ACV")); - } - if (measureDataMap.containsKey("ACI") && CollectionUtils.isNotEmpty(measureDataMap.get("ACI"))) { - map.put("frequency1", measureDataMap.get("ACI").get(0).getFrequency()); - map.put("frequencyUnit1", measureDataMap.get("ACI").get(0).getFrequencyUnit()); - map.put("unit1", measureDataMap.get("ACI").get(0).getUnit()); - map.put("measureDataCalibratorListI", measureDataMap.get("ACI")); - } - } - } - } @Override public ReturnDTO detail(Long id) throws Exception { diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index a5f9ad1..ce53a75 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -80,8 +80,10 @@ ITEM_CATEGORY_IS_NULL(2616, "检定类型为空,页面逻辑错误,不能执行打印"), ITEM_CATEGORY_NOT_NULL(2617, "该检定类型没有证书,请注意"), TEST_CATEGORY_IS_NONE(2618, "测试报告没有检定证书,请注意"), - MEASURE_APPROVAL_UPDATE_FAILED(2619, "检定审批更新至草稿箱失败"), - MEASURE_FILE_CREATE_FAILED(2620, "检定数据审批文件生成失败"), + MEASURE_APPROVAL_UPDATE_FAILED(2619, "多功能检定审批更新至草稿箱失败"), + MEASURE_FILE_CREATE_FAILED(2620, "多功能检定数据审批文件生成失败"), + CHECK_APPROVAL_UPDATE_FAILED(2621, "多功能核查审批更新至草稿箱失败"), + CHECK_FILE_CREATE_FAILED(2622, "多功能核查数据审批文件生成失败"), /** * 历史遗留备用 diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java index 46831fe..2f0877f 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java @@ -22,6 +22,7 @@ String CUSTOMER_EXAMINE_FORM = "要求、委托书及合同评审表"; String MEASURE_DATA = "检定数据管理"; + String MULTIFUNCTION_CHECK_DATA = "多功能核查数据"; String FILE_CHANGE_FORM = "文件更改申请单"; String FILE_GRANT_NOTICE_FORM = "文件发放通知单"; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java index 04ab11f..91097b7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java @@ -329,4 +329,8 @@ @TableField(exist = false) private Integer approvalType; + + @ApiModelProperty(value = "设备类型(打印扩展使用,任何时候不需要传)", dataType = "String") + @TableField(exist = false) + private String equipmentType; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentStandardCheckRecordApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentStandardCheckRecordApproval.java index b7c52f1..a5d6456 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentStandardCheckRecordApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentStandardCheckRecordApproval.java @@ -12,6 +12,7 @@ import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.io.Serializable; +import java.util.List; /** *

@@ -143,4 +144,33 @@ @TableField(exist = false) private String checkEquipmentModel; + @ApiModelProperty(value = "核查记录文件名称", dataType = "String") + private String checkRecordFile; + + @ApiModelProperty(value = "检查日期(打印)", dataType = "String") + @TableField(exist = false) + private String checkDate; + + + @ApiModelProperty(value = "检测地址(打印)", dataType = "String") + @TableField(exist = false) + private String checkAddress; + + @ApiModelProperty(value = "温度(打印)", dataType = "String") + @TableField(exist = false) + private String temperature; + + @ApiModelProperty(value = "湿度(打印)", dataType = "String") + @TableField(exist = false) + private String humidity; + + @ApiModelProperty(value = "核查标准设备(打印)", dataType = "Object") + @TableField(exist = false) + private List checkEquipmentList; + + + @ApiModelProperty(value = "被核查标准设备(打印)", dataType = "Object") + @TableField(exist = false) + private BizEquipmentInfo equipmentInfo; + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BizBusinessDeviceMeasureApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BizBusinessDeviceMeasureApprovalServiceImpl.java index bb66382..acf9ef6 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BizBusinessDeviceMeasureApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BizBusinessDeviceMeasureApprovalServiceImpl.java @@ -26,6 +26,7 @@ import com.casic.missiles.model.business.BizBusinessDeviceMeasureDataCalibrator; import com.casic.missiles.model.business.BizBusinessDeviceMeasureInfo; import com.casic.missiles.service.Impl.GeneralApprovalServiceImpl; +import com.casic.missiles.service.Impl.eqpt.GenericEqptDataProvider; import com.casic.missiles.service.business.IBizBusinessDeviceMeasureApprovalService; import com.casic.missiles.service.listeners.register.PrintFileRegister; import com.casic.missiles.utils.DictCodeUtils; @@ -52,13 +53,12 @@ * @since 2023-10-11 */ @Service -public class BizBusinessDeviceMeasureApprovalServiceImpl extends GeneralApprovalServiceImpl implements IBizBusinessDeviceMeasureApprovalService, PrintFileModuleNameEnum, MeasureCategoryEnum { +public class BizBusinessDeviceMeasureApprovalServiceImpl extends GeneralApprovalServiceImpl implements IBizBusinessDeviceMeasureApprovalService{ @Resource private BusinessLabExecutiveInfoMapper labExecutiveInfoMapper; @Autowired - private PrintFileRegister printFileRegister; - @Resource - private SnowflakeUtil snowflakeUtil; + private GenericEqptDataProvider genericEqptDataProvider; + @Override public ReturnDTO addMeasureApproval(BizBusinessDeviceMeasureApproval request) { @@ -76,235 +76,14 @@ Assert.isFalse(row <= 0, () -> { throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_SAVE_FAILED); }); - updateCertificateTask(request); + genericEqptDataProvider.measureCertificateTask(request); DeviceMeasureApprovalSaveResponse saveResponse = new DeviceMeasureApprovalSaveResponse(); saveResponse.setId(request.getId()); saveResponse.setCertNo(certNo); return ReturnUtil.success(saveResponse); } - /** - * 生成更新证书的任务,内部类 - */ - public void updateCertificateTask(BizBusinessDeviceMeasureApproval request) { - ThreadPoolExecutor threadPool = new ThreadPoolExecutor(2, 5, 100, - TimeUnit.SECONDS, new LinkedBlockingQueue<>(5)); - //生成证书报告的 - CompletableFuture certificateFutureTask = CompletableFuture.supplyAsync( - () -> createCertificateFile(request), threadPool); - //生成原始记录的线程 - CompletableFuture originalFutureTask = CompletableFuture.supplyAsync( - () -> createOriginalFile(request), threadPool); - //等到所有线程异步结束 - CompletableFuture combinedFuture = CompletableFuture.allOf(certificateFutureTask, originalFutureTask); - combinedFuture.thenRun(() -> { - try { - //获取结果 - String certificateFileUrl = certificateFutureTask.join(); - String originalRecordFileUrl = originalFutureTask.join(); - BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); - if (StringUtils.isNotEmpty(certificateFileUrl) || StringUtils.isNotEmpty(originalRecordFileUrl)) { - //生成证书文件 - request.setCertificateFile(certificateFileUrl); - //原始记录文件 - request.setOriginalRecordFile(originalRecordFileUrl); - //更新记录 - int updateFlag = bizBusinessMapper.updateById(request); - Assert.isFalse(updateFlag <= 0, () -> { - throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); - }); - } else { - //生成证书失败,删除保存的记录 - bizBusinessMapper.deleteById(request); - throw new BusinessException(BusinessExceptionEnum.MEASURE_FILE_CREATE_FAILED); - } - } catch (Exception ex) { - throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); - } - }).join(); - } - - private String createCertificateFile(BizBusinessDeviceMeasureApproval measureItemInfo) { - try { - //过滤不能生成原始记录的报告 - if (checkOutUnablePrint(measureItemInfo)) { - return ""; - } - if (CollectionUtil.isEmpty(measureItemInfo.getMeasureDataCalibratorList())) { - List bizBusinessDeviceMeasureDataCalibrators = new ArrayList<>(); - bizBusinessDeviceMeasureDataCalibrators.add(new BizBusinessDeviceMeasureDataCalibrator()); - measureItemInfo.setMeasureDataCalibratorList(bizBusinessDeviceMeasureDataCalibrators); - } - Map map = BeanUtil.beanToMap(measureItemInfo); - //准备封面参数 - prepareCoverParams(map, measureItemInfo.getLabCode()); - List customTemplateUrls = new ArrayList<>(); - BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); - //这一块逻辑比较复杂 - customTemplateUrls.add(bizBusinessMapper.customTemplateUrl(MEASURE_DATA, "2", measureItemInfo.getMeasureCategoryName())); - customTemplateUrls.add(bizBusinessMapper.customTemplateUrl(MEASURE_DATA, "2", "数字记录表内容")); - map.put("id", snowflakeUtil.nextId()); - //除了选用的模板不一致,模板配置流程是一致的 - return printFileRegister.registerPrintFile(MEASURE_DATA, "证书打印", null, map, true, null, customTemplateUrls); - } catch (Exception ex) { - throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); - } - } - - /** - * 创建原始记录文件 - */ - private String createOriginalFile(BizBusinessDeviceMeasureApproval measureItemInfo) { - try { - if (CollectionUtil.isEmpty(measureItemInfo.getMeasureDataCalibratorList())) { - List bizBusinessDeviceMeasureDataCalibrators = new ArrayList<>(); - bizBusinessDeviceMeasureDataCalibrators.add(new BizBusinessDeviceMeasureDataCalibrator()); - measureItemInfo.setMeasureDataCalibratorList(bizBusinessDeviceMeasureDataCalibrators); - } - Map map = BeanUtil.beanToMap(measureItemInfo); - List customTemplateUrls = new ArrayList<>(); - BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); - //准备封面参数 - prepareCoverParams(map, measureItemInfo.getLabCode()); - //定制化原始记录参数 - prepareCustomCoverParams(map, measureItemInfo.getMeasureDataCalibratorList()); - //这一块逻辑比较复杂 - customTemplateUrls.add(bizBusinessMapper.customTemplateUrl(MEASURE_DATA, "1", measureItemInfo.getItemCategoryName())); - //与证书模板区分 - map.put("id", snowflakeUtil.nextId()); - //除了选用的模板不一致,模板配置流程是一致的 - return printFileRegister.registerPrintFile(MEASURE_DATA, "原始记录打印", null, map, true, null, customTemplateUrls); - } catch (Exception ex) { - throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); - } - } - - /** - * 检查是否能生成证书 - */ - private Boolean checkOutUnablePrint(BizBusinessDeviceMeasureApproval measureItemInfo) { - //通过检定项名称,获取对应的模块配置列表 - if (StringUtils.isNotEmpty(measureItemInfo.getItemCategoryName())) { - if (MEASURE_ITEMS_WITHOUT_CERTIFICATE.contains(measureItemInfo.getItemCategoryName())) { - log.warn(BusinessExceptionEnum.ITEM_CATEGORY_NOT_NULL.getMessage()); - return true; - } - if (CHECKOUT_REPORT.equals(measureItemInfo.getMeasureCategoryName())) { - log.warn(BusinessExceptionEnum.TEST_CATEGORY_IS_NONE.getMessage()); - return true; - } - } else { - log.warn(BusinessExceptionEnum.ITEM_CATEGORY_IS_NULL.getMessage()); - return true; - } - return false; - } - - /** - * 填充固定的信息参数 - */ - private void prepareCoverParams(Map map, String labCode) { - //技术文件处理 - if (map.containsKey("technologyFile") && ObjectUtils.isNotEmpty(map.get("technologyFile"))) { - //技术文件用逗号隔开 - String[] technologyFiles = ((String) map.get("technologyFile")).split(","); - List technologyFileList = Arrays.asList(technologyFiles); - map.put("technologyFileList", technologyFileList); - } - //健壮性校验 - if (StringUtils.isEmpty(labCode)) { - log.warn("组织接口不能传入为空,打印文档生成文档填充组织失败..."); - return; - } - //西昌海口基本信息录入 - if ("x".equals(labCode)) { - map.put("s", XICHANG); - map.put("communicationAddress", XICHANG_ADDRESS); - map.put("labAddress", XICHANG_ADDRESS); - map.put("phone", XICHANG_PHONE); - map.put("postalCode", XICHANG_POSTAL_CODE); - } else { - map.put("s", HAIKOU); - map.put("communicationAddress", HAIKOU_ADDRESS); - map.put("labAddress", HAIKOU_ADDRESS); - map.put("phone", HAIKOU_PHONE); - map.put("postalCode", HAIKOU_POSTAL_CODE); - } - } - - private void prepareCustomCoverParams(Map map, List measureDataCalibrators) { - //定制参数 - doCustomParam(map, measureDataCalibrators); - //初始化方框 - map.put("test", "\uF0A3"); - map.put("calibrate", "\uF0A3"); - map.put("measure", "\uF0A3"); - //选择方框 - switch ((String) map.get("measureCategoryName")) { - case TEST_REPORT: - map.put("test", "\uF052"); - break; - case CALIBRATE_REPORT: - map.put("calibrate", "\uF052"); - break; - case MEASURE_REPORT: - map.put("measure", "\uF052"); - break; - default: - return; - } - //填充有效日期 - if (ObjectUtils.isNotEmpty(map.get(MEASURE_VALID_DATE))) { - String measureValidDate = (String) map.get(MEASURE_VALID_DATE); - Calendar calendar = Calendar.getInstance(); - try { - calendar.setTime(new SimpleDateFormat("yyyy-MM-dd").parse(measureValidDate)); - } catch (Exception e) { - throw new BusinessException(1500, String.format(measureValidDate, "检定有效日期,格式不正确")); - } - //设置时间 - map.put(MEASURE_VALID_Y, calendar.get(Calendar.YEAR)); - map.put(MEASURE_VALID_M, calendar.get(Calendar.MONTH) + 1); - map.put(MEASURE_VALID_D, calendar.get(Calendar.DAY_OF_MONTH)); - } - - } - - /** - * 直流电压表没有HZ - * 多功能 - * - * @param map - */ - private void doCustomParam(Map map, List measureDataCalibrators) { - if (StringUtils.isNotEmpty((String) map.get("itemCategoryName"))) { - //直流表,交流表 75mv电压表定制表格内容 - if (((String) map.get("itemCategoryName")).contains("交流")) { - map.put("fName", "频率:"); - map.put("frequency", measureDataCalibrators.get(0).getFrequency()); - map.put("frequencyUnit", measureDataCalibrators.get(0).getFrequencyUnit()); - } - //多功能电力参数仪定制表格内容 - if (((String) map.get("itemCategoryName")).contains("多功能")) { - Map> measureDataMap = measureDataCalibrators.stream().collect( - Collectors.groupingBy(BizBusinessDeviceMeasureDataCalibrator::getParams) - ); - if (measureDataMap.containsKey("ACV") && CollectionUtils.isNotEmpty(measureDataMap.get("ACV"))) { - map.put("frequency2", measureDataMap.get("ACV").get(0).getFrequency()); - map.put("frequencyUnit2", measureDataMap.get("ACV").get(0).getFrequencyUnit()); - map.put("unit2", measureDataMap.get("ACV").get(0).getUnit()); - map.put("measureDataCalibratorListV", measureDataMap.get("ACV")); - } - if (measureDataMap.containsKey("ACI") && CollectionUtils.isNotEmpty(measureDataMap.get("ACI"))) { - map.put("frequency1", measureDataMap.get("ACI").get(0).getFrequency()); - map.put("frequencyUnit1", measureDataMap.get("ACI").get(0).getFrequencyUnit()); - map.put("unit1", measureDataMap.get("ACI").get(0).getUnit()); - map.put("measureDataCalibratorListI", measureDataMap.get("ACI")); - } - } - } - } @Override public ReturnDTO detail(Long id) throws Exception { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/GenericEqptDataProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/GenericEqptDataProvider.java new file mode 100644 index 0000000..a70a023 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/GenericEqptDataProvider.java @@ -0,0 +1,317 @@ +package com.casic.missiles.service.Impl.eqpt; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.enums.PrintFileModuleNameEnum; +import com.casic.missiles.enums.business.MeasureCategoryEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.business.BizBusinessDeviceMeasureApprovalMapper; +import com.casic.missiles.mapper.equipment.BizEquipmentStandardCheckRecordApprovalMapper; +import com.casic.missiles.model.business.BizBusinessDeviceMeasureApproval; +import com.casic.missiles.model.business.BizBusinessDeviceMeasureDataCalibrator; +import com.casic.missiles.model.equipment.BizEquipmentInfo; +import com.casic.missiles.model.equipment.BizEquipmentStandardCheckRecordApproval; +import com.casic.missiles.service.listeners.register.PrintFileRegister; +import com.casic.missiles.utils.SnowflakeUtil; +import com.casic.missiles.utils.SpringContextUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +/** + * 通用的装置数据提供器 + * + * @author cz + * @date 2023-10-31 + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class GenericEqptDataProvider implements PrintFileModuleNameEnum, MeasureCategoryEnum { + + private final PrintFileRegister printFileRegister; + private final SnowflakeUtil snowflakeUtil; + private ThreadPoolExecutor threadPool = new ThreadPoolExecutor(4, 10, 100, + TimeUnit.SECONDS, new LinkedBlockingQueue<>(10)); + + /** + * 生成更新证书的任务 + */ + public void checkCertificateTask(BizEquipmentStandardCheckRecordApproval request) { + //生成核查记录单 + String checkCertificateFileUrl = checkCertificateFile(request); + BizEquipmentStandardCheckRecordApprovalMapper bizRecordApprovalMapper = SpringContextUtil.getBean(BizEquipmentStandardCheckRecordApprovalMapper.class); + + if (StringUtils.isNotEmpty(checkCertificateFileUrl)) { + //原始记录文件 + request.setCheckRecordFile(checkCertificateFileUrl); + //更新记录 + int updateFlag = bizRecordApprovalMapper.updateById(request); + Assert.isFalse(updateFlag <= 0, () -> { + throw new BusinessException(BusinessExceptionEnum.CHECK_APPROVAL_UPDATE_FAILED); + }); + } else { + //生成证书失败,删除保存的记录 + bizRecordApprovalMapper.deleteById(request); + throw new BusinessException(BusinessExceptionEnum.CHECK_FILE_CREATE_FAILED); + } + } + + + /** + * 生成更新证书的任务 + */ + public void measureCertificateTask(BizBusinessDeviceMeasureApproval request) { + //生成证书报告的 + CompletableFuture certificateFutureTask = CompletableFuture.supplyAsync( + () -> createCertificateFile(request), threadPool); + //生成原始记录的线程 + CompletableFuture originalFutureTask = CompletableFuture.supplyAsync( + () -> createOriginalFile(request), threadPool); + //等到所有线程异步结束 + CompletableFuture combinedFuture = CompletableFuture.allOf(certificateFutureTask, originalFutureTask); + combinedFuture.thenRun(() -> { + try { + //获取结果 + String certificateFileUrl = certificateFutureTask.join(); + String originalRecordFileUrl = originalFutureTask.join(); + BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); + if (StringUtils.isNotEmpty(certificateFileUrl) || StringUtils.isNotEmpty(originalRecordFileUrl)) { + //生成证书文件 + request.setCertificateFile(certificateFileUrl); + //原始记录文件 + request.setOriginalRecordFile(originalRecordFileUrl); + //更新记录 + int updateFlag = bizBusinessMapper.updateById(request); + Assert.isFalse(updateFlag <= 0, () -> { + throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); + }); + } else { + //生成证书失败,删除保存的记录 + bizBusinessMapper.deleteById(request); + throw new BusinessException(BusinessExceptionEnum.MEASURE_FILE_CREATE_FAILED); + } + } catch (Exception ex) { + throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); + } + }).join(); + } + + private String checkCertificateFile(BizEquipmentStandardCheckRecordApproval request) { + for (BizEquipmentInfo checkEquipment : request.getCheckEquipmentList()) { + checkEquipment.setEquipmentType("测量设备"); + } + try { + //健壮性哦安短 + if (ObjectUtils.isEmpty(request)) { + return ""; + } + Map map = BeanUtil.beanToMap(request); + map.put("upToStandard", "\uF0A3"); + map.put("belowStandard", "\uF0A3"); + map.put("test", "\uF052"); + //除了选用的模板不一致,模板配置流程是一致的 + return printFileRegister.registerPrintFile(MULTIFUNCTION_CHECK_DATA, "数据打印", null, map, true, null, null); + } catch (Exception ex) { + throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); + } + } + + private String createCertificateFile(BizBusinessDeviceMeasureApproval measureItemInfo) { + try { + //过滤不能生成原始记录的报告 + if (checkOutUnablePrint(measureItemInfo)) { + return ""; + } + if (CollectionUtil.isEmpty(measureItemInfo.getMeasureDataCalibratorList())) { + List bizBusinessDeviceMeasureDataCalibrators = new ArrayList<>(); + bizBusinessDeviceMeasureDataCalibrators.add(new BizBusinessDeviceMeasureDataCalibrator()); + measureItemInfo.setMeasureDataCalibratorList(bizBusinessDeviceMeasureDataCalibrators); + } + Map map = BeanUtil.beanToMap(measureItemInfo); + //准备封面参数 + prepareCoverParams(map, measureItemInfo.getLabCode()); + List customTemplateUrls = new ArrayList<>(); + BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); + //这一块逻辑比较复杂 + customTemplateUrls.add(bizBusinessMapper.customTemplateUrl(MEASURE_DATA, "2", measureItemInfo.getMeasureCategoryName())); + customTemplateUrls.add(bizBusinessMapper.customTemplateUrl(MEASURE_DATA, "2", "数字记录表内容")); + map.put("id", snowflakeUtil.nextId()); + //除了选用的模板不一致,模板配置流程是一致的 + return printFileRegister.registerPrintFile(MEASURE_DATA, "证书打印", null, map, true, null, customTemplateUrls); + } catch (Exception ex) { + throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); + } + } + + /** + * 创建原始记录文件 + */ + private String createOriginalFile(BizBusinessDeviceMeasureApproval measureItemInfo) { + try { + if (CollectionUtil.isEmpty(measureItemInfo.getMeasureDataCalibratorList())) { + List bizBusinessDeviceMeasureDataCalibrators = new ArrayList<>(); + bizBusinessDeviceMeasureDataCalibrators.add(new BizBusinessDeviceMeasureDataCalibrator()); + measureItemInfo.setMeasureDataCalibratorList(bizBusinessDeviceMeasureDataCalibrators); + } + Map map = BeanUtil.beanToMap(measureItemInfo); + List customTemplateUrls = new ArrayList<>(); + BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); + //准备封面参数 + prepareCoverParams(map, measureItemInfo.getLabCode()); + //定制化原始记录参数 + prepareCustomCoverParams(map, measureItemInfo.getMeasureDataCalibratorList()); + //这一块逻辑比较复杂 + customTemplateUrls.add(bizBusinessMapper.customTemplateUrl(MEASURE_DATA, "1", measureItemInfo.getItemCategoryName())); + + //与证书模板区分 + map.put("id", snowflakeUtil.nextId()); + //除了选用的模板不一致,模板配置流程是一致的 + return printFileRegister.registerPrintFile(MEASURE_DATA, "原始记录打印", null, map, true, null, customTemplateUrls); + } catch (Exception ex) { + throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); + } + } + + /** + * 检查是否能生成证书 + */ + private Boolean checkOutUnablePrint(BizBusinessDeviceMeasureApproval measureItemInfo) { + //通过检定项名称,获取对应的模块配置列表 + if (StringUtils.isNotEmpty(measureItemInfo.getItemCategoryName())) { + if (MEASURE_ITEMS_WITHOUT_CERTIFICATE.contains(measureItemInfo.getItemCategoryName())) { + log.warn(BusinessExceptionEnum.ITEM_CATEGORY_NOT_NULL.getMessage()); + return true; + } + if (CHECKOUT_REPORT.equals(measureItemInfo.getMeasureCategoryName())) { + log.warn(BusinessExceptionEnum.TEST_CATEGORY_IS_NONE.getMessage()); + return true; + } + } else { + log.warn(BusinessExceptionEnum.ITEM_CATEGORY_IS_NULL.getMessage()); + return true; + } + return false; + } + + /** + * 填充固定的信息参数 + */ + private void prepareCoverParams(Map map, String labCode) { + //技术文件处理 + if (map.containsKey("technologyFile") && ObjectUtils.isNotEmpty(map.get("technologyFile"))) { + //技术文件用逗号隔开 + String[] technologyFiles = ((String) map.get("technologyFile")).split(","); + List technologyFileList = Arrays.asList(technologyFiles); + map.put("technologyFileList", technologyFileList); + } + //健壮性校验 + if (StringUtils.isEmpty(labCode)) { + log.warn("组织接口不能传入为空,打印文档生成文档填充组织失败..."); + return; + } + //西昌海口基本信息录入 + if ("x".equals(labCode)) { + map.put("s", XICHANG); + map.put("communicationAddress", XICHANG_ADDRESS); + map.put("labAddress", XICHANG_ADDRESS); + map.put("phone", XICHANG_PHONE); + map.put("postalCode", XICHANG_POSTAL_CODE); + } else { + map.put("s", HAIKOU); + map.put("communicationAddress", HAIKOU_ADDRESS); + map.put("labAddress", HAIKOU_ADDRESS); + map.put("phone", HAIKOU_PHONE); + map.put("postalCode", HAIKOU_POSTAL_CODE); + } + } + + private void prepareCustomCoverParams(Map map, List measureDataCalibrators) { + //定制参数 + doCustomParam(map, measureDataCalibrators); + //初始化方框 + map.put("test", "\uF0A3"); + map.put("calibrate", "\uF0A3"); + map.put("measure", "\uF0A3"); + //选择方框 + switch ((String) map.get("measureCategoryName")) { + case TEST_REPORT: + map.put("test", "\uF052"); + break; + case CALIBRATE_REPORT: + map.put("calibrate", "\uF052"); + break; + case MEASURE_REPORT: + map.put("measure", "\uF052"); + break; + default: + return; + } + //填充有效日期 + if (ObjectUtils.isNotEmpty(map.get(MEASURE_VALID_DATE))) { + String measureValidDate = (String) map.get(MEASURE_VALID_DATE); + Calendar calendar = Calendar.getInstance(); + try { + calendar.setTime(new SimpleDateFormat("yyyy-MM-dd").parse(measureValidDate)); + } catch (Exception e) { + throw new BusinessException(1500, String.format(measureValidDate, "检定有效日期,格式不正确")); + } + //设置时间 + map.put(MEASURE_VALID_Y, calendar.get(Calendar.YEAR)); + map.put(MEASURE_VALID_M, calendar.get(Calendar.MONTH) + 1); + map.put(MEASURE_VALID_D, calendar.get(Calendar.DAY_OF_MONTH)); + } + + } + + /** + * 直流电压表没有HZ + * 多功能 + * + * @param map + */ + private void doCustomParam(Map map, List measureDataCalibrators) { + if (StringUtils.isNotEmpty((String) map.get("itemCategoryName"))) { + //直流表,交流表 75mv电压表定制表格内容 + if (((String) map.get("itemCategoryName")).contains("交流")) { + map.put("fName", "频率:"); + map.put("frequency", measureDataCalibrators.get(0).getFrequency()); + map.put("frequencyUnit", measureDataCalibrators.get(0).getFrequencyUnit()); + } + //多功能电力参数仪定制表格内容 + if (((String) map.get("itemCategoryName")).contains("多功能")) { + Map> measureDataMap = measureDataCalibrators.stream().collect( + Collectors.groupingBy(BizBusinessDeviceMeasureDataCalibrator::getParams) + ); + if (measureDataMap.containsKey("ACV") && CollectionUtils.isNotEmpty(measureDataMap.get("ACV"))) { + map.put("frequency2", measureDataMap.get("ACV").get(0).getFrequency()); + map.put("frequencyUnit2", measureDataMap.get("ACV").get(0).getFrequencyUnit()); + map.put("unit2", measureDataMap.get("ACV").get(0).getUnit()); + map.put("measureDataCalibratorListV", measureDataMap.get("ACV")); + } + if (measureDataMap.containsKey("ACI") && CollectionUtils.isNotEmpty(measureDataMap.get("ACI"))) { + map.put("frequency1", measureDataMap.get("ACI").get(0).getFrequency()); + map.put("frequencyUnit1", measureDataMap.get("ACI").get(0).getFrequencyUnit()); + map.put("unit1", measureDataMap.get("ACI").get(0).getUnit()); + map.put("measureDataCalibratorListI", measureDataMap.get("ACI")); + } + } + } + } + +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index a5f9ad1..ce53a75 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -80,8 +80,10 @@ ITEM_CATEGORY_IS_NULL(2616, "检定类型为空,页面逻辑错误,不能执行打印"), ITEM_CATEGORY_NOT_NULL(2617, "该检定类型没有证书,请注意"), TEST_CATEGORY_IS_NONE(2618, "测试报告没有检定证书,请注意"), - MEASURE_APPROVAL_UPDATE_FAILED(2619, "检定审批更新至草稿箱失败"), - MEASURE_FILE_CREATE_FAILED(2620, "检定数据审批文件生成失败"), + MEASURE_APPROVAL_UPDATE_FAILED(2619, "多功能检定审批更新至草稿箱失败"), + MEASURE_FILE_CREATE_FAILED(2620, "多功能检定数据审批文件生成失败"), + CHECK_APPROVAL_UPDATE_FAILED(2621, "多功能核查审批更新至草稿箱失败"), + CHECK_FILE_CREATE_FAILED(2622, "多功能核查数据审批文件生成失败"), /** * 历史遗留备用 diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java index 46831fe..2f0877f 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java @@ -22,6 +22,7 @@ String CUSTOMER_EXAMINE_FORM = "要求、委托书及合同评审表"; String MEASURE_DATA = "检定数据管理"; + String MULTIFUNCTION_CHECK_DATA = "多功能核查数据"; String FILE_CHANGE_FORM = "文件更改申请单"; String FILE_GRANT_NOTICE_FORM = "文件发放通知单"; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java index 04ab11f..91097b7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java @@ -329,4 +329,8 @@ @TableField(exist = false) private Integer approvalType; + + @ApiModelProperty(value = "设备类型(打印扩展使用,任何时候不需要传)", dataType = "String") + @TableField(exist = false) + private String equipmentType; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentStandardCheckRecordApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentStandardCheckRecordApproval.java index b7c52f1..a5d6456 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentStandardCheckRecordApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentStandardCheckRecordApproval.java @@ -12,6 +12,7 @@ import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.io.Serializable; +import java.util.List; /** *

@@ -143,4 +144,33 @@ @TableField(exist = false) private String checkEquipmentModel; + @ApiModelProperty(value = "核查记录文件名称", dataType = "String") + private String checkRecordFile; + + @ApiModelProperty(value = "检查日期(打印)", dataType = "String") + @TableField(exist = false) + private String checkDate; + + + @ApiModelProperty(value = "检测地址(打印)", dataType = "String") + @TableField(exist = false) + private String checkAddress; + + @ApiModelProperty(value = "温度(打印)", dataType = "String") + @TableField(exist = false) + private String temperature; + + @ApiModelProperty(value = "湿度(打印)", dataType = "String") + @TableField(exist = false) + private String humidity; + + @ApiModelProperty(value = "核查标准设备(打印)", dataType = "Object") + @TableField(exist = false) + private List checkEquipmentList; + + + @ApiModelProperty(value = "被核查标准设备(打印)", dataType = "Object") + @TableField(exist = false) + private BizEquipmentInfo equipmentInfo; + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BizBusinessDeviceMeasureApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BizBusinessDeviceMeasureApprovalServiceImpl.java index bb66382..acf9ef6 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BizBusinessDeviceMeasureApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BizBusinessDeviceMeasureApprovalServiceImpl.java @@ -26,6 +26,7 @@ import com.casic.missiles.model.business.BizBusinessDeviceMeasureDataCalibrator; import com.casic.missiles.model.business.BizBusinessDeviceMeasureInfo; import com.casic.missiles.service.Impl.GeneralApprovalServiceImpl; +import com.casic.missiles.service.Impl.eqpt.GenericEqptDataProvider; import com.casic.missiles.service.business.IBizBusinessDeviceMeasureApprovalService; import com.casic.missiles.service.listeners.register.PrintFileRegister; import com.casic.missiles.utils.DictCodeUtils; @@ -52,13 +53,12 @@ * @since 2023-10-11 */ @Service -public class BizBusinessDeviceMeasureApprovalServiceImpl extends GeneralApprovalServiceImpl implements IBizBusinessDeviceMeasureApprovalService, PrintFileModuleNameEnum, MeasureCategoryEnum { +public class BizBusinessDeviceMeasureApprovalServiceImpl extends GeneralApprovalServiceImpl implements IBizBusinessDeviceMeasureApprovalService{ @Resource private BusinessLabExecutiveInfoMapper labExecutiveInfoMapper; @Autowired - private PrintFileRegister printFileRegister; - @Resource - private SnowflakeUtil snowflakeUtil; + private GenericEqptDataProvider genericEqptDataProvider; + @Override public ReturnDTO addMeasureApproval(BizBusinessDeviceMeasureApproval request) { @@ -76,235 +76,14 @@ Assert.isFalse(row <= 0, () -> { throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_SAVE_FAILED); }); - updateCertificateTask(request); + genericEqptDataProvider.measureCertificateTask(request); DeviceMeasureApprovalSaveResponse saveResponse = new DeviceMeasureApprovalSaveResponse(); saveResponse.setId(request.getId()); saveResponse.setCertNo(certNo); return ReturnUtil.success(saveResponse); } - /** - * 生成更新证书的任务,内部类 - */ - public void updateCertificateTask(BizBusinessDeviceMeasureApproval request) { - ThreadPoolExecutor threadPool = new ThreadPoolExecutor(2, 5, 100, - TimeUnit.SECONDS, new LinkedBlockingQueue<>(5)); - //生成证书报告的 - CompletableFuture certificateFutureTask = CompletableFuture.supplyAsync( - () -> createCertificateFile(request), threadPool); - //生成原始记录的线程 - CompletableFuture originalFutureTask = CompletableFuture.supplyAsync( - () -> createOriginalFile(request), threadPool); - //等到所有线程异步结束 - CompletableFuture combinedFuture = CompletableFuture.allOf(certificateFutureTask, originalFutureTask); - combinedFuture.thenRun(() -> { - try { - //获取结果 - String certificateFileUrl = certificateFutureTask.join(); - String originalRecordFileUrl = originalFutureTask.join(); - BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); - if (StringUtils.isNotEmpty(certificateFileUrl) || StringUtils.isNotEmpty(originalRecordFileUrl)) { - //生成证书文件 - request.setCertificateFile(certificateFileUrl); - //原始记录文件 - request.setOriginalRecordFile(originalRecordFileUrl); - //更新记录 - int updateFlag = bizBusinessMapper.updateById(request); - Assert.isFalse(updateFlag <= 0, () -> { - throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); - }); - } else { - //生成证书失败,删除保存的记录 - bizBusinessMapper.deleteById(request); - throw new BusinessException(BusinessExceptionEnum.MEASURE_FILE_CREATE_FAILED); - } - } catch (Exception ex) { - throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); - } - }).join(); - } - - private String createCertificateFile(BizBusinessDeviceMeasureApproval measureItemInfo) { - try { - //过滤不能生成原始记录的报告 - if (checkOutUnablePrint(measureItemInfo)) { - return ""; - } - if (CollectionUtil.isEmpty(measureItemInfo.getMeasureDataCalibratorList())) { - List bizBusinessDeviceMeasureDataCalibrators = new ArrayList<>(); - bizBusinessDeviceMeasureDataCalibrators.add(new BizBusinessDeviceMeasureDataCalibrator()); - measureItemInfo.setMeasureDataCalibratorList(bizBusinessDeviceMeasureDataCalibrators); - } - Map map = BeanUtil.beanToMap(measureItemInfo); - //准备封面参数 - prepareCoverParams(map, measureItemInfo.getLabCode()); - List customTemplateUrls = new ArrayList<>(); - BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); - //这一块逻辑比较复杂 - customTemplateUrls.add(bizBusinessMapper.customTemplateUrl(MEASURE_DATA, "2", measureItemInfo.getMeasureCategoryName())); - customTemplateUrls.add(bizBusinessMapper.customTemplateUrl(MEASURE_DATA, "2", "数字记录表内容")); - map.put("id", snowflakeUtil.nextId()); - //除了选用的模板不一致,模板配置流程是一致的 - return printFileRegister.registerPrintFile(MEASURE_DATA, "证书打印", null, map, true, null, customTemplateUrls); - } catch (Exception ex) { - throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); - } - } - - /** - * 创建原始记录文件 - */ - private String createOriginalFile(BizBusinessDeviceMeasureApproval measureItemInfo) { - try { - if (CollectionUtil.isEmpty(measureItemInfo.getMeasureDataCalibratorList())) { - List bizBusinessDeviceMeasureDataCalibrators = new ArrayList<>(); - bizBusinessDeviceMeasureDataCalibrators.add(new BizBusinessDeviceMeasureDataCalibrator()); - measureItemInfo.setMeasureDataCalibratorList(bizBusinessDeviceMeasureDataCalibrators); - } - Map map = BeanUtil.beanToMap(measureItemInfo); - List customTemplateUrls = new ArrayList<>(); - BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); - //准备封面参数 - prepareCoverParams(map, measureItemInfo.getLabCode()); - //定制化原始记录参数 - prepareCustomCoverParams(map, measureItemInfo.getMeasureDataCalibratorList()); - //这一块逻辑比较复杂 - customTemplateUrls.add(bizBusinessMapper.customTemplateUrl(MEASURE_DATA, "1", measureItemInfo.getItemCategoryName())); - //与证书模板区分 - map.put("id", snowflakeUtil.nextId()); - //除了选用的模板不一致,模板配置流程是一致的 - return printFileRegister.registerPrintFile(MEASURE_DATA, "原始记录打印", null, map, true, null, customTemplateUrls); - } catch (Exception ex) { - throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); - } - } - - /** - * 检查是否能生成证书 - */ - private Boolean checkOutUnablePrint(BizBusinessDeviceMeasureApproval measureItemInfo) { - //通过检定项名称,获取对应的模块配置列表 - if (StringUtils.isNotEmpty(measureItemInfo.getItemCategoryName())) { - if (MEASURE_ITEMS_WITHOUT_CERTIFICATE.contains(measureItemInfo.getItemCategoryName())) { - log.warn(BusinessExceptionEnum.ITEM_CATEGORY_NOT_NULL.getMessage()); - return true; - } - if (CHECKOUT_REPORT.equals(measureItemInfo.getMeasureCategoryName())) { - log.warn(BusinessExceptionEnum.TEST_CATEGORY_IS_NONE.getMessage()); - return true; - } - } else { - log.warn(BusinessExceptionEnum.ITEM_CATEGORY_IS_NULL.getMessage()); - return true; - } - return false; - } - - /** - * 填充固定的信息参数 - */ - private void prepareCoverParams(Map map, String labCode) { - //技术文件处理 - if (map.containsKey("technologyFile") && ObjectUtils.isNotEmpty(map.get("technologyFile"))) { - //技术文件用逗号隔开 - String[] technologyFiles = ((String) map.get("technologyFile")).split(","); - List technologyFileList = Arrays.asList(technologyFiles); - map.put("technologyFileList", technologyFileList); - } - //健壮性校验 - if (StringUtils.isEmpty(labCode)) { - log.warn("组织接口不能传入为空,打印文档生成文档填充组织失败..."); - return; - } - //西昌海口基本信息录入 - if ("x".equals(labCode)) { - map.put("s", XICHANG); - map.put("communicationAddress", XICHANG_ADDRESS); - map.put("labAddress", XICHANG_ADDRESS); - map.put("phone", XICHANG_PHONE); - map.put("postalCode", XICHANG_POSTAL_CODE); - } else { - map.put("s", HAIKOU); - map.put("communicationAddress", HAIKOU_ADDRESS); - map.put("labAddress", HAIKOU_ADDRESS); - map.put("phone", HAIKOU_PHONE); - map.put("postalCode", HAIKOU_POSTAL_CODE); - } - } - - private void prepareCustomCoverParams(Map map, List measureDataCalibrators) { - //定制参数 - doCustomParam(map, measureDataCalibrators); - //初始化方框 - map.put("test", "\uF0A3"); - map.put("calibrate", "\uF0A3"); - map.put("measure", "\uF0A3"); - //选择方框 - switch ((String) map.get("measureCategoryName")) { - case TEST_REPORT: - map.put("test", "\uF052"); - break; - case CALIBRATE_REPORT: - map.put("calibrate", "\uF052"); - break; - case MEASURE_REPORT: - map.put("measure", "\uF052"); - break; - default: - return; - } - //填充有效日期 - if (ObjectUtils.isNotEmpty(map.get(MEASURE_VALID_DATE))) { - String measureValidDate = (String) map.get(MEASURE_VALID_DATE); - Calendar calendar = Calendar.getInstance(); - try { - calendar.setTime(new SimpleDateFormat("yyyy-MM-dd").parse(measureValidDate)); - } catch (Exception e) { - throw new BusinessException(1500, String.format(measureValidDate, "检定有效日期,格式不正确")); - } - //设置时间 - map.put(MEASURE_VALID_Y, calendar.get(Calendar.YEAR)); - map.put(MEASURE_VALID_M, calendar.get(Calendar.MONTH) + 1); - map.put(MEASURE_VALID_D, calendar.get(Calendar.DAY_OF_MONTH)); - } - - } - - /** - * 直流电压表没有HZ - * 多功能 - * - * @param map - */ - private void doCustomParam(Map map, List measureDataCalibrators) { - if (StringUtils.isNotEmpty((String) map.get("itemCategoryName"))) { - //直流表,交流表 75mv电压表定制表格内容 - if (((String) map.get("itemCategoryName")).contains("交流")) { - map.put("fName", "频率:"); - map.put("frequency", measureDataCalibrators.get(0).getFrequency()); - map.put("frequencyUnit", measureDataCalibrators.get(0).getFrequencyUnit()); - } - //多功能电力参数仪定制表格内容 - if (((String) map.get("itemCategoryName")).contains("多功能")) { - Map> measureDataMap = measureDataCalibrators.stream().collect( - Collectors.groupingBy(BizBusinessDeviceMeasureDataCalibrator::getParams) - ); - if (measureDataMap.containsKey("ACV") && CollectionUtils.isNotEmpty(measureDataMap.get("ACV"))) { - map.put("frequency2", measureDataMap.get("ACV").get(0).getFrequency()); - map.put("frequencyUnit2", measureDataMap.get("ACV").get(0).getFrequencyUnit()); - map.put("unit2", measureDataMap.get("ACV").get(0).getUnit()); - map.put("measureDataCalibratorListV", measureDataMap.get("ACV")); - } - if (measureDataMap.containsKey("ACI") && CollectionUtils.isNotEmpty(measureDataMap.get("ACI"))) { - map.put("frequency1", measureDataMap.get("ACI").get(0).getFrequency()); - map.put("frequencyUnit1", measureDataMap.get("ACI").get(0).getFrequencyUnit()); - map.put("unit1", measureDataMap.get("ACI").get(0).getUnit()); - map.put("measureDataCalibratorListI", measureDataMap.get("ACI")); - } - } - } - } @Override public ReturnDTO detail(Long id) throws Exception { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/GenericEqptDataProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/GenericEqptDataProvider.java new file mode 100644 index 0000000..a70a023 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/GenericEqptDataProvider.java @@ -0,0 +1,317 @@ +package com.casic.missiles.service.Impl.eqpt; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.enums.PrintFileModuleNameEnum; +import com.casic.missiles.enums.business.MeasureCategoryEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.business.BizBusinessDeviceMeasureApprovalMapper; +import com.casic.missiles.mapper.equipment.BizEquipmentStandardCheckRecordApprovalMapper; +import com.casic.missiles.model.business.BizBusinessDeviceMeasureApproval; +import com.casic.missiles.model.business.BizBusinessDeviceMeasureDataCalibrator; +import com.casic.missiles.model.equipment.BizEquipmentInfo; +import com.casic.missiles.model.equipment.BizEquipmentStandardCheckRecordApproval; +import com.casic.missiles.service.listeners.register.PrintFileRegister; +import com.casic.missiles.utils.SnowflakeUtil; +import com.casic.missiles.utils.SpringContextUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +/** + * 通用的装置数据提供器 + * + * @author cz + * @date 2023-10-31 + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class GenericEqptDataProvider implements PrintFileModuleNameEnum, MeasureCategoryEnum { + + private final PrintFileRegister printFileRegister; + private final SnowflakeUtil snowflakeUtil; + private ThreadPoolExecutor threadPool = new ThreadPoolExecutor(4, 10, 100, + TimeUnit.SECONDS, new LinkedBlockingQueue<>(10)); + + /** + * 生成更新证书的任务 + */ + public void checkCertificateTask(BizEquipmentStandardCheckRecordApproval request) { + //生成核查记录单 + String checkCertificateFileUrl = checkCertificateFile(request); + BizEquipmentStandardCheckRecordApprovalMapper bizRecordApprovalMapper = SpringContextUtil.getBean(BizEquipmentStandardCheckRecordApprovalMapper.class); + + if (StringUtils.isNotEmpty(checkCertificateFileUrl)) { + //原始记录文件 + request.setCheckRecordFile(checkCertificateFileUrl); + //更新记录 + int updateFlag = bizRecordApprovalMapper.updateById(request); + Assert.isFalse(updateFlag <= 0, () -> { + throw new BusinessException(BusinessExceptionEnum.CHECK_APPROVAL_UPDATE_FAILED); + }); + } else { + //生成证书失败,删除保存的记录 + bizRecordApprovalMapper.deleteById(request); + throw new BusinessException(BusinessExceptionEnum.CHECK_FILE_CREATE_FAILED); + } + } + + + /** + * 生成更新证书的任务 + */ + public void measureCertificateTask(BizBusinessDeviceMeasureApproval request) { + //生成证书报告的 + CompletableFuture certificateFutureTask = CompletableFuture.supplyAsync( + () -> createCertificateFile(request), threadPool); + //生成原始记录的线程 + CompletableFuture originalFutureTask = CompletableFuture.supplyAsync( + () -> createOriginalFile(request), threadPool); + //等到所有线程异步结束 + CompletableFuture combinedFuture = CompletableFuture.allOf(certificateFutureTask, originalFutureTask); + combinedFuture.thenRun(() -> { + try { + //获取结果 + String certificateFileUrl = certificateFutureTask.join(); + String originalRecordFileUrl = originalFutureTask.join(); + BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); + if (StringUtils.isNotEmpty(certificateFileUrl) || StringUtils.isNotEmpty(originalRecordFileUrl)) { + //生成证书文件 + request.setCertificateFile(certificateFileUrl); + //原始记录文件 + request.setOriginalRecordFile(originalRecordFileUrl); + //更新记录 + int updateFlag = bizBusinessMapper.updateById(request); + Assert.isFalse(updateFlag <= 0, () -> { + throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); + }); + } else { + //生成证书失败,删除保存的记录 + bizBusinessMapper.deleteById(request); + throw new BusinessException(BusinessExceptionEnum.MEASURE_FILE_CREATE_FAILED); + } + } catch (Exception ex) { + throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); + } + }).join(); + } + + private String checkCertificateFile(BizEquipmentStandardCheckRecordApproval request) { + for (BizEquipmentInfo checkEquipment : request.getCheckEquipmentList()) { + checkEquipment.setEquipmentType("测量设备"); + } + try { + //健壮性哦安短 + if (ObjectUtils.isEmpty(request)) { + return ""; + } + Map map = BeanUtil.beanToMap(request); + map.put("upToStandard", "\uF0A3"); + map.put("belowStandard", "\uF0A3"); + map.put("test", "\uF052"); + //除了选用的模板不一致,模板配置流程是一致的 + return printFileRegister.registerPrintFile(MULTIFUNCTION_CHECK_DATA, "数据打印", null, map, true, null, null); + } catch (Exception ex) { + throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); + } + } + + private String createCertificateFile(BizBusinessDeviceMeasureApproval measureItemInfo) { + try { + //过滤不能生成原始记录的报告 + if (checkOutUnablePrint(measureItemInfo)) { + return ""; + } + if (CollectionUtil.isEmpty(measureItemInfo.getMeasureDataCalibratorList())) { + List bizBusinessDeviceMeasureDataCalibrators = new ArrayList<>(); + bizBusinessDeviceMeasureDataCalibrators.add(new BizBusinessDeviceMeasureDataCalibrator()); + measureItemInfo.setMeasureDataCalibratorList(bizBusinessDeviceMeasureDataCalibrators); + } + Map map = BeanUtil.beanToMap(measureItemInfo); + //准备封面参数 + prepareCoverParams(map, measureItemInfo.getLabCode()); + List customTemplateUrls = new ArrayList<>(); + BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); + //这一块逻辑比较复杂 + customTemplateUrls.add(bizBusinessMapper.customTemplateUrl(MEASURE_DATA, "2", measureItemInfo.getMeasureCategoryName())); + customTemplateUrls.add(bizBusinessMapper.customTemplateUrl(MEASURE_DATA, "2", "数字记录表内容")); + map.put("id", snowflakeUtil.nextId()); + //除了选用的模板不一致,模板配置流程是一致的 + return printFileRegister.registerPrintFile(MEASURE_DATA, "证书打印", null, map, true, null, customTemplateUrls); + } catch (Exception ex) { + throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); + } + } + + /** + * 创建原始记录文件 + */ + private String createOriginalFile(BizBusinessDeviceMeasureApproval measureItemInfo) { + try { + if (CollectionUtil.isEmpty(measureItemInfo.getMeasureDataCalibratorList())) { + List bizBusinessDeviceMeasureDataCalibrators = new ArrayList<>(); + bizBusinessDeviceMeasureDataCalibrators.add(new BizBusinessDeviceMeasureDataCalibrator()); + measureItemInfo.setMeasureDataCalibratorList(bizBusinessDeviceMeasureDataCalibrators); + } + Map map = BeanUtil.beanToMap(measureItemInfo); + List customTemplateUrls = new ArrayList<>(); + BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); + //准备封面参数 + prepareCoverParams(map, measureItemInfo.getLabCode()); + //定制化原始记录参数 + prepareCustomCoverParams(map, measureItemInfo.getMeasureDataCalibratorList()); + //这一块逻辑比较复杂 + customTemplateUrls.add(bizBusinessMapper.customTemplateUrl(MEASURE_DATA, "1", measureItemInfo.getItemCategoryName())); + + //与证书模板区分 + map.put("id", snowflakeUtil.nextId()); + //除了选用的模板不一致,模板配置流程是一致的 + return printFileRegister.registerPrintFile(MEASURE_DATA, "原始记录打印", null, map, true, null, customTemplateUrls); + } catch (Exception ex) { + throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); + } + } + + /** + * 检查是否能生成证书 + */ + private Boolean checkOutUnablePrint(BizBusinessDeviceMeasureApproval measureItemInfo) { + //通过检定项名称,获取对应的模块配置列表 + if (StringUtils.isNotEmpty(measureItemInfo.getItemCategoryName())) { + if (MEASURE_ITEMS_WITHOUT_CERTIFICATE.contains(measureItemInfo.getItemCategoryName())) { + log.warn(BusinessExceptionEnum.ITEM_CATEGORY_NOT_NULL.getMessage()); + return true; + } + if (CHECKOUT_REPORT.equals(measureItemInfo.getMeasureCategoryName())) { + log.warn(BusinessExceptionEnum.TEST_CATEGORY_IS_NONE.getMessage()); + return true; + } + } else { + log.warn(BusinessExceptionEnum.ITEM_CATEGORY_IS_NULL.getMessage()); + return true; + } + return false; + } + + /** + * 填充固定的信息参数 + */ + private void prepareCoverParams(Map map, String labCode) { + //技术文件处理 + if (map.containsKey("technologyFile") && ObjectUtils.isNotEmpty(map.get("technologyFile"))) { + //技术文件用逗号隔开 + String[] technologyFiles = ((String) map.get("technologyFile")).split(","); + List technologyFileList = Arrays.asList(technologyFiles); + map.put("technologyFileList", technologyFileList); + } + //健壮性校验 + if (StringUtils.isEmpty(labCode)) { + log.warn("组织接口不能传入为空,打印文档生成文档填充组织失败..."); + return; + } + //西昌海口基本信息录入 + if ("x".equals(labCode)) { + map.put("s", XICHANG); + map.put("communicationAddress", XICHANG_ADDRESS); + map.put("labAddress", XICHANG_ADDRESS); + map.put("phone", XICHANG_PHONE); + map.put("postalCode", XICHANG_POSTAL_CODE); + } else { + map.put("s", HAIKOU); + map.put("communicationAddress", HAIKOU_ADDRESS); + map.put("labAddress", HAIKOU_ADDRESS); + map.put("phone", HAIKOU_PHONE); + map.put("postalCode", HAIKOU_POSTAL_CODE); + } + } + + private void prepareCustomCoverParams(Map map, List measureDataCalibrators) { + //定制参数 + doCustomParam(map, measureDataCalibrators); + //初始化方框 + map.put("test", "\uF0A3"); + map.put("calibrate", "\uF0A3"); + map.put("measure", "\uF0A3"); + //选择方框 + switch ((String) map.get("measureCategoryName")) { + case TEST_REPORT: + map.put("test", "\uF052"); + break; + case CALIBRATE_REPORT: + map.put("calibrate", "\uF052"); + break; + case MEASURE_REPORT: + map.put("measure", "\uF052"); + break; + default: + return; + } + //填充有效日期 + if (ObjectUtils.isNotEmpty(map.get(MEASURE_VALID_DATE))) { + String measureValidDate = (String) map.get(MEASURE_VALID_DATE); + Calendar calendar = Calendar.getInstance(); + try { + calendar.setTime(new SimpleDateFormat("yyyy-MM-dd").parse(measureValidDate)); + } catch (Exception e) { + throw new BusinessException(1500, String.format(measureValidDate, "检定有效日期,格式不正确")); + } + //设置时间 + map.put(MEASURE_VALID_Y, calendar.get(Calendar.YEAR)); + map.put(MEASURE_VALID_M, calendar.get(Calendar.MONTH) + 1); + map.put(MEASURE_VALID_D, calendar.get(Calendar.DAY_OF_MONTH)); + } + + } + + /** + * 直流电压表没有HZ + * 多功能 + * + * @param map + */ + private void doCustomParam(Map map, List measureDataCalibrators) { + if (StringUtils.isNotEmpty((String) map.get("itemCategoryName"))) { + //直流表,交流表 75mv电压表定制表格内容 + if (((String) map.get("itemCategoryName")).contains("交流")) { + map.put("fName", "频率:"); + map.put("frequency", measureDataCalibrators.get(0).getFrequency()); + map.put("frequencyUnit", measureDataCalibrators.get(0).getFrequencyUnit()); + } + //多功能电力参数仪定制表格内容 + if (((String) map.get("itemCategoryName")).contains("多功能")) { + Map> measureDataMap = measureDataCalibrators.stream().collect( + Collectors.groupingBy(BizBusinessDeviceMeasureDataCalibrator::getParams) + ); + if (measureDataMap.containsKey("ACV") && CollectionUtils.isNotEmpty(measureDataMap.get("ACV"))) { + map.put("frequency2", measureDataMap.get("ACV").get(0).getFrequency()); + map.put("frequencyUnit2", measureDataMap.get("ACV").get(0).getFrequencyUnit()); + map.put("unit2", measureDataMap.get("ACV").get(0).getUnit()); + map.put("measureDataCalibratorListV", measureDataMap.get("ACV")); + } + if (measureDataMap.containsKey("ACI") && CollectionUtils.isNotEmpty(measureDataMap.get("ACI"))) { + map.put("frequency1", measureDataMap.get("ACI").get(0).getFrequency()); + map.put("frequencyUnit1", measureDataMap.get("ACI").get(0).getFrequencyUnit()); + map.put("unit1", measureDataMap.get("ACI").get(0).getUnit()); + map.put("measureDataCalibratorListI", measureDataMap.get("ACI")); + } + } + } + } + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/BizEquipmentLendServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/BizEquipmentLendServiceImpl.java index 9e8c7fc..060ee8f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/BizEquipmentLendServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/BizEquipmentLendServiceImpl.java @@ -146,7 +146,6 @@ } map.put("returnCatalogueNameStr", catalogueNameStr); } - printFileRegister.registerPrintFile(PrintFileModuleNameEnum.EQUIPMENT_LEND, PrintFileModuleNameEnum.EXPORT_TEMPLATE, null, map, exportDTO.isPdf(), response); } } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index a5f9ad1..ce53a75 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -80,8 +80,10 @@ ITEM_CATEGORY_IS_NULL(2616, "检定类型为空,页面逻辑错误,不能执行打印"), ITEM_CATEGORY_NOT_NULL(2617, "该检定类型没有证书,请注意"), TEST_CATEGORY_IS_NONE(2618, "测试报告没有检定证书,请注意"), - MEASURE_APPROVAL_UPDATE_FAILED(2619, "检定审批更新至草稿箱失败"), - MEASURE_FILE_CREATE_FAILED(2620, "检定数据审批文件生成失败"), + MEASURE_APPROVAL_UPDATE_FAILED(2619, "多功能检定审批更新至草稿箱失败"), + MEASURE_FILE_CREATE_FAILED(2620, "多功能检定数据审批文件生成失败"), + CHECK_APPROVAL_UPDATE_FAILED(2621, "多功能核查审批更新至草稿箱失败"), + CHECK_FILE_CREATE_FAILED(2622, "多功能核查数据审批文件生成失败"), /** * 历史遗留备用 diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java index 46831fe..2f0877f 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java @@ -22,6 +22,7 @@ String CUSTOMER_EXAMINE_FORM = "要求、委托书及合同评审表"; String MEASURE_DATA = "检定数据管理"; + String MULTIFUNCTION_CHECK_DATA = "多功能核查数据"; String FILE_CHANGE_FORM = "文件更改申请单"; String FILE_GRANT_NOTICE_FORM = "文件发放通知单"; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java index 04ab11f..91097b7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java @@ -329,4 +329,8 @@ @TableField(exist = false) private Integer approvalType; + + @ApiModelProperty(value = "设备类型(打印扩展使用,任何时候不需要传)", dataType = "String") + @TableField(exist = false) + private String equipmentType; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentStandardCheckRecordApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentStandardCheckRecordApproval.java index b7c52f1..a5d6456 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentStandardCheckRecordApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentStandardCheckRecordApproval.java @@ -12,6 +12,7 @@ import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.io.Serializable; +import java.util.List; /** *

@@ -143,4 +144,33 @@ @TableField(exist = false) private String checkEquipmentModel; + @ApiModelProperty(value = "核查记录文件名称", dataType = "String") + private String checkRecordFile; + + @ApiModelProperty(value = "检查日期(打印)", dataType = "String") + @TableField(exist = false) + private String checkDate; + + + @ApiModelProperty(value = "检测地址(打印)", dataType = "String") + @TableField(exist = false) + private String checkAddress; + + @ApiModelProperty(value = "温度(打印)", dataType = "String") + @TableField(exist = false) + private String temperature; + + @ApiModelProperty(value = "湿度(打印)", dataType = "String") + @TableField(exist = false) + private String humidity; + + @ApiModelProperty(value = "核查标准设备(打印)", dataType = "Object") + @TableField(exist = false) + private List checkEquipmentList; + + + @ApiModelProperty(value = "被核查标准设备(打印)", dataType = "Object") + @TableField(exist = false) + private BizEquipmentInfo equipmentInfo; + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BizBusinessDeviceMeasureApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BizBusinessDeviceMeasureApprovalServiceImpl.java index bb66382..acf9ef6 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BizBusinessDeviceMeasureApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BizBusinessDeviceMeasureApprovalServiceImpl.java @@ -26,6 +26,7 @@ import com.casic.missiles.model.business.BizBusinessDeviceMeasureDataCalibrator; import com.casic.missiles.model.business.BizBusinessDeviceMeasureInfo; import com.casic.missiles.service.Impl.GeneralApprovalServiceImpl; +import com.casic.missiles.service.Impl.eqpt.GenericEqptDataProvider; import com.casic.missiles.service.business.IBizBusinessDeviceMeasureApprovalService; import com.casic.missiles.service.listeners.register.PrintFileRegister; import com.casic.missiles.utils.DictCodeUtils; @@ -52,13 +53,12 @@ * @since 2023-10-11 */ @Service -public class BizBusinessDeviceMeasureApprovalServiceImpl extends GeneralApprovalServiceImpl implements IBizBusinessDeviceMeasureApprovalService, PrintFileModuleNameEnum, MeasureCategoryEnum { +public class BizBusinessDeviceMeasureApprovalServiceImpl extends GeneralApprovalServiceImpl implements IBizBusinessDeviceMeasureApprovalService{ @Resource private BusinessLabExecutiveInfoMapper labExecutiveInfoMapper; @Autowired - private PrintFileRegister printFileRegister; - @Resource - private SnowflakeUtil snowflakeUtil; + private GenericEqptDataProvider genericEqptDataProvider; + @Override public ReturnDTO addMeasureApproval(BizBusinessDeviceMeasureApproval request) { @@ -76,235 +76,14 @@ Assert.isFalse(row <= 0, () -> { throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_SAVE_FAILED); }); - updateCertificateTask(request); + genericEqptDataProvider.measureCertificateTask(request); DeviceMeasureApprovalSaveResponse saveResponse = new DeviceMeasureApprovalSaveResponse(); saveResponse.setId(request.getId()); saveResponse.setCertNo(certNo); return ReturnUtil.success(saveResponse); } - /** - * 生成更新证书的任务,内部类 - */ - public void updateCertificateTask(BizBusinessDeviceMeasureApproval request) { - ThreadPoolExecutor threadPool = new ThreadPoolExecutor(2, 5, 100, - TimeUnit.SECONDS, new LinkedBlockingQueue<>(5)); - //生成证书报告的 - CompletableFuture certificateFutureTask = CompletableFuture.supplyAsync( - () -> createCertificateFile(request), threadPool); - //生成原始记录的线程 - CompletableFuture originalFutureTask = CompletableFuture.supplyAsync( - () -> createOriginalFile(request), threadPool); - //等到所有线程异步结束 - CompletableFuture combinedFuture = CompletableFuture.allOf(certificateFutureTask, originalFutureTask); - combinedFuture.thenRun(() -> { - try { - //获取结果 - String certificateFileUrl = certificateFutureTask.join(); - String originalRecordFileUrl = originalFutureTask.join(); - BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); - if (StringUtils.isNotEmpty(certificateFileUrl) || StringUtils.isNotEmpty(originalRecordFileUrl)) { - //生成证书文件 - request.setCertificateFile(certificateFileUrl); - //原始记录文件 - request.setOriginalRecordFile(originalRecordFileUrl); - //更新记录 - int updateFlag = bizBusinessMapper.updateById(request); - Assert.isFalse(updateFlag <= 0, () -> { - throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); - }); - } else { - //生成证书失败,删除保存的记录 - bizBusinessMapper.deleteById(request); - throw new BusinessException(BusinessExceptionEnum.MEASURE_FILE_CREATE_FAILED); - } - } catch (Exception ex) { - throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); - } - }).join(); - } - - private String createCertificateFile(BizBusinessDeviceMeasureApproval measureItemInfo) { - try { - //过滤不能生成原始记录的报告 - if (checkOutUnablePrint(measureItemInfo)) { - return ""; - } - if (CollectionUtil.isEmpty(measureItemInfo.getMeasureDataCalibratorList())) { - List bizBusinessDeviceMeasureDataCalibrators = new ArrayList<>(); - bizBusinessDeviceMeasureDataCalibrators.add(new BizBusinessDeviceMeasureDataCalibrator()); - measureItemInfo.setMeasureDataCalibratorList(bizBusinessDeviceMeasureDataCalibrators); - } - Map map = BeanUtil.beanToMap(measureItemInfo); - //准备封面参数 - prepareCoverParams(map, measureItemInfo.getLabCode()); - List customTemplateUrls = new ArrayList<>(); - BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); - //这一块逻辑比较复杂 - customTemplateUrls.add(bizBusinessMapper.customTemplateUrl(MEASURE_DATA, "2", measureItemInfo.getMeasureCategoryName())); - customTemplateUrls.add(bizBusinessMapper.customTemplateUrl(MEASURE_DATA, "2", "数字记录表内容")); - map.put("id", snowflakeUtil.nextId()); - //除了选用的模板不一致,模板配置流程是一致的 - return printFileRegister.registerPrintFile(MEASURE_DATA, "证书打印", null, map, true, null, customTemplateUrls); - } catch (Exception ex) { - throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); - } - } - - /** - * 创建原始记录文件 - */ - private String createOriginalFile(BizBusinessDeviceMeasureApproval measureItemInfo) { - try { - if (CollectionUtil.isEmpty(measureItemInfo.getMeasureDataCalibratorList())) { - List bizBusinessDeviceMeasureDataCalibrators = new ArrayList<>(); - bizBusinessDeviceMeasureDataCalibrators.add(new BizBusinessDeviceMeasureDataCalibrator()); - measureItemInfo.setMeasureDataCalibratorList(bizBusinessDeviceMeasureDataCalibrators); - } - Map map = BeanUtil.beanToMap(measureItemInfo); - List customTemplateUrls = new ArrayList<>(); - BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); - //准备封面参数 - prepareCoverParams(map, measureItemInfo.getLabCode()); - //定制化原始记录参数 - prepareCustomCoverParams(map, measureItemInfo.getMeasureDataCalibratorList()); - //这一块逻辑比较复杂 - customTemplateUrls.add(bizBusinessMapper.customTemplateUrl(MEASURE_DATA, "1", measureItemInfo.getItemCategoryName())); - //与证书模板区分 - map.put("id", snowflakeUtil.nextId()); - //除了选用的模板不一致,模板配置流程是一致的 - return printFileRegister.registerPrintFile(MEASURE_DATA, "原始记录打印", null, map, true, null, customTemplateUrls); - } catch (Exception ex) { - throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); - } - } - - /** - * 检查是否能生成证书 - */ - private Boolean checkOutUnablePrint(BizBusinessDeviceMeasureApproval measureItemInfo) { - //通过检定项名称,获取对应的模块配置列表 - if (StringUtils.isNotEmpty(measureItemInfo.getItemCategoryName())) { - if (MEASURE_ITEMS_WITHOUT_CERTIFICATE.contains(measureItemInfo.getItemCategoryName())) { - log.warn(BusinessExceptionEnum.ITEM_CATEGORY_NOT_NULL.getMessage()); - return true; - } - if (CHECKOUT_REPORT.equals(measureItemInfo.getMeasureCategoryName())) { - log.warn(BusinessExceptionEnum.TEST_CATEGORY_IS_NONE.getMessage()); - return true; - } - } else { - log.warn(BusinessExceptionEnum.ITEM_CATEGORY_IS_NULL.getMessage()); - return true; - } - return false; - } - - /** - * 填充固定的信息参数 - */ - private void prepareCoverParams(Map map, String labCode) { - //技术文件处理 - if (map.containsKey("technologyFile") && ObjectUtils.isNotEmpty(map.get("technologyFile"))) { - //技术文件用逗号隔开 - String[] technologyFiles = ((String) map.get("technologyFile")).split(","); - List technologyFileList = Arrays.asList(technologyFiles); - map.put("technologyFileList", technologyFileList); - } - //健壮性校验 - if (StringUtils.isEmpty(labCode)) { - log.warn("组织接口不能传入为空,打印文档生成文档填充组织失败..."); - return; - } - //西昌海口基本信息录入 - if ("x".equals(labCode)) { - map.put("s", XICHANG); - map.put("communicationAddress", XICHANG_ADDRESS); - map.put("labAddress", XICHANG_ADDRESS); - map.put("phone", XICHANG_PHONE); - map.put("postalCode", XICHANG_POSTAL_CODE); - } else { - map.put("s", HAIKOU); - map.put("communicationAddress", HAIKOU_ADDRESS); - map.put("labAddress", HAIKOU_ADDRESS); - map.put("phone", HAIKOU_PHONE); - map.put("postalCode", HAIKOU_POSTAL_CODE); - } - } - - private void prepareCustomCoverParams(Map map, List measureDataCalibrators) { - //定制参数 - doCustomParam(map, measureDataCalibrators); - //初始化方框 - map.put("test", "\uF0A3"); - map.put("calibrate", "\uF0A3"); - map.put("measure", "\uF0A3"); - //选择方框 - switch ((String) map.get("measureCategoryName")) { - case TEST_REPORT: - map.put("test", "\uF052"); - break; - case CALIBRATE_REPORT: - map.put("calibrate", "\uF052"); - break; - case MEASURE_REPORT: - map.put("measure", "\uF052"); - break; - default: - return; - } - //填充有效日期 - if (ObjectUtils.isNotEmpty(map.get(MEASURE_VALID_DATE))) { - String measureValidDate = (String) map.get(MEASURE_VALID_DATE); - Calendar calendar = Calendar.getInstance(); - try { - calendar.setTime(new SimpleDateFormat("yyyy-MM-dd").parse(measureValidDate)); - } catch (Exception e) { - throw new BusinessException(1500, String.format(measureValidDate, "检定有效日期,格式不正确")); - } - //设置时间 - map.put(MEASURE_VALID_Y, calendar.get(Calendar.YEAR)); - map.put(MEASURE_VALID_M, calendar.get(Calendar.MONTH) + 1); - map.put(MEASURE_VALID_D, calendar.get(Calendar.DAY_OF_MONTH)); - } - - } - - /** - * 直流电压表没有HZ - * 多功能 - * - * @param map - */ - private void doCustomParam(Map map, List measureDataCalibrators) { - if (StringUtils.isNotEmpty((String) map.get("itemCategoryName"))) { - //直流表,交流表 75mv电压表定制表格内容 - if (((String) map.get("itemCategoryName")).contains("交流")) { - map.put("fName", "频率:"); - map.put("frequency", measureDataCalibrators.get(0).getFrequency()); - map.put("frequencyUnit", measureDataCalibrators.get(0).getFrequencyUnit()); - } - //多功能电力参数仪定制表格内容 - if (((String) map.get("itemCategoryName")).contains("多功能")) { - Map> measureDataMap = measureDataCalibrators.stream().collect( - Collectors.groupingBy(BizBusinessDeviceMeasureDataCalibrator::getParams) - ); - if (measureDataMap.containsKey("ACV") && CollectionUtils.isNotEmpty(measureDataMap.get("ACV"))) { - map.put("frequency2", measureDataMap.get("ACV").get(0).getFrequency()); - map.put("frequencyUnit2", measureDataMap.get("ACV").get(0).getFrequencyUnit()); - map.put("unit2", measureDataMap.get("ACV").get(0).getUnit()); - map.put("measureDataCalibratorListV", measureDataMap.get("ACV")); - } - if (measureDataMap.containsKey("ACI") && CollectionUtils.isNotEmpty(measureDataMap.get("ACI"))) { - map.put("frequency1", measureDataMap.get("ACI").get(0).getFrequency()); - map.put("frequencyUnit1", measureDataMap.get("ACI").get(0).getFrequencyUnit()); - map.put("unit1", measureDataMap.get("ACI").get(0).getUnit()); - map.put("measureDataCalibratorListI", measureDataMap.get("ACI")); - } - } - } - } @Override public ReturnDTO detail(Long id) throws Exception { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/GenericEqptDataProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/GenericEqptDataProvider.java new file mode 100644 index 0000000..a70a023 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/GenericEqptDataProvider.java @@ -0,0 +1,317 @@ +package com.casic.missiles.service.Impl.eqpt; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.enums.PrintFileModuleNameEnum; +import com.casic.missiles.enums.business.MeasureCategoryEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.business.BizBusinessDeviceMeasureApprovalMapper; +import com.casic.missiles.mapper.equipment.BizEquipmentStandardCheckRecordApprovalMapper; +import com.casic.missiles.model.business.BizBusinessDeviceMeasureApproval; +import com.casic.missiles.model.business.BizBusinessDeviceMeasureDataCalibrator; +import com.casic.missiles.model.equipment.BizEquipmentInfo; +import com.casic.missiles.model.equipment.BizEquipmentStandardCheckRecordApproval; +import com.casic.missiles.service.listeners.register.PrintFileRegister; +import com.casic.missiles.utils.SnowflakeUtil; +import com.casic.missiles.utils.SpringContextUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +/** + * 通用的装置数据提供器 + * + * @author cz + * @date 2023-10-31 + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class GenericEqptDataProvider implements PrintFileModuleNameEnum, MeasureCategoryEnum { + + private final PrintFileRegister printFileRegister; + private final SnowflakeUtil snowflakeUtil; + private ThreadPoolExecutor threadPool = new ThreadPoolExecutor(4, 10, 100, + TimeUnit.SECONDS, new LinkedBlockingQueue<>(10)); + + /** + * 生成更新证书的任务 + */ + public void checkCertificateTask(BizEquipmentStandardCheckRecordApproval request) { + //生成核查记录单 + String checkCertificateFileUrl = checkCertificateFile(request); + BizEquipmentStandardCheckRecordApprovalMapper bizRecordApprovalMapper = SpringContextUtil.getBean(BizEquipmentStandardCheckRecordApprovalMapper.class); + + if (StringUtils.isNotEmpty(checkCertificateFileUrl)) { + //原始记录文件 + request.setCheckRecordFile(checkCertificateFileUrl); + //更新记录 + int updateFlag = bizRecordApprovalMapper.updateById(request); + Assert.isFalse(updateFlag <= 0, () -> { + throw new BusinessException(BusinessExceptionEnum.CHECK_APPROVAL_UPDATE_FAILED); + }); + } else { + //生成证书失败,删除保存的记录 + bizRecordApprovalMapper.deleteById(request); + throw new BusinessException(BusinessExceptionEnum.CHECK_FILE_CREATE_FAILED); + } + } + + + /** + * 生成更新证书的任务 + */ + public void measureCertificateTask(BizBusinessDeviceMeasureApproval request) { + //生成证书报告的 + CompletableFuture certificateFutureTask = CompletableFuture.supplyAsync( + () -> createCertificateFile(request), threadPool); + //生成原始记录的线程 + CompletableFuture originalFutureTask = CompletableFuture.supplyAsync( + () -> createOriginalFile(request), threadPool); + //等到所有线程异步结束 + CompletableFuture combinedFuture = CompletableFuture.allOf(certificateFutureTask, originalFutureTask); + combinedFuture.thenRun(() -> { + try { + //获取结果 + String certificateFileUrl = certificateFutureTask.join(); + String originalRecordFileUrl = originalFutureTask.join(); + BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); + if (StringUtils.isNotEmpty(certificateFileUrl) || StringUtils.isNotEmpty(originalRecordFileUrl)) { + //生成证书文件 + request.setCertificateFile(certificateFileUrl); + //原始记录文件 + request.setOriginalRecordFile(originalRecordFileUrl); + //更新记录 + int updateFlag = bizBusinessMapper.updateById(request); + Assert.isFalse(updateFlag <= 0, () -> { + throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); + }); + } else { + //生成证书失败,删除保存的记录 + bizBusinessMapper.deleteById(request); + throw new BusinessException(BusinessExceptionEnum.MEASURE_FILE_CREATE_FAILED); + } + } catch (Exception ex) { + throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); + } + }).join(); + } + + private String checkCertificateFile(BizEquipmentStandardCheckRecordApproval request) { + for (BizEquipmentInfo checkEquipment : request.getCheckEquipmentList()) { + checkEquipment.setEquipmentType("测量设备"); + } + try { + //健壮性哦安短 + if (ObjectUtils.isEmpty(request)) { + return ""; + } + Map map = BeanUtil.beanToMap(request); + map.put("upToStandard", "\uF0A3"); + map.put("belowStandard", "\uF0A3"); + map.put("test", "\uF052"); + //除了选用的模板不一致,模板配置流程是一致的 + return printFileRegister.registerPrintFile(MULTIFUNCTION_CHECK_DATA, "数据打印", null, map, true, null, null); + } catch (Exception ex) { + throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); + } + } + + private String createCertificateFile(BizBusinessDeviceMeasureApproval measureItemInfo) { + try { + //过滤不能生成原始记录的报告 + if (checkOutUnablePrint(measureItemInfo)) { + return ""; + } + if (CollectionUtil.isEmpty(measureItemInfo.getMeasureDataCalibratorList())) { + List bizBusinessDeviceMeasureDataCalibrators = new ArrayList<>(); + bizBusinessDeviceMeasureDataCalibrators.add(new BizBusinessDeviceMeasureDataCalibrator()); + measureItemInfo.setMeasureDataCalibratorList(bizBusinessDeviceMeasureDataCalibrators); + } + Map map = BeanUtil.beanToMap(measureItemInfo); + //准备封面参数 + prepareCoverParams(map, measureItemInfo.getLabCode()); + List customTemplateUrls = new ArrayList<>(); + BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); + //这一块逻辑比较复杂 + customTemplateUrls.add(bizBusinessMapper.customTemplateUrl(MEASURE_DATA, "2", measureItemInfo.getMeasureCategoryName())); + customTemplateUrls.add(bizBusinessMapper.customTemplateUrl(MEASURE_DATA, "2", "数字记录表内容")); + map.put("id", snowflakeUtil.nextId()); + //除了选用的模板不一致,模板配置流程是一致的 + return printFileRegister.registerPrintFile(MEASURE_DATA, "证书打印", null, map, true, null, customTemplateUrls); + } catch (Exception ex) { + throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); + } + } + + /** + * 创建原始记录文件 + */ + private String createOriginalFile(BizBusinessDeviceMeasureApproval measureItemInfo) { + try { + if (CollectionUtil.isEmpty(measureItemInfo.getMeasureDataCalibratorList())) { + List bizBusinessDeviceMeasureDataCalibrators = new ArrayList<>(); + bizBusinessDeviceMeasureDataCalibrators.add(new BizBusinessDeviceMeasureDataCalibrator()); + measureItemInfo.setMeasureDataCalibratorList(bizBusinessDeviceMeasureDataCalibrators); + } + Map map = BeanUtil.beanToMap(measureItemInfo); + List customTemplateUrls = new ArrayList<>(); + BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); + //准备封面参数 + prepareCoverParams(map, measureItemInfo.getLabCode()); + //定制化原始记录参数 + prepareCustomCoverParams(map, measureItemInfo.getMeasureDataCalibratorList()); + //这一块逻辑比较复杂 + customTemplateUrls.add(bizBusinessMapper.customTemplateUrl(MEASURE_DATA, "1", measureItemInfo.getItemCategoryName())); + + //与证书模板区分 + map.put("id", snowflakeUtil.nextId()); + //除了选用的模板不一致,模板配置流程是一致的 + return printFileRegister.registerPrintFile(MEASURE_DATA, "原始记录打印", null, map, true, null, customTemplateUrls); + } catch (Exception ex) { + throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); + } + } + + /** + * 检查是否能生成证书 + */ + private Boolean checkOutUnablePrint(BizBusinessDeviceMeasureApproval measureItemInfo) { + //通过检定项名称,获取对应的模块配置列表 + if (StringUtils.isNotEmpty(measureItemInfo.getItemCategoryName())) { + if (MEASURE_ITEMS_WITHOUT_CERTIFICATE.contains(measureItemInfo.getItemCategoryName())) { + log.warn(BusinessExceptionEnum.ITEM_CATEGORY_NOT_NULL.getMessage()); + return true; + } + if (CHECKOUT_REPORT.equals(measureItemInfo.getMeasureCategoryName())) { + log.warn(BusinessExceptionEnum.TEST_CATEGORY_IS_NONE.getMessage()); + return true; + } + } else { + log.warn(BusinessExceptionEnum.ITEM_CATEGORY_IS_NULL.getMessage()); + return true; + } + return false; + } + + /** + * 填充固定的信息参数 + */ + private void prepareCoverParams(Map map, String labCode) { + //技术文件处理 + if (map.containsKey("technologyFile") && ObjectUtils.isNotEmpty(map.get("technologyFile"))) { + //技术文件用逗号隔开 + String[] technologyFiles = ((String) map.get("technologyFile")).split(","); + List technologyFileList = Arrays.asList(technologyFiles); + map.put("technologyFileList", technologyFileList); + } + //健壮性校验 + if (StringUtils.isEmpty(labCode)) { + log.warn("组织接口不能传入为空,打印文档生成文档填充组织失败..."); + return; + } + //西昌海口基本信息录入 + if ("x".equals(labCode)) { + map.put("s", XICHANG); + map.put("communicationAddress", XICHANG_ADDRESS); + map.put("labAddress", XICHANG_ADDRESS); + map.put("phone", XICHANG_PHONE); + map.put("postalCode", XICHANG_POSTAL_CODE); + } else { + map.put("s", HAIKOU); + map.put("communicationAddress", HAIKOU_ADDRESS); + map.put("labAddress", HAIKOU_ADDRESS); + map.put("phone", HAIKOU_PHONE); + map.put("postalCode", HAIKOU_POSTAL_CODE); + } + } + + private void prepareCustomCoverParams(Map map, List measureDataCalibrators) { + //定制参数 + doCustomParam(map, measureDataCalibrators); + //初始化方框 + map.put("test", "\uF0A3"); + map.put("calibrate", "\uF0A3"); + map.put("measure", "\uF0A3"); + //选择方框 + switch ((String) map.get("measureCategoryName")) { + case TEST_REPORT: + map.put("test", "\uF052"); + break; + case CALIBRATE_REPORT: + map.put("calibrate", "\uF052"); + break; + case MEASURE_REPORT: + map.put("measure", "\uF052"); + break; + default: + return; + } + //填充有效日期 + if (ObjectUtils.isNotEmpty(map.get(MEASURE_VALID_DATE))) { + String measureValidDate = (String) map.get(MEASURE_VALID_DATE); + Calendar calendar = Calendar.getInstance(); + try { + calendar.setTime(new SimpleDateFormat("yyyy-MM-dd").parse(measureValidDate)); + } catch (Exception e) { + throw new BusinessException(1500, String.format(measureValidDate, "检定有效日期,格式不正确")); + } + //设置时间 + map.put(MEASURE_VALID_Y, calendar.get(Calendar.YEAR)); + map.put(MEASURE_VALID_M, calendar.get(Calendar.MONTH) + 1); + map.put(MEASURE_VALID_D, calendar.get(Calendar.DAY_OF_MONTH)); + } + + } + + /** + * 直流电压表没有HZ + * 多功能 + * + * @param map + */ + private void doCustomParam(Map map, List measureDataCalibrators) { + if (StringUtils.isNotEmpty((String) map.get("itemCategoryName"))) { + //直流表,交流表 75mv电压表定制表格内容 + if (((String) map.get("itemCategoryName")).contains("交流")) { + map.put("fName", "频率:"); + map.put("frequency", measureDataCalibrators.get(0).getFrequency()); + map.put("frequencyUnit", measureDataCalibrators.get(0).getFrequencyUnit()); + } + //多功能电力参数仪定制表格内容 + if (((String) map.get("itemCategoryName")).contains("多功能")) { + Map> measureDataMap = measureDataCalibrators.stream().collect( + Collectors.groupingBy(BizBusinessDeviceMeasureDataCalibrator::getParams) + ); + if (measureDataMap.containsKey("ACV") && CollectionUtils.isNotEmpty(measureDataMap.get("ACV"))) { + map.put("frequency2", measureDataMap.get("ACV").get(0).getFrequency()); + map.put("frequencyUnit2", measureDataMap.get("ACV").get(0).getFrequencyUnit()); + map.put("unit2", measureDataMap.get("ACV").get(0).getUnit()); + map.put("measureDataCalibratorListV", measureDataMap.get("ACV")); + } + if (measureDataMap.containsKey("ACI") && CollectionUtils.isNotEmpty(measureDataMap.get("ACI"))) { + map.put("frequency1", measureDataMap.get("ACI").get(0).getFrequency()); + map.put("frequencyUnit1", measureDataMap.get("ACI").get(0).getFrequencyUnit()); + map.put("unit1", measureDataMap.get("ACI").get(0).getUnit()); + map.put("measureDataCalibratorListI", measureDataMap.get("ACI")); + } + } + } + } + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/BizEquipmentLendServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/BizEquipmentLendServiceImpl.java index 9e8c7fc..060ee8f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/BizEquipmentLendServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/BizEquipmentLendServiceImpl.java @@ -146,7 +146,6 @@ } map.put("returnCatalogueNameStr", catalogueNameStr); } - printFileRegister.registerPrintFile(PrintFileModuleNameEnum.EQUIPMENT_LEND, PrintFileModuleNameEnum.EXPORT_TEMPLATE, null, map, exportDTO.isPdf(), response); } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/BizEquipmentStandardCheckRecordApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/BizEquipmentStandardCheckRecordApprovalServiceImpl.java index c56a0cb..37fd603 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/BizEquipmentStandardCheckRecordApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/BizEquipmentStandardCheckRecordApprovalServiceImpl.java @@ -14,8 +14,10 @@ import com.casic.missiles.mapper.equipment.BizEquipmentStandardCheckRecordApprovalMapper; import com.casic.missiles.model.equipment.BizEquipmentStandardCheckRecordApproval; import com.casic.missiles.service.Impl.GeneralApprovalServiceImpl; +import com.casic.missiles.service.Impl.eqpt.GenericEqptDataProvider; import com.casic.missiles.service.equipment.IBizEquipmentStandardCheckRecordApprovalService; import com.casic.missiles.utils.NoGeneratorUtil; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** @@ -29,6 +31,9 @@ @Service public class BizEquipmentStandardCheckRecordApprovalServiceImpl extends GeneralApprovalServiceImpl implements IBizEquipmentStandardCheckRecordApprovalService { + @Autowired + private GenericEqptDataProvider genericEqptDataProvider; + @Override public ReturnDTO addCheckApproval(BizEquipmentStandardCheckRecordApproval request) { //生成编号 @@ -44,6 +49,7 @@ Assert.isFalse(row <= 0, () -> { throw new BusinessException(BusinessExceptionEnum.CHECK_APPROVAL_SAVE_FAILED); }); + genericEqptDataProvider.checkCertificateTask(request); StandardCheckRecordApprovalSaveResponse saveResponse = new StandardCheckRecordApprovalSaveResponse(); saveResponse.setId(request.getId()); saveResponse.setRecordNo(recordNo); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index a5f9ad1..ce53a75 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -80,8 +80,10 @@ ITEM_CATEGORY_IS_NULL(2616, "检定类型为空,页面逻辑错误,不能执行打印"), ITEM_CATEGORY_NOT_NULL(2617, "该检定类型没有证书,请注意"), TEST_CATEGORY_IS_NONE(2618, "测试报告没有检定证书,请注意"), - MEASURE_APPROVAL_UPDATE_FAILED(2619, "检定审批更新至草稿箱失败"), - MEASURE_FILE_CREATE_FAILED(2620, "检定数据审批文件生成失败"), + MEASURE_APPROVAL_UPDATE_FAILED(2619, "多功能检定审批更新至草稿箱失败"), + MEASURE_FILE_CREATE_FAILED(2620, "多功能检定数据审批文件生成失败"), + CHECK_APPROVAL_UPDATE_FAILED(2621, "多功能核查审批更新至草稿箱失败"), + CHECK_FILE_CREATE_FAILED(2622, "多功能核查数据审批文件生成失败"), /** * 历史遗留备用 diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java index 46831fe..2f0877f 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/PrintFileModuleNameEnum.java @@ -22,6 +22,7 @@ String CUSTOMER_EXAMINE_FORM = "要求、委托书及合同评审表"; String MEASURE_DATA = "检定数据管理"; + String MULTIFUNCTION_CHECK_DATA = "多功能核查数据"; String FILE_CHANGE_FORM = "文件更改申请单"; String FILE_GRANT_NOTICE_FORM = "文件发放通知单"; diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java index 04ab11f..91097b7 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentInfo.java @@ -329,4 +329,8 @@ @TableField(exist = false) private Integer approvalType; + + @ApiModelProperty(value = "设备类型(打印扩展使用,任何时候不需要传)", dataType = "String") + @TableField(exist = false) + private String equipmentType; } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentStandardCheckRecordApproval.java b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentStandardCheckRecordApproval.java index b7c52f1..a5d6456 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentStandardCheckRecordApproval.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/equipment/BizEquipmentStandardCheckRecordApproval.java @@ -12,6 +12,7 @@ import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.io.Serializable; +import java.util.List; /** *

@@ -143,4 +144,33 @@ @TableField(exist = false) private String checkEquipmentModel; + @ApiModelProperty(value = "核查记录文件名称", dataType = "String") + private String checkRecordFile; + + @ApiModelProperty(value = "检查日期(打印)", dataType = "String") + @TableField(exist = false) + private String checkDate; + + + @ApiModelProperty(value = "检测地址(打印)", dataType = "String") + @TableField(exist = false) + private String checkAddress; + + @ApiModelProperty(value = "温度(打印)", dataType = "String") + @TableField(exist = false) + private String temperature; + + @ApiModelProperty(value = "湿度(打印)", dataType = "String") + @TableField(exist = false) + private String humidity; + + @ApiModelProperty(value = "核查标准设备(打印)", dataType = "Object") + @TableField(exist = false) + private List checkEquipmentList; + + + @ApiModelProperty(value = "被核查标准设备(打印)", dataType = "Object") + @TableField(exist = false) + private BizEquipmentInfo equipmentInfo; + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BizBusinessDeviceMeasureApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BizBusinessDeviceMeasureApprovalServiceImpl.java index bb66382..acf9ef6 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BizBusinessDeviceMeasureApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BizBusinessDeviceMeasureApprovalServiceImpl.java @@ -26,6 +26,7 @@ import com.casic.missiles.model.business.BizBusinessDeviceMeasureDataCalibrator; import com.casic.missiles.model.business.BizBusinessDeviceMeasureInfo; import com.casic.missiles.service.Impl.GeneralApprovalServiceImpl; +import com.casic.missiles.service.Impl.eqpt.GenericEqptDataProvider; import com.casic.missiles.service.business.IBizBusinessDeviceMeasureApprovalService; import com.casic.missiles.service.listeners.register.PrintFileRegister; import com.casic.missiles.utils.DictCodeUtils; @@ -52,13 +53,12 @@ * @since 2023-10-11 */ @Service -public class BizBusinessDeviceMeasureApprovalServiceImpl extends GeneralApprovalServiceImpl implements IBizBusinessDeviceMeasureApprovalService, PrintFileModuleNameEnum, MeasureCategoryEnum { +public class BizBusinessDeviceMeasureApprovalServiceImpl extends GeneralApprovalServiceImpl implements IBizBusinessDeviceMeasureApprovalService{ @Resource private BusinessLabExecutiveInfoMapper labExecutiveInfoMapper; @Autowired - private PrintFileRegister printFileRegister; - @Resource - private SnowflakeUtil snowflakeUtil; + private GenericEqptDataProvider genericEqptDataProvider; + @Override public ReturnDTO addMeasureApproval(BizBusinessDeviceMeasureApproval request) { @@ -76,235 +76,14 @@ Assert.isFalse(row <= 0, () -> { throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_SAVE_FAILED); }); - updateCertificateTask(request); + genericEqptDataProvider.measureCertificateTask(request); DeviceMeasureApprovalSaveResponse saveResponse = new DeviceMeasureApprovalSaveResponse(); saveResponse.setId(request.getId()); saveResponse.setCertNo(certNo); return ReturnUtil.success(saveResponse); } - /** - * 生成更新证书的任务,内部类 - */ - public void updateCertificateTask(BizBusinessDeviceMeasureApproval request) { - ThreadPoolExecutor threadPool = new ThreadPoolExecutor(2, 5, 100, - TimeUnit.SECONDS, new LinkedBlockingQueue<>(5)); - //生成证书报告的 - CompletableFuture certificateFutureTask = CompletableFuture.supplyAsync( - () -> createCertificateFile(request), threadPool); - //生成原始记录的线程 - CompletableFuture originalFutureTask = CompletableFuture.supplyAsync( - () -> createOriginalFile(request), threadPool); - //等到所有线程异步结束 - CompletableFuture combinedFuture = CompletableFuture.allOf(certificateFutureTask, originalFutureTask); - combinedFuture.thenRun(() -> { - try { - //获取结果 - String certificateFileUrl = certificateFutureTask.join(); - String originalRecordFileUrl = originalFutureTask.join(); - BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); - if (StringUtils.isNotEmpty(certificateFileUrl) || StringUtils.isNotEmpty(originalRecordFileUrl)) { - //生成证书文件 - request.setCertificateFile(certificateFileUrl); - //原始记录文件 - request.setOriginalRecordFile(originalRecordFileUrl); - //更新记录 - int updateFlag = bizBusinessMapper.updateById(request); - Assert.isFalse(updateFlag <= 0, () -> { - throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); - }); - } else { - //生成证书失败,删除保存的记录 - bizBusinessMapper.deleteById(request); - throw new BusinessException(BusinessExceptionEnum.MEASURE_FILE_CREATE_FAILED); - } - } catch (Exception ex) { - throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); - } - }).join(); - } - - private String createCertificateFile(BizBusinessDeviceMeasureApproval measureItemInfo) { - try { - //过滤不能生成原始记录的报告 - if (checkOutUnablePrint(measureItemInfo)) { - return ""; - } - if (CollectionUtil.isEmpty(measureItemInfo.getMeasureDataCalibratorList())) { - List bizBusinessDeviceMeasureDataCalibrators = new ArrayList<>(); - bizBusinessDeviceMeasureDataCalibrators.add(new BizBusinessDeviceMeasureDataCalibrator()); - measureItemInfo.setMeasureDataCalibratorList(bizBusinessDeviceMeasureDataCalibrators); - } - Map map = BeanUtil.beanToMap(measureItemInfo); - //准备封面参数 - prepareCoverParams(map, measureItemInfo.getLabCode()); - List customTemplateUrls = new ArrayList<>(); - BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); - //这一块逻辑比较复杂 - customTemplateUrls.add(bizBusinessMapper.customTemplateUrl(MEASURE_DATA, "2", measureItemInfo.getMeasureCategoryName())); - customTemplateUrls.add(bizBusinessMapper.customTemplateUrl(MEASURE_DATA, "2", "数字记录表内容")); - map.put("id", snowflakeUtil.nextId()); - //除了选用的模板不一致,模板配置流程是一致的 - return printFileRegister.registerPrintFile(MEASURE_DATA, "证书打印", null, map, true, null, customTemplateUrls); - } catch (Exception ex) { - throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); - } - } - - /** - * 创建原始记录文件 - */ - private String createOriginalFile(BizBusinessDeviceMeasureApproval measureItemInfo) { - try { - if (CollectionUtil.isEmpty(measureItemInfo.getMeasureDataCalibratorList())) { - List bizBusinessDeviceMeasureDataCalibrators = new ArrayList<>(); - bizBusinessDeviceMeasureDataCalibrators.add(new BizBusinessDeviceMeasureDataCalibrator()); - measureItemInfo.setMeasureDataCalibratorList(bizBusinessDeviceMeasureDataCalibrators); - } - Map map = BeanUtil.beanToMap(measureItemInfo); - List customTemplateUrls = new ArrayList<>(); - BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); - //准备封面参数 - prepareCoverParams(map, measureItemInfo.getLabCode()); - //定制化原始记录参数 - prepareCustomCoverParams(map, measureItemInfo.getMeasureDataCalibratorList()); - //这一块逻辑比较复杂 - customTemplateUrls.add(bizBusinessMapper.customTemplateUrl(MEASURE_DATA, "1", measureItemInfo.getItemCategoryName())); - //与证书模板区分 - map.put("id", snowflakeUtil.nextId()); - //除了选用的模板不一致,模板配置流程是一致的 - return printFileRegister.registerPrintFile(MEASURE_DATA, "原始记录打印", null, map, true, null, customTemplateUrls); - } catch (Exception ex) { - throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); - } - } - - /** - * 检查是否能生成证书 - */ - private Boolean checkOutUnablePrint(BizBusinessDeviceMeasureApproval measureItemInfo) { - //通过检定项名称,获取对应的模块配置列表 - if (StringUtils.isNotEmpty(measureItemInfo.getItemCategoryName())) { - if (MEASURE_ITEMS_WITHOUT_CERTIFICATE.contains(measureItemInfo.getItemCategoryName())) { - log.warn(BusinessExceptionEnum.ITEM_CATEGORY_NOT_NULL.getMessage()); - return true; - } - if (CHECKOUT_REPORT.equals(measureItemInfo.getMeasureCategoryName())) { - log.warn(BusinessExceptionEnum.TEST_CATEGORY_IS_NONE.getMessage()); - return true; - } - } else { - log.warn(BusinessExceptionEnum.ITEM_CATEGORY_IS_NULL.getMessage()); - return true; - } - return false; - } - - /** - * 填充固定的信息参数 - */ - private void prepareCoverParams(Map map, String labCode) { - //技术文件处理 - if (map.containsKey("technologyFile") && ObjectUtils.isNotEmpty(map.get("technologyFile"))) { - //技术文件用逗号隔开 - String[] technologyFiles = ((String) map.get("technologyFile")).split(","); - List technologyFileList = Arrays.asList(technologyFiles); - map.put("technologyFileList", technologyFileList); - } - //健壮性校验 - if (StringUtils.isEmpty(labCode)) { - log.warn("组织接口不能传入为空,打印文档生成文档填充组织失败..."); - return; - } - //西昌海口基本信息录入 - if ("x".equals(labCode)) { - map.put("s", XICHANG); - map.put("communicationAddress", XICHANG_ADDRESS); - map.put("labAddress", XICHANG_ADDRESS); - map.put("phone", XICHANG_PHONE); - map.put("postalCode", XICHANG_POSTAL_CODE); - } else { - map.put("s", HAIKOU); - map.put("communicationAddress", HAIKOU_ADDRESS); - map.put("labAddress", HAIKOU_ADDRESS); - map.put("phone", HAIKOU_PHONE); - map.put("postalCode", HAIKOU_POSTAL_CODE); - } - } - - private void prepareCustomCoverParams(Map map, List measureDataCalibrators) { - //定制参数 - doCustomParam(map, measureDataCalibrators); - //初始化方框 - map.put("test", "\uF0A3"); - map.put("calibrate", "\uF0A3"); - map.put("measure", "\uF0A3"); - //选择方框 - switch ((String) map.get("measureCategoryName")) { - case TEST_REPORT: - map.put("test", "\uF052"); - break; - case CALIBRATE_REPORT: - map.put("calibrate", "\uF052"); - break; - case MEASURE_REPORT: - map.put("measure", "\uF052"); - break; - default: - return; - } - //填充有效日期 - if (ObjectUtils.isNotEmpty(map.get(MEASURE_VALID_DATE))) { - String measureValidDate = (String) map.get(MEASURE_VALID_DATE); - Calendar calendar = Calendar.getInstance(); - try { - calendar.setTime(new SimpleDateFormat("yyyy-MM-dd").parse(measureValidDate)); - } catch (Exception e) { - throw new BusinessException(1500, String.format(measureValidDate, "检定有效日期,格式不正确")); - } - //设置时间 - map.put(MEASURE_VALID_Y, calendar.get(Calendar.YEAR)); - map.put(MEASURE_VALID_M, calendar.get(Calendar.MONTH) + 1); - map.put(MEASURE_VALID_D, calendar.get(Calendar.DAY_OF_MONTH)); - } - - } - - /** - * 直流电压表没有HZ - * 多功能 - * - * @param map - */ - private void doCustomParam(Map map, List measureDataCalibrators) { - if (StringUtils.isNotEmpty((String) map.get("itemCategoryName"))) { - //直流表,交流表 75mv电压表定制表格内容 - if (((String) map.get("itemCategoryName")).contains("交流")) { - map.put("fName", "频率:"); - map.put("frequency", measureDataCalibrators.get(0).getFrequency()); - map.put("frequencyUnit", measureDataCalibrators.get(0).getFrequencyUnit()); - } - //多功能电力参数仪定制表格内容 - if (((String) map.get("itemCategoryName")).contains("多功能")) { - Map> measureDataMap = measureDataCalibrators.stream().collect( - Collectors.groupingBy(BizBusinessDeviceMeasureDataCalibrator::getParams) - ); - if (measureDataMap.containsKey("ACV") && CollectionUtils.isNotEmpty(measureDataMap.get("ACV"))) { - map.put("frequency2", measureDataMap.get("ACV").get(0).getFrequency()); - map.put("frequencyUnit2", measureDataMap.get("ACV").get(0).getFrequencyUnit()); - map.put("unit2", measureDataMap.get("ACV").get(0).getUnit()); - map.put("measureDataCalibratorListV", measureDataMap.get("ACV")); - } - if (measureDataMap.containsKey("ACI") && CollectionUtils.isNotEmpty(measureDataMap.get("ACI"))) { - map.put("frequency1", measureDataMap.get("ACI").get(0).getFrequency()); - map.put("frequencyUnit1", measureDataMap.get("ACI").get(0).getFrequencyUnit()); - map.put("unit1", measureDataMap.get("ACI").get(0).getUnit()); - map.put("measureDataCalibratorListI", measureDataMap.get("ACI")); - } - } - } - } @Override public ReturnDTO detail(Long id) throws Exception { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/GenericEqptDataProvider.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/GenericEqptDataProvider.java new file mode 100644 index 0000000..a70a023 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/eqpt/GenericEqptDataProvider.java @@ -0,0 +1,317 @@ +package com.casic.missiles.service.Impl.eqpt; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.enums.PrintFileModuleNameEnum; +import com.casic.missiles.enums.business.MeasureCategoryEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.mapper.business.BizBusinessDeviceMeasureApprovalMapper; +import com.casic.missiles.mapper.equipment.BizEquipmentStandardCheckRecordApprovalMapper; +import com.casic.missiles.model.business.BizBusinessDeviceMeasureApproval; +import com.casic.missiles.model.business.BizBusinessDeviceMeasureDataCalibrator; +import com.casic.missiles.model.equipment.BizEquipmentInfo; +import com.casic.missiles.model.equipment.BizEquipmentStandardCheckRecordApproval; +import com.casic.missiles.service.listeners.register.PrintFileRegister; +import com.casic.missiles.utils.SnowflakeUtil; +import com.casic.missiles.utils.SpringContextUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +/** + * 通用的装置数据提供器 + * + * @author cz + * @date 2023-10-31 + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class GenericEqptDataProvider implements PrintFileModuleNameEnum, MeasureCategoryEnum { + + private final PrintFileRegister printFileRegister; + private final SnowflakeUtil snowflakeUtil; + private ThreadPoolExecutor threadPool = new ThreadPoolExecutor(4, 10, 100, + TimeUnit.SECONDS, new LinkedBlockingQueue<>(10)); + + /** + * 生成更新证书的任务 + */ + public void checkCertificateTask(BizEquipmentStandardCheckRecordApproval request) { + //生成核查记录单 + String checkCertificateFileUrl = checkCertificateFile(request); + BizEquipmentStandardCheckRecordApprovalMapper bizRecordApprovalMapper = SpringContextUtil.getBean(BizEquipmentStandardCheckRecordApprovalMapper.class); + + if (StringUtils.isNotEmpty(checkCertificateFileUrl)) { + //原始记录文件 + request.setCheckRecordFile(checkCertificateFileUrl); + //更新记录 + int updateFlag = bizRecordApprovalMapper.updateById(request); + Assert.isFalse(updateFlag <= 0, () -> { + throw new BusinessException(BusinessExceptionEnum.CHECK_APPROVAL_UPDATE_FAILED); + }); + } else { + //生成证书失败,删除保存的记录 + bizRecordApprovalMapper.deleteById(request); + throw new BusinessException(BusinessExceptionEnum.CHECK_FILE_CREATE_FAILED); + } + } + + + /** + * 生成更新证书的任务 + */ + public void measureCertificateTask(BizBusinessDeviceMeasureApproval request) { + //生成证书报告的 + CompletableFuture certificateFutureTask = CompletableFuture.supplyAsync( + () -> createCertificateFile(request), threadPool); + //生成原始记录的线程 + CompletableFuture originalFutureTask = CompletableFuture.supplyAsync( + () -> createOriginalFile(request), threadPool); + //等到所有线程异步结束 + CompletableFuture combinedFuture = CompletableFuture.allOf(certificateFutureTask, originalFutureTask); + combinedFuture.thenRun(() -> { + try { + //获取结果 + String certificateFileUrl = certificateFutureTask.join(); + String originalRecordFileUrl = originalFutureTask.join(); + BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); + if (StringUtils.isNotEmpty(certificateFileUrl) || StringUtils.isNotEmpty(originalRecordFileUrl)) { + //生成证书文件 + request.setCertificateFile(certificateFileUrl); + //原始记录文件 + request.setOriginalRecordFile(originalRecordFileUrl); + //更新记录 + int updateFlag = bizBusinessMapper.updateById(request); + Assert.isFalse(updateFlag <= 0, () -> { + throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); + }); + } else { + //生成证书失败,删除保存的记录 + bizBusinessMapper.deleteById(request); + throw new BusinessException(BusinessExceptionEnum.MEASURE_FILE_CREATE_FAILED); + } + } catch (Exception ex) { + throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); + } + }).join(); + } + + private String checkCertificateFile(BizEquipmentStandardCheckRecordApproval request) { + for (BizEquipmentInfo checkEquipment : request.getCheckEquipmentList()) { + checkEquipment.setEquipmentType("测量设备"); + } + try { + //健壮性哦安短 + if (ObjectUtils.isEmpty(request)) { + return ""; + } + Map map = BeanUtil.beanToMap(request); + map.put("upToStandard", "\uF0A3"); + map.put("belowStandard", "\uF0A3"); + map.put("test", "\uF052"); + //除了选用的模板不一致,模板配置流程是一致的 + return printFileRegister.registerPrintFile(MULTIFUNCTION_CHECK_DATA, "数据打印", null, map, true, null, null); + } catch (Exception ex) { + throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); + } + } + + private String createCertificateFile(BizBusinessDeviceMeasureApproval measureItemInfo) { + try { + //过滤不能生成原始记录的报告 + if (checkOutUnablePrint(measureItemInfo)) { + return ""; + } + if (CollectionUtil.isEmpty(measureItemInfo.getMeasureDataCalibratorList())) { + List bizBusinessDeviceMeasureDataCalibrators = new ArrayList<>(); + bizBusinessDeviceMeasureDataCalibrators.add(new BizBusinessDeviceMeasureDataCalibrator()); + measureItemInfo.setMeasureDataCalibratorList(bizBusinessDeviceMeasureDataCalibrators); + } + Map map = BeanUtil.beanToMap(measureItemInfo); + //准备封面参数 + prepareCoverParams(map, measureItemInfo.getLabCode()); + List customTemplateUrls = new ArrayList<>(); + BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); + //这一块逻辑比较复杂 + customTemplateUrls.add(bizBusinessMapper.customTemplateUrl(MEASURE_DATA, "2", measureItemInfo.getMeasureCategoryName())); + customTemplateUrls.add(bizBusinessMapper.customTemplateUrl(MEASURE_DATA, "2", "数字记录表内容")); + map.put("id", snowflakeUtil.nextId()); + //除了选用的模板不一致,模板配置流程是一致的 + return printFileRegister.registerPrintFile(MEASURE_DATA, "证书打印", null, map, true, null, customTemplateUrls); + } catch (Exception ex) { + throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); + } + } + + /** + * 创建原始记录文件 + */ + private String createOriginalFile(BizBusinessDeviceMeasureApproval measureItemInfo) { + try { + if (CollectionUtil.isEmpty(measureItemInfo.getMeasureDataCalibratorList())) { + List bizBusinessDeviceMeasureDataCalibrators = new ArrayList<>(); + bizBusinessDeviceMeasureDataCalibrators.add(new BizBusinessDeviceMeasureDataCalibrator()); + measureItemInfo.setMeasureDataCalibratorList(bizBusinessDeviceMeasureDataCalibrators); + } + Map map = BeanUtil.beanToMap(measureItemInfo); + List customTemplateUrls = new ArrayList<>(); + BizBusinessDeviceMeasureApprovalMapper bizBusinessMapper = SpringContextUtil.getBean(BizBusinessDeviceMeasureApprovalMapper.class); + //准备封面参数 + prepareCoverParams(map, measureItemInfo.getLabCode()); + //定制化原始记录参数 + prepareCustomCoverParams(map, measureItemInfo.getMeasureDataCalibratorList()); + //这一块逻辑比较复杂 + customTemplateUrls.add(bizBusinessMapper.customTemplateUrl(MEASURE_DATA, "1", measureItemInfo.getItemCategoryName())); + + //与证书模板区分 + map.put("id", snowflakeUtil.nextId()); + //除了选用的模板不一致,模板配置流程是一致的 + return printFileRegister.registerPrintFile(MEASURE_DATA, "原始记录打印", null, map, true, null, customTemplateUrls); + } catch (Exception ex) { + throw new BusinessException(BusinessExceptionEnum.MEASURE_APPROVAL_UPDATE_FAILED); + } + } + + /** + * 检查是否能生成证书 + */ + private Boolean checkOutUnablePrint(BizBusinessDeviceMeasureApproval measureItemInfo) { + //通过检定项名称,获取对应的模块配置列表 + if (StringUtils.isNotEmpty(measureItemInfo.getItemCategoryName())) { + if (MEASURE_ITEMS_WITHOUT_CERTIFICATE.contains(measureItemInfo.getItemCategoryName())) { + log.warn(BusinessExceptionEnum.ITEM_CATEGORY_NOT_NULL.getMessage()); + return true; + } + if (CHECKOUT_REPORT.equals(measureItemInfo.getMeasureCategoryName())) { + log.warn(BusinessExceptionEnum.TEST_CATEGORY_IS_NONE.getMessage()); + return true; + } + } else { + log.warn(BusinessExceptionEnum.ITEM_CATEGORY_IS_NULL.getMessage()); + return true; + } + return false; + } + + /** + * 填充固定的信息参数 + */ + private void prepareCoverParams(Map map, String labCode) { + //技术文件处理 + if (map.containsKey("technologyFile") && ObjectUtils.isNotEmpty(map.get("technologyFile"))) { + //技术文件用逗号隔开 + String[] technologyFiles = ((String) map.get("technologyFile")).split(","); + List technologyFileList = Arrays.asList(technologyFiles); + map.put("technologyFileList", technologyFileList); + } + //健壮性校验 + if (StringUtils.isEmpty(labCode)) { + log.warn("组织接口不能传入为空,打印文档生成文档填充组织失败..."); + return; + } + //西昌海口基本信息录入 + if ("x".equals(labCode)) { + map.put("s", XICHANG); + map.put("communicationAddress", XICHANG_ADDRESS); + map.put("labAddress", XICHANG_ADDRESS); + map.put("phone", XICHANG_PHONE); + map.put("postalCode", XICHANG_POSTAL_CODE); + } else { + map.put("s", HAIKOU); + map.put("communicationAddress", HAIKOU_ADDRESS); + map.put("labAddress", HAIKOU_ADDRESS); + map.put("phone", HAIKOU_PHONE); + map.put("postalCode", HAIKOU_POSTAL_CODE); + } + } + + private void prepareCustomCoverParams(Map map, List measureDataCalibrators) { + //定制参数 + doCustomParam(map, measureDataCalibrators); + //初始化方框 + map.put("test", "\uF0A3"); + map.put("calibrate", "\uF0A3"); + map.put("measure", "\uF0A3"); + //选择方框 + switch ((String) map.get("measureCategoryName")) { + case TEST_REPORT: + map.put("test", "\uF052"); + break; + case CALIBRATE_REPORT: + map.put("calibrate", "\uF052"); + break; + case MEASURE_REPORT: + map.put("measure", "\uF052"); + break; + default: + return; + } + //填充有效日期 + if (ObjectUtils.isNotEmpty(map.get(MEASURE_VALID_DATE))) { + String measureValidDate = (String) map.get(MEASURE_VALID_DATE); + Calendar calendar = Calendar.getInstance(); + try { + calendar.setTime(new SimpleDateFormat("yyyy-MM-dd").parse(measureValidDate)); + } catch (Exception e) { + throw new BusinessException(1500, String.format(measureValidDate, "检定有效日期,格式不正确")); + } + //设置时间 + map.put(MEASURE_VALID_Y, calendar.get(Calendar.YEAR)); + map.put(MEASURE_VALID_M, calendar.get(Calendar.MONTH) + 1); + map.put(MEASURE_VALID_D, calendar.get(Calendar.DAY_OF_MONTH)); + } + + } + + /** + * 直流电压表没有HZ + * 多功能 + * + * @param map + */ + private void doCustomParam(Map map, List measureDataCalibrators) { + if (StringUtils.isNotEmpty((String) map.get("itemCategoryName"))) { + //直流表,交流表 75mv电压表定制表格内容 + if (((String) map.get("itemCategoryName")).contains("交流")) { + map.put("fName", "频率:"); + map.put("frequency", measureDataCalibrators.get(0).getFrequency()); + map.put("frequencyUnit", measureDataCalibrators.get(0).getFrequencyUnit()); + } + //多功能电力参数仪定制表格内容 + if (((String) map.get("itemCategoryName")).contains("多功能")) { + Map> measureDataMap = measureDataCalibrators.stream().collect( + Collectors.groupingBy(BizBusinessDeviceMeasureDataCalibrator::getParams) + ); + if (measureDataMap.containsKey("ACV") && CollectionUtils.isNotEmpty(measureDataMap.get("ACV"))) { + map.put("frequency2", measureDataMap.get("ACV").get(0).getFrequency()); + map.put("frequencyUnit2", measureDataMap.get("ACV").get(0).getFrequencyUnit()); + map.put("unit2", measureDataMap.get("ACV").get(0).getUnit()); + map.put("measureDataCalibratorListV", measureDataMap.get("ACV")); + } + if (measureDataMap.containsKey("ACI") && CollectionUtils.isNotEmpty(measureDataMap.get("ACI"))) { + map.put("frequency1", measureDataMap.get("ACI").get(0).getFrequency()); + map.put("frequencyUnit1", measureDataMap.get("ACI").get(0).getFrequencyUnit()); + map.put("unit1", measureDataMap.get("ACI").get(0).getUnit()); + map.put("measureDataCalibratorListI", measureDataMap.get("ACI")); + } + } + } + } + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/BizEquipmentLendServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/BizEquipmentLendServiceImpl.java index 9e8c7fc..060ee8f 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/BizEquipmentLendServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/BizEquipmentLendServiceImpl.java @@ -146,7 +146,6 @@ } map.put("returnCatalogueNameStr", catalogueNameStr); } - printFileRegister.registerPrintFile(PrintFileModuleNameEnum.EQUIPMENT_LEND, PrintFileModuleNameEnum.EXPORT_TEMPLATE, null, map, exportDTO.isPdf(), response); } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/BizEquipmentStandardCheckRecordApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/BizEquipmentStandardCheckRecordApprovalServiceImpl.java index c56a0cb..37fd603 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/BizEquipmentStandardCheckRecordApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/BizEquipmentStandardCheckRecordApprovalServiceImpl.java @@ -14,8 +14,10 @@ import com.casic.missiles.mapper.equipment.BizEquipmentStandardCheckRecordApprovalMapper; import com.casic.missiles.model.equipment.BizEquipmentStandardCheckRecordApproval; import com.casic.missiles.service.Impl.GeneralApprovalServiceImpl; +import com.casic.missiles.service.Impl.eqpt.GenericEqptDataProvider; import com.casic.missiles.service.equipment.IBizEquipmentStandardCheckRecordApprovalService; import com.casic.missiles.utils.NoGeneratorUtil; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** @@ -29,6 +31,9 @@ @Service public class BizEquipmentStandardCheckRecordApprovalServiceImpl extends GeneralApprovalServiceImpl implements IBizEquipmentStandardCheckRecordApprovalService { + @Autowired + private GenericEqptDataProvider genericEqptDataProvider; + @Override public ReturnDTO addCheckApproval(BizEquipmentStandardCheckRecordApproval request) { //生成编号 @@ -44,6 +49,7 @@ Assert.isFalse(row <= 0, () -> { throw new BusinessException(BusinessExceptionEnum.CHECK_APPROVAL_SAVE_FAILED); }); + genericEqptDataProvider.checkCertificateTask(request); StandardCheckRecordApprovalSaveResponse saveResponse = new StandardCheckRecordApprovalSaveResponse(); saveResponse.setId(request.getId()); saveResponse.setRecordNo(recordNo); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java index b7624ad..03cbd72 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java @@ -109,7 +109,7 @@ //删除无效的文件 File invalidFile = new File(tempLocalFileDir); //删除运行空间下的文件 - deleteFile(invalidFile); +// deleteFile(invalidFile); } return miniName; }