diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 76e2a36..3b59797 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -17,4 +17,6 @@ @Select("SELECT IFNULL(max(RIGHT(equipment_no, 12)), 0) from eqpt_equipment_info_approval where equipment_type = #{equipmentType}") Long selectMaxNo(@Param("equipmentType")String equipmentType); + + Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 76e2a36..3b59797 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -17,4 +17,6 @@ @Select("SELECT IFNULL(max(RIGHT(equipment_no, 12)), 0) from eqpt_equipment_info_approval where equipment_type = #{equipmentType}") Long selectMaxNo(@Param("equipmentType")String equipmentType); + + Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); } diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index ede80f0..a9033f9 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -50,4 +50,32 @@ id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + + diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 76e2a36..3b59797 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -17,4 +17,6 @@ @Select("SELECT IFNULL(max(RIGHT(equipment_no, 12)), 0) from eqpt_equipment_info_approval where equipment_type = #{equipmentType}") Long selectMaxNo(@Param("equipmentType")String equipmentType); + + Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); } diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index ede80f0..a9033f9 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -50,4 +50,32 @@ id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml index 9ffb414..b6e8f40 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml @@ -14,25 +14,29 @@ id, rfid, create_time - + select * from( + ${ew.sqlSegment} @@ -42,27 +46,13 @@ diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 76e2a36..3b59797 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -17,4 +17,6 @@ @Select("SELECT IFNULL(max(RIGHT(equipment_no, 12)), 0) from eqpt_equipment_info_approval where equipment_type = #{equipmentType}") Long selectMaxNo(@Param("equipmentType")String equipmentType); + + Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); } diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index ede80f0..a9033f9 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -50,4 +50,32 @@ id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml index 9ffb414..b6e8f40 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml @@ -14,25 +14,29 @@ id, rfid, create_time - + select * from( + ${ew.sqlSegment} @@ -42,27 +46,13 @@ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java index 219fdab..c574ef7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java @@ -59,9 +59,6 @@ @PostMapping("/add") @ResponseBody public ReturnDTO draftUpdate(@RequestBody @Valid BizResourceCustomerSuggestForm request, BindingResult bindingResult) { - Assert.isFalse(Objects.isNull(request.getId()), () -> { - throw new BusinessException(BusinessExceptionEnum.ID_NULL); - }); if(bindingResult.hasErrors()){ throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 76e2a36..3b59797 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -17,4 +17,6 @@ @Select("SELECT IFNULL(max(RIGHT(equipment_no, 12)), 0) from eqpt_equipment_info_approval where equipment_type = #{equipmentType}") Long selectMaxNo(@Param("equipmentType")String equipmentType); + + Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); } diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index ede80f0..a9033f9 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -50,4 +50,32 @@ id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml index 9ffb414..b6e8f40 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml @@ -14,25 +14,29 @@ id, rfid, create_time - + select * from( + ${ew.sqlSegment} @@ -42,27 +46,13 @@ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java index 219fdab..c574ef7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java @@ -59,9 +59,6 @@ @PostMapping("/add") @ResponseBody public ReturnDTO draftUpdate(@RequestBody @Valid BizResourceCustomerSuggestForm request, BindingResult bindingResult) { - Assert.isFalse(Objects.isNull(request.getId()), () -> { - throw new BusinessException(BusinessExceptionEnum.ID_NULL); - }); if(bindingResult.hasErrors()){ throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 86b278f..7b3c7a2 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -30,6 +30,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + // 设备在用信息 + String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 String PLAN_CATEGORY = DICT_PREFIX + "PlanType"; // 计量计划执行情况 diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 76e2a36..3b59797 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -17,4 +17,6 @@ @Select("SELECT IFNULL(max(RIGHT(equipment_no, 12)), 0) from eqpt_equipment_info_approval where equipment_type = #{equipmentType}") Long selectMaxNo(@Param("equipmentType")String equipmentType); + + Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); } diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index ede80f0..a9033f9 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -50,4 +50,32 @@ id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml index 9ffb414..b6e8f40 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml @@ -14,25 +14,29 @@ id, rfid, create_time - + select * from( + ${ew.sqlSegment} @@ -42,27 +46,13 @@ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java index 219fdab..c574ef7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java @@ -59,9 +59,6 @@ @PostMapping("/add") @ResponseBody public ReturnDTO draftUpdate(@RequestBody @Valid BizResourceCustomerSuggestForm request, BindingResult bindingResult) { - Assert.isFalse(Objects.isNull(request.getId()), () -> { - throw new BusinessException(BusinessExceptionEnum.ID_NULL); - }); if(bindingResult.hasErrors()){ throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 86b278f..7b3c7a2 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -30,6 +30,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + // 设备在用信息 + String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 String PLAN_CATEGORY = DICT_PREFIX + "PlanType"; // 计量计划执行情况 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 8a32e1f..84c4267 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ContentStyle; import com.alibaba.excel.enums.poi.BorderStyleEnum; @@ -27,20 +28,24 @@ @NotBlank(message = "设备名称不能为空") @ExcelProperty("设备名称") private String equipmentName; - /** * 型号规格 */ @NotBlank(message = "型号规格不能为空") @ExcelProperty("型号规格") private String model; - + @ExcelProperty("辅助字段") + private String helpInstruction; + /** + * 出厂编号 + */ + @ExcelProperty("出厂编号") + private String manufactureNo; /** * 生产国家 */ @ExcelProperty("生产国家") private String productCountry; - /** * 生产厂家 */ @@ -52,53 +57,32 @@ @ExcelProperty("生产日期") private Date productDate; /** - * 出厂编号 + * 购进日期 */ - @ExcelProperty("出厂编号") - private String manufactureNo; - + @ExcelProperty(value = "购进日期",converter = DateExcelConverter.class) + private Date purchaseDate; + /** + * 单价(万元) + */ + @ExcelProperty("设备单价") + private BigDecimal unitPrice; /** * 使用状态(字典code) */ @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS,needValid = true,message = "使用状态不合法") @ExcelProperty(value = "使用状态") private String usageStatus; - - - /** - * 等级(字典code) - */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL,needValid = true,message = "重要等级不合法") - @ExcelProperty("重要等级") - private String level; - - /** - * 单价(万元) - */ - @ExcelProperty("设备单价") - private BigDecimal unitPrice; - - /** - * 购进日期 - */ - @ExcelProperty(value = "购进日期",converter = DateExcelConverter.class) - private Date purchaseDate; - - /** * 质量状况 */ @ExcelProperty("质量状况") private String qualityCondition; - /** * 所在单位id */ private Long companyId; - @ExcelProperty("所在单位") private String companyName; - /** * 使用部门id */ @@ -106,79 +90,95 @@ @ExcelProperty("使用部门") private String deptName; - - /** - * 使用岗位 - */ - @ExcelProperty(value = "使用岗位") - private String usePosition; - - /** - * 负责人 - */ - @ExcelProperty("负责人") - private String directorName; - /** * 设备分类(字典code) */ @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; - - /** * 检定周期(月) */ @ExcelProperty(value = "检定周期") private Integer checkCycle; - - + /** + * 等级(字典code) + */ + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL,needValid = true,message = "重要等级不合法") + @ExcelProperty("重要等级") + private String level; + /** + * 备注 + */ + @ExcelProperty(value = "备注",index = 16) + private String remark; /** * 检定机构 */ @ExcelProperty("检定(校准)机构") private String checkOrganization; - /** * 检定日期 */ @ExcelProperty(value = "检定(校准)日期", converter = DateExcelConverter.class) private Date checkDate; - /** * 证书有效期 */ @ExcelProperty(value = "证书有效期", converter = DateExcelConverter.class) private Date certificateValid; - /** * 计量标识 */ @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY, needValid = true, message = "计量标识不合法") @ExcelProperty(value = "计量标识") private String meterIdentify; - - /** - * 备注 + * 使用岗位 */ - @ExcelProperty(value = "备注") - private String remark; - - @ExcelProperty("测量范围") - private String measureRange; - + @ExcelProperty(value = "使用岗位") + private String usePosition; /** - * 不确定度或允许误差极限或准确度等级 + * 负责人 */ - @ExcelProperty("技术指标") - private String uncertainty; - + @ExcelProperty("负责人") + private String directorName; + @ExcelProperty("RFID标签绑定") + private String rfid; /** - * 依据的技术文件 + * 在用信息(字典code) */ - @ExcelProperty("依据的技术文件") - private String basedDocuments; + @ExcelProperty("在用信息") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") + private String useSign; + /** + * 安装位置(自定义编写) + */ + @ApiModelProperty("安装位置") + private String installLocationExt; + /** + * 备注(扩展) + */ + @ExcelProperty(value = "备注",index = 27) + private String remarkExt; + +// @ExcelProperty("测量范围") +// private String measureRange; +// +// /** +// * 不确定度或允许误差极限或准确度等级 +// */ +// @ExcelProperty("技术指标") +// private String uncertainty; +// +// /** +// * 依据的技术文件 +// */ +// @ExcelProperty("依据的技术文件") +// private String basedDocuments; + + @ExcelIgnore + private Long modelId; + } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 76e2a36..3b59797 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -17,4 +17,6 @@ @Select("SELECT IFNULL(max(RIGHT(equipment_no, 12)), 0) from eqpt_equipment_info_approval where equipment_type = #{equipmentType}") Long selectMaxNo(@Param("equipmentType")String equipmentType); + + Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); } diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index ede80f0..a9033f9 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -50,4 +50,32 @@ id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml index 9ffb414..b6e8f40 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml @@ -14,25 +14,29 @@ id, rfid, create_time - + select * from( + ${ew.sqlSegment} @@ -42,27 +46,13 @@ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java index 219fdab..c574ef7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java @@ -59,9 +59,6 @@ @PostMapping("/add") @ResponseBody public ReturnDTO draftUpdate(@RequestBody @Valid BizResourceCustomerSuggestForm request, BindingResult bindingResult) { - Assert.isFalse(Objects.isNull(request.getId()), () -> { - throw new BusinessException(BusinessExceptionEnum.ID_NULL); - }); if(bindingResult.hasErrors()){ throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 86b278f..7b3c7a2 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -30,6 +30,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + // 设备在用信息 + String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 String PLAN_CATEGORY = DICT_PREFIX + "PlanType"; // 计量计划执行情况 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 8a32e1f..84c4267 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ContentStyle; import com.alibaba.excel.enums.poi.BorderStyleEnum; @@ -27,20 +28,24 @@ @NotBlank(message = "设备名称不能为空") @ExcelProperty("设备名称") private String equipmentName; - /** * 型号规格 */ @NotBlank(message = "型号规格不能为空") @ExcelProperty("型号规格") private String model; - + @ExcelProperty("辅助字段") + private String helpInstruction; + /** + * 出厂编号 + */ + @ExcelProperty("出厂编号") + private String manufactureNo; /** * 生产国家 */ @ExcelProperty("生产国家") private String productCountry; - /** * 生产厂家 */ @@ -52,53 +57,32 @@ @ExcelProperty("生产日期") private Date productDate; /** - * 出厂编号 + * 购进日期 */ - @ExcelProperty("出厂编号") - private String manufactureNo; - + @ExcelProperty(value = "购进日期",converter = DateExcelConverter.class) + private Date purchaseDate; + /** + * 单价(万元) + */ + @ExcelProperty("设备单价") + private BigDecimal unitPrice; /** * 使用状态(字典code) */ @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS,needValid = true,message = "使用状态不合法") @ExcelProperty(value = "使用状态") private String usageStatus; - - - /** - * 等级(字典code) - */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL,needValid = true,message = "重要等级不合法") - @ExcelProperty("重要等级") - private String level; - - /** - * 单价(万元) - */ - @ExcelProperty("设备单价") - private BigDecimal unitPrice; - - /** - * 购进日期 - */ - @ExcelProperty(value = "购进日期",converter = DateExcelConverter.class) - private Date purchaseDate; - - /** * 质量状况 */ @ExcelProperty("质量状况") private String qualityCondition; - /** * 所在单位id */ private Long companyId; - @ExcelProperty("所在单位") private String companyName; - /** * 使用部门id */ @@ -106,79 +90,95 @@ @ExcelProperty("使用部门") private String deptName; - - /** - * 使用岗位 - */ - @ExcelProperty(value = "使用岗位") - private String usePosition; - - /** - * 负责人 - */ - @ExcelProperty("负责人") - private String directorName; - /** * 设备分类(字典code) */ @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; - - /** * 检定周期(月) */ @ExcelProperty(value = "检定周期") private Integer checkCycle; - - + /** + * 等级(字典code) + */ + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL,needValid = true,message = "重要等级不合法") + @ExcelProperty("重要等级") + private String level; + /** + * 备注 + */ + @ExcelProperty(value = "备注",index = 16) + private String remark; /** * 检定机构 */ @ExcelProperty("检定(校准)机构") private String checkOrganization; - /** * 检定日期 */ @ExcelProperty(value = "检定(校准)日期", converter = DateExcelConverter.class) private Date checkDate; - /** * 证书有效期 */ @ExcelProperty(value = "证书有效期", converter = DateExcelConverter.class) private Date certificateValid; - /** * 计量标识 */ @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY, needValid = true, message = "计量标识不合法") @ExcelProperty(value = "计量标识") private String meterIdentify; - - /** - * 备注 + * 使用岗位 */ - @ExcelProperty(value = "备注") - private String remark; - - @ExcelProperty("测量范围") - private String measureRange; - + @ExcelProperty(value = "使用岗位") + private String usePosition; /** - * 不确定度或允许误差极限或准确度等级 + * 负责人 */ - @ExcelProperty("技术指标") - private String uncertainty; - + @ExcelProperty("负责人") + private String directorName; + @ExcelProperty("RFID标签绑定") + private String rfid; /** - * 依据的技术文件 + * 在用信息(字典code) */ - @ExcelProperty("依据的技术文件") - private String basedDocuments; + @ExcelProperty("在用信息") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") + private String useSign; + /** + * 安装位置(自定义编写) + */ + @ApiModelProperty("安装位置") + private String installLocationExt; + /** + * 备注(扩展) + */ + @ExcelProperty(value = "备注",index = 27) + private String remarkExt; + +// @ExcelProperty("测量范围") +// private String measureRange; +// +// /** +// * 不确定度或允许误差极限或准确度等级 +// */ +// @ExcelProperty("技术指标") +// private String uncertainty; +// +// /** +// * 依据的技术文件 +// */ +// @ExcelProperty("依据的技术文件") +// private String basedDocuments; + + @ExcelIgnore + private Long modelId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/resource/BizResourceCustomerSuggestForm.java b/casic-metering-model/src/main/java/com/casic/missiles/model/resource/BizResourceCustomerSuggestForm.java index 569c66d..ca90f77 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/resource/BizResourceCustomerSuggestForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/resource/BizResourceCustomerSuggestForm.java @@ -77,8 +77,8 @@ @TableField("form_no") private String formNo; - @NotEmpty(message = "实验室代码不能为空") - @DictCodeField(message = "实验室代码描述不合法", cacheName = MeterDictCode.LAB_CODE) +// @NotEmpty(message = "实验室代码不能为空") + @DictCodeField(message = "实验室代码描述不合法", cacheName = MeterDictCode.LAB_CODE,needValid = false) @ApiModelProperty(value = "实验室代码(字典code)", dataType = "String") @TableField("lab_code") private String labCode; diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 76e2a36..3b59797 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -17,4 +17,6 @@ @Select("SELECT IFNULL(max(RIGHT(equipment_no, 12)), 0) from eqpt_equipment_info_approval where equipment_type = #{equipmentType}") Long selectMaxNo(@Param("equipmentType")String equipmentType); + + Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); } diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index ede80f0..a9033f9 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -50,4 +50,32 @@ id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml index 9ffb414..b6e8f40 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml @@ -14,25 +14,29 @@ id, rfid, create_time - + select * from( + ${ew.sqlSegment} @@ -42,27 +46,13 @@ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java index 219fdab..c574ef7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java @@ -59,9 +59,6 @@ @PostMapping("/add") @ResponseBody public ReturnDTO draftUpdate(@RequestBody @Valid BizResourceCustomerSuggestForm request, BindingResult bindingResult) { - Assert.isFalse(Objects.isNull(request.getId()), () -> { - throw new BusinessException(BusinessExceptionEnum.ID_NULL); - }); if(bindingResult.hasErrors()){ throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 86b278f..7b3c7a2 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -30,6 +30,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + // 设备在用信息 + String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 String PLAN_CATEGORY = DICT_PREFIX + "PlanType"; // 计量计划执行情况 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 8a32e1f..84c4267 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ContentStyle; import com.alibaba.excel.enums.poi.BorderStyleEnum; @@ -27,20 +28,24 @@ @NotBlank(message = "设备名称不能为空") @ExcelProperty("设备名称") private String equipmentName; - /** * 型号规格 */ @NotBlank(message = "型号规格不能为空") @ExcelProperty("型号规格") private String model; - + @ExcelProperty("辅助字段") + private String helpInstruction; + /** + * 出厂编号 + */ + @ExcelProperty("出厂编号") + private String manufactureNo; /** * 生产国家 */ @ExcelProperty("生产国家") private String productCountry; - /** * 生产厂家 */ @@ -52,53 +57,32 @@ @ExcelProperty("生产日期") private Date productDate; /** - * 出厂编号 + * 购进日期 */ - @ExcelProperty("出厂编号") - private String manufactureNo; - + @ExcelProperty(value = "购进日期",converter = DateExcelConverter.class) + private Date purchaseDate; + /** + * 单价(万元) + */ + @ExcelProperty("设备单价") + private BigDecimal unitPrice; /** * 使用状态(字典code) */ @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS,needValid = true,message = "使用状态不合法") @ExcelProperty(value = "使用状态") private String usageStatus; - - - /** - * 等级(字典code) - */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL,needValid = true,message = "重要等级不合法") - @ExcelProperty("重要等级") - private String level; - - /** - * 单价(万元) - */ - @ExcelProperty("设备单价") - private BigDecimal unitPrice; - - /** - * 购进日期 - */ - @ExcelProperty(value = "购进日期",converter = DateExcelConverter.class) - private Date purchaseDate; - - /** * 质量状况 */ @ExcelProperty("质量状况") private String qualityCondition; - /** * 所在单位id */ private Long companyId; - @ExcelProperty("所在单位") private String companyName; - /** * 使用部门id */ @@ -106,79 +90,95 @@ @ExcelProperty("使用部门") private String deptName; - - /** - * 使用岗位 - */ - @ExcelProperty(value = "使用岗位") - private String usePosition; - - /** - * 负责人 - */ - @ExcelProperty("负责人") - private String directorName; - /** * 设备分类(字典code) */ @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; - - /** * 检定周期(月) */ @ExcelProperty(value = "检定周期") private Integer checkCycle; - - + /** + * 等级(字典code) + */ + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL,needValid = true,message = "重要等级不合法") + @ExcelProperty("重要等级") + private String level; + /** + * 备注 + */ + @ExcelProperty(value = "备注",index = 16) + private String remark; /** * 检定机构 */ @ExcelProperty("检定(校准)机构") private String checkOrganization; - /** * 检定日期 */ @ExcelProperty(value = "检定(校准)日期", converter = DateExcelConverter.class) private Date checkDate; - /** * 证书有效期 */ @ExcelProperty(value = "证书有效期", converter = DateExcelConverter.class) private Date certificateValid; - /** * 计量标识 */ @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY, needValid = true, message = "计量标识不合法") @ExcelProperty(value = "计量标识") private String meterIdentify; - - /** - * 备注 + * 使用岗位 */ - @ExcelProperty(value = "备注") - private String remark; - - @ExcelProperty("测量范围") - private String measureRange; - + @ExcelProperty(value = "使用岗位") + private String usePosition; /** - * 不确定度或允许误差极限或准确度等级 + * 负责人 */ - @ExcelProperty("技术指标") - private String uncertainty; - + @ExcelProperty("负责人") + private String directorName; + @ExcelProperty("RFID标签绑定") + private String rfid; /** - * 依据的技术文件 + * 在用信息(字典code) */ - @ExcelProperty("依据的技术文件") - private String basedDocuments; + @ExcelProperty("在用信息") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") + private String useSign; + /** + * 安装位置(自定义编写) + */ + @ApiModelProperty("安装位置") + private String installLocationExt; + /** + * 备注(扩展) + */ + @ExcelProperty(value = "备注",index = 27) + private String remarkExt; + +// @ExcelProperty("测量范围") +// private String measureRange; +// +// /** +// * 不确定度或允许误差极限或准确度等级 +// */ +// @ExcelProperty("技术指标") +// private String uncertainty; +// +// /** +// * 依据的技术文件 +// */ +// @ExcelProperty("依据的技术文件") +// private String basedDocuments; + + @ExcelIgnore + private Long modelId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/resource/BizResourceCustomerSuggestForm.java b/casic-metering-model/src/main/java/com/casic/missiles/model/resource/BizResourceCustomerSuggestForm.java index 569c66d..ca90f77 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/resource/BizResourceCustomerSuggestForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/resource/BizResourceCustomerSuggestForm.java @@ -77,8 +77,8 @@ @TableField("form_no") private String formNo; - @NotEmpty(message = "实验室代码不能为空") - @DictCodeField(message = "实验室代码描述不合法", cacheName = MeterDictCode.LAB_CODE) +// @NotEmpty(message = "实验室代码不能为空") + @DictCodeField(message = "实验室代码描述不合法", cacheName = MeterDictCode.LAB_CODE,needValid = false) @ApiModelProperty(value = "实验室代码(字典code)", dataType = "String") @TableField("lab_code") private String labCode; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java index bd07588..352c9db 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java @@ -87,6 +87,9 @@ if(haveUnfinishedApproval(approvalForm)){ throw new BusinessException(500,"设备存在未完成的审批,无法提交新的申请"); } + if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ + throw new BusinessException(500,"RFID标签已使用"); + } if(ObjectUtil.isEmpty(approvalForm.getCreateUserId())){ AuthUser authUser = permissionContext.getAuthService().getLoginUser(); approvalForm.setCreateUserId(authUser.getId()); @@ -101,7 +104,7 @@ .setIgnoreError(true); BeanUtil.copyProperties(equipmentInfo, approvalForm, options); approvalForm.setAttachments(attachmentService.selectByEquipment(approvalForm.getEquipmentId())); - approvalForm.setTechnicalTargetList(technicalTargetService.selectByEquipment(approvalForm.getEquipmentId())); + //approvalForm.setTechnicalTargetList(technicalTargetService.selectByEquipment(approvalForm.getEquipmentId())); } // 0. 生成设备id @@ -148,6 +151,9 @@ @Override public ReturnDTO submitApproval(ApprovalSubmitRequest submitRequest) { EquipmentInfoApproval approval = this.getById(submitRequest.getId()); + if(checkRfidRepeat(approval.getRfid(),approval.getEquipmentId())){ + throw new BusinessException(500,"RFID标签已使用"); + } String processId = approval.getProcessId(); if (StrUtil.isEmpty(processId)) { ReturnDTO submitRes = baseApprovalService.processSubmit(submitRequest.getFormId(), submitRequest.getId(),submitRequest.getReason()); @@ -163,6 +169,10 @@ return updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); } + private boolean checkRfidRepeat(String rfid, Long equipmentId){ + return StrUtil.isNotEmpty(rfid) && this.baseMapper.checkRfid(rfid, equipmentId) > 0; + } + private boolean haveUnfinishedApproval(EquipmentApprovalForm approvalForm){ if(ObjectUtil.isNotEmpty(approvalForm.getEquipmentId())){ QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -214,6 +224,8 @@ } + + @Override @Transactional public void finishApproval(Long approvalId) { diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 76e2a36..3b59797 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -17,4 +17,6 @@ @Select("SELECT IFNULL(max(RIGHT(equipment_no, 12)), 0) from eqpt_equipment_info_approval where equipment_type = #{equipmentType}") Long selectMaxNo(@Param("equipmentType")String equipmentType); + + Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); } diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index ede80f0..a9033f9 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -50,4 +50,32 @@ id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml index 9ffb414..b6e8f40 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml @@ -14,25 +14,29 @@ id, rfid, create_time - + select * from( + ${ew.sqlSegment} @@ -42,27 +46,13 @@ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java index 219fdab..c574ef7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java @@ -59,9 +59,6 @@ @PostMapping("/add") @ResponseBody public ReturnDTO draftUpdate(@RequestBody @Valid BizResourceCustomerSuggestForm request, BindingResult bindingResult) { - Assert.isFalse(Objects.isNull(request.getId()), () -> { - throw new BusinessException(BusinessExceptionEnum.ID_NULL); - }); if(bindingResult.hasErrors()){ throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 86b278f..7b3c7a2 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -30,6 +30,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + // 设备在用信息 + String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 String PLAN_CATEGORY = DICT_PREFIX + "PlanType"; // 计量计划执行情况 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 8a32e1f..84c4267 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ContentStyle; import com.alibaba.excel.enums.poi.BorderStyleEnum; @@ -27,20 +28,24 @@ @NotBlank(message = "设备名称不能为空") @ExcelProperty("设备名称") private String equipmentName; - /** * 型号规格 */ @NotBlank(message = "型号规格不能为空") @ExcelProperty("型号规格") private String model; - + @ExcelProperty("辅助字段") + private String helpInstruction; + /** + * 出厂编号 + */ + @ExcelProperty("出厂编号") + private String manufactureNo; /** * 生产国家 */ @ExcelProperty("生产国家") private String productCountry; - /** * 生产厂家 */ @@ -52,53 +57,32 @@ @ExcelProperty("生产日期") private Date productDate; /** - * 出厂编号 + * 购进日期 */ - @ExcelProperty("出厂编号") - private String manufactureNo; - + @ExcelProperty(value = "购进日期",converter = DateExcelConverter.class) + private Date purchaseDate; + /** + * 单价(万元) + */ + @ExcelProperty("设备单价") + private BigDecimal unitPrice; /** * 使用状态(字典code) */ @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS,needValid = true,message = "使用状态不合法") @ExcelProperty(value = "使用状态") private String usageStatus; - - - /** - * 等级(字典code) - */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL,needValid = true,message = "重要等级不合法") - @ExcelProperty("重要等级") - private String level; - - /** - * 单价(万元) - */ - @ExcelProperty("设备单价") - private BigDecimal unitPrice; - - /** - * 购进日期 - */ - @ExcelProperty(value = "购进日期",converter = DateExcelConverter.class) - private Date purchaseDate; - - /** * 质量状况 */ @ExcelProperty("质量状况") private String qualityCondition; - /** * 所在单位id */ private Long companyId; - @ExcelProperty("所在单位") private String companyName; - /** * 使用部门id */ @@ -106,79 +90,95 @@ @ExcelProperty("使用部门") private String deptName; - - /** - * 使用岗位 - */ - @ExcelProperty(value = "使用岗位") - private String usePosition; - - /** - * 负责人 - */ - @ExcelProperty("负责人") - private String directorName; - /** * 设备分类(字典code) */ @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; - - /** * 检定周期(月) */ @ExcelProperty(value = "检定周期") private Integer checkCycle; - - + /** + * 等级(字典code) + */ + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL,needValid = true,message = "重要等级不合法") + @ExcelProperty("重要等级") + private String level; + /** + * 备注 + */ + @ExcelProperty(value = "备注",index = 16) + private String remark; /** * 检定机构 */ @ExcelProperty("检定(校准)机构") private String checkOrganization; - /** * 检定日期 */ @ExcelProperty(value = "检定(校准)日期", converter = DateExcelConverter.class) private Date checkDate; - /** * 证书有效期 */ @ExcelProperty(value = "证书有效期", converter = DateExcelConverter.class) private Date certificateValid; - /** * 计量标识 */ @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY, needValid = true, message = "计量标识不合法") @ExcelProperty(value = "计量标识") private String meterIdentify; - - /** - * 备注 + * 使用岗位 */ - @ExcelProperty(value = "备注") - private String remark; - - @ExcelProperty("测量范围") - private String measureRange; - + @ExcelProperty(value = "使用岗位") + private String usePosition; /** - * 不确定度或允许误差极限或准确度等级 + * 负责人 */ - @ExcelProperty("技术指标") - private String uncertainty; - + @ExcelProperty("负责人") + private String directorName; + @ExcelProperty("RFID标签绑定") + private String rfid; /** - * 依据的技术文件 + * 在用信息(字典code) */ - @ExcelProperty("依据的技术文件") - private String basedDocuments; + @ExcelProperty("在用信息") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") + private String useSign; + /** + * 安装位置(自定义编写) + */ + @ApiModelProperty("安装位置") + private String installLocationExt; + /** + * 备注(扩展) + */ + @ExcelProperty(value = "备注",index = 27) + private String remarkExt; + +// @ExcelProperty("测量范围") +// private String measureRange; +// +// /** +// * 不确定度或允许误差极限或准确度等级 +// */ +// @ExcelProperty("技术指标") +// private String uncertainty; +// +// /** +// * 依据的技术文件 +// */ +// @ExcelProperty("依据的技术文件") +// private String basedDocuments; + + @ExcelIgnore + private Long modelId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/resource/BizResourceCustomerSuggestForm.java b/casic-metering-model/src/main/java/com/casic/missiles/model/resource/BizResourceCustomerSuggestForm.java index 569c66d..ca90f77 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/resource/BizResourceCustomerSuggestForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/resource/BizResourceCustomerSuggestForm.java @@ -77,8 +77,8 @@ @TableField("form_no") private String formNo; - @NotEmpty(message = "实验室代码不能为空") - @DictCodeField(message = "实验室代码描述不合法", cacheName = MeterDictCode.LAB_CODE) +// @NotEmpty(message = "实验室代码不能为空") + @DictCodeField(message = "实验室代码描述不合法", cacheName = MeterDictCode.LAB_CODE,needValid = false) @ApiModelProperty(value = "实验室代码(字典code)", dataType = "String") @TableField("lab_code") private String labCode; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java index bd07588..352c9db 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java @@ -87,6 +87,9 @@ if(haveUnfinishedApproval(approvalForm)){ throw new BusinessException(500,"设备存在未完成的审批,无法提交新的申请"); } + if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ + throw new BusinessException(500,"RFID标签已使用"); + } if(ObjectUtil.isEmpty(approvalForm.getCreateUserId())){ AuthUser authUser = permissionContext.getAuthService().getLoginUser(); approvalForm.setCreateUserId(authUser.getId()); @@ -101,7 +104,7 @@ .setIgnoreError(true); BeanUtil.copyProperties(equipmentInfo, approvalForm, options); approvalForm.setAttachments(attachmentService.selectByEquipment(approvalForm.getEquipmentId())); - approvalForm.setTechnicalTargetList(technicalTargetService.selectByEquipment(approvalForm.getEquipmentId())); + //approvalForm.setTechnicalTargetList(technicalTargetService.selectByEquipment(approvalForm.getEquipmentId())); } // 0. 生成设备id @@ -148,6 +151,9 @@ @Override public ReturnDTO submitApproval(ApprovalSubmitRequest submitRequest) { EquipmentInfoApproval approval = this.getById(submitRequest.getId()); + if(checkRfidRepeat(approval.getRfid(),approval.getEquipmentId())){ + throw new BusinessException(500,"RFID标签已使用"); + } String processId = approval.getProcessId(); if (StrUtil.isEmpty(processId)) { ReturnDTO submitRes = baseApprovalService.processSubmit(submitRequest.getFormId(), submitRequest.getId(),submitRequest.getReason()); @@ -163,6 +169,10 @@ return updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); } + private boolean checkRfidRepeat(String rfid, Long equipmentId){ + return StrUtil.isNotEmpty(rfid) && this.baseMapper.checkRfid(rfid, equipmentId) > 0; + } + private boolean haveUnfinishedApproval(EquipmentApprovalForm approvalForm){ if(ObjectUtil.isNotEmpty(approvalForm.getEquipmentId())){ QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -214,6 +224,8 @@ } + + @Override @Transactional public void finishApproval(Long approvalId) { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java index 6d710c0..2916f74 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java @@ -10,7 +10,10 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; @@ -28,9 +31,11 @@ import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.listeners.CommonExcelListener; +import com.casic.missiles.mapper.equipment.EquipmentInfoApprovalMapper; import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentInfoMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Dict; import com.casic.missiles.service.board.IBoardMessageService; import com.casic.missiles.service.equipment.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -49,6 +54,7 @@ import java.io.IOException; import java.io.InputStream; +import java.lang.reflect.Field; import java.util.*; import java.util.stream.Collectors; @@ -67,6 +73,7 @@ public class EquipmentInfoServiceImpl extends ServiceImpl implements IEquipmentInfoService { private final AbstractPermissionContext permissionContext; + private final AbstractDictService dictService; private final IEquipmentGroupInfoService groupInfoService; private final IEquipmentAttachmentService attachmentService; private final IEquipmentTechnicalTargetService technicalTargetService; @@ -77,9 +84,14 @@ private final IEquipmentTaskRelationService taskRelationService; private final IEquipmentTaskInfoService taskInfoService; private final IBoardMessageService boardMessageService; + + private final IEquipmentModelInfoService modelInfoService; + private final EquipmentInfoApprovalMapper infoApprovalMapper; + private ISubcontractCertificateService subcontractCertificateService; + @Autowired public void setSubcontractCertificateService(ISubcontractCertificateService subcontractCertificateService) { this.subcontractCertificateService = subcontractCertificateService; @@ -243,6 +255,15 @@ List deptList = permissionContext.getDeptService().list(null); Dept top = deptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + List modelInfoList = modelInfoService.list(); + + Map> dictTotalMap = new HashMap<>(); + dictTotalMap.put(MeterDictCode.EQUIPMENT_USAGE_STATUS,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS)); + dictTotalMap.put(MeterDictCode.EQUIPMENT_CATEGORY,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_CATEGORY)); + dictTotalMap.put(MeterDictCode.EQUIPMENT_LEVEL,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_LEVEL)); + dictTotalMap.put(MeterDictCode.EQUIPMENT_METER_IDENTITY,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_METER_IDENTITY)); + dictTotalMap.put(MeterDictCode.EQUIPMENT_IN_USE,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_IN_USE)); + Long companyId = null; List parentDeptIds = permissionContext.getDeptService().getParentListById(user.getDeptId()); if (CollUtil.isNotEmpty(parentDeptIds)) { @@ -258,12 +279,66 @@ String validMsg = "第%d行数据校验失败:%s"; for (int i = 0; i < list.size(); i++) { EquipmentImportDTO importDTO = list.get(i); + // 设备名称、规格型号、辅助字段 if (StrUtil.isBlank(importDTO.getEquipmentName())) { throw new BusinessException(1500, String.format(validMsg, i + 1, "设备名称不能为空")); } if (StrUtil.isBlank(importDTO.getModel())) { throw new BusinessException(1500, String.format(validMsg, i + 1, "型号规格不能为空")); } + List itemModels = modelInfoList.stream().filter(m->m.getEquipmentName().equals(importDTO.getEquipmentName()) + && m.getModel().equals(importDTO.getModel())).collect(Collectors.toList()); + if(CollUtil.isEmpty(itemModels)){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); + }else if(itemModels.size() == 1){ + if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "辅助字段不存在")); + } + importDTO.setModelId(itemModels.get(0).getId()); + importDTO.setCategory(itemModels.get(0).getCategory()); + importDTO.setCheckCycle(itemModels.get(0).getCheckCycle()); + + }else { + if (StrUtil.isBlank(importDTO.getHelpInstruction())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "需要填写辅助字段")); + } else { + Optional modelOpt = itemModels.stream().filter(mm -> mm.getHelpInstruction().equals(importDTO.getHelpInstruction())).findFirst(); + if (modelOpt.isPresent()) { + importDTO.setModelId(modelOpt.get().getId()); + importDTO.setCategory(modelOpt.get().getCategory()); + importDTO.setCheckCycle(modelOpt.get().getCheckCycle()); + } else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); + } + + } + } + // 字典值 + Field[] fields = importDTO.getClass().getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + try { + if (field.isAnnotationPresent(DictCodeField.class) && field.get(importDTO) != null) { + DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0]; + List subDicts = dictTotalMap.get(dictCodeField.cacheName()); + if(CollUtil.isEmpty(subDicts) || subDicts.stream().noneMatch(s-> { + try { + return s.getCode().equals(field.get(importDTO)); + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + return false; + })){ + throw new BusinessException(1500, String.format(validMsg, i + 1, dictCodeField.message())); + } + } + }catch (IllegalAccessException exception){ + log.error(exception.getMessage()); + } + } + if (StrUtil.isEmpty(importDTO.getCompanyName())) { importDTO.setCompanyId(companyId); @@ -290,6 +365,16 @@ if (ObjectUtil.isEmpty(importDTO.getDeptId())) { throw new BusinessException(1500, String.format(validMsg, i + 1, "使用部门不合法")); } + + // rfid + if(StrUtil.isNotBlank(importDTO.getRfid())){ + if(list.stream().filter(r->importDTO.getRfid().equals(r.getRfid())).count()>1){ + throw new BusinessException(5001,String.format(validMsg,i+1,"RFID标签编号重复")); + }else if(infoApprovalMapper.checkRfid(importDTO.getRfid(),null) > 0){ + throw new BusinessException(5001,String.format(validMsg,i+1,"RFID标签已使用")); + } + } + } } @@ -300,7 +385,7 @@ AuthUser user = permissionContext.getAuthService().getLoginUser(); List equipmentInfos = new ArrayList<>(); - List technicalTargets = new ArrayList<>(); + for (int i = 0; i < list.size(); i++) { EquipmentImportDTO importDTO = list.get(i); EquipmentInfo equipmentInfo = new EquipmentInfo(); @@ -316,24 +401,10 @@ equipmentInfos.add(equipmentInfo); - if (!StrUtil.isAllBlank(importDTO.getUncertainty(), importDTO.getBasedDocuments(), importDTO.getMeasureRange())) { - EquipmentTechnicalTarget technicalTarget = new EquipmentTechnicalTarget(); - technicalTarget.setEquipmentId(equipmentInfo.getId()); - technicalTarget.setUncertainty(importDTO.getUncertainty()); - technicalTarget.setBasedDocuments(importDTO.getBasedDocuments()); - technicalTarget.setMeasureRange(importDTO.getMeasureRange()); - technicalTarget.setCreateTime(new Date()); - technicalTarget.setUpdateTime(new Date()); - technicalTargets.add(technicalTarget); - } - } if (CollUtil.isNotEmpty(equipmentInfos)) { this.saveBatch(equipmentInfos); } - if (CollUtil.isNotEmpty(technicalTargets)) { - //technicalTargetService.saveBatch(technicalTargets); - } for (EquipmentInfo equipmentInfo : equipmentInfos) { turnoverLogService.saveLog(equipmentInfo, null, user.getId()); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 76e2a36..3b59797 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -17,4 +17,6 @@ @Select("SELECT IFNULL(max(RIGHT(equipment_no, 12)), 0) from eqpt_equipment_info_approval where equipment_type = #{equipmentType}") Long selectMaxNo(@Param("equipmentType")String equipmentType); + + Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); } diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index ede80f0..a9033f9 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -50,4 +50,32 @@ id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml index 9ffb414..b6e8f40 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml @@ -14,25 +14,29 @@ id, rfid, create_time - + select * from( + ${ew.sqlSegment} @@ -42,27 +46,13 @@ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java index 219fdab..c574ef7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java @@ -59,9 +59,6 @@ @PostMapping("/add") @ResponseBody public ReturnDTO draftUpdate(@RequestBody @Valid BizResourceCustomerSuggestForm request, BindingResult bindingResult) { - Assert.isFalse(Objects.isNull(request.getId()), () -> { - throw new BusinessException(BusinessExceptionEnum.ID_NULL); - }); if(bindingResult.hasErrors()){ throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 86b278f..7b3c7a2 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -30,6 +30,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + // 设备在用信息 + String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 String PLAN_CATEGORY = DICT_PREFIX + "PlanType"; // 计量计划执行情况 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 8a32e1f..84c4267 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ContentStyle; import com.alibaba.excel.enums.poi.BorderStyleEnum; @@ -27,20 +28,24 @@ @NotBlank(message = "设备名称不能为空") @ExcelProperty("设备名称") private String equipmentName; - /** * 型号规格 */ @NotBlank(message = "型号规格不能为空") @ExcelProperty("型号规格") private String model; - + @ExcelProperty("辅助字段") + private String helpInstruction; + /** + * 出厂编号 + */ + @ExcelProperty("出厂编号") + private String manufactureNo; /** * 生产国家 */ @ExcelProperty("生产国家") private String productCountry; - /** * 生产厂家 */ @@ -52,53 +57,32 @@ @ExcelProperty("生产日期") private Date productDate; /** - * 出厂编号 + * 购进日期 */ - @ExcelProperty("出厂编号") - private String manufactureNo; - + @ExcelProperty(value = "购进日期",converter = DateExcelConverter.class) + private Date purchaseDate; + /** + * 单价(万元) + */ + @ExcelProperty("设备单价") + private BigDecimal unitPrice; /** * 使用状态(字典code) */ @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS,needValid = true,message = "使用状态不合法") @ExcelProperty(value = "使用状态") private String usageStatus; - - - /** - * 等级(字典code) - */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL,needValid = true,message = "重要等级不合法") - @ExcelProperty("重要等级") - private String level; - - /** - * 单价(万元) - */ - @ExcelProperty("设备单价") - private BigDecimal unitPrice; - - /** - * 购进日期 - */ - @ExcelProperty(value = "购进日期",converter = DateExcelConverter.class) - private Date purchaseDate; - - /** * 质量状况 */ @ExcelProperty("质量状况") private String qualityCondition; - /** * 所在单位id */ private Long companyId; - @ExcelProperty("所在单位") private String companyName; - /** * 使用部门id */ @@ -106,79 +90,95 @@ @ExcelProperty("使用部门") private String deptName; - - /** - * 使用岗位 - */ - @ExcelProperty(value = "使用岗位") - private String usePosition; - - /** - * 负责人 - */ - @ExcelProperty("负责人") - private String directorName; - /** * 设备分类(字典code) */ @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; - - /** * 检定周期(月) */ @ExcelProperty(value = "检定周期") private Integer checkCycle; - - + /** + * 等级(字典code) + */ + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL,needValid = true,message = "重要等级不合法") + @ExcelProperty("重要等级") + private String level; + /** + * 备注 + */ + @ExcelProperty(value = "备注",index = 16) + private String remark; /** * 检定机构 */ @ExcelProperty("检定(校准)机构") private String checkOrganization; - /** * 检定日期 */ @ExcelProperty(value = "检定(校准)日期", converter = DateExcelConverter.class) private Date checkDate; - /** * 证书有效期 */ @ExcelProperty(value = "证书有效期", converter = DateExcelConverter.class) private Date certificateValid; - /** * 计量标识 */ @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY, needValid = true, message = "计量标识不合法") @ExcelProperty(value = "计量标识") private String meterIdentify; - - /** - * 备注 + * 使用岗位 */ - @ExcelProperty(value = "备注") - private String remark; - - @ExcelProperty("测量范围") - private String measureRange; - + @ExcelProperty(value = "使用岗位") + private String usePosition; /** - * 不确定度或允许误差极限或准确度等级 + * 负责人 */ - @ExcelProperty("技术指标") - private String uncertainty; - + @ExcelProperty("负责人") + private String directorName; + @ExcelProperty("RFID标签绑定") + private String rfid; /** - * 依据的技术文件 + * 在用信息(字典code) */ - @ExcelProperty("依据的技术文件") - private String basedDocuments; + @ExcelProperty("在用信息") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") + private String useSign; + /** + * 安装位置(自定义编写) + */ + @ApiModelProperty("安装位置") + private String installLocationExt; + /** + * 备注(扩展) + */ + @ExcelProperty(value = "备注",index = 27) + private String remarkExt; + +// @ExcelProperty("测量范围") +// private String measureRange; +// +// /** +// * 不确定度或允许误差极限或准确度等级 +// */ +// @ExcelProperty("技术指标") +// private String uncertainty; +// +// /** +// * 依据的技术文件 +// */ +// @ExcelProperty("依据的技术文件") +// private String basedDocuments; + + @ExcelIgnore + private Long modelId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/resource/BizResourceCustomerSuggestForm.java b/casic-metering-model/src/main/java/com/casic/missiles/model/resource/BizResourceCustomerSuggestForm.java index 569c66d..ca90f77 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/resource/BizResourceCustomerSuggestForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/resource/BizResourceCustomerSuggestForm.java @@ -77,8 +77,8 @@ @TableField("form_no") private String formNo; - @NotEmpty(message = "实验室代码不能为空") - @DictCodeField(message = "实验室代码描述不合法", cacheName = MeterDictCode.LAB_CODE) +// @NotEmpty(message = "实验室代码不能为空") + @DictCodeField(message = "实验室代码描述不合法", cacheName = MeterDictCode.LAB_CODE,needValid = false) @ApiModelProperty(value = "实验室代码(字典code)", dataType = "String") @TableField("lab_code") private String labCode; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java index bd07588..352c9db 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java @@ -87,6 +87,9 @@ if(haveUnfinishedApproval(approvalForm)){ throw new BusinessException(500,"设备存在未完成的审批,无法提交新的申请"); } + if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ + throw new BusinessException(500,"RFID标签已使用"); + } if(ObjectUtil.isEmpty(approvalForm.getCreateUserId())){ AuthUser authUser = permissionContext.getAuthService().getLoginUser(); approvalForm.setCreateUserId(authUser.getId()); @@ -101,7 +104,7 @@ .setIgnoreError(true); BeanUtil.copyProperties(equipmentInfo, approvalForm, options); approvalForm.setAttachments(attachmentService.selectByEquipment(approvalForm.getEquipmentId())); - approvalForm.setTechnicalTargetList(technicalTargetService.selectByEquipment(approvalForm.getEquipmentId())); + //approvalForm.setTechnicalTargetList(technicalTargetService.selectByEquipment(approvalForm.getEquipmentId())); } // 0. 生成设备id @@ -148,6 +151,9 @@ @Override public ReturnDTO submitApproval(ApprovalSubmitRequest submitRequest) { EquipmentInfoApproval approval = this.getById(submitRequest.getId()); + if(checkRfidRepeat(approval.getRfid(),approval.getEquipmentId())){ + throw new BusinessException(500,"RFID标签已使用"); + } String processId = approval.getProcessId(); if (StrUtil.isEmpty(processId)) { ReturnDTO submitRes = baseApprovalService.processSubmit(submitRequest.getFormId(), submitRequest.getId(),submitRequest.getReason()); @@ -163,6 +169,10 @@ return updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); } + private boolean checkRfidRepeat(String rfid, Long equipmentId){ + return StrUtil.isNotEmpty(rfid) && this.baseMapper.checkRfid(rfid, equipmentId) > 0; + } + private boolean haveUnfinishedApproval(EquipmentApprovalForm approvalForm){ if(ObjectUtil.isNotEmpty(approvalForm.getEquipmentId())){ QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -214,6 +224,8 @@ } + + @Override @Transactional public void finishApproval(Long approvalId) { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java index 6d710c0..2916f74 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java @@ -10,7 +10,10 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; @@ -28,9 +31,11 @@ import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.listeners.CommonExcelListener; +import com.casic.missiles.mapper.equipment.EquipmentInfoApprovalMapper; import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentInfoMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Dict; import com.casic.missiles.service.board.IBoardMessageService; import com.casic.missiles.service.equipment.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -49,6 +54,7 @@ import java.io.IOException; import java.io.InputStream; +import java.lang.reflect.Field; import java.util.*; import java.util.stream.Collectors; @@ -67,6 +73,7 @@ public class EquipmentInfoServiceImpl extends ServiceImpl implements IEquipmentInfoService { private final AbstractPermissionContext permissionContext; + private final AbstractDictService dictService; private final IEquipmentGroupInfoService groupInfoService; private final IEquipmentAttachmentService attachmentService; private final IEquipmentTechnicalTargetService technicalTargetService; @@ -77,9 +84,14 @@ private final IEquipmentTaskRelationService taskRelationService; private final IEquipmentTaskInfoService taskInfoService; private final IBoardMessageService boardMessageService; + + private final IEquipmentModelInfoService modelInfoService; + private final EquipmentInfoApprovalMapper infoApprovalMapper; + private ISubcontractCertificateService subcontractCertificateService; + @Autowired public void setSubcontractCertificateService(ISubcontractCertificateService subcontractCertificateService) { this.subcontractCertificateService = subcontractCertificateService; @@ -243,6 +255,15 @@ List deptList = permissionContext.getDeptService().list(null); Dept top = deptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + List modelInfoList = modelInfoService.list(); + + Map> dictTotalMap = new HashMap<>(); + dictTotalMap.put(MeterDictCode.EQUIPMENT_USAGE_STATUS,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS)); + dictTotalMap.put(MeterDictCode.EQUIPMENT_CATEGORY,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_CATEGORY)); + dictTotalMap.put(MeterDictCode.EQUIPMENT_LEVEL,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_LEVEL)); + dictTotalMap.put(MeterDictCode.EQUIPMENT_METER_IDENTITY,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_METER_IDENTITY)); + dictTotalMap.put(MeterDictCode.EQUIPMENT_IN_USE,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_IN_USE)); + Long companyId = null; List parentDeptIds = permissionContext.getDeptService().getParentListById(user.getDeptId()); if (CollUtil.isNotEmpty(parentDeptIds)) { @@ -258,12 +279,66 @@ String validMsg = "第%d行数据校验失败:%s"; for (int i = 0; i < list.size(); i++) { EquipmentImportDTO importDTO = list.get(i); + // 设备名称、规格型号、辅助字段 if (StrUtil.isBlank(importDTO.getEquipmentName())) { throw new BusinessException(1500, String.format(validMsg, i + 1, "设备名称不能为空")); } if (StrUtil.isBlank(importDTO.getModel())) { throw new BusinessException(1500, String.format(validMsg, i + 1, "型号规格不能为空")); } + List itemModels = modelInfoList.stream().filter(m->m.getEquipmentName().equals(importDTO.getEquipmentName()) + && m.getModel().equals(importDTO.getModel())).collect(Collectors.toList()); + if(CollUtil.isEmpty(itemModels)){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); + }else if(itemModels.size() == 1){ + if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "辅助字段不存在")); + } + importDTO.setModelId(itemModels.get(0).getId()); + importDTO.setCategory(itemModels.get(0).getCategory()); + importDTO.setCheckCycle(itemModels.get(0).getCheckCycle()); + + }else { + if (StrUtil.isBlank(importDTO.getHelpInstruction())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "需要填写辅助字段")); + } else { + Optional modelOpt = itemModels.stream().filter(mm -> mm.getHelpInstruction().equals(importDTO.getHelpInstruction())).findFirst(); + if (modelOpt.isPresent()) { + importDTO.setModelId(modelOpt.get().getId()); + importDTO.setCategory(modelOpt.get().getCategory()); + importDTO.setCheckCycle(modelOpt.get().getCheckCycle()); + } else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); + } + + } + } + // 字典值 + Field[] fields = importDTO.getClass().getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + try { + if (field.isAnnotationPresent(DictCodeField.class) && field.get(importDTO) != null) { + DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0]; + List subDicts = dictTotalMap.get(dictCodeField.cacheName()); + if(CollUtil.isEmpty(subDicts) || subDicts.stream().noneMatch(s-> { + try { + return s.getCode().equals(field.get(importDTO)); + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + return false; + })){ + throw new BusinessException(1500, String.format(validMsg, i + 1, dictCodeField.message())); + } + } + }catch (IllegalAccessException exception){ + log.error(exception.getMessage()); + } + } + if (StrUtil.isEmpty(importDTO.getCompanyName())) { importDTO.setCompanyId(companyId); @@ -290,6 +365,16 @@ if (ObjectUtil.isEmpty(importDTO.getDeptId())) { throw new BusinessException(1500, String.format(validMsg, i + 1, "使用部门不合法")); } + + // rfid + if(StrUtil.isNotBlank(importDTO.getRfid())){ + if(list.stream().filter(r->importDTO.getRfid().equals(r.getRfid())).count()>1){ + throw new BusinessException(5001,String.format(validMsg,i+1,"RFID标签编号重复")); + }else if(infoApprovalMapper.checkRfid(importDTO.getRfid(),null) > 0){ + throw new BusinessException(5001,String.format(validMsg,i+1,"RFID标签已使用")); + } + } + } } @@ -300,7 +385,7 @@ AuthUser user = permissionContext.getAuthService().getLoginUser(); List equipmentInfos = new ArrayList<>(); - List technicalTargets = new ArrayList<>(); + for (int i = 0; i < list.size(); i++) { EquipmentImportDTO importDTO = list.get(i); EquipmentInfo equipmentInfo = new EquipmentInfo(); @@ -316,24 +401,10 @@ equipmentInfos.add(equipmentInfo); - if (!StrUtil.isAllBlank(importDTO.getUncertainty(), importDTO.getBasedDocuments(), importDTO.getMeasureRange())) { - EquipmentTechnicalTarget technicalTarget = new EquipmentTechnicalTarget(); - technicalTarget.setEquipmentId(equipmentInfo.getId()); - technicalTarget.setUncertainty(importDTO.getUncertainty()); - technicalTarget.setBasedDocuments(importDTO.getBasedDocuments()); - technicalTarget.setMeasureRange(importDTO.getMeasureRange()); - technicalTarget.setCreateTime(new Date()); - technicalTarget.setUpdateTime(new Date()); - technicalTargets.add(technicalTarget); - } - } if (CollUtil.isNotEmpty(equipmentInfos)) { this.saveBatch(equipmentInfos); } - if (CollUtil.isNotEmpty(technicalTargets)) { - //technicalTargetService.saveBatch(technicalTargets); - } for (EquipmentInfo equipmentInfo : equipmentInfos) { turnoverLogService.saveLog(equipmentInfo, null, user.getId()); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java index 1c9d830..9c5ce09 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java @@ -25,6 +25,7 @@ import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.RequiredArgsConstructor; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -44,7 +45,7 @@ * @since 2023-09-15 */ @Service -@RequiredArgsConstructor +@RequiredArgsConstructor(onConstructor_ = {@Lazy}) public class EquipmentModelInfoServiceImpl extends ServiceImpl implements IEquipmentModelInfoService { private final IEquipmentModelTechnicalTargetService technicalTargetService; diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 76e2a36..3b59797 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -17,4 +17,6 @@ @Select("SELECT IFNULL(max(RIGHT(equipment_no, 12)), 0) from eqpt_equipment_info_approval where equipment_type = #{equipmentType}") Long selectMaxNo(@Param("equipmentType")String equipmentType); + + Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); } diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index ede80f0..a9033f9 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -50,4 +50,32 @@ id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml index 9ffb414..b6e8f40 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml @@ -14,25 +14,29 @@ id, rfid, create_time - + select * from( + ${ew.sqlSegment} @@ -42,27 +46,13 @@ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java index 219fdab..c574ef7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java @@ -59,9 +59,6 @@ @PostMapping("/add") @ResponseBody public ReturnDTO draftUpdate(@RequestBody @Valid BizResourceCustomerSuggestForm request, BindingResult bindingResult) { - Assert.isFalse(Objects.isNull(request.getId()), () -> { - throw new BusinessException(BusinessExceptionEnum.ID_NULL); - }); if(bindingResult.hasErrors()){ throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 86b278f..7b3c7a2 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -30,6 +30,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + // 设备在用信息 + String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 String PLAN_CATEGORY = DICT_PREFIX + "PlanType"; // 计量计划执行情况 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 8a32e1f..84c4267 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ContentStyle; import com.alibaba.excel.enums.poi.BorderStyleEnum; @@ -27,20 +28,24 @@ @NotBlank(message = "设备名称不能为空") @ExcelProperty("设备名称") private String equipmentName; - /** * 型号规格 */ @NotBlank(message = "型号规格不能为空") @ExcelProperty("型号规格") private String model; - + @ExcelProperty("辅助字段") + private String helpInstruction; + /** + * 出厂编号 + */ + @ExcelProperty("出厂编号") + private String manufactureNo; /** * 生产国家 */ @ExcelProperty("生产国家") private String productCountry; - /** * 生产厂家 */ @@ -52,53 +57,32 @@ @ExcelProperty("生产日期") private Date productDate; /** - * 出厂编号 + * 购进日期 */ - @ExcelProperty("出厂编号") - private String manufactureNo; - + @ExcelProperty(value = "购进日期",converter = DateExcelConverter.class) + private Date purchaseDate; + /** + * 单价(万元) + */ + @ExcelProperty("设备单价") + private BigDecimal unitPrice; /** * 使用状态(字典code) */ @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS,needValid = true,message = "使用状态不合法") @ExcelProperty(value = "使用状态") private String usageStatus; - - - /** - * 等级(字典code) - */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL,needValid = true,message = "重要等级不合法") - @ExcelProperty("重要等级") - private String level; - - /** - * 单价(万元) - */ - @ExcelProperty("设备单价") - private BigDecimal unitPrice; - - /** - * 购进日期 - */ - @ExcelProperty(value = "购进日期",converter = DateExcelConverter.class) - private Date purchaseDate; - - /** * 质量状况 */ @ExcelProperty("质量状况") private String qualityCondition; - /** * 所在单位id */ private Long companyId; - @ExcelProperty("所在单位") private String companyName; - /** * 使用部门id */ @@ -106,79 +90,95 @@ @ExcelProperty("使用部门") private String deptName; - - /** - * 使用岗位 - */ - @ExcelProperty(value = "使用岗位") - private String usePosition; - - /** - * 负责人 - */ - @ExcelProperty("负责人") - private String directorName; - /** * 设备分类(字典code) */ @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; - - /** * 检定周期(月) */ @ExcelProperty(value = "检定周期") private Integer checkCycle; - - + /** + * 等级(字典code) + */ + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL,needValid = true,message = "重要等级不合法") + @ExcelProperty("重要等级") + private String level; + /** + * 备注 + */ + @ExcelProperty(value = "备注",index = 16) + private String remark; /** * 检定机构 */ @ExcelProperty("检定(校准)机构") private String checkOrganization; - /** * 检定日期 */ @ExcelProperty(value = "检定(校准)日期", converter = DateExcelConverter.class) private Date checkDate; - /** * 证书有效期 */ @ExcelProperty(value = "证书有效期", converter = DateExcelConverter.class) private Date certificateValid; - /** * 计量标识 */ @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY, needValid = true, message = "计量标识不合法") @ExcelProperty(value = "计量标识") private String meterIdentify; - - /** - * 备注 + * 使用岗位 */ - @ExcelProperty(value = "备注") - private String remark; - - @ExcelProperty("测量范围") - private String measureRange; - + @ExcelProperty(value = "使用岗位") + private String usePosition; /** - * 不确定度或允许误差极限或准确度等级 + * 负责人 */ - @ExcelProperty("技术指标") - private String uncertainty; - + @ExcelProperty("负责人") + private String directorName; + @ExcelProperty("RFID标签绑定") + private String rfid; /** - * 依据的技术文件 + * 在用信息(字典code) */ - @ExcelProperty("依据的技术文件") - private String basedDocuments; + @ExcelProperty("在用信息") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") + private String useSign; + /** + * 安装位置(自定义编写) + */ + @ApiModelProperty("安装位置") + private String installLocationExt; + /** + * 备注(扩展) + */ + @ExcelProperty(value = "备注",index = 27) + private String remarkExt; + +// @ExcelProperty("测量范围") +// private String measureRange; +// +// /** +// * 不确定度或允许误差极限或准确度等级 +// */ +// @ExcelProperty("技术指标") +// private String uncertainty; +// +// /** +// * 依据的技术文件 +// */ +// @ExcelProperty("依据的技术文件") +// private String basedDocuments; + + @ExcelIgnore + private Long modelId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/resource/BizResourceCustomerSuggestForm.java b/casic-metering-model/src/main/java/com/casic/missiles/model/resource/BizResourceCustomerSuggestForm.java index 569c66d..ca90f77 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/resource/BizResourceCustomerSuggestForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/resource/BizResourceCustomerSuggestForm.java @@ -77,8 +77,8 @@ @TableField("form_no") private String formNo; - @NotEmpty(message = "实验室代码不能为空") - @DictCodeField(message = "实验室代码描述不合法", cacheName = MeterDictCode.LAB_CODE) +// @NotEmpty(message = "实验室代码不能为空") + @DictCodeField(message = "实验室代码描述不合法", cacheName = MeterDictCode.LAB_CODE,needValid = false) @ApiModelProperty(value = "实验室代码(字典code)", dataType = "String") @TableField("lab_code") private String labCode; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java index bd07588..352c9db 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java @@ -87,6 +87,9 @@ if(haveUnfinishedApproval(approvalForm)){ throw new BusinessException(500,"设备存在未完成的审批,无法提交新的申请"); } + if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ + throw new BusinessException(500,"RFID标签已使用"); + } if(ObjectUtil.isEmpty(approvalForm.getCreateUserId())){ AuthUser authUser = permissionContext.getAuthService().getLoginUser(); approvalForm.setCreateUserId(authUser.getId()); @@ -101,7 +104,7 @@ .setIgnoreError(true); BeanUtil.copyProperties(equipmentInfo, approvalForm, options); approvalForm.setAttachments(attachmentService.selectByEquipment(approvalForm.getEquipmentId())); - approvalForm.setTechnicalTargetList(technicalTargetService.selectByEquipment(approvalForm.getEquipmentId())); + //approvalForm.setTechnicalTargetList(technicalTargetService.selectByEquipment(approvalForm.getEquipmentId())); } // 0. 生成设备id @@ -148,6 +151,9 @@ @Override public ReturnDTO submitApproval(ApprovalSubmitRequest submitRequest) { EquipmentInfoApproval approval = this.getById(submitRequest.getId()); + if(checkRfidRepeat(approval.getRfid(),approval.getEquipmentId())){ + throw new BusinessException(500,"RFID标签已使用"); + } String processId = approval.getProcessId(); if (StrUtil.isEmpty(processId)) { ReturnDTO submitRes = baseApprovalService.processSubmit(submitRequest.getFormId(), submitRequest.getId(),submitRequest.getReason()); @@ -163,6 +169,10 @@ return updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); } + private boolean checkRfidRepeat(String rfid, Long equipmentId){ + return StrUtil.isNotEmpty(rfid) && this.baseMapper.checkRfid(rfid, equipmentId) > 0; + } + private boolean haveUnfinishedApproval(EquipmentApprovalForm approvalForm){ if(ObjectUtil.isNotEmpty(approvalForm.getEquipmentId())){ QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -214,6 +224,8 @@ } + + @Override @Transactional public void finishApproval(Long approvalId) { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java index 6d710c0..2916f74 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java @@ -10,7 +10,10 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; @@ -28,9 +31,11 @@ import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.listeners.CommonExcelListener; +import com.casic.missiles.mapper.equipment.EquipmentInfoApprovalMapper; import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentInfoMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Dict; import com.casic.missiles.service.board.IBoardMessageService; import com.casic.missiles.service.equipment.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -49,6 +54,7 @@ import java.io.IOException; import java.io.InputStream; +import java.lang.reflect.Field; import java.util.*; import java.util.stream.Collectors; @@ -67,6 +73,7 @@ public class EquipmentInfoServiceImpl extends ServiceImpl implements IEquipmentInfoService { private final AbstractPermissionContext permissionContext; + private final AbstractDictService dictService; private final IEquipmentGroupInfoService groupInfoService; private final IEquipmentAttachmentService attachmentService; private final IEquipmentTechnicalTargetService technicalTargetService; @@ -77,9 +84,14 @@ private final IEquipmentTaskRelationService taskRelationService; private final IEquipmentTaskInfoService taskInfoService; private final IBoardMessageService boardMessageService; + + private final IEquipmentModelInfoService modelInfoService; + private final EquipmentInfoApprovalMapper infoApprovalMapper; + private ISubcontractCertificateService subcontractCertificateService; + @Autowired public void setSubcontractCertificateService(ISubcontractCertificateService subcontractCertificateService) { this.subcontractCertificateService = subcontractCertificateService; @@ -243,6 +255,15 @@ List deptList = permissionContext.getDeptService().list(null); Dept top = deptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + List modelInfoList = modelInfoService.list(); + + Map> dictTotalMap = new HashMap<>(); + dictTotalMap.put(MeterDictCode.EQUIPMENT_USAGE_STATUS,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS)); + dictTotalMap.put(MeterDictCode.EQUIPMENT_CATEGORY,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_CATEGORY)); + dictTotalMap.put(MeterDictCode.EQUIPMENT_LEVEL,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_LEVEL)); + dictTotalMap.put(MeterDictCode.EQUIPMENT_METER_IDENTITY,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_METER_IDENTITY)); + dictTotalMap.put(MeterDictCode.EQUIPMENT_IN_USE,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_IN_USE)); + Long companyId = null; List parentDeptIds = permissionContext.getDeptService().getParentListById(user.getDeptId()); if (CollUtil.isNotEmpty(parentDeptIds)) { @@ -258,12 +279,66 @@ String validMsg = "第%d行数据校验失败:%s"; for (int i = 0; i < list.size(); i++) { EquipmentImportDTO importDTO = list.get(i); + // 设备名称、规格型号、辅助字段 if (StrUtil.isBlank(importDTO.getEquipmentName())) { throw new BusinessException(1500, String.format(validMsg, i + 1, "设备名称不能为空")); } if (StrUtil.isBlank(importDTO.getModel())) { throw new BusinessException(1500, String.format(validMsg, i + 1, "型号规格不能为空")); } + List itemModels = modelInfoList.stream().filter(m->m.getEquipmentName().equals(importDTO.getEquipmentName()) + && m.getModel().equals(importDTO.getModel())).collect(Collectors.toList()); + if(CollUtil.isEmpty(itemModels)){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); + }else if(itemModels.size() == 1){ + if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "辅助字段不存在")); + } + importDTO.setModelId(itemModels.get(0).getId()); + importDTO.setCategory(itemModels.get(0).getCategory()); + importDTO.setCheckCycle(itemModels.get(0).getCheckCycle()); + + }else { + if (StrUtil.isBlank(importDTO.getHelpInstruction())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "需要填写辅助字段")); + } else { + Optional modelOpt = itemModels.stream().filter(mm -> mm.getHelpInstruction().equals(importDTO.getHelpInstruction())).findFirst(); + if (modelOpt.isPresent()) { + importDTO.setModelId(modelOpt.get().getId()); + importDTO.setCategory(modelOpt.get().getCategory()); + importDTO.setCheckCycle(modelOpt.get().getCheckCycle()); + } else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); + } + + } + } + // 字典值 + Field[] fields = importDTO.getClass().getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + try { + if (field.isAnnotationPresent(DictCodeField.class) && field.get(importDTO) != null) { + DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0]; + List subDicts = dictTotalMap.get(dictCodeField.cacheName()); + if(CollUtil.isEmpty(subDicts) || subDicts.stream().noneMatch(s-> { + try { + return s.getCode().equals(field.get(importDTO)); + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + return false; + })){ + throw new BusinessException(1500, String.format(validMsg, i + 1, dictCodeField.message())); + } + } + }catch (IllegalAccessException exception){ + log.error(exception.getMessage()); + } + } + if (StrUtil.isEmpty(importDTO.getCompanyName())) { importDTO.setCompanyId(companyId); @@ -290,6 +365,16 @@ if (ObjectUtil.isEmpty(importDTO.getDeptId())) { throw new BusinessException(1500, String.format(validMsg, i + 1, "使用部门不合法")); } + + // rfid + if(StrUtil.isNotBlank(importDTO.getRfid())){ + if(list.stream().filter(r->importDTO.getRfid().equals(r.getRfid())).count()>1){ + throw new BusinessException(5001,String.format(validMsg,i+1,"RFID标签编号重复")); + }else if(infoApprovalMapper.checkRfid(importDTO.getRfid(),null) > 0){ + throw new BusinessException(5001,String.format(validMsg,i+1,"RFID标签已使用")); + } + } + } } @@ -300,7 +385,7 @@ AuthUser user = permissionContext.getAuthService().getLoginUser(); List equipmentInfos = new ArrayList<>(); - List technicalTargets = new ArrayList<>(); + for (int i = 0; i < list.size(); i++) { EquipmentImportDTO importDTO = list.get(i); EquipmentInfo equipmentInfo = new EquipmentInfo(); @@ -316,24 +401,10 @@ equipmentInfos.add(equipmentInfo); - if (!StrUtil.isAllBlank(importDTO.getUncertainty(), importDTO.getBasedDocuments(), importDTO.getMeasureRange())) { - EquipmentTechnicalTarget technicalTarget = new EquipmentTechnicalTarget(); - technicalTarget.setEquipmentId(equipmentInfo.getId()); - technicalTarget.setUncertainty(importDTO.getUncertainty()); - technicalTarget.setBasedDocuments(importDTO.getBasedDocuments()); - technicalTarget.setMeasureRange(importDTO.getMeasureRange()); - technicalTarget.setCreateTime(new Date()); - technicalTarget.setUpdateTime(new Date()); - technicalTargets.add(technicalTarget); - } - } if (CollUtil.isNotEmpty(equipmentInfos)) { this.saveBatch(equipmentInfos); } - if (CollUtil.isNotEmpty(technicalTargets)) { - //technicalTargetService.saveBatch(technicalTargets); - } for (EquipmentInfo equipmentInfo : equipmentInfos) { turnoverLogService.saveLog(equipmentInfo, null, user.getId()); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java index 1c9d830..9c5ce09 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java @@ -25,6 +25,7 @@ import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.RequiredArgsConstructor; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -44,7 +45,7 @@ * @since 2023-09-15 */ @Service -@RequiredArgsConstructor +@RequiredArgsConstructor(onConstructor_ = {@Lazy}) public class EquipmentModelInfoServiceImpl extends ServiceImpl implements IEquipmentModelInfoService { private final IEquipmentModelTechnicalTargetService technicalTargetService; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentTaskRelationServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentTaskRelationServiceImpl.java index 8e23292..05fd912 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentTaskRelationServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentTaskRelationServiceImpl.java @@ -1,5 +1,6 @@ package com.casic.missiles.service.impl.equipment; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentTaskInfo; @@ -26,11 +27,13 @@ @Override public void saveByEquipment(Long equipmentId, List taskInfoList) { this.removeByEquipment(equipmentId); - List relationList = new ArrayList<>(); - for (EquipmentTaskInfo equipmentTaskInfo : taskInfoList) { - relationList.add(new EquipmentTaskRelation(equipmentId,equipmentTaskInfo.getId())); + if(ObjectUtil.isNotEmpty(taskInfoList)){ + List relationList = new ArrayList<>(); + for (EquipmentTaskInfo equipmentTaskInfo : taskInfoList) { + relationList.add(new EquipmentTaskRelation(equipmentId,equipmentTaskInfo.getId())); + } + this.saveBatch(relationList); } - this.saveBatch(relationList); } @Override diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java index 76e2a36..3b59797 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/equipment/EquipmentInfoApprovalMapper.java @@ -17,4 +17,6 @@ @Select("SELECT IFNULL(max(RIGHT(equipment_no, 12)), 0) from eqpt_equipment_info_approval where equipment_type = #{equipmentType}") Long selectMaxNo(@Param("equipmentType")String equipmentType); + + Integer checkRfid(@Param("rfid")String rfid,@Param("equipmentId")Long equipmentId); } diff --git a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml index ede80f0..a9033f9 100644 --- a/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/equipment/EquipmentInfoApprovalMapper.xml @@ -50,4 +50,32 @@ id, approval_type, process_id, approval_status, equipment_id, equipment_no, equipment_name, usage_status, level, product_country, manufacturer, manufacture_no, product_date, unit_price, purchase_date, model, quality_condition, company_id, dept_id, category, check_cycle, remark, instructions_file, check_organization, check_date, certificate_valid, meter_identify, use_position, director_name, RFID, use_sign, install_location, install_location_ext, test_task, remark_ext, create_user_id, create_user_name, create_time, update_time + + diff --git a/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml b/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml index 9ffb414..b6e8f40 100644 --- a/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/system/SystemRfidMapper.xml @@ -14,25 +14,29 @@ id, rfid, create_time - + select * from( + ${ew.sqlSegment} @@ -42,27 +46,13 @@ diff --git a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java index 219fdab..c574ef7 100644 --- a/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java +++ b/casic-metering-eqpt-api/src/main/java/com/casic/missiles/controller/resource/BizResourceCustomerSuggestFormController.java @@ -59,9 +59,6 @@ @PostMapping("/add") @ResponseBody public ReturnDTO draftUpdate(@RequestBody @Valid BizResourceCustomerSuggestForm request, BindingResult bindingResult) { - Assert.isFalse(Objects.isNull(request.getId()), () -> { - throw new BusinessException(BusinessExceptionEnum.ID_NULL); - }); if(bindingResult.hasErrors()){ throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java index 86b278f..7b3c7a2 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java @@ -30,6 +30,8 @@ String EQUIPMENT_STATUS_APPROVAL_TYPE = DICT_PREFIX + "EquipmentStatusApprovalType"; // 设备计量标识 String EQUIPMENT_METER_IDENTITY = DICT_PREFIX + "MeterIdentify"; + // 设备在用信息 + String EQUIPMENT_IN_USE = DICT_PREFIX + "DeviceInUse"; // 计量计划计划分类 String PLAN_CATEGORY = DICT_PREFIX + "PlanType"; // 计量计划执行情况 diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java index 8a32e1f..84c4267 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/equipment/EquipmentImportDTO.java @@ -1,5 +1,6 @@ package com.casic.missiles.dto.equipment; +import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ContentStyle; import com.alibaba.excel.enums.poi.BorderStyleEnum; @@ -27,20 +28,24 @@ @NotBlank(message = "设备名称不能为空") @ExcelProperty("设备名称") private String equipmentName; - /** * 型号规格 */ @NotBlank(message = "型号规格不能为空") @ExcelProperty("型号规格") private String model; - + @ExcelProperty("辅助字段") + private String helpInstruction; + /** + * 出厂编号 + */ + @ExcelProperty("出厂编号") + private String manufactureNo; /** * 生产国家 */ @ExcelProperty("生产国家") private String productCountry; - /** * 生产厂家 */ @@ -52,53 +57,32 @@ @ExcelProperty("生产日期") private Date productDate; /** - * 出厂编号 + * 购进日期 */ - @ExcelProperty("出厂编号") - private String manufactureNo; - + @ExcelProperty(value = "购进日期",converter = DateExcelConverter.class) + private Date purchaseDate; + /** + * 单价(万元) + */ + @ExcelProperty("设备单价") + private BigDecimal unitPrice; /** * 使用状态(字典code) */ @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_USAGE_STATUS,needValid = true,message = "使用状态不合法") @ExcelProperty(value = "使用状态") private String usageStatus; - - - /** - * 等级(字典code) - */ - @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL,needValid = true,message = "重要等级不合法") - @ExcelProperty("重要等级") - private String level; - - /** - * 单价(万元) - */ - @ExcelProperty("设备单价") - private BigDecimal unitPrice; - - /** - * 购进日期 - */ - @ExcelProperty(value = "购进日期",converter = DateExcelConverter.class) - private Date purchaseDate; - - /** * 质量状况 */ @ExcelProperty("质量状况") private String qualityCondition; - /** * 所在单位id */ private Long companyId; - @ExcelProperty("所在单位") private String companyName; - /** * 使用部门id */ @@ -106,79 +90,95 @@ @ExcelProperty("使用部门") private String deptName; - - /** - * 使用岗位 - */ - @ExcelProperty(value = "使用岗位") - private String usePosition; - - /** - * 负责人 - */ - @ExcelProperty("负责人") - private String directorName; - /** * 设备分类(字典code) */ @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_CATEGORY, needValid = true, message = "设备分类不合法") @ExcelProperty("设备分类") private String category; - - /** * 检定周期(月) */ @ExcelProperty(value = "检定周期") private Integer checkCycle; - - + /** + * 等级(字典code) + */ + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_LEVEL,needValid = true,message = "重要等级不合法") + @ExcelProperty("重要等级") + private String level; + /** + * 备注 + */ + @ExcelProperty(value = "备注",index = 16) + private String remark; /** * 检定机构 */ @ExcelProperty("检定(校准)机构") private String checkOrganization; - /** * 检定日期 */ @ExcelProperty(value = "检定(校准)日期", converter = DateExcelConverter.class) private Date checkDate; - /** * 证书有效期 */ @ExcelProperty(value = "证书有效期", converter = DateExcelConverter.class) private Date certificateValid; - /** * 计量标识 */ @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_METER_IDENTITY, needValid = true, message = "计量标识不合法") @ExcelProperty(value = "计量标识") private String meterIdentify; - - /** - * 备注 + * 使用岗位 */ - @ExcelProperty(value = "备注") - private String remark; - - @ExcelProperty("测量范围") - private String measureRange; - + @ExcelProperty(value = "使用岗位") + private String usePosition; /** - * 不确定度或允许误差极限或准确度等级 + * 负责人 */ - @ExcelProperty("技术指标") - private String uncertainty; - + @ExcelProperty("负责人") + private String directorName; + @ExcelProperty("RFID标签绑定") + private String rfid; /** - * 依据的技术文件 + * 在用信息(字典code) */ - @ExcelProperty("依据的技术文件") - private String basedDocuments; + @ExcelProperty("在用信息") + @DictCodeField(cacheName = MeterDictCode.EQUIPMENT_IN_USE, needValid = true, message = "在用信息不合法") + private String useSign; + /** + * 安装位置(自定义编写) + */ + @ApiModelProperty("安装位置") + private String installLocationExt; + /** + * 备注(扩展) + */ + @ExcelProperty(value = "备注",index = 27) + private String remarkExt; + +// @ExcelProperty("测量范围") +// private String measureRange; +// +// /** +// * 不确定度或允许误差极限或准确度等级 +// */ +// @ExcelProperty("技术指标") +// private String uncertainty; +// +// /** +// * 依据的技术文件 +// */ +// @ExcelProperty("依据的技术文件") +// private String basedDocuments; + + @ExcelIgnore + private Long modelId; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/resource/BizResourceCustomerSuggestForm.java b/casic-metering-model/src/main/java/com/casic/missiles/model/resource/BizResourceCustomerSuggestForm.java index 569c66d..ca90f77 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/resource/BizResourceCustomerSuggestForm.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/resource/BizResourceCustomerSuggestForm.java @@ -77,8 +77,8 @@ @TableField("form_no") private String formNo; - @NotEmpty(message = "实验室代码不能为空") - @DictCodeField(message = "实验室代码描述不合法", cacheName = MeterDictCode.LAB_CODE) +// @NotEmpty(message = "实验室代码不能为空") + @DictCodeField(message = "实验室代码描述不合法", cacheName = MeterDictCode.LAB_CODE,needValid = false) @ApiModelProperty(value = "实验室代码(字典code)", dataType = "String") @TableField("lab_code") private String labCode; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java index bd07588..352c9db 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoApprovalServiceImpl.java @@ -87,6 +87,9 @@ if(haveUnfinishedApproval(approvalForm)){ throw new BusinessException(500,"设备存在未完成的审批,无法提交新的申请"); } + if(checkRfidRepeat(approvalForm.getRfid(),approvalForm.getEquipmentId())){ + throw new BusinessException(500,"RFID标签已使用"); + } if(ObjectUtil.isEmpty(approvalForm.getCreateUserId())){ AuthUser authUser = permissionContext.getAuthService().getLoginUser(); approvalForm.setCreateUserId(authUser.getId()); @@ -101,7 +104,7 @@ .setIgnoreError(true); BeanUtil.copyProperties(equipmentInfo, approvalForm, options); approvalForm.setAttachments(attachmentService.selectByEquipment(approvalForm.getEquipmentId())); - approvalForm.setTechnicalTargetList(technicalTargetService.selectByEquipment(approvalForm.getEquipmentId())); + //approvalForm.setTechnicalTargetList(technicalTargetService.selectByEquipment(approvalForm.getEquipmentId())); } // 0. 生成设备id @@ -148,6 +151,9 @@ @Override public ReturnDTO submitApproval(ApprovalSubmitRequest submitRequest) { EquipmentInfoApproval approval = this.getById(submitRequest.getId()); + if(checkRfidRepeat(approval.getRfid(),approval.getEquipmentId())){ + throw new BusinessException(500,"RFID标签已使用"); + } String processId = approval.getProcessId(); if (StrUtil.isEmpty(processId)) { ReturnDTO submitRes = baseApprovalService.processSubmit(submitRequest.getFormId(), submitRequest.getId(),submitRequest.getReason()); @@ -163,6 +169,10 @@ return updateApprovalStatus(submitRequest.getId(), ApprovalStatusEnum.IN_APPROVED); } + private boolean checkRfidRepeat(String rfid, Long equipmentId){ + return StrUtil.isNotEmpty(rfid) && this.baseMapper.checkRfid(rfid, equipmentId) > 0; + } + private boolean haveUnfinishedApproval(EquipmentApprovalForm approvalForm){ if(ObjectUtil.isNotEmpty(approvalForm.getEquipmentId())){ QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -214,6 +224,8 @@ } + + @Override @Transactional public void finishApproval(Long approvalId) { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java index 6d710c0..2916f74 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentInfoServiceImpl.java @@ -10,7 +10,10 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.annotation.DictCodeField; +import com.casic.missiles.constants.MeterDictCode; import com.casic.missiles.core.application.context.AbstractPermissionContext; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; @@ -28,9 +31,11 @@ import com.casic.missiles.enums.plan.SampleStatusEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.listeners.CommonExcelListener; +import com.casic.missiles.mapper.equipment.EquipmentInfoApprovalMapper; import com.casic.missiles.model.equipment.*; import com.casic.missiles.mapper.equipment.EquipmentInfoMapper; import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.modular.system.model.Dict; import com.casic.missiles.service.board.IBoardMessageService; import com.casic.missiles.service.equipment.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -49,6 +54,7 @@ import java.io.IOException; import java.io.InputStream; +import java.lang.reflect.Field; import java.util.*; import java.util.stream.Collectors; @@ -67,6 +73,7 @@ public class EquipmentInfoServiceImpl extends ServiceImpl implements IEquipmentInfoService { private final AbstractPermissionContext permissionContext; + private final AbstractDictService dictService; private final IEquipmentGroupInfoService groupInfoService; private final IEquipmentAttachmentService attachmentService; private final IEquipmentTechnicalTargetService technicalTargetService; @@ -77,9 +84,14 @@ private final IEquipmentTaskRelationService taskRelationService; private final IEquipmentTaskInfoService taskInfoService; private final IBoardMessageService boardMessageService; + + private final IEquipmentModelInfoService modelInfoService; + private final EquipmentInfoApprovalMapper infoApprovalMapper; + private ISubcontractCertificateService subcontractCertificateService; + @Autowired public void setSubcontractCertificateService(ISubcontractCertificateService subcontractCertificateService) { this.subcontractCertificateService = subcontractCertificateService; @@ -243,6 +255,15 @@ List deptList = permissionContext.getDeptService().list(null); Dept top = deptList.stream().filter(i -> ObjectUtil.isEmpty(i.getPid()) || i.getPid() < 0).findFirst().orElse(null); + List modelInfoList = modelInfoService.list(); + + Map> dictTotalMap = new HashMap<>(); + dictTotalMap.put(MeterDictCode.EQUIPMENT_USAGE_STATUS,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_USAGE_STATUS)); + dictTotalMap.put(MeterDictCode.EQUIPMENT_CATEGORY,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_CATEGORY)); + dictTotalMap.put(MeterDictCode.EQUIPMENT_LEVEL,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_LEVEL)); + dictTotalMap.put(MeterDictCode.EQUIPMENT_METER_IDENTITY,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_METER_IDENTITY)); + dictTotalMap.put(MeterDictCode.EQUIPMENT_IN_USE,dictService.findInDictByCode(MeterDictCode.EQUIPMENT_IN_USE)); + Long companyId = null; List parentDeptIds = permissionContext.getDeptService().getParentListById(user.getDeptId()); if (CollUtil.isNotEmpty(parentDeptIds)) { @@ -258,12 +279,66 @@ String validMsg = "第%d行数据校验失败:%s"; for (int i = 0; i < list.size(); i++) { EquipmentImportDTO importDTO = list.get(i); + // 设备名称、规格型号、辅助字段 if (StrUtil.isBlank(importDTO.getEquipmentName())) { throw new BusinessException(1500, String.format(validMsg, i + 1, "设备名称不能为空")); } if (StrUtil.isBlank(importDTO.getModel())) { throw new BusinessException(1500, String.format(validMsg, i + 1, "型号规格不能为空")); } + List itemModels = modelInfoList.stream().filter(m->m.getEquipmentName().equals(importDTO.getEquipmentName()) + && m.getModel().equals(importDTO.getModel())).collect(Collectors.toList()); + if(CollUtil.isEmpty(itemModels)){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); + }else if(itemModels.size() == 1){ + if(ObjectUtil.isNotEmpty(importDTO.getHelpInstruction())){ + throw new BusinessException(1500, String.format(validMsg, i + 1, "辅助字段不存在")); + } + importDTO.setModelId(itemModels.get(0).getId()); + importDTO.setCategory(itemModels.get(0).getCategory()); + importDTO.setCheckCycle(itemModels.get(0).getCheckCycle()); + + }else { + if (StrUtil.isBlank(importDTO.getHelpInstruction())) { + throw new BusinessException(1500, String.format(validMsg, i + 1, "需要填写辅助字段")); + } else { + Optional modelOpt = itemModels.stream().filter(mm -> mm.getHelpInstruction().equals(importDTO.getHelpInstruction())).findFirst(); + if (modelOpt.isPresent()) { + importDTO.setModelId(modelOpt.get().getId()); + importDTO.setCategory(modelOpt.get().getCategory()); + importDTO.setCheckCycle(modelOpt.get().getCheckCycle()); + } else { + throw new BusinessException(1500, String.format(validMsg, i + 1, "设备规格型号不存在")); + } + + } + } + // 字典值 + Field[] fields = importDTO.getClass().getDeclaredFields(); + for (Field field : fields) { + if (!field.isAccessible()) { + field.setAccessible(true); + } + try { + if (field.isAnnotationPresent(DictCodeField.class) && field.get(importDTO) != null) { + DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0]; + List subDicts = dictTotalMap.get(dictCodeField.cacheName()); + if(CollUtil.isEmpty(subDicts) || subDicts.stream().noneMatch(s-> { + try { + return s.getCode().equals(field.get(importDTO)); + } catch (IllegalAccessException e) { + log.error(e.getMessage()); + } + return false; + })){ + throw new BusinessException(1500, String.format(validMsg, i + 1, dictCodeField.message())); + } + } + }catch (IllegalAccessException exception){ + log.error(exception.getMessage()); + } + } + if (StrUtil.isEmpty(importDTO.getCompanyName())) { importDTO.setCompanyId(companyId); @@ -290,6 +365,16 @@ if (ObjectUtil.isEmpty(importDTO.getDeptId())) { throw new BusinessException(1500, String.format(validMsg, i + 1, "使用部门不合法")); } + + // rfid + if(StrUtil.isNotBlank(importDTO.getRfid())){ + if(list.stream().filter(r->importDTO.getRfid().equals(r.getRfid())).count()>1){ + throw new BusinessException(5001,String.format(validMsg,i+1,"RFID标签编号重复")); + }else if(infoApprovalMapper.checkRfid(importDTO.getRfid(),null) > 0){ + throw new BusinessException(5001,String.format(validMsg,i+1,"RFID标签已使用")); + } + } + } } @@ -300,7 +385,7 @@ AuthUser user = permissionContext.getAuthService().getLoginUser(); List equipmentInfos = new ArrayList<>(); - List technicalTargets = new ArrayList<>(); + for (int i = 0; i < list.size(); i++) { EquipmentImportDTO importDTO = list.get(i); EquipmentInfo equipmentInfo = new EquipmentInfo(); @@ -316,24 +401,10 @@ equipmentInfos.add(equipmentInfo); - if (!StrUtil.isAllBlank(importDTO.getUncertainty(), importDTO.getBasedDocuments(), importDTO.getMeasureRange())) { - EquipmentTechnicalTarget technicalTarget = new EquipmentTechnicalTarget(); - technicalTarget.setEquipmentId(equipmentInfo.getId()); - technicalTarget.setUncertainty(importDTO.getUncertainty()); - technicalTarget.setBasedDocuments(importDTO.getBasedDocuments()); - technicalTarget.setMeasureRange(importDTO.getMeasureRange()); - technicalTarget.setCreateTime(new Date()); - technicalTarget.setUpdateTime(new Date()); - technicalTargets.add(technicalTarget); - } - } if (CollUtil.isNotEmpty(equipmentInfos)) { this.saveBatch(equipmentInfos); } - if (CollUtil.isNotEmpty(technicalTargets)) { - //technicalTargetService.saveBatch(technicalTargets); - } for (EquipmentInfo equipmentInfo : equipmentInfos) { turnoverLogService.saveLog(equipmentInfo, null, user.getId()); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java index 1c9d830..9c5ce09 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentModelInfoServiceImpl.java @@ -25,6 +25,7 @@ import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import lombok.RequiredArgsConstructor; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -44,7 +45,7 @@ * @since 2023-09-15 */ @Service -@RequiredArgsConstructor +@RequiredArgsConstructor(onConstructor_ = {@Lazy}) public class EquipmentModelInfoServiceImpl extends ServiceImpl implements IEquipmentModelInfoService { private final IEquipmentModelTechnicalTargetService technicalTargetService; diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentTaskRelationServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentTaskRelationServiceImpl.java index 8e23292..05fd912 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentTaskRelationServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/equipment/EquipmentTaskRelationServiceImpl.java @@ -1,5 +1,6 @@ package com.casic.missiles.service.impl.equipment; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.model.equipment.EquipmentAttachment; import com.casic.missiles.model.equipment.EquipmentTaskInfo; @@ -26,11 +27,13 @@ @Override public void saveByEquipment(Long equipmentId, List taskInfoList) { this.removeByEquipment(equipmentId); - List relationList = new ArrayList<>(); - for (EquipmentTaskInfo equipmentTaskInfo : taskInfoList) { - relationList.add(new EquipmentTaskRelation(equipmentId,equipmentTaskInfo.getId())); + if(ObjectUtil.isNotEmpty(taskInfoList)){ + List relationList = new ArrayList<>(); + for (EquipmentTaskInfo equipmentTaskInfo : taskInfoList) { + relationList.add(new EquipmentTaskRelation(equipmentId,equipmentTaskInfo.getId())); + } + this.saveBatch(relationList); } - this.saveBatch(relationList); } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemRfidServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemRfidServiceImpl.java index b1f8928..02a7dda 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemRfidServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/impl/system/SystemRfidServiceImpl.java @@ -57,7 +57,7 @@ public Page listPage(Page page, String rfid, String equipmentNo, String equipmentName, String useStatus) { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); QueryWrapper queryWrapper = commonQueryWrapper(rfid, equipmentNo, equipmentName, useStatus); - // todo 去重 + // 去重 List list = this.baseMapper.listScopePage(page,dataScope,queryWrapper); //list = list.stream().distinct().collect(Collectors.toList()); list.forEach(i-> {