chenrui
2025-03-12 a2f66fe0ae730e1206a6c417a349863cb6fc7518
lims检测中心设备联调 设备停用/启用、设备故障表
已删除240个文件
已修改37个文件
已添加271个文件
43943 ■■■■ 文件已修改
cnas-require/src/main/java/com/ruoyi/requier/controller/DeviceController.java 261 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/controller/DeviceFaultController.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/controller/DeviceMetricController.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/controller/DeviceMetricRecordController.java 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/controller/DocumentController.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/controller/FeCalibrationScheduleController.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/controller/FeIlluminationController.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/controller/FeLightningProtectionController.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/controller/FePowerStableController.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/controller/FeStandardSubstanceAcceptanceController.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/controller/FeStandardSubstanceAcceptanceInspectionController.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/controller/FeStandardSubstanceController.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/controller/FeStandardSubstanceRecordController.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/controller/FeTempHumDateController.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/controller/ForeignRegisterController.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/controller/IncidentReportController.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/controller/InstructionController.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/controller/InternalWastesController.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/controller/ProcurementSuppliesContentsController.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/controller/ProcurementSuppliesExpendsController.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/controller/ProcurementSuppliesListController.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/controller/ProcurementSuppliesStoreController.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/controller/ReservationController.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/controller/SupplierManagementController.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/controller/SuppliersDirectoryContentsController.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/dto/ADto.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/dto/AcceptanceDto.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/dto/BDto.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/dto/DataConfigDto.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/dto/DeviceConfigDtoPage.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/dto/DeviceDto.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/dto/DeviceFaultOneDto.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/dto/DeviceMaintenanceExport.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/dto/DeviceMetricRecordDto.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/dto/FeIlluminationAddDto.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/dto/FeIlluminationDto.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/dto/FeIlluminationExportDto.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/dto/FePowerStableAddDto.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/dto/FePowerStableDto.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/dto/FePowerStableExportDto.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/dto/FeTempHumDateDto.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/dto/FeTempHumRecordDto.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/dto/ForeignRegisterDto.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/dto/IncidentReportAddDto.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/dto/InformationNotificationDto.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/dto/InstructionDto.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/dto/InternalWastesDto.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/dto/OperationInstructionDto.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/dto/ProcurementSuppliesExpendDto.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/dto/ProcurementSuppliesListDto.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/dto/ProcurementSuppliesListEDto.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/dto/ReservationDto.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/dto/StoreDto.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/dto/SupplierManagementDto.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/excel/FeCalibrationScheduleExport.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/excel/FeLightningProtectionExcel.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/excel/FeStandardSubstanceExcel.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/excel/IncidentReportExport.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/excel/StoreExcel.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/handler/BasicReportHandler.java 556 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/handler/FiberConfigReportHandler.java 617 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/handler/FiberOpticConnectorLossReportHandler.java 210 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/handler/FiberOpticRibbonReportHandler.java 734 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/handler/PiperConfigReportHandler.java 388 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/handler/TemperatureCyclingReportHandler1.java 582 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/handler/TemperatureTestReportHandler.java 367 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/handler/ThermalCycleReportHandler.java 599 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/DataConfigMapper.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/DeviceFaultMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/DeviceFaultOneMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/DeviceMaintenanceMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/DeviceMapper.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/DeviceMetricMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/DeviceMetricRecordMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/DeviceMetricsCopyMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/DocumentDao.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/FeCalibrationScheduleMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/FeIlluminationDetectionAreaMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/FeIlluminationMapper.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/FeLightningProtectionMapper.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/FeMeasuredQuantityMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/FePowerStableMapper.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/FeStandardSubstanceAcceptanceInspectionMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/FeStandardSubstanceAcceptanceMapper.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/FeStandardSubstanceMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/FeStandardSubstanceRecordMapper.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/FeTempHumDateMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/FeTempHumRecordMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/ForeignRegisterMapper.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/IncidentAcceptanceCheckMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/IncidentFileMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/IncidentInstallMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/IncidentReportMapper.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/IncidentSparePartsMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/InformationNotificationMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/InstructionMapper.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/InternalWastesDetailMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/InternalWastesMapper.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/OperationInstructionMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/PkMasterMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/PkSlaveMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/ProcurementSuppliesConsumablesMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/ProcurementSuppliesContentsMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/ProcurementSuppliesExpendsMapper.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/ProcurementSuppliesListMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/ProcurementSuppliesStoreMapper.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/ReservationMapper.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/SupplierManagementMapper.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/mapper/SuppliersDirectoryContentsMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/DataConfig.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/Device.java 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/DeviceFault.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/DeviceFaultOne.java 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/DeviceMaintenance.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/DeviceMetric.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/DeviceMetricRecord.java 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/DeviceMetricsCopy.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/Document.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/FeCalibrationSchedule.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/FeIllumination.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/FeIlluminationDetectionArea.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/FeLightningProtection.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/FeMeasuredQuantity.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/FePowerStable.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/FeStandardSubstance.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/FeStandardSubstanceAcceptance.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/FeStandardSubstanceAcceptanceInspection.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/FeStandardSubstanceRecord.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/FeTempHumDate.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/FeTempHumRecord.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/ForeignRegister.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/IncidentAcceptanceCheck.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/IncidentFile.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/IncidentInstall.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/IncidentReport.java 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/IncidentSpareParts.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/InformationNotification.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/Instruction.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/InternalWastes.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/InternalWastesDetail.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/OperationInstruction.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/PkMaster.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/PkSlave.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/ProcurementSuppliesConsumables.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/ProcurementSuppliesContents.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/ProcurementSuppliesExpends.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/ProcurementSuppliesList.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/ProcurementSuppliesStore.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/Reservation.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/SupplierManagement.java 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/pojo/SuppliersDirectoryContents.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/DataConfigService.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/DeviceFaultService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/DeviceMetricRecordService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/DeviceMetricsCopyService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/DeviceService.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/DocumentService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/FeCalibrationScheduleService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/FeIlluminationDetectionAreaService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/FeIlluminationService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/FeLightningProtectionService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/FeMeasuredQuantityService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/FePowerStableService.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/FeStandardSubstanceAcceptanceInspectionService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/FeStandardSubstanceAcceptanceService.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/FeStandardSubstanceRecordService.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/FeStandardSubstanceService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/FeTempHumDateService.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/FeTempHumRecordService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/ForeignRegisterService.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/IDeviceMetricService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/IncidentAcceptanceCheckService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/IncidentFileService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/IncidentInstallService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/IncidentReportService.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/IncidentSparePartsService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/InformationNotificationService.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/InsOrderPlanService.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/InsReportService.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/InstructionService.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/InternalWastesDetailService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/InternalWastesService.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/OperationInstructionService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/PkMasterService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/ProcurementSuppliesConsumablesService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/ProcurementSuppliesContentsService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/ProcurementSuppliesExpendsService.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/ProcurementSuppliesListService.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/ProcurementSuppliesStoreService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/QrShowService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/ReservationService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/SupplierManagementService.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/SuppliersDirectoryContentsService.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/DataConfigServiceImpl.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/DeviceFaultServiceImpl.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/DeviceMetricRecordServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/DeviceMetricServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/DeviceMetricsCopyServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/DeviceServiceImpl.java 1115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/DocumentServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/FeCalibrationScheduleServiceImpl.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/FeIlluminationDetectionAreaServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/FeIlluminationServiceImpl.java 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/FeLightningProtectionServiceImpl.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/FeMeasuredQuantityServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/FePowerStableServiceImpl.java 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/FeStandardSubstanceAcceptanceInspectionServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/FeStandardSubstanceAcceptanceServiceImpl.java 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/FeStandardSubstanceRecordServiceImpl.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/FeStandardSubstanceServiceImpl.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/FeTempHumDateServiceImpl.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/FeTempHumRecordServiceImpl.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/ForeignRegisterServiceImpl.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/IncidentAcceptanceCheckServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/IncidentFileServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/IncidentInstallServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/IncidentReportServiceImpl.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/IncidentSparePartsServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/InformationNotificationServiceImpl.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/InsOrderPlanServiceImpl.java 2784 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/InsReportServiceImpl.java 942 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/InstructionServiceImpl.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/InternalWastesDetailServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/InternalWastesServiceImpl.java 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/OperationInstructionServiceImpl.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/PkMasterServiceImpl.java 809 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/ProcurementSuppliesConsumablesServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/ProcurementSuppliesContentsServiceImpl.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/ProcurementSuppliesExpendsServiceImpl.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/ProcurementSuppliesListServiceImpl.java 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/ProcurementSuppliesStoreServiceImpl.java 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/QrShowServiceImpl.java 269 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/ReservationServiceImpl.java 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/SupplierManagementServiceImpl.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/service/impl/SuppliersDirectoryContentsServiceImpl.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/util/DataAcquisition.java 792 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/vo/AcceptanceDetailsVo.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/vo/AcceptanceVo.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/vo/OperationInstructionVo.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/vo/SubstanceRecordVo.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/DeviceBorrowController.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/DeviceController.java 260 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/DeviceFaultController.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/DeviceFaultOneController.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/DeviceMaintenanceController.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/DeviceMetricController.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/DeviceMetricRecordController.java 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/DeviceRecordController.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/DeviceStateController.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/DocumentController.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/FeCalibrationScheduleController.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/FeIlluminationController.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/FeLightningProtectionController.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/FePowerStableController.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceAcceptanceController.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceAcceptanceInspectionController.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceController.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceRecordController.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/FeTempHumDateController.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/ForeignRegisterController.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/IncidentReportController.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/InstructionController.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/InternalWastesController.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesContentsController.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesExpendsController.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesListController.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesStoreController.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/ReservationController.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/SupplierManagementController.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/SuppliersDirectoryContentsController.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/ADto.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/AcceptanceDto.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/BDto.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/DataConfigDto.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/DeviceConfigDtoPage.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/DeviceDto.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/DeviceFaultOneDto.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/DeviceMaintenanceExport.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/DeviceMetricRecordDto.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/DeviceRecordDto.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/DeviceStateDto.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/FeIlluminationAddDto.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/FeIlluminationDto.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/FeIlluminationExportDto.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/FePowerStableAddDto.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/FePowerStableDto.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/FePowerStableExportDto.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/FeTempHumDateDto.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/FeTempHumRecordDto.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/ForeignRegisterDto.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/IncidentReportAddDto.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/InformationNotificationDto.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/InstructionDto.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/InternalWastesDto.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/OperationInstructionDto.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/ProcurementSuppliesExpendDto.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/ProcurementSuppliesListDto.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/ProcurementSuppliesListEDto.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/ReservationDto.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/StoreDto.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/SupplierManagementDto.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/excel/DeviceFaultOneExport.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/excel/DeviceRecordExport.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/excel/DeviceStateExport.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/excel/FeCalibrationScheduleExport.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/excel/FeLightningProtectionExcel.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/excel/FeStandardSubstanceExcel.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/excel/IncidentReportExport.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/excel/StoreExcel.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/handler/BasicReportHandler.java 556 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/handler/FiberConfigReportHandler.java 617 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/handler/FiberOpticConnectorLossReportHandler.java 210 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/handler/FiberOpticRibbonReportHandler.java 734 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/handler/PiperConfigReportHandler.java 388 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/handler/TemperatureCyclingReportHandler1.java 582 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/handler/TemperatureTestReportHandler.java 367 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/handler/ThermalCycleReportHandler.java 599 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/DataConfigMapper.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/DeviceBorrowMapper.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/DeviceFaultMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/DeviceFaultOneMapper.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/DeviceLogMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/DeviceMaintenanceMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/DeviceMapper.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/DeviceMetricMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/DeviceMetricRecordMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/DeviceMetricsCopyMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/DeviceRecordMapper.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/DeviceStateMapper.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/DocumentDao.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/FeCalibrationScheduleMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/FeIlluminationDetectionAreaMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/FeIlluminationMapper.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/FeLightningProtectionMapper.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/FeMeasuredQuantityMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/FePowerStableMapper.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceAcceptanceInspectionMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceAcceptanceMapper.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceRecordMapper.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/FeTempHumDateMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/FeTempHumRecordMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/ForeignRegisterMapper.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/IncidentAcceptanceCheckMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/IncidentFileMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/IncidentInstallMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/IncidentReportMapper.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/IncidentSparePartsMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/InformationNotificationMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/InstructionMapper.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/InternalWastesDetailMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/InternalWastesMapper.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/OperationInstructionMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/PkMasterMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/PkSlaveMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesConsumablesMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesContentsMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesExpendsMapper.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesListMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesStoreMapper.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/ReservationMapper.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/SupplierManagementMapper.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/SuppliersDirectoryContentsMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/DataConfig.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/Device.java 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/DeviceBorrow.java 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/DeviceFault.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/DeviceFaultOne.java 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/DeviceLog.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/DeviceMaintenance.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/DeviceMetric.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/DeviceMetricRecord.java 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/DeviceMetricsCopy.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/DeviceRecord.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/DeviceState.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/Document.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/FeCalibrationSchedule.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/FeIllumination.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/FeIlluminationDetectionArea.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/FeLightningProtection.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/FeMeasuredQuantity.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/FePowerStable.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstance.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceAcceptance.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceAcceptanceInspection.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceRecord.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/FeTempHumDate.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/FeTempHumRecord.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/ForeignRegister.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/IncidentAcceptanceCheck.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/IncidentFile.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/IncidentInstall.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/IncidentReport.java 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/IncidentSpareParts.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/InformationNotification.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/Instruction.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/InternalWastes.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/InternalWastesDetail.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/OperationInstruction.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/PkMaster.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/PkSlave.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesConsumables.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesContents.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesExpends.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesList.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesStore.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/Reservation.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/SupplierManagement.java 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/SuppliersDirectoryContents.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/DataConfigService.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/DeviceBorrowService.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/DeviceFaultOneService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/DeviceFaultService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/DeviceMaintenanceService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/DeviceMetricRecordService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/DeviceMetricsCopyService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/DeviceRecordService.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/DeviceService.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/DeviceStateService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/DocumentService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/FeCalibrationScheduleService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/FeIlluminationDetectionAreaService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/FeIlluminationService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/FeLightningProtectionService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/FeMeasuredQuantityService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/FePowerStableService.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceAcceptanceInspectionService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceAcceptanceService.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceRecordService.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/FeTempHumDateService.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/FeTempHumRecordService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/ForeignRegisterService.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/IDeviceMetricService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/IncidentAcceptanceCheckService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/IncidentFileService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/IncidentInstallService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/IncidentReportService.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/IncidentSparePartsService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/InformationNotificationService.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/InsOrderPlanService.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/InsReportService.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/InstructionService.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/InternalWastesDetailService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/InternalWastesService.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/OperationInstructionService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/PkMasterService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesConsumablesService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesContentsService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesExpendsService.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesListService.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesStoreService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/QrShowService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/ReservationService.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/SupplierManagementService.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/SuppliersDirectoryContentsService.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/DataConfigServiceImpl.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/DeviceBorrowServiceImpl.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/DeviceFaultOneServiceImpl.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/DeviceFaultServiceImpl.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/DeviceMaintenanceImpl.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/DeviceMetricRecordServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/DeviceMetricServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/DeviceMetricsCopyServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/DeviceRecordServiceImpl.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/DeviceServiceImpl.java 1112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/DeviceStateServiceImpl.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/DocumentServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeCalibrationScheduleServiceImpl.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeIlluminationDetectionAreaServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeIlluminationServiceImpl.java 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeLightningProtectionServiceImpl.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeMeasuredQuantityServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/FePowerStableServiceImpl.java 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceAcceptanceInspectionServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceAcceptanceServiceImpl.java 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceRecordServiceImpl.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceServiceImpl.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeTempHumDateServiceImpl.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeTempHumRecordServiceImpl.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/ForeignRegisterServiceImpl.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/IncidentAcceptanceCheckServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/IncidentFileServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/IncidentInstallServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/IncidentReportServiceImpl.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/IncidentSparePartsServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/InformationNotificationServiceImpl.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/InsOrderPlanServiceImpl.java 2784 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/InsReportServiceImpl.java 942 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/InstructionServiceImpl.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/InternalWastesDetailServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/InternalWastesServiceImpl.java 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/OperationInstructionServiceImpl.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/PkMasterServiceImpl.java 809 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesConsumablesServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesContentsServiceImpl.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesExpendsServiceImpl.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesListServiceImpl.java 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesStoreServiceImpl.java 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/QrShowServiceImpl.java 269 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/ReservationServiceImpl.java 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/SupplierManagementServiceImpl.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/SuppliersDirectoryContentsServiceImpl.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/util/DataAcquisition.java 792 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/vo/AcceptanceDetailsVo.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/vo/AcceptanceVo.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/vo/OperationInstructionVo.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/vo/SubstanceRecordVo.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/DataConfigMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/DeviceBorrowMapper.xml 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/DeviceFaultOneMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/DeviceMaintenanceMapper.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/DeviceMapper.xml 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/DeviceMetricRecordMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/DeviceMetricsCopyMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/DeviceRecordMapper.xml 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/DeviceStateMapper.xml 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/FeCalibrationScheduleMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/FeIlluminationDetectionAreaMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/FeIlluminationMapper.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/FeLightningProtectionMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/FeMeasuredQuantityMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/FePowerStableMapper.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/FeStandardSubstanceAcceptanceInspectionMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/FeStandardSubstanceAcceptanceMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/FeStandardSubstanceMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/FeStandardSubstanceRecordMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/FeTempHumDateMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/FeTempHumRecordMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/ForeignRegisterMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/IncidentAcceptanceCheckMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/IncidentFileMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/IncidentInstallMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/IncidentReportMapper.xml 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/IncidentSparePartsMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/InformationNotificationMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/InstructionMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/InternalWastesDetailMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/InternalWastesMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/OperationInstructionMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/PkMasterMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/PkSlaveMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/ProcurementSuppliesExpendsMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/ProcurementSuppliesListMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/ProcurementSuppliesStoreMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/ReservationMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/SupplierManagementMapper.xml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/resources/mapper/SuppliersDirectoryContentsMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/requier/controller/DeviceController.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/controller/DeviceFaultController.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/controller/DeviceMetricController.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/controller/DeviceMetricRecordController.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/controller/DocumentController.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/controller/FeCalibrationScheduleController.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/controller/FeIlluminationController.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/controller/FeLightningProtectionController.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/controller/FePowerStableController.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/controller/FeStandardSubstanceAcceptanceController.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/controller/FeStandardSubstanceAcceptanceInspectionController.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/controller/FeStandardSubstanceController.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/controller/FeStandardSubstanceRecordController.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/controller/FeTempHumDateController.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/controller/ForeignRegisterController.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/controller/IncidentReportController.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/controller/InstructionController.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/controller/InternalWastesController.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/controller/ProcurementSuppliesContentsController.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/controller/ProcurementSuppliesExpendsController.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/controller/ProcurementSuppliesListController.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/controller/ProcurementSuppliesStoreController.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/controller/ReservationController.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/controller/SupplierManagementController.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/controller/SuppliersDirectoryContentsController.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/dto/ADto.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/dto/AcceptanceDto.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/dto/BDto.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/dto/DataConfigDto.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/dto/DeviceConfigDtoPage.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/dto/DeviceDto.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/dto/DeviceFaultOneDto.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/dto/DeviceMaintenanceExport.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/dto/DeviceMetricRecordDto.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/dto/FeIlluminationAddDto.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/dto/FeIlluminationDto.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/dto/FeIlluminationExportDto.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/dto/FePowerStableAddDto.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/dto/FePowerStableDto.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/dto/FePowerStableExportDto.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/dto/FeTempHumDateDto.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/dto/FeTempHumRecordDto.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/dto/ForeignRegisterDto.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/dto/IncidentReportAddDto.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/dto/InformationNotificationDto.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/dto/InstructionDto.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/dto/InternalWastesDto.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/dto/OperationInstructionDto.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/dto/ProcurementSuppliesExpendDto.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/dto/ProcurementSuppliesListDto.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/dto/ProcurementSuppliesListEDto.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/dto/ReservationDto.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/dto/StoreDto.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/dto/SupplierManagementDto.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/excel/FeCalibrationScheduleExport.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/excel/FeLightningProtectionExcel.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/excel/FeStandardSubstanceExcel.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/excel/IncidentReportExport.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/excel/StoreExcel.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/handler/BasicReportHandler.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/handler/FiberConfigReportHandler.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/handler/FiberOpticConnectorLossReportHandler.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/handler/FiberOpticRibbonReportHandler.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/handler/PiperConfigReportHandler.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/handler/TemperatureCyclingReportHandler1.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/handler/TemperatureTestReportHandler.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/handler/ThermalCycleReportHandler.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/DataConfigMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/DeviceFaultMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/DeviceFaultOneMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/DeviceMaintenanceMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/DeviceMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/DeviceMetricMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/DeviceMetricRecordMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/DeviceMetricsCopyMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/DocumentDao.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/FeCalibrationScheduleMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/FeIlluminationDetectionAreaMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/FeIlluminationMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/FeLightningProtectionMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/FeMeasuredQuantityMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/FePowerStableMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/FeStandardSubstanceAcceptanceInspectionMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/FeStandardSubstanceAcceptanceMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/FeStandardSubstanceMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/FeStandardSubstanceRecordMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/FeTempHumDateMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/FeTempHumRecordMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/ForeignRegisterMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/IncidentAcceptanceCheckMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/IncidentFileMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/IncidentInstallMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/IncidentReportMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/IncidentSparePartsMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/InformationNotificationMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/InstructionMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/InternalWastesDetailMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/InternalWastesMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/OperationInstructionMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/PkMasterMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/PkSlaveMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/ProcurementSuppliesConsumablesMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/ProcurementSuppliesContentsMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/ProcurementSuppliesExpendsMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/ProcurementSuppliesListMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/ProcurementSuppliesStoreMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/ReservationMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/SupplierManagementMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/mapper/SuppliersDirectoryContentsMapper.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/DataConfig.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/Device.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/DeviceFault.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/DeviceFaultOne.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/DeviceMaintenance.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/DeviceMetric.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/DeviceMetricRecord.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/DeviceMetricsCopy.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/Document.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/FeCalibrationSchedule.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/FeIllumination.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/FeIlluminationDetectionArea.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/FeLightningProtection.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/FeMeasuredQuantity.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/FePowerStable.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/FeStandardSubstance.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/FeStandardSubstanceAcceptance.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/FeStandardSubstanceAcceptanceInspection.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/FeStandardSubstanceRecord.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/FeTempHumDate.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/FeTempHumRecord.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/ForeignRegister.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/IncidentAcceptanceCheck.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/IncidentFile.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/IncidentInstall.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/IncidentReport.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/IncidentSpareParts.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/InformationNotification.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/Instruction.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/InternalWastes.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/InternalWastesDetail.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/OperationInstruction.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/PkMaster.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/PkSlave.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/ProcurementSuppliesConsumables.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/ProcurementSuppliesContents.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/ProcurementSuppliesExpends.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/ProcurementSuppliesList.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/ProcurementSuppliesStore.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/Reservation.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/SupplierManagement.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/pojo/SuppliersDirectoryContents.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/DataConfigService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/DeviceFaultService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/DeviceMetricRecordService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/DeviceMetricsCopyService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/DeviceService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/DocumentService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/FeCalibrationScheduleService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/FeIlluminationDetectionAreaService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/FeIlluminationService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/FeLightningProtectionService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/FeMeasuredQuantityService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/FePowerStableService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/FeStandardSubstanceAcceptanceInspectionService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/FeStandardSubstanceAcceptanceService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/FeStandardSubstanceRecordService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/FeStandardSubstanceService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/FeTempHumDateService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/FeTempHumRecordService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/ForeignRegisterService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/IDeviceMetricService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/IncidentAcceptanceCheckService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/IncidentFileService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/IncidentInstallService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/IncidentReportService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/IncidentSparePartsService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/InformationNotificationService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/InsOrderPlanService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/InsReportService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/InstructionService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/InternalWastesDetailService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/InternalWastesService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/OperationInstructionService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/PkMasterService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/ProcurementSuppliesConsumablesService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/ProcurementSuppliesContentsService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/ProcurementSuppliesExpendsService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/ProcurementSuppliesListService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/ProcurementSuppliesStoreService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/QrShowService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/ReservationService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/SupplierManagementService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/SuppliersDirectoryContentsService.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/DataConfigServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/DeviceFaultServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/DeviceMetricRecordServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/DeviceMetricServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/DeviceMetricsCopyServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/DeviceServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/DocumentServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/FeCalibrationScheduleServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/FeIlluminationDetectionAreaServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/FeIlluminationServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/FeLightningProtectionServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/FeMeasuredQuantityServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/FePowerStableServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/FeStandardSubstanceAcceptanceInspectionServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/FeStandardSubstanceAcceptanceServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/FeStandardSubstanceRecordServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/FeStandardSubstanceServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/FeTempHumDateServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/FeTempHumRecordServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/ForeignRegisterServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/IncidentAcceptanceCheckServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/IncidentFileServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/IncidentInstallServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/IncidentReportServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/IncidentSparePartsServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/InformationNotificationServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/InsOrderPlanServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/InsReportServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/InstructionServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/InternalWastesDetailServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/InternalWastesServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/OperationInstructionServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/PkMasterServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/ProcurementSuppliesConsumablesServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/ProcurementSuppliesContentsServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/ProcurementSuppliesExpendsServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/ProcurementSuppliesListServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/ProcurementSuppliesStoreServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/QrShowServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/ReservationServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/SupplierManagementServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/service/impl/SuppliersDirectoryContentsServiceImpl.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/util/DataAcquisition.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/vo/AcceptanceDetailsVo.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/vo/AcceptanceVo.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/vo/OperationInstructionVo.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/requier/vo/SubstanceRecordVo.java
ÎļþÒÑɾ³ý
cnas-require/src/main/java/com/ruoyi/require/controller/DeviceBorrowController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,74 @@
package com.ruoyi.require.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.utils.JackSonUtil;
import com.ruoyi.require.pojo.DeviceBorrow;
import com.ruoyi.require.service.DeviceBorrowService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/**
 * <p>
 *  å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-09-21 10:53:51
 */
@RestController
@RequestMapping("/deviceBorrow")
public class DeviceBorrowController {
    @Resource
    private DeviceBorrowService deviceBorrowService;
    //分页
    @GetMapping("/deviceBorrowPage")
    public Result deviceBorrowPage(Page page,DeviceBorrow deviceBorrow) throws Exception {
        return Result.success(deviceBorrowService.deviceBorrowPage(page, deviceBorrow));
    }
    //查询
    @GetMapping("/getDeviceBorrow")
    public Result getDeviceBorrow(Integer id) {
        return Result.success(deviceBorrowService.getDeviceBorrow(id));
    }
    //新增
    @PostMapping("/saveDeviceBorrow")
    public Result saveDeviceBorrow(@RequestBody DeviceBorrow deviceBorrow) {
        return Result.success(deviceBorrowService.saveDeviceBorrow(deviceBorrow));
    }
    //删除
    @DeleteMapping("/deleteDeviceBorrow")
    public Result deleteDeviceBorrow(Integer id) {
        return Result.success(deviceBorrowService.removeById(id));
    }
    //导出
    @GetMapping("/deviceBorrowExport")
    public Result deviceBorrowExport(Integer deviceId, HttpServletResponse response) throws Exception {
        List<DeviceBorrow> deviceBorrows = deviceBorrowService.getDeviceBorrowBydeviceId(deviceId);
        response.setHeader("requestType", "excel");
        response.setHeader("Access-Control-Expose-Headers", "requestType");
        // è®¾ç½®å•元格样式
        // ä¿å­˜åˆ°ç¬¬ä¸€ä¸ªsheet中
        EasyExcel.write(response.getOutputStream())
                .head(DeviceBorrow.class)
                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // è‡ªé€‚应列宽
                .sheet()
                .doWrite(deviceBorrows);
        return Result.success();
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/DeviceController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,260 @@
package com.ruoyi.require.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.require.dto.DataConfigDto;
import com.ruoyi.require.dto.DeviceDto;
import com.ruoyi.require.pojo.Device;
import com.ruoyi.require.pojo.PkMaster;
import com.ruoyi.require.service.DataConfigService;
import com.ruoyi.require.service.DeviceService;
import com.ruoyi.require.service.PkMasterService;
import com.ruoyi.system.mapper.UserMapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * è®¾å¤‡(DeviceController)表控制层
 */
@Api(tags = "设备")
@RestController
@RequestMapping("/deviceScope")
public class DeviceController {
    @Resource
    private UserMapper userMapper;
    @Resource
    private DeviceService deviceService;
    @Value("${file.path}")
    private String filePath;
    @Autowired
    private DataConfigService dataConfigService;
    @Autowired
    private PkMasterService pkMasterService;
    /**
     * èŽ·å–äººå‘˜ä¿¡æ¯
     * @return
     * @throws Exception
     */
    @GetMapping("/selectUserList")
    public Result selectUserList() {
        return  Result.success(deviceService.selectUserList());
    }
    /**
     * æ ¹æ®departLimsId èŽ·å–äººå‘˜ (selectUserList前端调用接口太多 å®¹æ˜“报错)
     */
    @GetMapping("/selectUserListByDepartLimsId")
    public Result selectUserListByDepartLimsId(String departLimsId) {
        return Result.success(deviceService.selectUserListByDepartLimsId(departLimsId));
    }
    @ApiOperation(value = "查看设备二维码按钮")
    @GetMapping("/showDeviceQrCodeButton")
    public void showDeviceQrCodeButton() { }
    //设备工具明细
    @ApiOperation(value = "查询设备详情列表")
    @GetMapping("/selectDeviceParameter")
    public Result selectDeviceParameter(Page page,DeviceDto deviceDto,Boolean laboratoryNameIsNull) {
        return Result.success(deviceService.selectDeviceParameter(page, deviceDto, laboratoryNameIsNull));
    }
    @ApiOperation(value = "添加设备详情参数")
    @PostMapping("/addDeviceParameter")
    public Result addDeviceParameter(@RequestBody Device itemParameter) {
        return Result.success(deviceService.addDeviceParameter(itemParameter));
    }
    @ApiOperation(value = "删除设备详情参数")
    @DeleteMapping("/delDeviceParameter")
    public Result<?> delDeviceParameter(Integer id) {
        return Result.success(deviceService.delDeviceParameter(id));
    }
    @ApiOperation(value = "修改设备详情参数")
    @PostMapping("/upDeviceParameter")
    public Result<?> upDeviceParameter(@RequestBody Device itemParameter) {
        return Result.success(deviceService.upDeviceParameter(itemParameter));
    }
    @ApiOperation(value = "是否允许修改采集值")
    @DeleteMapping("/isItAllowedToModifyTheCollectedValues")
    public Result<?> isItAllowedToModifyTheCollectedValues() {
        return Result.success();
    }
    @ApiOperation(value = "获取设备总览")
    @GetMapping("/selectEquipmentOverview")
    public Result selectEquipmentOverview() {
        return Result.success(deviceService.selectEquipmentOverview());
    }
    @ApiOperation(value = "获取被授权人")
    @GetMapping("/authorizedPerson")
    public Result authorizedPerson() {
        return Result.success(deviceService.authorizedPerson());
    }
    @ApiOperation(value = "搜索")
    @GetMapping("/search")
    public Result search(Integer status, String deviceName, String specificationModel, String largeCategory) {
        return Result.success(deviceService.search(status, deviceName, specificationModel, largeCategory));
    }
    //图片上传
    @ApiOperation(value = "设备图片上传")
    @PostMapping("/uploadFile")
    public Result uploadFile(MultipartFile file) {
        System.out.println(file);
        String urlString;
        String pathName;
        String filename = file.getOriginalFilename();
        try {
            String path = filePath;
            File realpath = new File(path);
            if (!realpath.exists()) {
                realpath.mkdirs();
            }
            pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMdd")) + "-" + file.getOriginalFilename();
            urlString = realpath + "/" + pathName;
            file.transferTo(new File(urlString));
            HashMap<String, String> map = new HashMap<>();
            map.put("name", filename);
            map.put("url", pathName);
            return Result.success(map);
        } catch (Exception e) {
            e.printStackTrace();
            System.err.println("图片上传错误");
            return null;
        }
    }
    @ApiOperation(value = "获取设备负责人")
    @GetMapping("/selectDevicePrincipal")
    public Result selectDevicePrincipal() {
        return Result.success(deviceService.selectDevicePrincipal());
    }
    @ApiOperation(value = "通过项目获取设备列表")
    @PostMapping("/selectDeviceByCategory")
    public Result selectDeviceByCategory(String inspectionItem, String inspectionItemSubclass,String sonLaboratory) {
        return Result.success(deviceService.selectDeviceByCategory(inspectionItem, inspectionItemSubclass,sonLaboratory));
    }
    @ApiOperation(value = "通过设备编号获取设备列表")
    @GetMapping("/selectDeviceByCode")
    public Result<DeviceDto> selectDeviceByCode(Integer id) {
        return Result.success(deviceService.selectDeviceByCode(id));
    }
    /**
     *
     * @param request å–请求中的ip
     * @param id æ£€éªŒæ ·å“ ä¸»é”®id
     * @param entrustCode å§”托编号
     * @param sampleCode æ ·å“ç¼–号
     * @param fiberOpticRibbon å…‰çº¤å¸¦ç¼–号
     * @return
     */
    @ApiOperation("/数采-数据采集")
    @GetMapping("/dataCollection")
    public Result<?> dataAcquisition(HttpServletRequest request,
                                     @RequestParam("id") Integer id,
                                     @RequestParam("entrustCode") String entrustCode,
                                     @RequestParam("sampleCode") String sampleCode,
                                     @RequestParam(value = "fiberOpticRibbon", required = false) String fiberOpticRibbon) {
        return deviceService.dataAcquisition(request, id, entrustCode, sampleCode, fiberOpticRibbon);
    }
    @ApiOperation(value = "判断该设备是否可以数采")
    @GetMapping("/determineWhetherToCollectData")
    public Result<?> determineWhetherToCollectData(@RequestParam("managementNumber") String managementNumber, HttpServletRequest request) {
        return deviceService.determineWhetherToCollectData(managementNumber, request);
    }
    @ApiOperation(value = "维护数采配置")
    @PostMapping("/saveDataAcquisitionConfiguration")
    public Result<?> saveDataAcquisitionConfiguration(@RequestParam(value = "deviceId") Integer deviceId, @RequestBody DataConfigDto dataConfigList) {
        dataConfigService.saveDataAcquisitionConfiguration(deviceId, dataConfigList);
        return Result.success();
    }
    @ApiOperation(value = "查询数采配置")
    @GetMapping("/queryDataAcquisitionConfiguration")
    public Result<?> queryDataAcquisitionConfiguration(@RequestParam("deviceId") Integer deviceId,
                                                       @RequestParam("isDevice") Boolean isDevice,
                                                       @RequestParam(value = "inspectionItem", required = false) String inspectionItem,
                                                       @RequestParam(value = "inspectionItemSubclass", required = false) String inspectionItemSubclass) {
        return dataConfigService.queryDataAcquisitionConfiguration(deviceId, isDevice, inspectionItem, inspectionItemSubclass);
    }
    @ApiOperation(value = "删除数采配置")
    @DeleteMapping("/deleteDataAcquisitionConfiguration")
    public Result<?> deleteDataAcquisitionConfiguration(@RequestParam("ids") String ids) {
        List<String> split = Arrays.asList(ids.split(","));
        List<String> collect = split.stream().distinct().collect(Collectors.toList());
        dataConfigService.removeBatchByIds(collect);
        return Result.success();
    }
    @ApiOperation(value = "菜单")
    @PostMapping("/menu")
    public Result menu() {
        return Result.success(deviceService.menu());
    }
    @ApiOperation(value = "温度循环数采")
    @PostMapping("/temDataAcquisition")
    public Result<?> temDataAcquisition(@RequestBody PkMaster pkMaster) {
        return Result.success(pkMasterService.temDataAcquisition(pkMaster));
    }
    @ApiOperation(value = "左侧设备树形栏")
    @GetMapping("/treeDevice")
    public Result treeDevice(String deviceName) {
        return Result.success(deviceService.treeDevice(deviceName));
    }
    @ApiOperation(value = "温度循环数采总体")
    @PostMapping("/temDataAcquisition2")
    public Result<?> temDataAcquisition2(@RequestBody PkMaster pkMaster) {
        return Result.success(pkMasterService.temDataAcquisition2(pkMaster));
    }
    @ApiOperation(value = "列表统计导出")
    @PostMapping("/export")
    public void exportData(@RequestBody Map<String, Object> data, HttpServletResponse response) throws Exception {
//        DeviceDto deviceDto = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), DeviceDto.class);
//        deviceService.export(deviceDto,response);
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/DeviceFaultController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,50 @@
package com.ruoyi.require.controller;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.require.pojo.DeviceFault;
import com.ruoyi.require.service.DeviceFaultService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/deviceFaults")
public class DeviceFaultController {
    private final DeviceFaultService deviceFaultService;
    @Autowired
    public DeviceFaultController(DeviceFaultService deviceFaultService) {
        this.deviceFaultService = deviceFaultService;
    }
    @GetMapping
    public List<DeviceFault> getAllDeviceFaults() {
        return deviceFaultService.list();
    }
    @PostMapping
    public DeviceFault createDeviceFault(@RequestBody DeviceFault deviceFault) {
        deviceFaultService.save(deviceFault);
        return deviceFault;
    }
    @PutMapping("/{id}")
    public DeviceFault updateDeviceFault(@PathVariable Integer id, @RequestBody DeviceFault deviceFault) {
        deviceFault.setId(id);
        deviceFaultService.updateById(deviceFault);
        return deviceFault;
    }
    @DeleteMapping("/{id}")
    public void deleteDeviceFault(@PathVariable Integer id) {
        deviceFaultService.removeById(id);
    }
    @GetMapping("/device")
    public Result<Map<String,Object>> getDeviceFaultsByDeviceId(Integer deviceId) {
       return  Result.success(deviceFaultService.findByDeviceId(deviceId));
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/DeviceFaultOneController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,82 @@
package com.ruoyi.require.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.numgen.NumberGenerator;
import com.ruoyi.require.dto.DeviceFaultOneDto;
import com.ruoyi.require.excel.DeviceFaultOneExport;
import com.ruoyi.require.pojo.DeviceFaultOne;
import com.ruoyi.require.service.DeviceFaultOneService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
/**
 * <p>
 * è®¾å¤‡æ•…障表 å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-09-26 02:03:29
 */
@RestController
@RequestMapping("/deviceFaultOne")
public class DeviceFaultOneController {
    @Autowired
    private DeviceFaultOneService deviceFaultOneService;
    @Autowired
    private NumberGenerator<DeviceFaultOne> numberGenerator;
    @GetMapping("/deviceFaultOnePage")
    public Result deviceFaultOnePage(Integer deviceId, Page page, String processNumber) {
        return Result.success(deviceFaultOneService.deviceFaultOnePage(deviceId,page, processNumber));
    }
    @PostMapping("/addOrUpdateDeviceFaultOne")
    public Result addOrUpdateDeviceFaultOne(@RequestBody DeviceFaultOne deviceFaultOne) {
        if (ObjectUtils.isEmpty(deviceFaultOne.getProcessNumber())) {
            String year = new SimpleDateFormat("yy", Locale.CHINESE).format(new Date());
            String month = new SimpleDateFormat("MM", Locale.CHINESE).format(new Date());
            String processNumber = numberGenerator.generateNumberWithPrefix(3, "DG-TC-23FM " + month + "-" + year + month, DeviceFaultOne::getProcessNumber);
            deviceFaultOne.setProcessNumber(processNumber);
        }
        return Result.success(deviceFaultOneService.saveOrUpdate(deviceFaultOne));
    }
    @DeleteMapping("/deleteDeviceFaultOne")
    public Result deleteDeviceFaultOne(@RequestParam("id") Integer id) {
        return Result.success(deviceFaultOneService.removeById(id));
    }
    @ApiOperation(value = "奖惩记录导出")
    @GetMapping("exportRewardAndPunishmentRecords")
    public void rewardPunishmentExport(@RequestParam("deviceId") Integer deviceId, String processNumber,
                                       HttpServletResponse response) throws Exception {
        IPage<DeviceFaultOneDto> data = deviceFaultOneService.deviceFaultOnePage(deviceId, new Page<>(1, -1), processNumber);
        List<DeviceFaultOneExport> studentList  = JSONObject.parseArray(JSON.toJSONString(data.getRecords()), DeviceFaultOneExport.class);
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setHeader("requestType", "excel");
        response.setHeader("Access-Control-Expose-Headers", "requestType");
        // è®¾ç½®å•元格样式
        // ä¿å­˜åˆ°ç¬¬ä¸€ä¸ªsheet中
        EasyExcel.write(response.getOutputStream())
                .head(DeviceFaultOneExport.class)
                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // è‡ªé€‚应列宽
                .sheet("sheet")
                .doWrite(studentList);
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/DeviceMaintenanceController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,88 @@
package com.ruoyi.require.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.numgen.NumberGenerator;
import com.ruoyi.require.dto.DeviceMaintenanceExport;
import com.ruoyi.require.pojo.DeviceMaintenance;
import com.ruoyi.require.service.DeviceMaintenanceService;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
@RestController
@RequestMapping("/deviceMaintain")
public class DeviceMaintenanceController {
    @Autowired
    private DeviceMaintenanceService deviceMaintenanceService;
    @Autowired
    private NumberGenerator<DeviceMaintenance> numberGenerator;
    //增
    @PostMapping("/add")
    public Result create(@RequestBody DeviceMaintenance deviceMaintenance){
        String year = new SimpleDateFormat("yy", Locale.CHINESE).format(new Date());
        String month = new SimpleDateFormat("MM", Locale.CHINESE).format(new Date());
        String processNumber = numberGenerator.generateNumberWithPrefix(3, "DG-TC-23FM " + month + "-" + year + month, DeviceMaintenance::getDeviceNumber);
        deviceMaintenance.setDeviceNumber(processNumber);
        return Result.success(deviceMaintenanceService.save(deviceMaintenance));
    }
    //通过deviceId查询维护数据
    @GetMapping("/getDeviceMaintenancePage")
    public Result getDeviceMaintenancePage(Page page, String deviceNumber,Integer deviceId){
        return Result.success(deviceMaintenanceService.getDeviceMaintenancePage(page, deviceId, deviceNumber));
    }
    //删
    @DeleteMapping("/delete")
    public void deleteDeviceFault(Integer id) {
        deviceMaintenanceService.removeById(id);
    }
    @GetMapping("/deviceMaintenanceExport")
    public Result deviceMaintenanceExport(@RequestParam("deviceId") Integer deviceId, HttpServletResponse response) throws IOException {
        List<DeviceMaintenanceExport> list = deviceMaintenanceService.deviceMaintenanceExport(deviceId);
        response.setHeader("requestType","excel");
        response.setHeader("Access-Control-Expose-Headers", "requestType");
        // è®¾ç½®å•元格样式
        // ä¿å­˜åˆ°ç¬¬ä¸€ä¸ªsheet中
        EasyExcel.write(response.getOutputStream())
                .head(DeviceMaintenanceExport.class)
                .registerWriteHandler(getHorizontalCellStyleStrategy((short) 12))
                .sheet()
                .doWrite(list);
        return Result.success();
    }
    /**
     * å•元格样式策略
     */
    public static HorizontalCellStyleStrategy getHorizontalCellStyleStrategy(Short fontHeightInPoints) {
        // å†…容的策略
        WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
        // ã€æ°´å¹³å±…中需要使用以下两行】
        // è®¾ç½®æ–‡å­—左右居中
        contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
        // è®¾ç½®æ–‡å­—上下居中
        contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        // è®¾ç½® è‡ªåŠ¨æ¢è¡Œ
        contentWriteCellStyle.setWrapped(true);
        // æ ·å¼ç­–ç•¥
        return new HorizontalCellStyleStrategy(null, contentWriteCellStyle);
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/DeviceMetricController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.ruoyi.require.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.require.pojo.DeviceMetric;
import com.ruoyi.require.service.IDeviceMetricService;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@AllArgsConstructor
@RequestMapping("/deviceMetrics")
public class DeviceMetricController {
    @Autowired
    private IDeviceMetricService deviceMetricService;
    @PostMapping("/saveOrUpdateDeviceMetric")
    public Result create(@RequestBody DeviceMetric deviceMetric) {
        return Result.success(deviceMetricService.saveOrUpdate(deviceMetric));
    }
    @GetMapping("/selectDeviceMetric")
    public Result read(@RequestParam("deviceId") Integer deviceId, @RequestParam("type") String type) {
        return Result.success(deviceMetricService.list(Wrappers.<DeviceMetric>lambdaQuery()
                .eq(DeviceMetric::getDeviceId,deviceId)
                .eq(DeviceMetric::getType,type)));
    }
    @DeleteMapping("/deleteDeviceMetrics")
    public Result delete(@RequestParam("id") Integer id) {
      return   Result.success(deviceMetricService.removeById(id));
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/DeviceMetricRecordController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,134 @@
package com.ruoyi.require.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.numgen.NumberGenerator;
import com.ruoyi.common.utils.FileSaveUtil;
import com.ruoyi.require.dto.DeviceMetricRecordDto;
import com.ruoyi.require.pojo.Device;
import com.ruoyi.require.pojo.DeviceMetricRecord;
import com.ruoyi.require.pojo.DeviceMetricsCopy;
import com.ruoyi.require.service.DeviceMetricRecordService;
import com.ruoyi.require.service.DeviceMetricsCopyService;
import com.ruoyi.require.service.DeviceService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
/**
 * <p>
 * è®¾å¤‡æ ¡å‡† - æ ¡å‡†è®°å½• å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-09-27 10:20:01
 */
@Api(tags = "设备 - è®¾å¤‡æ ¡å‡†")
@RestController
@RequestMapping("/deviceMetricRecord")
public class DeviceMetricRecordController {
    @Autowired
    private DeviceMetricRecordService deviceMetricRecordService;
    @Autowired
    private DeviceMetricsCopyService deviceMetricsCopyService;
    @Autowired
    private NumberGenerator<DeviceMetricRecord> numberGenerator;
    @Autowired
    private DeviceService deviceService;
    @ApiOperation("设备校准分页查询")
    @GetMapping("/deviceMetricRecordPage")
    public Result deviceMetricRecordPage(@RequestParam("deviceId") Integer deviceId, Page page, @RequestParam("type") String type) {
        return Result.success(deviceMetricRecordService.page(page, Wrappers.<DeviceMetricRecord>lambdaQuery()
                .eq(DeviceMetricRecord::getDeviceId, deviceId)
                .eq(DeviceMetricRecord::getType, type)));
    }
    @ApiOperation("设备校准 æ–°å¢ž æ›´æ–°")
    @PostMapping("/addOrUpdateDeviceMetricRecord")
    public Result addOrUpdateDeviceMetricRecord(@RequestBody DeviceMetricRecordDto deviceMetricRecordDto) {
        if (ObjectUtils.isEmpty(deviceMetricRecordDto.getProcessNumber())) {
            String year = new SimpleDateFormat("yy", Locale.CHINESE).format(new Date());
            String month = new SimpleDateFormat("MM", Locale.CHINESE).format(new Date());
            String processNumber = numberGenerator.generateNumberWithPrefix(5, "SBJZ" + year + month, DeviceMetricRecord::getProcessNumber);
            deviceMetricRecordDto.setProcessNumber(processNumber);
        }
        deviceMetricRecordService.saveOrUpdate(deviceMetricRecordDto);
        if (deviceMetricRecordDto.getType().equals("calibrate")) {
            deviceService.update(Wrappers.<Device>lambdaUpdate()
                    .set(Device::getCalibrationServices,deviceMetricRecordDto.getUnitOfMeasure())
                    .eq(Device::getId,deviceMetricRecordDto.getDeviceId()));
        }
        if (CollectionUtils.isNotEmpty(deviceMetricRecordDto.getDeviceMetricsCopyList())) {
            deviceMetricRecordDto.getDeviceMetricsCopyList().forEach(i -> i.setDeviceMetricsId(deviceMetricRecordDto.getId()));
            deviceMetricsCopyService.saveOrUpdateBatch(deviceMetricRecordDto.getDeviceMetricsCopyList());
        }
        return Result.success();
    }
    @ApiOperation("设备校准 åˆ é™¤")
    @DeleteMapping("/deleteDeviceMetricRecord")
    public Result deleteDeviceMetricRecord(@RequestParam("id") Integer id) {
        DeviceMetricRecord deviceMetricRecord = deviceMetricRecordService.getById(id);
        deviceMetricsCopyService.remove(Wrappers.<DeviceMetricsCopy>lambdaQuery()
                .eq(DeviceMetricsCopy::getDeviceMetricsId, id));
        // åˆ é™¤æ–‡ä»¶
        FileSaveUtil.DeleteFile(deviceMetricRecord.getSystemFileName());
        boolean b = deviceMetricRecordService.removeById(id);
        // ä¿®æ”¹è®¾å¤‡çš„æ ¡å‡†æœºæž„
        if (deviceMetricRecord.getType().equals("calibrate")) {
            List<DeviceMetricRecord> list = deviceMetricRecordService.list(Wrappers.<DeviceMetricRecord>lambdaQuery()
                    .eq(DeviceMetricRecord::getType,"calibrate")
                    .eq(DeviceMetricRecord::getDeviceId, deviceMetricRecord.getDeviceId()));
            int size = list.size();
            // è®¾ç½®è®¾å¤‡ä¸­çš„æ ¡å‡†æœºæž„为上次的机构
            deviceService.update(Wrappers.<Device>lambdaUpdate()
                    .set(Device::getCalibrationServices,size == 0 ? null : list.get(size - 1).getUnitOfMeasure())
                    .eq(Device::getId,deviceMetricRecord.getDeviceId()));
        }
        return Result.success(b);
    }
    @ApiOperation("设备校准 æ ¡å‡†æ¡ç›®æŸ¥è¯¢")
    @GetMapping("/showDeviceMetricsCopy")
    public Result showDeviceMetricsCopy(@RequestParam("id") Integer id, @RequestParam("type") String type) {
        return Result.success(deviceMetricsCopyService.list(Wrappers.<DeviceMetricsCopy>lambdaQuery()
                .eq(DeviceMetricsCopy::getDeviceMetricsId, id)
                .eq(DeviceMetricsCopy::getType, type)));
    }
    @GetMapping("/deviceMetricRecordExport")
    public Result deviceMetricRecordExport(@RequestParam("deviceId") Integer deviceId, @RequestParam("type") String type, HttpServletResponse response) throws IOException {
        List<DeviceMetricRecord> list = deviceMetricRecordService.page(new Page<>(-1,-1), Wrappers.<DeviceMetricRecord>lambdaQuery()
                .eq(DeviceMetricRecord::getDeviceId, deviceId)
                .eq(DeviceMetricRecord::getType, type)).getRecords();
        list.forEach(i -> i.setStatus(i.getStatus().equals("0yes") ? "合格" : "不合格"));
        response.setHeader("requestType", "excel");
        response.setHeader("Access-Control-Expose-Headers", "requestType");
        // è®¾ç½®å•元格样式
        // ä¿å­˜åˆ°ç¬¬ä¸€ä¸ªsheet中
        EasyExcel.write(response.getOutputStream())
                .head(DeviceMetricRecord.class)
                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // è‡ªé€‚应列宽
                .sheet()
                .doWrite(list);
        return Result.success();
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/DeviceRecordController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,71 @@
package com.ruoyi.require.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.numgen.NumberGenerator;
import com.ruoyi.require.excel.DeviceRecordExport;
import com.ruoyi.require.pojo.DeviceRecord;
import com.ruoyi.require.service.DeviceRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
/**
 * <p>
 * cnas设备使用记录表 å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-09-21 11:06:47
 */
@RestController
@RequestMapping("/deviceRecord")
public class DeviceRecordController {
    @Autowired
    private DeviceRecordService deviceRecordService;
    @Autowired
    private NumberGenerator<DeviceRecord> numberGenerator;
    @GetMapping("/deviceRecordPage")
    public Result incidentReportPages(@RequestParam("deviceId") Integer deviceId, Page page, String deviceNumber) {
        return Result.success(deviceRecordService.deviceRecordPage(deviceId, page, deviceNumber));
    }
    @PostMapping("/saveDeviceRecord")
    public Result saveDeviceRecords(@RequestBody DeviceRecord deviceRecord) {
        String year = new SimpleDateFormat("yy", Locale.CHINESE).format(new Date());
        String month = new SimpleDateFormat("MM", Locale.CHINESE).format(new Date());
        String processNumber = numberGenerator.generateNumberWithPrefix(3, "DG-TC-23FM " + month + "-" + year + month, DeviceRecord::getDeviceNumber);
        deviceRecord.setDeviceNumber(processNumber);
        return Result.success(deviceRecordService.save(deviceRecord));
    }
    @DeleteMapping("/deleteDeviceRecord")
    public Result deleteDeviceRecords(@RequestParam("id") Integer id) {
        return Result.success(deviceRecordService.removeById(id));
    }
    @GetMapping("/deviceRecordExport")
    public Result incidentReportExport(@RequestParam("deviceId") Integer deviceId, HttpServletResponse response) throws IOException {
        List<DeviceRecordExport> list = deviceRecordService.incidentReportExport(deviceId);
        response.setHeader("requestType", "excel");
        response.setHeader("Access-Control-Expose-Headers", "requestType");
        // è®¾ç½®å•元格样式
        // ä¿å­˜åˆ°ç¬¬ä¸€ä¸ªsheet中
        EasyExcel.write(response.getOutputStream())
                .head(DeviceRecordExport.class)
                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // è‡ªé€‚应列宽
                .sheet()
                .doWrite(list);
        return Result.success();
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/DeviceStateController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,80 @@
package com.ruoyi.require.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.numgen.NumberGenerator;
import com.ruoyi.require.dto.DeviceStateDto;
import com.ruoyi.require.excel.DeviceStateExport;
import com.ruoyi.require.pojo.DeviceState;
import com.ruoyi.require.service.DeviceStateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
/**
 * <p>
 * è®¾å¤‡åœç”¨/启用 å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-09-26 09:51:40
 */
@RestController
@RequestMapping("/deviceState")
public class DeviceStateController {
    @Autowired
    private DeviceStateService deviceStateService;
    @Autowired
    private NumberGenerator<DeviceState> numberGenerator;
    @PostMapping("saveDeviceState")
    public Result saveIncidentReportData(@RequestBody DeviceState deviceState) {
        if (ObjectUtils.isEmpty(deviceState.getProcessNumber())) {
            String year = new SimpleDateFormat("yy", Locale.CHINESE).format(new Date());
            String month = new SimpleDateFormat("MM", Locale.CHINESE).format(new Date());
            String processNumber = numberGenerator.generateNumberWithPrefix(3, "DG-TC-23FM " + month + "-" + year + month, DeviceState::getProcessNumber);
            deviceState.setProcessNumber(processNumber);
        }
        deviceStateService.saveOrUpdate(deviceState);
        return Result.success();
    }
    @GetMapping("/getDeviceStatePage")
    public Result getDeviceStatePage(@RequestParam("deviceId") Integer deviceId, Page page, String processNumber){
        return Result.success(deviceStateService.getDeviceStatePage(deviceId, page, processNumber));
    }
    @DeleteMapping("/deleteDeviceState")
    public Result deleteDeviceState(@RequestParam("stateId") Integer stateId){
        return Result.success(deviceStateService.removeById(stateId));
    }
    @GetMapping("/deviceStateExport")
    public Result deviceStateExport(@RequestParam("deviceId") Integer deviceId, String processNumber, HttpServletResponse response) throws Exception {
        IPage<DeviceStateDto> deviceBorrows = deviceStateService.getDeviceStatePage(deviceId, new Page<>(1, -1), processNumber);
        List<DeviceStateExport> studentList  = JSONObject.parseArray(JSON.toJSONString(deviceBorrows.getRecords()), DeviceStateExport.class);
        response.setHeader("requestType", "excel");
        response.setHeader("Access-Control-Expose-Headers", "requestType");
        // è®¾ç½®å•元格样式
        // ä¿å­˜åˆ°ç¬¬ä¸€ä¸ªsheet中
        EasyExcel.write(response.getOutputStream())
                .head(DeviceStateExport.class)
                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // è‡ªé€‚应列宽
                .sheet("sheet")
                .doWrite(studentList);
        return Result.success();
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/DocumentController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,45 @@
package com.ruoyi.require.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.require.pojo.Document;
import com.ruoyi.require.service.DocumentService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping("/documents")
public class DocumentController {
    @Resource
    private DocumentService documentService;
    @PostMapping("add")
    public Result createDocument(@RequestBody Document document) {
        documentService.save(document);
        return Result.success("ok");
    }
    @GetMapping("/id")
    public Document getDocumentById(Integer id) {
        return documentService.getById(id);
    }
    @PostMapping("updateDocument")
    public Result updateDocument(@RequestBody Document document) {
        return Result.success(documentService.updateById(document));
    }
    @DeleteMapping("/deleteDocumentById")
    public Result deleteDocumentById( Integer id) {
        return Result.success(documentService.removeById(id));
    }
    @GetMapping("/getListByDId")
    public Result getAllDocuments(Integer id) {
        LambdaQueryWrapper<Document> lambdaQueryWrapper=new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(Document::getDeviceId,id);
        return Result.success(documentService.list(lambdaQueryWrapper));
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/FeCalibrationScheduleController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,88 @@
package com.ruoyi.require.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.read.listener.PageReadListener;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.require.excel.FeCalibrationScheduleExport;
import com.ruoyi.require.pojo.FeCalibrationSchedule;
import com.ruoyi.require.service.FeCalibrationScheduleService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
/**
 * <p>
 * ä»ªå™¨è®¾å¤‡æ£€å®š/校准计划表 å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-13 02:53:05
 */
@Api(tags = "量值溯源计划")
@RestController
@RequestMapping("/feCalibrationSchedule")
public class FeCalibrationScheduleController {
    @Resource
    private FeCalibrationScheduleService feCalibrationScheduleService;
    @ApiOperation(value = "量值溯源计划查询")
    @GetMapping("/getPageCalibrationSchedule")
    public Result<IPage<FeCalibrationSchedule>> getPageCalibrationSchedule(Page page, String instrumentName, String managementNumber) {
        IPage<FeCalibrationSchedule> ipage = feCalibrationScheduleService.page(page,instrumentName, managementNumber);
        return Result.success(ipage);
    }
    @ApiOperation(value = "量值溯源计划新增编辑")
    @PostMapping("/addCalibrationSchedule")
    public Result addCalibrationSchedule(@RequestBody FeCalibrationSchedule feCalibrationSchedule) {
        return Result.success(feCalibrationScheduleService.saveOrUpdate(feCalibrationSchedule));
    }
    @ApiOperation(value = "量值溯源计划删除")
    @DeleteMapping("/removeCalibrationSchedule")
    public Result removeCalibrationSchedule(Integer id) {
        return Result.success(feCalibrationScheduleService.removeById(id));
    }
    @ApiOperation(value = "量值溯源计划导出")
    @GetMapping("exportOfValueTraceabilityPlan")
    public void exportOfValueTraceabilityPlan(String instrumentName, String managementNumber,
                                       HttpServletResponse response) throws Exception {
        IPage<FeCalibrationSchedule> data = feCalibrationScheduleService.page(new Page<>(-1, -1),instrumentName, managementNumber);
        List<FeCalibrationScheduleExport> studentList  = JSONObject.parseArray(JSON.toJSONString(data.getRecords()), FeCalibrationScheduleExport.class);
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setHeader("requestType", "excel");
        response.setHeader("Access-Control-Expose-Headers", "requestType");
        // è®¾ç½®å•元格样式
        // ä¿å­˜åˆ°ç¬¬ä¸€ä¸ªsheet中
        EasyExcel.write(response.getOutputStream())
                .head(FeCalibrationScheduleExport.class)
                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // è‡ªé€‚应列宽
                .sheet("sheet")
                .doWrite(studentList);
    }
    @ApiOperation(value = "量值溯源计划导入")
    @PostMapping("/importOfValueTraceabilityPlan")
    public void importOfValueTraceabilityPlan(MultipartFile file) throws IOException {
        if (file.isEmpty()) {
            return;
        }
        EasyExcel.read(file.getInputStream(), FeCalibrationScheduleExport.class, new PageReadListener<FeCalibrationScheduleExport>(dataList -> {
            List<FeCalibrationSchedule> studentList  = JSONObject.parseArray(JSON.toJSONString(dataList), FeCalibrationSchedule.class);
            feCalibrationScheduleService.saveOrUpdateBatch(studentList);
        })).sheet().doRead();
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/FeIlluminationController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,87 @@
package com.ruoyi.require.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.require.dto.FeIlluminationAddDto;
import com.ruoyi.require.dto.FeIlluminationDto;
import com.ruoyi.require.pojo.FeIllumination;
import com.ruoyi.require.pojo.FeIlluminationDetectionArea;
import com.ruoyi.require.service.FeIlluminationDetectionAreaService;
import com.ruoyi.require.service.FeIlluminationService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-照度记录表 å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-07 04:15:57
 */
@RestController
@RequestMapping("/feIllumination")
@Api(tags = "设施和环境条件要求-照度记录表")
public class FeIlluminationController {
    @Autowired
    private FeIlluminationService feIlluminationService;
    @Autowired
    private FeIlluminationDetectionAreaService feIlluminationDetectionAreaService;
    @PostMapping("addFeLightningProtection")
    @ApiOperation("设施和环境条件要求-照度记录表-检测区域 æ–°å¢ž/修改")
    public Result<?> addFeLightningProtection(@RequestBody FeIlluminationAddDto feIlluminationAddDto) {
        FeIllumination feIllumination = new FeIllumination();
        BeanUtils.copyProperties(feIlluminationAddDto, feIllumination);
        feIlluminationService.saveOrUpdate(feIllumination);
        feIlluminationAddDto.getIlluminationDetectionAreaList().forEach(i -> i.setIntensityIlluminationId(feIllumination.getIntensityIlluminationId()));
        feIlluminationDetectionAreaService.saveOrUpdateBatch(feIlluminationAddDto.getIlluminationDetectionAreaList());
        return Result.success();
    }
    @DeleteMapping("deleteFeLightningProtection")
    @ApiOperation("设施和环境条件要求-照度记录表-检测区域 åˆ é™¤")
    public Result<?> deleteFeLightningProtection(@RequestParam("intensityIlluminationId") Integer intensityIlluminationId) {
        feIlluminationService.removeById(intensityIlluminationId);
        return Result.success();
    }
    @GetMapping("getFeLightningProtection")
    @ApiOperation("照度记录表-检测区域 æŸ¥è¯¢")
    public Result<IPage<FeIlluminationDto>> getFeLightningProtection(Page page) {
        IPage<FeIlluminationDto> page1 = feIlluminationService.getFeLightningProtection(page);
        return Result.success(page1);
    }
    @DeleteMapping("deleteFeIlluminationDetectionArea")
    @ApiOperation("照度记录表-检测区域 åˆ é™¤")
    public Result<?> deleteFeIlluminationDetectionArea(@RequestParam("detectionAreaId") Integer detectionAreaId) {
        return Result.success(feIlluminationDetectionAreaService.removeById(detectionAreaId));
    }
    @GetMapping("getFeIlluminationDetectionArea")
    @ApiOperation("照度记录表-检测区域 æ ¹æ®ç…§åº¦è®°å½•查询")
    public Result<?> getFeIlluminationDetectionArea(@RequestParam("intensityIlluminationId") Integer intensityIlluminationId) {
        return Result.success(feIlluminationDetectionAreaService.list(Wrappers.<FeIlluminationDetectionArea>lambdaQuery()
                .eq(FeIlluminationDetectionArea::getIntensityIlluminationId, intensityIlluminationId)));
    }
    /**
     * å¯¼å‡ºç…§åº¦è®°å½•
     * @return
     */
    @ApiOperation(value = "导出照度记录")
    @GetMapping("/exportFeIllumination")
    public void exportFeIllumination(Integer intensityIlluminationId, HttpServletResponse response){
        feIlluminationService.exportFeIllumination(intensityIlluminationId, response);
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/FeLightningProtectionController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,80 @@
package com.ruoyi.require.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.utils.FileSaveUtil;
import com.ruoyi.require.excel.FeLightningProtectionExcel;
import com.ruoyi.require.pojo.FeLightningProtection;
import com.ruoyi.require.service.FeLightningProtectionService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-防雷检测 å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-07 04:16:36
 */
@Api(tags = "设施和环境条件要求-防雷检测")
@RestController
@RequestMapping("/feLightningProtection")
public class FeLightningProtectionController {
    @Autowired
    private FeLightningProtectionService feLightningProtectionService;
    @PostMapping("addLightningProtectionDetection")
    @ApiOperation("设施和环境条件要求-防雷检测新增/修改")
    public Result<?> addLightningProtectionDetection(FeLightningProtection feLightningProtection,
                                                     @RequestPart(value = "file", required = false) MultipartFile file) {
        if (ObjectUtils.isNotEmpty(file)) {
            String s = FileSaveUtil.StoreFile(file);
            feLightningProtection.setSystemFileName(s);
            feLightningProtection.setFileName(file.getOriginalFilename());
        }
        feLightningProtectionService.saveOrUpdate(feLightningProtection);
        return Result.success();
    }
    @DeleteMapping("deleteLightningProtectionDetection")
    @ApiOperation("设施和环境条件要求-防雷检测删除")
    public Result<?> deleteFeLightningProtection(@RequestParam("lightningProtectionId") Integer lightningProtectionId) {
        feLightningProtectionService.removeById(lightningProtectionId);
        return Result.success();
    }
    @GetMapping("getLightningProtectionDetection")
    @ApiOperation("设施和环境条件要求-防雷检测查询")
    public Result<IPage<FeLightningProtection>> getFeLightningProtection(Page page) {
        IPage<FeLightningProtection> page1 = feLightningProtectionService.page(page);
        return Result.success(page1);
    }
    @ApiOperation(value = "设施和环境条件要求-防雷检测导出")
    @GetMapping("exportOfLightningProtectionDetection")
    public void exportOfLightningProtectionDetection(HttpServletResponse response) throws Exception {
        List<FeLightningProtectionExcel> ipage = feLightningProtectionService.exportOfLightningProtectionDetection();
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setHeader("requestType", "excel");
        response.setHeader("Access-Control-Expose-Headers", "requestType");
        // è®¾ç½®å•元格样式
        // ä¿å­˜åˆ°ç¬¬ä¸€ä¸ªsheet中
        EasyExcel.write(response.getOutputStream())
                .head(FeLightningProtectionExcel.class)
                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // è‡ªé€‚应列宽
                .sheet("sheet")
                .doWrite(ipage);
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/FePowerStableController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,96 @@
package com.ruoyi.require.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.require.dto.FePowerStableAddDto;
import com.ruoyi.require.dto.FePowerStableDto;
import com.ruoyi.require.pojo.FeMeasuredQuantity;
import com.ruoyi.require.pojo.FePowerStable;
import com.ruoyi.require.service.FeMeasuredQuantityService;
import com.ruoyi.require.service.FePowerStableService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-电源稳定性 å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-07 04:16:52
 */
@Api(tags = "设施和环境条件-设施和环境条件要求-电源稳定性")
@RestController
@RequestMapping("/fePowerStable")
public class FePowerStableController {
    @Autowired
    private FeMeasuredQuantityService feMeasuredQuantityService;
    @Autowired
    private FePowerStableService fePowerStableService;
    @PostMapping("addLaboratoryFacilityPowerStable")
    @ApiOperation("电源稳定性新增/修改")
    public Result<?> addLaboratoryFacilityPowerStable(@RequestBody FePowerStableAddDto fePowerStableAddDto) {
        FePowerStable fePowerStable = new FePowerStable();
        BeanUtils.copyProperties(fePowerStableAddDto, fePowerStable);
        fePowerStableService.saveOrUpdate(fePowerStable);
        fePowerStableAddDto.getFeMeasuredQuantityList().forEach(i -> i.setPowerStableId(fePowerStable.getPowerStableId()));
        feMeasuredQuantityService.saveOrUpdateBatch(fePowerStableAddDto.getFeMeasuredQuantityList());
        return Result.success();
    }
    @DeleteMapping("deleteLaboratoryFacilityPowerStable")
    @ApiOperation("电源稳定性删除")
    public Result<FePowerStable> deleteLaboratoryFacilityPowerStable(@RequestParam("powerStableId") Integer powerStableId) {
        fePowerStableService.removeById(powerStableId);
        feMeasuredQuantityService.remove(Wrappers.<FeMeasuredQuantity>lambdaQuery()
                .eq(FeMeasuredQuantity::getPowerStableId, powerStableId));
        return Result.success();
    }
    @GetMapping("getLaboratoryFacilityPowerStablePage")
    @ApiOperation("电源稳定性查询")
    public Result<IPage<FePowerStableDto>> getLaboratoryFacilityPowerStablePage(
            Page page) {
        IPage<FePowerStableDto> page1 = fePowerStableService.getLaboratoryFacilityPowerStablePage(page);
        return Result.success(page1);
    }
    @ApiOperation("选择设备后查询最新设备编号,校准日期")
    @GetMapping("getCalibrationDate")
    public Result<?> getCalibrationDate(@RequestParam("deviceId") Integer deviceId) {
        return Result.success(fePowerStableService.getCalibrationDate(deviceId));
    }
    @DeleteMapping("deleteFeMeasuredQuantity")
    @ApiOperation("电源稳定性-测定量 åˆ é™¤")
    public Result<?> deleteFeMeasuredQuantity(@RequestParam("measuredQuantityId") Integer measuredQuantityId) {
        return Result.success(feMeasuredQuantityService.removeById(measuredQuantityId));
    }
    @GetMapping("getFeMeasuredQuantityService")
    @ApiOperation("电源稳定性-测定量 æ ¹æ®ç”µæºç¨³å®šæ€§æŸ¥è¯¢")
    public Result<?> getFeMeasuredQuantityService(@RequestParam("powerStableId") Integer powerStableId) {
        return Result.success(feMeasuredQuantityService.list(Wrappers.<FeMeasuredQuantity>lambdaQuery()
                .eq(FeMeasuredQuantity::getPowerStableId, powerStableId)));
    }
    /**
     * å¯¼å‡ºç”µæºç¨³å®šæ€§
     * @return
     */
    @ApiOperation(value = "导出电源稳定性")
    @GetMapping("/exportFePowerStable")
    public void exportFePowerStable(Integer powerStableId, HttpServletResponse response){
        fePowerStableService.exportFePowerStable(powerStableId, response);
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceAcceptanceController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,88 @@
package com.ruoyi.require.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.require.dto.AcceptanceDto;
import com.ruoyi.require.pojo.FeStandardSubstanceAcceptanceInspection;
import com.ruoyi.require.service.FeStandardSubstanceAcceptanceInspectionService;
import com.ruoyi.require.service.FeStandardSubstanceAcceptanceService;
import com.ruoyi.require.vo.AcceptanceVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * æ ‡å‡†ç‰©è´¨éªŒæ”¶ å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-14 03:29:41
 */
@Api(tags = "标准物质验收")
@RestController
@RequestMapping("/feStandardSubstanceAcceptance")
public class FeStandardSubstanceAcceptanceController {
    @Autowired
    private FeStandardSubstanceAcceptanceInspectionService inspectionService;
    @Resource
    private FeStandardSubstanceAcceptanceService feStandardSubstanceAcceptanceService;
    @ApiOperation(value = "新增")
    @PostMapping("/addAcceptance")
    @Transactional
    public Result addAcceptance(@RequestBody AcceptanceDto dto) {
        feStandardSubstanceAcceptanceService.addAcceptance(dto);
        return Result.success();
    }
    @ApiOperation(value = "标准物质验收查询")
    @GetMapping("/getPageAcceptance")
    public Result<IPage<AcceptanceVo>> getPageAcceptance(Page page, String name) {
        IPage<AcceptanceVo> ipage = feStandardSubstanceAcceptanceService.getPageAcceptance(page, name);
        return Result.success(ipage);
    }
    @ApiOperation(value = "标准物质验收删除")
    @DeleteMapping("/deleteAcceptance/{id}")
    public Result deleteAcceptance(@PathVariable("id") Integer id) {
        return Result.success(feStandardSubstanceAcceptanceService.deleteAcceptance(id));
    }
    @ApiOperation(value = "编辑")
    @PostMapping("/updateAcceptance")
    public Result updateAcceptance(@RequestBody AcceptanceDto acceptanceDto) {
        feStandardSubstanceAcceptanceService.updateById(acceptanceDto.getAcceptance());
        for (FeStandardSubstanceAcceptanceInspection v : acceptanceDto.getList()) {
            if (v.getId()== null) {
                inspectionService.save(v);
            }else {
                inspectionService.updateById(v);
            }
        }
        return Result.success();
    }
    @ApiOperation(value = "标准物质验收查询")
    @GetMapping("/getAcceptanceDetails")
    public Result getAcceptanceDetails(Integer id) {
        return Result.success(feStandardSubstanceAcceptanceService.getAcceptanceDetails(id));
    }
    @ApiOperation("导出标准物质验收")
    @GetMapping("/exportFeStandardSubstanceAcceptance")
    public Result exportFeStandardSubstanceAcceptance(HttpServletResponse response) {
        feStandardSubstanceAcceptanceService.exportFeStandardSubstanceAcceptance(response);
        return Result.success();
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceAcceptanceInspectionController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
package com.ruoyi.require.controller;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.require.pojo.FeStandardSubstanceAcceptanceInspection;
import com.ruoyi.require.service.FeStandardSubstanceAcceptanceInspectionService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
 * <p>
 * éªŒæ”¶å¼€ç®±è®°å½• å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-14 03:30:09
 */
@Api(tags = "验收开箱记录")
@RestController
@RequestMapping("/feStandardSubstanceAcceptanceInspection")
public class FeStandardSubstanceAcceptanceInspectionController {
    @Resource
    private FeStandardSubstanceAcceptanceInspectionService feStandardSubstanceAcceptanceInspectionService;
    @ApiOperation(value = "新增或编辑")
    @PostMapping("/addInspection")
    public Result addInspection(@RequestBody FeStandardSubstanceAcceptanceInspection inspection) {
        feStandardSubstanceAcceptanceInspectionService.saveOrUpdate(inspection);
        return Result.success();
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,82 @@
package com.ruoyi.require.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.require.excel.FeStandardSubstanceExcel;
import com.ruoyi.require.pojo.FeStandardSubstance;
import com.ruoyi.require.service.FeStandardSubstanceService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
 * <p>
 * æ ‡å‡†ç‰©è´¨æ¸…单 å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-13 03:58:59
 */
@Api(tags = "标准物质清单")
@RestController
@RequestMapping("/feStandardSubstance")
public class FeStandardSubstanceController {
    @Resource
    private FeStandardSubstanceService feStandardSubstanceService;
    @ApiOperation(value = "标准物质清单查询")
    @GetMapping("/getPageStandardSubstance")
    public Result<IPage<FeStandardSubstance>> getPageStandardSubstance(Page page, FeStandardSubstance feStandardSubstance) {
        IPage<FeStandardSubstance> ipage = feStandardSubstanceService.page(page, feStandardSubstance);
        return Result.success(ipage);
    }
    @ApiOperation(value = "标准物质清单新增编辑")
    @PostMapping("/addStandardSubstance")
    public Result addStandardSubstance(@RequestBody FeStandardSubstance feStandardSubstance) {
        return Result.success(feStandardSubstanceService.saveOrUpdate(feStandardSubstance));
    }
    @ApiOperation(value = "标准物质清单删除")
    @DeleteMapping("/removeStandardSubstance")
    public Result removeStandardSubstance(Integer id) {
        return Result.success(feStandardSubstanceService.removeById(id));
    }
    @ApiOperation(value = "标准物质清单查询所有")
    @GetMapping("/getStandardSubstanceAll")
    public Result<List<FeStandardSubstance>> getStandardSubstanceAll( ) {
        return Result.success(feStandardSubstanceService.list());
    }
    @ApiOperation(value = "标准物质清单导出")
    @GetMapping("exportOfStandardSubstanceList")
    public void exportOfStandardSubstanceList(FeStandardSubstance feStandardSubstance,
                                              HttpServletResponse response) throws Exception {
        IPage<FeStandardSubstance> ipage = feStandardSubstanceService.page(new Page<>(1, -1), feStandardSubstance);
        List<FeStandardSubstanceExcel> studentList  = JSONObject.parseArray(JSON.toJSONString(ipage.getRecords()), FeStandardSubstanceExcel.class);
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setHeader("requestType", "excel");
        response.setHeader("Access-Control-Expose-Headers", "requestType");
        // è®¾ç½®å•元格样式
        // ä¿å­˜åˆ°ç¬¬ä¸€ä¸ªsheet中
        EasyExcel.write(response.getOutputStream())
                .head(FeStandardSubstanceExcel.class)
                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // è‡ªé€‚应列宽
                .sheet("sheet")
                .doWrite(studentList);
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceRecordController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,60 @@
package com.ruoyi.require.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.require.pojo.FeStandardSubstanceRecord;
import com.ruoyi.require.service.FeStandardSubstanceRecordService;
import com.ruoyi.require.vo.SubstanceRecordVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
 * <p>
 * æ ‡å‡†ç‰©è´¨æ¸…单借用归还记录表 å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-14 01:49:11
 */
@Api(tags = "标准物质清单借用归还记录")
@RestController
@RequestMapping("/feStandardSubstanceRecord")
public class FeStandardSubstanceRecordController {
    @Resource
    private FeStandardSubstanceRecordService feStandardSubstanceRecordService;
    @ApiOperation(value = "标准物质清单借用")
    @PostMapping("/borrowSubstance")
    @Transactional
    public Result borrowSubstance(@RequestBody FeStandardSubstanceRecord record) {
        feStandardSubstanceRecordService.borrowSubstance(record);
        return Result.success();
    }
    @ApiOperation(value = "标准物质清单归还")
    @PostMapping("/returnSubstance")
    @Transactional
    public Result returnSubstance(@RequestBody FeStandardSubstanceRecord record) {
        feStandardSubstanceRecordService.returnSubstance(record);
        return Result.success();
    }
    @ApiOperation(value = "标准物质清单领用查询")
    @GetMapping("/getSubstanceRecord")
    public Result getSubstanceRecord(Integer id) {
        return Result.success(feStandardSubstanceRecordService.getSubstanceRecord(id));
    }
    @ApiOperation(value = "分页查询")
    @GetMapping("/getPageSubstanceRecord")
    public Result<IPage<SubstanceRecordVo>> getPageSubstanceRecord(Page page, SubstanceRecordVo vo) {
        IPage<SubstanceRecordVo> ipage = feStandardSubstanceRecordService.getPage(page,vo);
        return Result.success(ipage);
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/FeTempHumDateController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,91 @@
package com.ruoyi.require.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.require.dto.FeTempHumDateDto;
import com.ruoyi.require.dto.FeTempHumRecordDto;
import com.ruoyi.require.pojo.FeTempHumDate;
import com.ruoyi.require.pojo.FeTempHumRecord;
import com.ruoyi.require.service.FeTempHumDateService;
import com.ruoyi.require.service.FeTempHumRecordService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-温湿度 åŒºåŸŸ -父 å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-09 11:02:18
 */
@RestController
@RequestMapping("/feTempHumDate")
@Api(tags = "试验区域")
public class FeTempHumDateController {
    @Autowired
    private FeTempHumDateService feTempHumDateService;
    @Autowired
    private FeTempHumRecordService feTempHumRecordService;
    @PostMapping("addFeTempHumDate")
    @ApiOperation("试验区域-新增/修改")
    public Result<?> addFeTempHumDate(@RequestBody FeTempHumDate feTempHumDate) {
        feTempHumDateService.saveOrUpdate(feTempHumDate);
        return Result.success();
    }
    @DeleteMapping("deleteFeTempHumDate")
    @ApiOperation("试验区域-删除")
    public Result<?> deleteFeTempHumDate(
            @RequestParam("dateId") Integer dateId) {
        feTempHumDateService.removeById(dateId);
        return Result.success();
    }
    @GetMapping("getFeTempHumDate")
    @ApiOperation("试验区域-查询")
    public Result<IPage<FeTempHumDateDto>> getFeTempHumDate(Page page) {
        IPage<FeTempHumDateDto> page1 = feTempHumDateService.getFeTempHumDate(page);
        return Result.success(page1);
    }
    @PostMapping("addFeTempHumRecord")
    @ApiOperation("设施和环境条件要求-温湿度记录新增/修改")
    public Result<FeTempHumRecord> addFeTempHumRecord(@RequestBody FeTempHumRecord feTempHumRecord) {
        feTempHumRecordService.saveOrUpdate(feTempHumRecord);
        return Result.success();
    }
    @DeleteMapping("deleteFeTempHumRecord")
    @ApiOperation("设施和环境条件要求-温湿度记录删除")
    public Result<?> deleteFeTempHumRecord(
            @RequestParam("tempHumId") Integer tempHumId) {
        feTempHumRecordService.removeById(tempHumId);
        return Result.success();
    }
    @GetMapping("getFeTempHumRecordPage")
    @ApiOperation("设施和环境条件要求-温湿度记录查询")
    public Result<IPage<FeTempHumRecordDto>> getFeTempHumRecordPage(Page page, Integer dateId) {
        IPage<FeTempHumRecordDto> page1 = feTempHumRecordService.getFeTempHumRecordPage(page, dateId);
        return Result.success(page1);
    }
    /**
     * æ¸©æ¹¿åº¦è®°å½•导出
     * @return
     */
    @ApiOperation(value = "温湿度记录导出")
    @GetMapping("/exportTemperatureAndHumidityRecords")
    public void exportTemperatureAndHumidityRecords(Integer dateId, HttpServletResponse response){
        feTempHumDateService.exportTemperatureAndHumidityRecords(dateId, response);
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/ForeignRegisterController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,93 @@
package com.ruoyi.require.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.require.dto.ForeignRegisterDto;
import com.ruoyi.require.pojo.ForeignRegister;
import com.ruoyi.require.service.ForeignRegisterService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * å¤–来人员登记 å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-19 07:17:35
 */
@Api(tags = "外来人员登记")
@AllArgsConstructor
@RestController
@RequestMapping("/foreignRegister")
public class ForeignRegisterController {
    private ForeignRegisterService foreignRegisterService;
    /**
     * å¤–来人员登记分页查询
     * @param
     * @return
     */
    @ApiOperation(value = "外来人员登记分页查询")
    @GetMapping("/pageForeignRegister")
    public Result<IPage<ForeignRegisterDto>> pageForeignRegister(Page page, ForeignRegisterDto foreignRegister) throws Exception {
        return Result.success(foreignRegisterService.pageForeignRegister(page, foreignRegister));
    }
    /**
     * å¤–来人员登记新增
     * @return
     */
    @ApiOperation(value = "外来人员登记新增")
    @PostMapping("/addForeignRegister")
    public Result addForeignRegister(@RequestBody ForeignRegister foreignRegister){
        return Result.success(foreignRegisterService.save(foreignRegister));
    }
    /**
     * å¤–来人员登记修改
     * @return
     */
    @ApiOperation(value = "外来人员登记修改")
    @PostMapping("/updateForeignRegister")
    public Result updateForeignRegister(@RequestBody ForeignRegister foreignRegister){
        return Result.success(foreignRegisterService.updateById(foreignRegister));
    }
    /**
     * å¤–来人员登记删除
     * @return
     */
    @ApiOperation(value = "外来人员登记删除")
    @DeleteMapping("/delForeignRegister")
    public Result delForeignRegister(Integer registerId){
        return Result.success(foreignRegisterService.removeById(registerId));
    }
    /**
     * å¤–来人员登记查看详情
     * @return
     */
    @ApiOperation(value = "外来人员登记查看详情")
    @GetMapping("/getForeignRegisterOne")
    public Result<ForeignRegister> getForeignRegisterOne(Integer registerId){
        return Result.success(foreignRegisterService.getById(registerId));
    }
    /**
     * å¯¼å‡ºå¤–来人员登记
     * @return
     */
    @ApiOperation(value = "导出外来人员登记")
    @GetMapping("/exportForeignRegister")
    public void exportForeignRegister(ForeignRegisterDto foreignRegister, HttpServletResponse response){
        foreignRegisterService.exportForeignRegister(foreignRegister, response);
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/IncidentReportController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,73 @@
package com.ruoyi.require.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.require.dto.IncidentReportAddDto;
import com.ruoyi.require.excel.IncidentReportExport;
import com.ruoyi.require.service.IncidentReportService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
/**
 * <p>
 * è®¾å¤‡éªŒæ”¶æ·»åŠ éªŒæ”¶å­—æ®µè¡¨ å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-09-19 03:54:49
 */
@RestController
@RequestMapping("/incidentReport")
public class IncidentReportController {
    @Autowired
    private IncidentReportService incidentReportService;
    @PostMapping("saveIncidentReportData")
    public Result saveIncidentReportData(@RequestBody IncidentReportAddDto incidentReportAddDto) {
        incidentReportService.saveIncidentReportData(incidentReportAddDto);
        return Result.success();
    }
    @GetMapping("/getShowIncidentReport")
    public Result getShowIncidentReport(@RequestParam("id") Integer id) {
        return Result.success(incidentReportService.getShowIncidentReport(id));
    }
    @DeleteMapping("/deleteIncidentReport")
    public Result deleteIncidentReport(@RequestParam("id") Integer id) {
        incidentReportService.deleteIncidentReport(id);
        return Result.success();
    }
    @GetMapping("/incidentReportPage")
    public Result incidentReportPage(@RequestParam("deviceId") Integer deviceId, Page page, String processNumber){
        return Result.success(incidentReportService.getByDeviceId(deviceId, page, processNumber));
    }
    @DeleteMapping("deleteIncidentReportAll")
    public Result deleteIncidentReport(Integer sparePartsId, Integer fileId, Integer installId, Integer acceptanceCheckId) {
        incidentReportService.deleteIncidentReportAll(sparePartsId, fileId, installId, acceptanceCheckId);
        return Result.success();
    }
    @GetMapping("/incidentReportExport")
    public Result incidentReportPage(@RequestParam("deviceId") Integer deviceId, HttpServletResponse response) throws IOException {
        List<IncidentReportExport> list = incidentReportService.incidentReportExport(deviceId);
        response.setHeader("requestType", "excel");
        response.setHeader("Access-Control-Expose-Headers", "requestType");
        // è®¾ç½®å•元格样式
        // ä¿å­˜åˆ°ç¬¬ä¸€ä¸ªsheet中
        EasyExcel.write(response.getOutputStream())
                .head(IncidentReportExport.class)
                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // è‡ªé€‚应列宽
                .sheet()
                .doWrite(list);
        return Result.success();
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/InstructionController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,102 @@
package com.ruoyi.require.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.require.dto.InstructionDto;
import com.ruoyi.require.pojo.Instruction;
import com.ruoyi.require.pojo.OperationInstruction;
import com.ruoyi.require.service.InstructionService;
import com.ruoyi.require.service.OperationInstructionService;
import com.ruoyi.require.vo.OperationInstructionVo;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * <p>
 * ä½œä¸šæŒ‡å¯¼ä¹¦æ·»åŠ å—æŽ§æ–‡ä»¶è¡¨ å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-12-04 10:29:18
 */
@RestController
@RequestMapping("/instruction")
public class InstructionController {
    @Autowired
    private InstructionService instructionService;
    @Autowired
    private OperationInstructionService operationInstructionService;
    @ApiOperation(value = "作业指导书 åˆ†é¡µ")
    @GetMapping("/pageByPageQueryOfHomeworkInstructions")
    public Result<IPage<Instruction>> pageByPageQueryOfHomeworkInstructions(Page page){
        return Result.success(instructionService.pageByPageQueryOfHomeworkInstructions(page));
    }
    @ApiOperation(value = "作业指导书新增")
    @PostMapping("/newHomeworkGuidebookAdded")
    public Result newHomeworkGuidebookAdded(@RequestBody InstructionDto instructionDto){
        instructionService.newHomeworkGuidebookAdded(instructionDto);
        return Result.success();
    }
    @ApiOperation(value = "作业指导书编辑")
    @GetMapping("/homeworkGuidebookEditor")
    public Result<Map<String, Object>> homeworkGuidebookEditor(Integer instructionId){
        Instruction instruction = instructionService.getById(instructionId);
        List<OperationInstructionVo> list = operationInstructionService.homeworkGuidebookEditor(instructionId);
        HashMap<String, Object> map = new HashMap<>();
        map.put("list", list);
        map.put("instruction", instruction);
        return Result.success(map);
    }
    @ApiOperation(value = "作业指导书受控文件删除")
    @GetMapping("/deleteHomeworkGuidebook")
    public Result deleteHomeworkGuidebook(String ids){
        if (ObjectUtils.isNotEmpty(ids)) {
            String[] idArray = ids.split(",");
            operationInstructionService.removeBatchByIds(Arrays.asList(idArray));
        }
        return Result.success();
    }
    @ApiOperation(value = "作业指导书删除")
    @DeleteMapping("/homeworkGuidebook")
    public Result homeworkGuidebook(String id, String instructionId){
        // åˆ é™¤å­è¡¨æ•°æ®
        operationInstructionService.removeById(id);
        // å¦‚果子表数据为空
        long count = operationInstructionService.count(Wrappers.<OperationInstruction>lambdaQuery()
                .eq(OperationInstruction::getInstructionId, instructionId));
        // é‚£ä¹ˆå°±åˆ é™¤çˆ¶è¡¨æ•°æ®
        if (count < 1) {
            instructionService.removeById(id);
        }
        return Result.success();
    }
    @ApiOperation(value = "作业指导书审批")
    @PostMapping("/approvalOfHomeworkInstructionManual")
    public Result approvalOfHomeworkInstructionManual(String id, Boolean status){
        operationInstructionService.update(Wrappers.<OperationInstruction>lambdaUpdate()
                .eq(OperationInstruction::getId, id)
                .set(OperationInstruction::getStatus, status)
                .set(OperationInstruction::getApproverId, SecurityUtils.getUserId())
                .set(OperationInstruction::getEntryIntoForceTime, LocalDateTime.now()));
        return Result.success();
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/InternalWastesController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,93 @@
package com.ruoyi.require.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.require.dto.InternalWastesDto;
import com.ruoyi.require.pojo.InternalWastes;
import com.ruoyi.require.service.InternalWastesService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * å®‰å…¨å†…务三废登记 å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-19 06:39:27
 */
@Api(tags = "安全内务三废登记")
@AllArgsConstructor
@RestController
@RequestMapping("/internalWastes")
public class InternalWastesController {
    private InternalWastesService internalWastesService;
    /**
     * å®‰å…¨å†…务三废处理分页查询
     * @param
     * @return
     */
    @ApiOperation(value = "安全内务三废处理分页查询")
    @GetMapping("/pageInternalWastes")
    public Result<IPage<InternalWastesDto>> pageInternalWastes(Page page,InternalWastes internalWastes) throws Exception {
        return Result.success(internalWastesService.pageInternalWastes(page, internalWastes));
    }
    /**
     * å®‰å…¨å†…务三废处理新增
     * @return
     */
    @ApiOperation(value = "安全内务三废处理新增")
    @PostMapping("/addInternalWastes")
    public Result addInternalWastes(@RequestBody InternalWastesDto internalWastes){
        return Result.success(internalWastesService.addInternalWastes(internalWastes));
    }
    /**
     * å®‰å…¨å†…务三废处理修改
     * @return
     */
    @ApiOperation(value = "安全内务三废处理修改")
    @PostMapping("/updateInternalWastes")
    public Result updateInternalWastes(@RequestBody InternalWastesDto internalWastes){
        return Result.success(internalWastesService.updateInternalWastes(internalWastes));
    }
    /**
     * å®‰å…¨å†…务三废处理删除
     * @return
     */
    @ApiOperation(value = "安全内务三废处理删除")
    @DeleteMapping("/delInternalWastes")
    public Result delInternalWastes(Integer wastesId){
        return Result.success(internalWastesService.delInternalWastes(wastesId));
    }
    /**
     * å®‰å…¨å†…务三废处理查看详情
     * @return
     */
    @ApiOperation(value = "安全内务三废处理查看详情")
    @GetMapping("/getInternalWastesOne")
    public Result<InternalWastesDto> getInternalWastesOne(Integer wastesId){
        return Result.success(internalWastesService.getInternalWastesOne(wastesId));
    }
    /**
     * å¯¼å‡ºä¸‰åºŸå¤„理
     * @return
     */
    @ApiOperation(value = "导出三废处理")
    @GetMapping("/exportInternalWastes")
    public void exportInternalWastes(Integer wastesId, HttpServletResponse response){
        internalWastesService.exportInternalWastes(wastesId, response);
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesContentsController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,75 @@
package com.ruoyi.require.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.require.pojo.ProcurementSuppliesContents;
import com.ruoyi.require.service.ProcurementSuppliesContentsService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.util.List;
@Api(tags = "服务和供应品采购公司列表")
@RestController
@RequestMapping("/procurementSuppliesContents")
@AllArgsConstructor
public class ProcurementSuppliesContentsController {
    private ProcurementSuppliesContentsService procurementSuppliesService;
    @ApiOperation(value = "查询目录列表")
    @GetMapping("/directoryListing")
    public Result directoryListing() {
        return Result.success(procurementSuppliesService.directoryListing());
    }
    @ApiOperation(value = "根据id查询")
    @GetMapping("/selectProcurementSuppliesContentById")
    public Result selectProcurementSuppliesContentById(Integer id) {
        return Result.success(procurementSuppliesService.getById(id));
    }
    @ApiOperation(value = "添加子节点")
    @PostMapping("/addProcurementSuppliesContents")
    public Result addProcurementSuppliesContents(@RequestBody ProcurementSuppliesContents procurementSupplies) {
        procurementSupplies.setUpdateTime(LocalDateTime.now());
        procurementSuppliesService.save(procurementSupplies);
        return Result.success(procurementSupplies.getId());
    }
    @ApiOperation(value = "更新子节点")
    @PostMapping("/updateProcurementSuppliesContents")
    public Result updateProcurementSuppliesContents(@RequestBody ProcurementSuppliesContents procurementSupplies) {
        return Result.success(procurementSuppliesService.updateById(procurementSupplies));
    }
    @ApiOperation(value = "删除子节点")
    @DeleteMapping("/deleteProcurementSuppliesContentById")
    public Result deleteProcurementSuppliesContentById(Integer id) {
        List<ProcurementSuppliesContents> list = procurementSuppliesService.list(new LambdaQueryWrapper<ProcurementSuppliesContents>()
                .eq(ProcurementSuppliesContents::getParentId, id));
        if(list.size() > 0) {
            throw new ErrorException("该节点含有子节点,请先删除子节点");
        }
        procurementSuppliesService.removeById(id);
        return Result.success();
    }
    @ApiOperation(value = "查询所有节点")
    @GetMapping("/getNodeNames")
    public Result getNodeNames() {
        return Result.success(procurementSuppliesService.getNodeNames());
    }
    @ApiOperation(value = "获取所有人员")
    @GetMapping("/getUserList")
    public Result getUserList() {
        return Result.success(procurementSuppliesService.getUserList());
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesExpendsController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,50 @@
package com.ruoyi.require.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.require.dto.ProcurementSuppliesExpendDto;
import com.ruoyi.require.service.ProcurementSuppliesExpendsService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
 * <p>
 *  å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-15 03:47:19
 */
@Api(tags = "服务和供应品采购耗材消耗")
@RestController
@RequestMapping("/procurementSuppliesExpends")
public class ProcurementSuppliesExpendsController {
    @Autowired
    private ProcurementSuppliesExpendsService procurementSuppliesExpendsService;
    @ApiOperation(value = "查询所有记录")
    @GetMapping("/procurementSuppliesExpendlist")
    public Result procurementSuppliesExpendlist(Page page,Long procurementSuppliesListId) {
        return Result.success(procurementSuppliesExpendsService.selectAll(page,procurementSuppliesListId));
    }
    @ApiOperation(value = "新增消耗记录")
    @PostMapping("/addProcurementSuppliesExpends")
    public Result addProcurementSuppliesExpends(@RequestBody ProcurementSuppliesExpendDto dto) {
        Integer added = procurementSuppliesExpendsService.addExpends(dto);
        if ( added == 0) {
            return Result.fail("当前库存不足");
        }
        return Result.success(added);
    }
    @ApiOperation(value = "删除消耗记录")
    @DeleteMapping("/deleteProcurementSuppliesExpends")
    public Result deleteProcurementSuppliesExpends(Long expendId) throws ServiceException {
        return Result.success(procurementSuppliesExpendsService.deleteExpends(expendId));
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesListController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,94 @@
package com.ruoyi.require.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.require.dto.ProcurementSuppliesListDto;
import com.ruoyi.require.mapper.ProcurementSuppliesListMapper;
import com.ruoyi.require.mapper.SupplierManagementMapper;
import com.ruoyi.require.pojo.ProcurementSuppliesList;
import com.ruoyi.require.pojo.SupplierManagement;
import com.ruoyi.require.service.ProcurementSuppliesListService;
import com.ruoyi.system.mapper.UserMapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * æœåŠ¡ä¸Žä¾›åº”å•† è€—材列表 å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-15 04:04:32
 */
@Api(tags = "服务和供应品采购耗材")
@RestController
@RequestMapping("/procurementSuppliesList")
public class ProcurementSuppliesListController {
    @Autowired
    private ProcurementSuppliesListService procurementSuppliesListService;
    @Resource
    private ProcurementSuppliesListMapper listMapper;
    @Autowired
    private UserMapper userMapper;
    @Autowired
    private SupplierManagementMapper supplierManagementMapper;
    @ApiOperation(value = "分页查询")
    @GetMapping("/procurementSuppliesList")
    public Result<IPage<ProcurementSuppliesListDto>> procurementSuppliesList(Page page, ProcurementSuppliesListDto list) {
        return Result.success(procurementSuppliesListService.selectList(page, list));
    }
    @ApiOperation(value = "根据id查询耗材")
    @GetMapping("/selectProcurementSuppliesListById")
    public Result selectProcurementSuppliesListById(Integer id) {
        ProcurementSuppliesList procurementSuppliesStore = listMapper.selectById(id);
        ProcurementSuppliesListDto dto = new ProcurementSuppliesListDto();
        BeanUtils.copyProperties(procurementSuppliesStore, dto);
        User user = userMapper.selectById(procurementSuppliesStore.getPersonInCharge());
        User updateUser = userMapper.selectById(procurementSuppliesStore.getUpdateUser());
        SupplierManagement supplierManagement = supplierManagementMapper.selectById(procurementSuppliesStore.getSupplier());
        dto.setPersonInChargeName(user.getName());
        dto.setUpdateUserName(updateUser.getName());
        dto.setSupplierName(supplierManagement.getSupplierName());
        return Result.success(dto);
    }
    @ApiOperation(value = "新增耗材")
    @PostMapping("/addProcurementSuppliesList")
    public Result addProcurementSuppliesList(@RequestBody ProcurementSuppliesListDto dto) {
        return Result.success(procurementSuppliesListService.addProcurementSuppliesList(dto));
    }
    @ApiOperation(value = "编辑耗材")
    @PostMapping("/updateProcurementSuppliesList")
    public Result updateProcurementSuppliesList(@RequestBody ProcurementSuppliesListDto dto) {
        return Result.success(procurementSuppliesListService.updateProcurementSuppliesList(dto));
    }
    @ApiOperation(value = "删除耗材")
    @DeleteMapping("/deleteProcurementSuppliesList")
    public Result deleteProcurementSuppliesList(Long id) {
        return Result.success(listMapper.deleteById(id));
    }
    @ApiOperation(value = "导出耗材列表")
    @GetMapping("/exportProcurementSuppliesList/{parentId}")
    public void exportProcurementSuppliesList( @PathVariable Integer parentId ,HttpServletResponse response) throws Exception {
        procurementSuppliesListService.exportProcurementSuppliesList(parentId,response);
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesStoreController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,80 @@
package com.ruoyi.require.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.require.dto.StoreDto;
import com.ruoyi.require.pojo.ProcurementSuppliesConsumables;
import com.ruoyi.require.pojo.ProcurementSuppliesStore;
import com.ruoyi.require.service.ProcurementSuppliesConsumablesService;
import com.ruoyi.require.service.ProcurementSuppliesStoreService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Api(tags = "服务和供应品采购耗材入库")
@RestController
@RequestMapping("/procurementSuppliesStore")
@AllArgsConstructor
public class ProcurementSuppliesStoreController {
    private ProcurementSuppliesStoreService storeService;
    private ProcurementSuppliesConsumablesService consumablesService;
    @ApiOperation(value = "耗材入库分页查询")
    @GetMapping("/storeList")
    public Result storeList(Page page,StoreDto storeDto) throws Exception {
        return Result.success(storeService.selectStoreList(page, storeDto));
    }
    @ApiOperation(value = "添加耗材入库列表")
    @PostMapping("/addStore")
    public Result addStore(@RequestBody Map<String,Object> map) {
        storeService.addStore(map);
        return Result.success();
    }
    @ApiOperation(value = "删除耗材入库")
    @DeleteMapping("/deleteStore")
    public Result deleteStore(@RequestParam("id") Integer id,@RequestParam("consumablesId") Integer consumablesId) {
        storeService.deleteStore(id,consumablesId);
        return Result.success();
    }
    @ApiOperation(value = "更新耗材入库")
        @PostMapping("/updateStore")
    public Result updateStore(@RequestBody Map<String,Object> map) {
        storeService.updateStore(map);
        return Result.success();
    }
    @ApiOperation(value = "根据id查询耗材入库")
    @GetMapping("/selectStoreById")
    public Result selectStore(Integer id) {
        HashMap<String, Object> map = new HashMap<>();
        ProcurementSuppliesStore procurementSuppliesStore = storeService.getById(id);
        List<ProcurementSuppliesConsumables> list = consumablesService.list(new LambdaQueryWrapper<ProcurementSuppliesConsumables>()
                .eq(ProcurementSuppliesConsumables::getStoreId, id));
        map.put("store", procurementSuppliesStore);
        map.put("consumables", list);
        return Result.success(map);
    }
    @ApiOperation("导出Excel")
    @GetMapping("/exportExcel/{parentId}")
    public void exportExcel(@PathVariable Integer parentId, HttpServletResponse response) throws IOException {
        storeService.exportExcel(parentId, response);
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/ReservationController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,71 @@
package com.ruoyi.require.controller;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.require.dto.DeviceDto;
import com.ruoyi.require.pojo.Reservation;
import com.ruoyi.require.service.DeviceService;
import com.ruoyi.require.service.ReservationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
/**
 * <p>
 * èµ„源预定新建预定表 å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author baomidou
 * @since 2024-09-14
 */
@RestController
@RequestMapping("/reservation")
public class ReservationController {
    @Autowired
    private ReservationService reservationService;
    @Resource
    private DeviceService deviceService;
    @GetMapping("/selectDeviceParameter")
    public Result selectDeviceParameter(Page page,DeviceDto itemParameter,
                                        @RequestParam(value = "laboratoryNameIsNull", required = false) Boolean laboratoryNameIsNull,
                                        @RequestParam(value = "starttime", required = false)String starttime,
                                        @RequestParam(value = "endtime", required = false) String endtime) {
        ArrayList<JSONObject> jsonObjects = reservationService.selectDeviceParameter(page, itemParameter, laboratoryNameIsNull, starttime, endtime);
        return Result.success(jsonObjects);
    }
    @GetMapping("/selectReservationParameterPage")
    public Result selectReservationParameterPage(@RequestParam String deviceId,@RequestParam String reservationTime,@RequestParam String specificTime){
        return Result.success(reservationService.selectReservationParameterPage(deviceId,reservationTime,specificTime));
    }
    @GetMapping("/{id}")
    public Result getList(@PathVariable Integer id) {
        LambdaQueryWrapper<Reservation> lambdaQueryWrapper=new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(Reservation::getDeviceId,id);
        return Result.success(reservationService.list(lambdaQueryWrapper));
    }
    @PostMapping("save")
    public Result save(@RequestBody Reservation reservation){
        reservation.setCreateDate(LocalDateTime.now());
        reservationService.save(reservation);
        return Result.success();
    }
    @DeleteMapping("/delete")
    public Result deleteReservation(String ids) {
        String[] idArray = ids.split(",");
        reservationService.removeBatchByIds(Arrays.asList(idArray));
        return Result.success();
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/SupplierManagementController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,90 @@
package com.ruoyi.require.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.require.pojo.SupplierManagement;
import com.ruoyi.require.service.ProcurementSuppliesContentsService;
import com.ruoyi.require.service.SupplierManagementService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
 * <p>
 * å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-15 02:46:45
 */
@Api(tags = "供应商管理")
@RestController
@RequestMapping("/supplierManagement")
@AllArgsConstructor
public class SupplierManagementController {
    @Autowired
    private SupplierManagementService supplierManagementService;
    @Autowired
    private ProcurementSuppliesContentsService procurementSuppliesContentsService;
    @ApiOperation("查询供方名录")
    @GetMapping("/selectSupplierManagementByParentId/{parentId}")
    public Result<List<SupplierManagement>> selectSupplierManagementByParentId(@PathVariable Integer parentId) throws Exception {
        return Result.success(supplierManagementService.selectSupplierManagementByParentId(parentId));
    }
    @ApiOperation("分页查询合格供方名录")
    @GetMapping("/selectQualifiedSupplierManagementPage")
    public Result<IPage<SupplierManagement>> selectQualifiedSupplierManagement(SupplierManagement supplierManagement, Page page) throws Exception {
        return Result.success(supplierManagementService.selectQualifiedSupplierManagement(page, supplierManagement));
    }
    @ApiOperation("根据ID查询供应商")
    @GetMapping("/selectQualifiedSupplierManagementById/{supplierManagementId}")
    public Result<List<SupplierManagement>> selectQualifiedSupplierManagementById(@PathVariable Integer supplierManagementId) throws Exception {
        return Result.success(supplierManagementService.selectQualifiedSupplierManagementById(supplierManagementId));
    }
    @ApiOperation("新增供应商")
    @PostMapping("/addSupplierManagement")
    public Result addSupplierManagement(@RequestBody SupplierManagement supplierManagement) {
        supplierManagement.setCreateUser(SecurityUtils.getUserId().intValue());
        return Result.success(supplierManagementService.save(supplierManagement));
    }
    @ApiOperation("修改供应商")
    @PostMapping("/updateSupplierManagement")
    public Result updateSupplierManagement(@RequestBody SupplierManagement supplierManagement) {
        supplierManagement.setUpdateUser(SecurityUtils.getUserId().intValue());
        return Result.success(supplierManagementService.updateById(supplierManagement));
    }
    @ApiOperation("删除供应商")
    @DeleteMapping("/delSupplierManagement/{id}")
    public Result delSupplierManagement(@PathVariable Integer id) {
        return Result.success(supplierManagementService.removeById(id));
    }
    @ApiOperation("导出供应商")
    @GetMapping("/exportSupplierManagement/{parentId}")
    public void exportSupplierManagement(@PathVariable Integer parentId, HttpServletResponse response) throws Exception {
        supplierManagementService.exportSupplierManagement(parentId, response);
    }
    @ApiOperation("查询全部供方名录")
    @GetMapping("/selectSupplierManagementAll")
    public Result<List<SupplierManagement>> selectSupplierManagementAll() throws Exception {
        return Result.success(supplierManagementService.selectSupplierManagementAll());
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/SuppliersDirectoryContentsController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,77 @@
package com.ruoyi.require.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.require.pojo.SuppliersDirectoryContents;
import com.ruoyi.require.service.SuppliersDirectoryContentsService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.util.List;
/**
 * <p>
 * æœåŠ¡å’Œä¾›åº”å“é‡‡è´­ç›®å½• å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-12-17 06:14:51
 */
@Api(tags = "供应商管理树")
@RestController
@RequestMapping("/suppliersDirectoryContents")
public class SuppliersDirectoryContentsController {
    @Autowired
    private SuppliersDirectoryContentsService suppliersDirectoryContentsService;
    @ApiOperation(value = "查询目录列表")
    @GetMapping("/suppliersDirectoryContentsListing")
    public Result suppliersDirectoryContentsListing() {
        return Result.success(suppliersDirectoryContentsService.directoryListing());
    }
    @ApiOperation(value = "根据id查询")
    @GetMapping("/selectSuppliersDirectoryContentsById")
    public Result selectSuppliersDirectoryContentsById(Integer id) {
        return Result.success(suppliersDirectoryContentsService.getById(id));
    }
    @ApiOperation(value = "添加子节点")
    @PostMapping("/addSuppliersDirectoryContents")
    public Result addSuppliersDirectoryContents(@RequestBody SuppliersDirectoryContents suppliersDirectoryContents ) {
        suppliersDirectoryContents.setUpdateTime(LocalDateTime.now());
        suppliersDirectoryContentsService.save(suppliersDirectoryContents);
        return Result.success(suppliersDirectoryContents.getId());
    }
    @ApiOperation(value = "更新子节点")
    @PostMapping("/updateSuppliersDirectoryContents")
    public Result updateSuppliersDirectoryContents(@RequestBody SuppliersDirectoryContents suppliersDirectoryContents) {
        return Result.success(suppliersDirectoryContentsService.updateById(suppliersDirectoryContents));
    }
    @ApiOperation(value = "删除子节点")
    @DeleteMapping("/deleteSuppliersDirectoryContentsById")
    public Result deleteSuppliersDirectoryContentsById(Integer id) {
        List<SuppliersDirectoryContents> list = suppliersDirectoryContentsService.list(new LambdaQueryWrapper<SuppliersDirectoryContents>()
                .eq(SuppliersDirectoryContents::getParentId, id));
        if(list.size() > 0) {
            throw new ErrorException("该节点含有子节点,请先删除子节点");
        }
        suppliersDirectoryContentsService.removeById(id);
        return Result.success();
    }
    @ApiOperation(value = "查询所有节点")
    @GetMapping("/getSuppliersDirectoryContentsNodeNames")
    public Result getSuppliersDirectoryContentsNodeNames() {
        return Result.success(suppliersDirectoryContentsService.getSuppliersDirectoryContentsNodeNames());
    }
}
cnas-require/src/main/java/com/ruoyi/require/dto/ADto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.require.dto;
import lombok.Data;
import java.util.List;
@Data
public class ADto {
    private int k;
    private String v;
    private String i;
    private String p;
    private boolean self;
    private List<BDto> c;
}
cnas-require/src/main/java/com/ruoyi/require/dto/AcceptanceDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.ruoyi.require.dto;
import com.ruoyi.require.pojo.FeStandardSubstanceAcceptance;
import com.ruoyi.require.pojo.FeStandardSubstanceAcceptanceInspection;
import lombok.Data;
import java.util.List;
@Data
public class AcceptanceDto {
    private FeStandardSubstanceAcceptance acceptance;
    private List<FeStandardSubstanceAcceptanceInspection> list;
}
cnas-require/src/main/java/com/ruoyi/require/dto/BDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package com.ruoyi.require.dto;
import lombok.Data;
@Data
public class BDto {
    private int k;
    private String v;
    private String i;
    private String u;
    private String p;
    private String g;
}
cnas-require/src/main/java/com/ruoyi/require/dto/DataConfigDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
package com.ruoyi.require.dto;
import com.ruoyi.require.pojo.DataConfig;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
public class DataConfigDto {
    private List<DataConfig> dataConfigList;
    private Boolean isDevice;
    @ApiModelProperty("文件后缀")
    private String fileType;
    @ApiModelProperty("采集地址")
    private String collectUrl;
    @ApiModelProperty("存储地址")
    private String storageUrl;
    @ApiModelProperty("设备IP")
    private String ip;
    @ApiModelProperty("数采-委托字段")
    private String entrustCode;
    @ApiModelProperty("数采-样品字段")
    private String sampleCode;
    @ApiModelProperty("数采-db,mdb文件名称")
    private String dbFileName;
    @ApiModelProperty("数采-db文件 å…‰çº¤å¸¦ç¼–号")
    private String fiberOpticRibbon;
}
cnas-require/src/main/java/com/ruoyi/require/dto/DeviceConfigDtoPage.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,70 @@
package com.ruoyi.require.dto;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class DeviceConfigDtoPage {
    @ApiModelProperty(value = "设备名称")
    private String deviceName;
    @ApiModelProperty(value = "创建用户")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty(value = "文件后缀")
    private String fileType;
    @ApiModelProperty(value = "采集地址")
    private String collectUrl;
    @ApiModelProperty(value = "存储地址")
    private String storageUrl;
    @ApiModelProperty(value = "IP地址")
    private String ip;
    @ApiModelProperty(value = "检验项")
    private String inspectionItem;
    @ApiModelProperty(value = "检验项子项")
    private String inspectionItemSubclass;
    @ApiModelProperty(value = "公式")
    private String formula;
    @ApiModelProperty(value = "参照X")
    private String referx;
    @ApiModelProperty(value = "X")
    private String x;
    @ApiModelProperty(value = "参照Y")
    private String refery;
    @ApiModelProperty(value = "Y")
    private String y;
    private Integer id;
    @ApiModelProperty(value = "检验对象")
    private String sample;
    @ApiModelProperty(value = "检验项目id")
    private Integer structureItemParameterId;
    @ApiModelProperty("数采-委托字段")
    private String entrustCode;
    @ApiModelProperty("数采-样品字段")
    private String sampleCode;
    @ApiModelProperty("数采-db,mdb文件名称")
    private String dbFileName;
    @ApiModelProperty("数采-db文件 å…‰çº¤å¸¦ç¼–号")
    private String fiberOpticRibbon;
}
cnas-require/src/main/java/com/ruoyi/require/dto/DeviceDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
package com.ruoyi.require.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.ruoyi.require.pojo.Device;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DeviceDto extends Device {
    @ApiModelProperty(value = "管理人")
    private String equipmentManagerUser;
    @ApiModelProperty(value = "所属部门")
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private String laboratoryName;
    @ApiModelProperty(value = "检验项目")
    private String insProductItem;
    @ApiModelProperty(value = "管理人姓名")
    private String equipmentManagerName;
    @ApiModelProperty(value = "被授权人姓名")
    private String authorizedPersonName;
    @ApiModelProperty(value = "核准证书编号")
    private String calibrateNo;
    @ApiModelProperty(value = "最近校准日期")
    private LocalDateTime lastCalibrationDateTwo;
    @ApiModelProperty(value = "下次校准日期")
    private LocalDateTime nextCalibrationDateTwo;
}
cnas-require/src/main/java/com/ruoyi/require/dto/DeviceFaultOneDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.ruoyi.require.dto;
import com.ruoyi.require.pojo.DeviceFaultOne;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class DeviceFaultOneDto extends DeviceFaultOne {
    @ApiModelProperty(value = "设备名称")
    private String deviceName;
    @ApiModelProperty(value = "规格型号")
    private String specificationModel;
    @ApiModelProperty(value = "管理编号")
    private String managementNumber;
}
cnas-require/src/main/java/com/ruoyi/require/dto/DeviceMaintenanceExport.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,45 @@
package com.ruoyi.require.dto;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import lombok.Data;
@Data
public class DeviceMaintenanceExport {
    @ColumnWidth(20)
    @ExcelProperty("设备名称")
    private String deviceName;
    @ColumnWidth(20)
    @ExcelProperty("流程编号")
    private String deviceNumber;
    @ColumnWidth(20)
    @ExcelProperty("管理编号")
    private String managementNumber;
    @ColumnWidth(50)
    @ExcelProperty("维护内容")
    private String content;
    @ColumnWidth(20)
    @ExcelProperty("维护时间")
    private String date;
    @ColumnWidth(20)
    @ExcelProperty("下次维护时间")
    private String nextDate;
    @ColumnWidth(20)
    @ExcelProperty("维护类型")
    private String maintenanceType;
    @ColumnWidth(20)
    @ExcelProperty("维护人")
    private String name;
    @ColumnWidth(50)
    @ExcelProperty("备注")
    private String comments;
}
cnas-require/src/main/java/com/ruoyi/require/dto/DeviceMetricRecordDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.ruoyi.require.dto;
import com.ruoyi.require.pojo.DeviceMetricRecord;
import com.ruoyi.require.pojo.DeviceMetricsCopy;
import lombok.Data;
import java.util.List;
@Data
public class DeviceMetricRecordDto extends DeviceMetricRecord {
    private List<DeviceMetricsCopy> deviceMetricsCopyList;
}
cnas-require/src/main/java/com/ruoyi/require/dto/DeviceRecordDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
package com.ruoyi.require.dto;
import com.ruoyi.require.pojo.DeviceRecord;
import lombok.Data;
@Data
public class DeviceRecordDto extends DeviceRecord {
    private String deviceName;
    private String managementNumber;
}
cnas-require/src/main/java/com/ruoyi/require/dto/DeviceStateDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.ruoyi.require.dto;
import com.ruoyi.require.pojo.DeviceState;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class DeviceStateDto extends DeviceState {
    @ApiModelProperty(value = "设备名称")
    private String deviceName;
    @ApiModelProperty(value = "规格型号")
    private String specificationModel;
    @ApiModelProperty(value = "管理编号")
    private String managementNumber;
}
cnas-require/src/main/java/com/ruoyi/require/dto/FeIlluminationAddDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.ruoyi.require.dto;
import com.ruoyi.require.pojo.FeIllumination;
import com.ruoyi.require.pojo.FeIlluminationDetectionArea;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
public class FeIlluminationAddDto extends FeIllumination {
    @ApiModelProperty("设施和环境条件要求-照度记录表-检测区域")
    private List<FeIlluminationDetectionArea> illuminationDetectionAreaList;
}
cnas-require/src/main/java/com/ruoyi/require/dto/FeIlluminationDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.ruoyi.require.dto;
import com.ruoyi.require.pojo.FeIllumination;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
public class FeIlluminationDto extends FeIllumination {
    @ApiModelProperty("检测者")
    private String checkerUser;
    @ApiModelProperty("核查人")
    private String testerUser;
    @ApiModelProperty("设备名称")
    private String deviceName;
    @ApiModelProperty("设备编号")
    private String managementNumber;
    @ApiModelProperty("校准日期")
    private Date calibrationDate;
    @ApiModelProperty("下次校准日期")
    private Date nextCalibrationDate;
}
cnas-require/src/main/java/com/ruoyi/require/dto/FeIlluminationExportDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.ruoyi.require.dto;
import com.ruoyi.require.pojo.FeIllumination;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @Author zhuo
 * @Date 2024/11/28
 */
@Data
public class FeIlluminationExportDto extends FeIllumination {
    @ApiModelProperty("设备名称")
    private String deviceName;
    @ApiModelProperty("设备编号")
    private String managementNumber;
    @ApiModelProperty("校准日期")
    private String calibrationDateString;
    @ApiModelProperty("下次校准日期")
    private String nextCalibrationDateString;
}
cnas-require/src/main/java/com/ruoyi/require/dto/FePowerStableAddDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.ruoyi.require.dto;
import com.ruoyi.require.pojo.FeMeasuredQuantity;
import com.ruoyi.require.pojo.FePowerStable;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
public class FePowerStableAddDto extends FePowerStable {
    @ApiModelProperty("设施和环境条件要求-电源稳定性-测定量")
    private List<FeMeasuredQuantity> feMeasuredQuantityList;
}
cnas-require/src/main/java/com/ruoyi/require/dto/FePowerStableDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.ruoyi.require.dto;
import com.ruoyi.require.pojo.FePowerStable;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
public class FePowerStableDto extends FePowerStable {
    @ApiModelProperty("检测者")
    private String checkerUser;
    @ApiModelProperty("核查人")
    private String testerUser;
    @ApiModelProperty("设备名称")
    private String deviceName;
    @ApiModelProperty("设备编号")
    private String managementNumber;
    @ApiModelProperty("校准日期")
    private Date calibrationDate;
    @ApiModelProperty("下次校准日期")
    private Date nextCalibrationDate;
}
cnas-require/src/main/java/com/ruoyi/require/dto/FePowerStableExportDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
package com.ruoyi.require.dto;
import com.ruoyi.require.pojo.FePowerStable;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @Author zhuo
 * @Date 2024/11/28
 */
@Data
public class FePowerStableExportDto extends FePowerStable {
    @ApiModelProperty("测试日期")
    private String testDateString;
    @ApiModelProperty("设备名称")
    private String deviceName;
    @ApiModelProperty("设备编号")
    private String managementNumber;
    @ApiModelProperty("校准日期")
    private String calibrationDateString;
    @ApiModelProperty("下次校准日期")
    private String nextCalibrationDateString;
}
cnas-require/src/main/java/com/ruoyi/require/dto/FeTempHumDateDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
package com.ruoyi.require.dto;
import com.ruoyi.require.pojo.FeTempHumDate;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class FeTempHumDateDto extends FeTempHumDate {
    @ApiModelProperty("创建人")
    private String createName;
}
cnas-require/src/main/java/com/ruoyi/require/dto/FeTempHumRecordDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.ruoyi.require.dto;
import com.ruoyi.require.pojo.FeTempHumRecord;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class FeTempHumRecordDto extends FeTempHumRecord {
    @ApiModelProperty("下午记录员名称")
    private String afternoonRecorderUser;
    @ApiModelProperty("上午记录员名称")
    private String morningRecorderUser;
    @ApiModelProperty("检测天")
    private Integer month;
    @ApiModelProperty("下午时间")
    private String afternoonTimeStr;
    @ApiModelProperty("上午-时间")
    private String morningTestTimeStr;
}
cnas-require/src/main/java/com/ruoyi/require/dto/ForeignRegisterDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
package com.ruoyi.require.dto;
import com.deepoove.poi.data.PictureRenderData;
import com.ruoyi.require.pojo.ForeignRegister;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @Author zhuo
 * @Date 2024/11/19
 */
@Data
public class ForeignRegisterDto extends ForeignRegister {
    @ApiModelProperty("开始时间")
    private String beginDate;
    @ApiModelProperty("结束时间")
    private String endDate;
    @ApiModelProperty("陪同人员签名")
    private PictureRenderData accompanyingRender;
    @ApiModelProperty("批准人员签名")
    private PictureRenderData approveRender;
    @ApiModelProperty("陪同人员签名地址")
    private String accompanyingUrl;
    @ApiModelProperty("陪同人员签名地址")
    private String approveUrl;
}
cnas-require/src/main/java/com/ruoyi/require/dto/IncidentReportAddDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.ruoyi.require.dto;
import com.ruoyi.require.pojo.*;
import lombok.Data;
import java.util.List;
@Data
public class IncidentReportAddDto extends IncidentReport {
    private List<IncidentSpareParts> sparePartsConfirmationList; // å¤‡ä»¶ç¡®è®¤List
    private List<IncidentFile> fileClassConfirmationList; // æ–‡ä»¶ç¡®è®¤List
    private List<IncidentInstall> installationAcceptanceRecordList; // å®‰è£…验收记录
    private List<IncidentAcceptanceCheck> acceptanceCheckRecordList; // éªŒæ”¶æ ¸æŸ¥è®°å½•
    private String deviceName;
    private String managementNumber;
    private String submitUser;
    private String saveState;
    private String manufacturer;
    private String specificationModel;
}
cnas-require/src/main/java/com/ruoyi/require/dto/InformationNotificationDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
package com.ruoyi.require.dto;
import com.ruoyi.require.pojo.InformationNotification;
import lombok.Data;
@Data
public class InformationNotificationDto extends InformationNotification {
    private String senderUser;
    private String consigneeUser;
}
cnas-require/src/main/java/com/ruoyi/require/dto/InstructionDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.ruoyi.require.dto;
import com.ruoyi.require.pojo.Instruction;
import com.ruoyi.require.pojo.OperationInstruction;
import lombok.Data;
import java.util.List;
@Data
public class InstructionDto extends Instruction {
    private List<OperationInstruction> feTempHumRecordList;
}
cnas-require/src/main/java/com/ruoyi/require/dto/InternalWastesDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.ruoyi.require.dto;
import com.ruoyi.require.pojo.InternalWastes;
import com.ruoyi.require.pojo.InternalWastesDetail;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * @Author zhuo
 * @Date 2024/11/19
 */
@Data
public class InternalWastesDto extends InternalWastes {
    @ApiModelProperty("三废登记详情")
    private List<InternalWastesDetail> wastesDetailList;
}
cnas-require/src/main/java/com/ruoyi/require/dto/OperationInstructionDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.ruoyi.require.dto;
import com.ruoyi.require.pojo.OperationInstruction;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class OperationInstructionDto extends OperationInstruction {
    @ApiModelProperty("申请编号")
    private String applicationNumber;
    @ApiModelProperty("申请部门")
    private String applicationDepartment;
    @ApiModelProperty("责任人")
    private String personLiable;
    @ApiModelProperty("受控申请说明")
    private String controlledApplicationDescription;
    @ApiModelProperty("管理编号")
    private String deviceNumber;
    @ApiModelProperty("型号")
    private String deviceModel;
    @ApiModelProperty("设备名称")
    private String deviceName;
    @ApiModelProperty("上传人")
    private String uploaderName;
    @ApiModelProperty("审批人")
    private String approverName;
}
cnas-require/src/main/java/com/ruoyi/require/dto/ProcurementSuppliesExpendDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.ruoyi.require.dto;
import com.ruoyi.require.pojo.ProcurementSuppliesExpends;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class ProcurementSuppliesExpendDto extends ProcurementSuppliesExpends {
    /**
     * é¡¹ç›®è€—材名称
     */
    @ApiModelProperty("项目耗材名称")
    private String listName;
    /**
     * å½•入人名称
     */
    @ApiModelProperty("录入人名称")
    private String enterUserName; //
    /**
     * æ›´æ–°äººåç§°
     */
    @ApiModelProperty("更新人名称")
    private String updateUserName; //
}
cnas-require/src/main/java/com/ruoyi/require/dto/ProcurementSuppliesListDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.ruoyi.require.dto;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.ruoyi.require.pojo.ProcurementSuppliesList;
import lombok.Data;
@Data
@ExcelIgnoreUnannotated
public class ProcurementSuppliesListDto extends ProcurementSuppliesList {
    @ExcelProperty("参考供应商")
    private String supplierName; // ä¾›åº”商名称
    @ExcelProperty("更新人")
    private String updateUserName; // æ›´æ–°äººåç§°
    @ExcelProperty("负责人")
    private String personInChargeName; // è´Ÿè´£äººåç§°
}
cnas-require/src/main/java/com/ruoyi/require/dto/ProcurementSuppliesListEDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,104 @@
package com.ruoyi.require.dto;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
@ExcelIgnoreUnannotated
public class ProcurementSuppliesListEDto {
    @TableId(value = "id", type = IdType.AUTO)
    @ApiModelProperty("编号")
    @ExcelProperty("编号")
    private Long id;
    @ApiModelProperty("目录id")
    @ExcelProperty("目录")
    private Long contentsId;
    @ApiModelProperty("耗材类型")
    @ExcelProperty("类别")
    private String consumablesType;
    @ApiModelProperty("货号")
    @ExcelProperty("货号")
    private String itemNumber;
    @ApiModelProperty("耗材名称")
    @ExcelProperty("名称")
    private String consumablesName;
    @ApiModelProperty("规格")
    @ExcelProperty("规格")
    private String specifications;
    @ApiModelProperty("计量单位")
    @ExcelProperty("计量单位")
    private String unit;
    @ApiModelProperty("参考价格")
    @ExcelProperty("参考价格")
    private BigDecimal referencePrice;
    @ApiModelProperty("存放位置")
    @ExcelProperty("存放位置")
    private Integer contentId;
    @ApiModelProperty("负责人")
    @ExcelProperty("负责人")
    private Integer personInCharge;
    @ApiModelProperty("库存上限")
    @ExcelProperty("库存上限")
    private Integer upperLimit;
    @ApiModelProperty("库存下限")
    @ExcelProperty("库存下限")
    private Integer lowerLimit;
    @ApiModelProperty("供应商")
    @ExcelProperty("供应商")
    private Integer supplier;
    @ApiModelProperty("耗材图标")
    @ExcelProperty("耗材图标")
    private String consumablesIcon;
    @ApiModelProperty("耗材附件")
    @ExcelProperty("耗材附件")
    private String attachment;
    @ApiModelProperty("备注")
    @ExcelProperty("备注")
    private String remark;
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty("创建时间")
    @ExcelProperty("创建时间")
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty("更新时间")
    @ExcelProperty("更新时间")
    private LocalDateTime updateTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @ApiModelProperty("更新人")
    @ExcelProperty("更新人")
    private Integer updateUser;
    @ApiModelProperty("当前库存数量")
    @ExcelProperty("当前库存")
    private Integer currentAmount;
}
cnas-require/src/main/java/com/ruoyi/require/dto/ReservationDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
package com.ruoyi.require.dto;
import com.ruoyi.require.pojo.Reservation;
import lombok.Data;
@Data
public class ReservationDto extends Reservation {
    private String name;
}
cnas-require/src/main/java/com/ruoyi/require/dto/StoreDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.ruoyi.require.dto;
import com.ruoyi.require.pojo.ProcurementSuppliesStore;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class StoreDto extends ProcurementSuppliesStore {
    @ApiModelProperty("耗材名称")
    private String consumablesName;
    @ApiModelProperty("入库数量")
    private Integer storeNumber;
    @ApiModelProperty("入库总价")
    private Double totalPrice;
    @ApiModelProperty("登记人")
    private String registrantName;
    @ApiModelProperty("入库人")
    private String storageUserName;
    private Integer consumablesId;
}
cnas-require/src/main/java/com/ruoyi/require/dto/SupplierManagementDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,67 @@
package com.ruoyi.require.dto;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ExcelIgnoreUnannotated
public class SupplierManagementDto {
    @ApiModelProperty("供应商")
    @ExcelProperty("供应商")
    private String supplierName;
    @ApiModelProperty("编号")
    @ExcelProperty("编号")
    private String supplierRef;
    @ApiModelProperty("供应商物品服务名称")
    @ExcelProperty("供应商物品服务名称")
    private String supplierItemServiceName;
    @ApiModelProperty("邮编")
    @ExcelProperty("邮编")
    private String postalCode;
    @ApiModelProperty("地址")
    @ExcelProperty("地址")
    private String adress;
    @ApiModelProperty("联系人")
    @ExcelProperty("联系人")
    private String contacts;
    @ApiModelProperty("联系电话")
    @ExcelProperty("联系电话")
    private String phone;
    @ApiModelProperty("户名")
    @ExcelProperty("户名")
    private String householdName;
    @ApiModelProperty("传真")
    @ExcelProperty("传真")
    private String fax;
    @ApiModelProperty("开户行")
    @ExcelProperty("开户行")
    private String openingName;
    @ApiModelProperty("网址")
    @ExcelProperty("网址")
    private String website;
    @ApiModelProperty("账号")
    @ExcelProperty("账号")
    private String accountName;
    @ApiModelProperty("email")
    @ExcelProperty("email")
    private String email;
    @ApiModelProperty("备注")
    @ExcelProperty("备注")
    private String remarks;
}
cnas-require/src/main/java/com/ruoyi/require/excel/DeviceFaultOneExport.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
package com.ruoyi.require.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class DeviceFaultOneExport {
    @ExcelProperty("流程编号")
    private String processNumber;
    @ExcelProperty(value = "设备名称")
    private String deviceName;
    @ExcelProperty(value = "统一编号")
    private String managementNumber;
    @ExcelProperty("故障情况")
    private String faultSituation;
    @ExcelProperty("提交人")
    private String submitPerson;
    @ExcelProperty("提交日期")
    private LocalDateTime createTime;
    @ExcelProperty("当前状态")
    private String currentState;
    @ExcelProperty("当前责任人")
    private String currentResponsible;
}
cnas-require/src/main/java/com/ruoyi/require/excel/DeviceRecordExport.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,49 @@
package com.ruoyi.require.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import lombok.Data;
@Data
public class DeviceRecordExport {
    @ExcelProperty("流程编号")
    private String deviceNumber;
    @ExcelProperty("设备名称")
    private String deviceName;
    @ExcelProperty("管理编号")
    private String managementNumber;
    @ExcelProperty("温度")
    @ColumnWidth(10)
    private String temperature;
    @ExcelProperty("湿度")
    @ColumnWidth(10)
    private String humidity;
    @ExcelProperty("使用前")
    private String useBefore;
    @ExcelProperty("使用后")
    private String useAfter;
    @ExcelProperty("异常情况")
    private String abnormal;
    @ExcelProperty("使用开始日期")
    private String useDate;
    @ExcelProperty("使用结束日期")
    private String useEndDate;
    @ExcelProperty("使用人")
    private String usePerson;
    @ExcelProperty("备注")
    private String remark;
}
cnas-require/src/main/java/com/ruoyi/require/excel/DeviceStateExport.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
package com.ruoyi.require.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class DeviceStateExport {
    @ExcelProperty(value = "设备名称")
    private String deviceName;
    @ExcelProperty(value = "规格型号")
    private String specificationModel;
    @ExcelProperty(value = "管理编号")
    private String managementNumber;
    @ExcelProperty("设备状态")
    private String deviceStatus;
    @ExcelProperty("停用启用理由")
    private String reason;
    @ExcelProperty("提交人")
    private String createUser;
    @ExcelProperty("提交日期")
    private LocalDateTime createTime;
    @ExcelProperty("当前状态")
    private String currentState;
    @ExcelProperty("当前负责人")
    private String currentResponsible;
}
cnas-require/src/main/java/com/ruoyi/require/excel/FeCalibrationScheduleExport.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
package com.ruoyi.require.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class FeCalibrationScheduleExport {
    @ExcelProperty("仪器名称")
    private String instrumentName;
    @ExcelProperty("规格型号")
    private String model;
    @ExcelProperty("管理编号")
    private Integer managementNumber;
    @ExcelProperty("技术指标")
    private String technicalIndicators;
    @ExcelProperty("检定周期")
    private String verificationCyde;
    @ExcelProperty("检定单位")
    private String verificationUnit;
    @ExcelProperty("最近检定时间")
    private LocalDateTime recentlyTime;
    @ExcelProperty("计划下次检定时间")
    private LocalDateTime nextTime;
    @ExcelProperty("备注")
    private String remark;
}
cnas-require/src/main/java/com/ruoyi/require/excel/FeLightningProtectionExcel.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.ruoyi.require.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
@Data
public class FeLightningProtectionExcel {
    @ExcelProperty("原文件名")
    private String fileName;
    @ExcelProperty("检测日期")
    private String detectionDate;
    @ExcelProperty("有效期")
    private String termValidity;
    @ExcelProperty("检测单位")
    private String detectionUnit;
    @ExcelProperty("创建时间")
    private String createTime;
}
cnas-require/src/main/java/com/ruoyi/require/excel/FeStandardSubstanceExcel.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,54 @@
package com.ruoyi.require.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class FeStandardSubstanceExcel {
    @ExcelProperty("标准物质名称")
    private String name;
    @ExcelProperty("规格型号")
    private String model;
    @ExcelProperty("生产厂家")
    private String factoryManufacturer;
    @ExcelProperty("出场编号")
    private String factoryNum;
    @ExcelProperty("管理编号")
    private String manageNum;
    @ExcelProperty("不确定度")
    private String uncertainty;
    @ExcelProperty("数量")
    private Long quantity;
    @ExcelProperty("购置日期")
    private LocalDateTime acquisitionDate;
    @ExcelProperty("有效期")
    private LocalDateTime effectiveDate;
    @ExcelProperty("文档编号")
    private String fileNum;
    @ExcelProperty("存放位置")
    private String position;
    @ExcelProperty("借调状态")
    private Integer state;
    @ExcelProperty("备注")
    private String remark;
    @ExcelProperty("创建人")
    private String createUser;
    @ExcelProperty("创建日期")
    private LocalDateTime createTime;
}
cnas-require/src/main/java/com/ruoyi/require/excel/IncidentReportExport.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
package com.ruoyi.require.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
@Data
public class IncidentReportExport {
    @ExcelProperty(value = "流程编号")
    private String processNumber;
    @ExcelProperty(value = "设备名称")
    private String deviceName;
    @ExcelProperty(value = "管理编号")
    private String managementNumber;
    @ExcelProperty(value = "序列号")
    private String serialNumber;
    @ExcelProperty(value = "提交者")
    private String submitUser;
    @ExcelProperty(value = "提交日期")
    private String createTime;
    @ExcelProperty(value = "当前状态")
    private String saveState;
    @ExcelProperty("当前负责人")
    private String currentResponsible;
}
cnas-require/src/main/java/com/ruoyi/require/excel/StoreExcel.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
package com.ruoyi.require.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.time.LocalDate;
@Data
public class StoreExcel {
    @ExcelProperty("入库单号")
    private String oddNumbers;
    @ExcelProperty("耗材名称")
    private String consumablesName;
    @ExcelProperty("入库数量")
    private Integer storeNumber;
    @ExcelProperty("入库总价")
    private Double totalPrice;
    @ExcelProperty("入库人")
    private String storageUserName;
    @ExcelProperty("入库日期")
    private LocalDate storageTime;
    @ExcelProperty("说明")
    private String remark;
    @ExcelProperty("登记人")
    private String registrantName;
    @ExcelProperty("登记日期")
    private LocalDate registrantTime;
}
cnas-require/src/main/java/com/ruoyi/require/handler/BasicReportHandler.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,556 @@
package com.ruoyi.require.handler;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.deepoove.poi.data.*;
import com.deepoove.poi.data.style.*;
import com.ruoyi.framework.util.MyUtil;
import com.ruoyi.inspect.dto.SampleProductDto;
import com.ruoyi.inspect.mapper.InsOrderMapper;
import com.ruoyi.inspect.mapper.InsSampleMapper;
import com.ruoyi.inspect.pojo.InsProduct;
import com.ruoyi.inspect.pojo.InsReport;
import com.ruoyi.require.service.impl.InsOrderPlanServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.TableRowAlign;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import java.text.Collator;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
/**
 * åŸºç¡€æŠ¥å‘Šå¤„理类
 */
public class BasicReportHandler {
    /**
     * é»˜è®¤è¡¨æ ¼å®½åº¦
     */
    private final static int[] DEFAULT_COL_WIDTHS = {650, 1600, 2000, 750, 2800, 1100, 1100};
    /**
     * å…‰çº¤è¡¨æ ¼å®½åº¦
     */
    private final static int[] FIBER_COL_WIDTHS = {650, 1700, 2000, 750, 2000, 1800, 1100};
    private final InsOrderMapper baseMapper;
    private final InsOrderPlanServiceImpl insOrderPlanServiceImpl;
    private final InsSampleMapper insSampleMapper;
    public BasicReportHandler(InsOrderMapper insOrderMapper, InsOrderPlanServiceImpl insOrderPlanServiceImpl, InsSampleMapper insSampleMapper){
        this.baseMapper = insOrderMapper;
        this.insOrderPlanServiceImpl = insOrderPlanServiceImpl;
        this.insSampleMapper = insSampleMapper;
    }
    /**
     * å†™å…¥æ–¹æ³•
     * @param samples         æ‰€æœ‰æ ·å“
     * @param insReport       report对象
     * @param tables          æ£€éªŒé¡¹è¡¨æ ¼æ•°æ®
     * @param standardMethod  æ ‡å‡†æ–¹æ³•
     * @param models          æ‰€æœ‰æ ·å“çš„型号
     * @param unEqualSet      åŽ»é‡çš„æ‰€æœ‰æ£€éªŒé¡¹ç›®æ•°é‡
     * @param modelDl         ç”µåŠ›ç‰¹æ®Šåž‹å·å¤„ç†
     * @param deviceSet       åŽ»é‡çš„æ‰€æœ‰æ£€éªŒé¡¹ä½¿ç”¨è®¾å¤‡åˆ—è¡¨
     */
    public void doWrite(List<SampleProductDto> samples, InsReport insReport, List<Map<String,Object>> tables,
                        Set<String> standardMethod, Set<String> models, Set<String> unEqualSet,
                        List<String> modelDl, Set<String> deviceSet){
        //处理光纤项目和松套管,排除温度循环
        List<InsProduct> fiberList = new ArrayList<>();
        samples.forEach(s->{
            fiberList.addAll(s.getInsProduct().stream().filter(p->(p.getSonLaboratory().equals("光纤试验室")&&Objects.isNull(p.getSpecialItemParentId())
                    ||(p.getSonLaboratory().equals("材料试验室")&&Objects.nonNull(p.getInsFiberId()))
                    ||(p.getInspectionItem().contains("松套管")||p.getInspectionItemSubclass().contains("松套管")))
                    &&!p.getInspectionItem().equals("温度循环")).collect(Collectors.toList()));
        });
        if(!fiberList.isEmpty()){
            //根据检验项分组
            Map<String, List<InsProduct>> groupMap = fiberList.stream().collect(Collectors.groupingBy(g -> MyUtil.joinChars("",g.getInspectionItem(),g.getInspectionItemSubclass())));
            SampleProductDto sampleProductDto = new SampleProductDto();
            List<InsProduct> handleProductList = new ArrayList<>();
            for (String s : groupMap.keySet()) {
                if(!groupMap.get(s).isEmpty()){
                    List<String> lastValueList = groupMap.get(s).stream().map(InsProduct::getLastValue).map(String::trim).collect(Collectors.toList());
                    String lastValue = "";
                    boolean a = lastValueList.contains("符合");
                    if(lastValueList.contains("符合") || lastValueList.contains("不符合") || lastValueList.contains("不判定")){
                        long count1 = lastValueList.stream().filter(f->f.equals("符合")).count();
                        long count2 = lastValueList.stream().filter(f->f.equals("不符合")).count();
                        if(count1>0&&count2==0){
                            lastValue = "符合";
                        }else if(count2>0){
                            lastValue = "不符合";
                        }else{
                            lastValue="不判定";
                        }
                    }else {
                        double maxLastValue = lastValueList.stream().mapToDouble(Double::parseDouble).max().orElse(0);
                        double minLastValue = lastValueList.stream().mapToDouble(Double::parseDouble).min().orElse(0);
                        lastValue = minLastValue+"-"+maxLastValue;
                    }
                    InsProduct insProduct = groupMap.get(s).get(0);
                    sampleProductDto.setModel(insProduct.getModel());
                    insProduct.setLastValue(lastValue);
                    handleProductList.add(insProduct);
                }
            }
            handleProductList.sort((o1,o2)->{
                //根据检验项排序
                if(!Objects.equals(o1.getInspectionItem(),o2.getInspectionItem())){
                    List<String> specialItems = Arrays.asList("耐环境应力开裂","热收缩率");
                    if(specialItems.contains(o1.getInspectionItem()) && specialItems.contains(o2.getInspectionItem())){
                        return Integer.MAX_VALUE;
                    }
                    Collator instance = Collator.getInstance(Locale.CHINA);
                    return instance.compare(o1.getInspectionItem(),o2.getInspectionItem());
                }
                //检验子项排序
                if(StringUtils.isNotBlank(o1.getInspectionItemSubclass())&& StringUtils.isNotBlank(o2.getInspectionItemSubclass())){
                    if(!Objects.equals(o1.getInspectionItemSubclass(),o2.getInspectionItemSubclass())){
                        Collator instance = Collator.getInstance(Locale.CHINA);
                        return instance.compare(o1.getInspectionItemSubclass(),o2.getInspectionItemSubclass());
                    }
                }
                return 0;
            });
            sampleProductDto.setInsProduct(handleProductList);
            //写入表格
            writeTableRow(sampleProductDto,insReport,tables,FIBER_COL_WIDTHS);
        }
        samples.forEach(a -> {
            Set<Integer> set = new HashSet<>();
            Map<Integer, String> map2 = new HashMap<>();
            //添加所有检验项
            unEqualSet.addAll(a.getInsProduct().stream().map(m->m.getInspectionItem()+m.getInspectionItemSubclass()).collect(Collectors.toList()));
            models.add(a.getModel());
            standardMethod.add(baseMapper.getStandardMethodCode(a.getStandardMethodListId()));
            insOrderPlanServiceImpl.getTemplateThing(set, map2, a.getInsProduct());
            for (InsProduct b : a.getInsProduct()) {
                if("电力试验室".equals(b.getSonLaboratory()) && Arrays.asList("钢材","铝材").contains(b.getSample())){
                    modelDl.add(b.getModel());
                }
                if (b.getInsProductResult() != null) {
                    if (ObjectUtils.isNotEmpty(b.getInsProductResult().getEquipValue())) {
                        List<JSONObject> jsonObjects = JSON.parseArray(b.getInsProductResult().getEquipValue(), JSONObject.class);
                        for (JSONObject jsonObject : jsonObjects) {
                            if (!(jsonObject.get("v") + "").isEmpty()) {
                                deviceSet.add(jsonObject.get("v") + "");
                            }
                        }
                    }
                }
            }
            //写入表格
            //排除光纤试验室的项目和松套管,除了温度循环
            a.setInsProduct(a.getInsProduct().stream()
                    .filter(p->(!p.getSonLaboratory().equals("光纤试验室")&&Objects.isNull(p.getInsFiberId()))||p.getInspectionItem().equals("温度循环"))
                    .filter(p->!p.getInspectionItem().contains("松套管")&&!p.getInspectionItemSubclass().contains("松套管"))
                    .collect(Collectors.toList()));
            writeTableRow(a,insReport,tables,DEFAULT_COL_WIDTHS);
        });
    }
    /**
     * å†™å…¥è¡¨æ ¼è¡Œ
     * @param a           æ ·å“ä¿¡æ¯
     * @param insReport   report对象
     * @param tables     æ£€éªŒé¡¹è¡¨æ ¼å¯¹è±¡
     * @param colWidths  è¡¨æ ¼åˆ—宽设置
     */
    private static void writeTableRow(SampleProductDto a,InsReport insReport,List<Map<String,Object>> tables,int[] colWidths){
        List<RowRenderData> rows = new ArrayList<>();
        AtomicInteger index = new AtomicInteger();
        Set<String> itemSet = new HashSet<>();
        for (int i = 0; i < 3 + a.getInsProduct().size(); i++) {
            RowRenderData rowRenderData = new RowRenderData();
            RowStyle rowStyle = new RowStyle();
            rowStyle.setHeight(40);
            rowRenderData.setRowStyle(rowStyle);
            List<CellRenderData> cells = new ArrayList<>();
            if (i >= 2 && i < 2 + a.getInsProduct().size()) {
                if (itemSet.add(a.getInsProduct().get(i - 2).getInspectionItem())) {
                    index.getAndIncrement();
                }
            }
            //列数
            for (int j = 0; j < 7; j++) {
                CellRenderData cellRenderData = new CellRenderData();
                CellStyle cellStyle = new CellStyle();
                cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
                cellRenderData.setCellStyle(cellStyle);
                List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
                ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
                ParagraphStyle paragraphStyle = new ParagraphStyle();
                paragraphStyle.setAlign(ParagraphAlignment.CENTER);
                paragraphRenderData.setParagraphStyle(paragraphStyle);
                List<RenderData> renderData = new ArrayList<>();
                TextRenderData textRenderData = new TextRenderData();
                Style style = new Style();
                style.setFontFamily("宋体");
                style.setFontSize(10);
                style.setColor("000000");
                textRenderData.setStyle(style);
                if (i == 0) {
                    //第一行
                    if (j == 0 || j == 1) {
                        //第一列和第二列
                        if(StringUtils.isNotBlank(a.getSampleCode())){
                            textRenderData.setText("样品编号@Sample number∑1");
                        }else{
                            textRenderData.setText("规格型号@Type∑0302");
                        }
                        renderData.add(textRenderData);
                        paragraphRenderData.setContents(renderData);
                        paragraphRenderDataList.add(paragraphRenderData);
                        cellRenderData.setParagraphs(paragraphRenderDataList);
                        cells.add(cellRenderData);
                    } else if (j == 2 || j == 3) {
                        //第三列和第四列
                        if(StringUtils.isNotBlank(a.getSampleCode())){
                            textRenderData.setText(a.getSampleCode() + "∑2");
                        }else{
                            textRenderData.setText("规格型号@Type∑0302");
                        }
                        renderData.add(textRenderData);
                        paragraphRenderData.setContents(renderData);
                        paragraphRenderDataList.add(paragraphRenderData);
                        cellRenderData.setParagraphs(paragraphRenderDataList);
                        cells.add(cellRenderData);
                    } else if (j == 4) {
                        //第五列
                        textRenderData.setText("规格型号@Type∑0302");
                        renderData.add(textRenderData);
                        paragraphRenderData.setContents(renderData);
                        paragraphRenderDataList.add(paragraphRenderData);
                        cellRenderData.setParagraphs(paragraphRenderDataList);
                        cells.add(cellRenderData);
                    } else {
                        //第六列和第七列
                        textRenderData.setText(a.getModel() + "∑3");
                        renderData.add(textRenderData);
                        paragraphRenderData.setContents(renderData);
                        paragraphRenderDataList.add(paragraphRenderData);
                        cellRenderData.setParagraphs(paragraphRenderDataList);
                        cells.add(cellRenderData);
                    }
                } else if (i == 1) {
                    //第二行
                    if (j == 0) {
                        //第一列
                        textRenderData.setText("序号@No.");
                        renderData.add(textRenderData);
                        paragraphRenderData.setContents(renderData);
                        paragraphRenderDataList.add(paragraphRenderData);
                        cellRenderData.setParagraphs(paragraphRenderDataList);
                        cells.add(cellRenderData);
                    } else if (j == 1 || j == 2) {
                        //第二列和第三列
                        textRenderData.setText("检测项目@Testing item∑4");
                        renderData.add(textRenderData);
                        paragraphRenderData.setContents(renderData);
                        paragraphRenderDataList.add(paragraphRenderData);
                        cellRenderData.setParagraphs(paragraphRenderDataList);
                        cells.add(cellRenderData);
                    } else if (j == 3) {
                        //第四列
                        textRenderData.setText("单位@Unit");
                        renderData.add(textRenderData);
                        paragraphRenderData.setContents(renderData);
                        paragraphRenderDataList.add(paragraphRenderData);
                        cellRenderData.setParagraphs(paragraphRenderDataList);
                        cells.add(cellRenderData);
                    } else if (j == 4) {
                        //第五列
                        textRenderData.setText("标准要求@Requirement");
                        renderData.add(textRenderData);
                        paragraphRenderData.setContents(renderData);
                        paragraphRenderDataList.add(paragraphRenderData);
                        cellRenderData.setParagraphs(paragraphRenderDataList);
                        cells.add(cellRenderData);
                    } else if (j == 5) {
                        //第六列
                        textRenderData.setText("检验结果@Test result");
                        renderData.add(textRenderData);
                        paragraphRenderData.setContents(renderData);
                        paragraphRenderDataList.add(paragraphRenderData);
                        cellRenderData.setParagraphs(paragraphRenderDataList);
                        cells.add(cellRenderData);
                    } else {
                        //第七列
                        textRenderData.setText("结论@Conclusion");
                        renderData.add(textRenderData);
                        paragraphRenderData.setContents(renderData);
                        paragraphRenderDataList.add(paragraphRenderData);
                        cellRenderData.setParagraphs(paragraphRenderDataList);
                        cells.add(cellRenderData);
                    }
                } else if (i == 2 + a.getInsProduct().size()) {
                    //最后一行
                    if (j == 0 || j == 1) {
                        //第一列和第二列
                        textRenderData.setText("备注∑5");
                        renderData.add(textRenderData);
                        paragraphRenderData.setContents(renderData);
                        paragraphRenderDataList.add(paragraphRenderData);
                        cellRenderData.setParagraphs(paragraphRenderDataList);
                        cells.add(cellRenderData);
                    } else {
                        //其余列
                        textRenderData.setText("“√”表示项目合格,“×”表示项目不合格。@“√” indicates test item is qualified,“×” indicates test item is not qualified âˆ‘6");
                        renderData.add(textRenderData);
                        paragraphRenderData.setContents(renderData);
                        paragraphRenderDataList.add(paragraphRenderData);
                        cellRenderData.setParagraphs(paragraphRenderDataList);
                        cells.add(cellRenderData);
                    }
                } else {
                    //其余行
                    if (j == 0) {
                        //第一列
                        textRenderData.setText(index + "∑2" + index);
                        renderData.add(textRenderData);
                        paragraphRenderData.setContents(renderData);
                        paragraphRenderDataList.add(paragraphRenderData);
                        cellRenderData.setParagraphs(paragraphRenderDataList);
                        cells.add(cellRenderData);
                    } else if (j == 1) {
                        //第二列
                        InsProduct insProduct = a.getInsProduct().get(i - 2);
                        if (ObjectUtil.isNotEmpty(insProduct.getInspectionItemSubclass())) {
                            if (ObjectUtil.isNotEmpty(insProduct.getInspectionItemEn())) {
                                String str = MyUtil.joinChars("@",insProduct.getInspectionItem(),insProduct.getInspectionItemEn());
                                textRenderData.setText(str + "∑3" + str);
                            } else {
                                textRenderData.setText(insProduct.getInspectionItem() + "∑3" + insProduct.getInspectionItem());
                            }
                        } else {
                            if (ObjectUtil.isNotEmpty(insProduct.getInspectionItemEn())) {
                                String str = MyUtil.joinChars("@",insProduct.getInspectionItem(),insProduct.getInspectionItemEn());
                                textRenderData.setText(str + "∑3" + str);
                            } else {
                                textRenderData.setText(insProduct.getInspectionItem() + "∑3" + insProduct.getInspectionItem());
                            }
                        }
                        renderData.add(textRenderData);
                        paragraphRenderData.setContents(renderData);
                        paragraphRenderDataList.add(paragraphRenderData);
                        cellRenderData.setParagraphs(paragraphRenderDataList);
                        cells.add(cellRenderData);
                    } else if (j == 2) {
                        //第三列
                        InsProduct insProduct = a.getInsProduct().get(i - 2);
                        if (ObjectUtil.isNotEmpty(insProduct.getInspectionItemSubclass())) {
                            if (ObjectUtil.isNotEmpty(insProduct.getInspectionItemSubclassEn())) {
                                String str = MyUtil.joinChars("@",insProduct.getInspectionItemSubclass(),insProduct.getInspectionItemSubclassEn());
                                textRenderData.setText(str);
                            } else {
                                textRenderData.setText(insProduct.getInspectionItemSubclass());
                            }
                        } else {
                            if (ObjectUtil.isNotEmpty(insProduct.getInspectionItemEn())) {
                                String str = MyUtil.joinChars("@",insProduct.getInspectionItem(),insProduct.getInspectionItemEn());
                                textRenderData.setText(str + "∑3" + str);
                            } else {
                                textRenderData.setText(insProduct.getInspectionItem() + "∑3" + insProduct.getInspectionItem());
                            }
                        }
                        renderData.add(textRenderData);
                        paragraphRenderData.setContents(renderData);
                        paragraphRenderDataList.add(paragraphRenderData);
                        cellRenderData.setParagraphs(paragraphRenderDataList);
                        cells.add(cellRenderData);
                    } else if (j == 3) {
                        //第四列
                        textRenderData.setText(ObjectUtil.isNotEmpty(a.getInsProduct().get(i - 2).getUnit()) ? a.getInsProduct().get(i - 2).getUnit() : "");
                        renderData.add(textRenderData);
                        paragraphRenderData.setContents(renderData);
                        paragraphRenderDataList.add(paragraphRenderData);
                        cellRenderData.setParagraphs(paragraphRenderDataList);
                        cells.add(cellRenderData);
                    } else if (j == 4) {
                        //第五列
                        textRenderData.setText(a.getInsProduct().get(i - 2).getTell());
                        renderData.add(textRenderData);
                        paragraphRenderData.setContents(renderData);
                        paragraphRenderDataList.add(paragraphRenderData);
                        cellRenderData.setParagraphs(paragraphRenderDataList);
                        cells.add(cellRenderData);
                    } else if (j == 5) {
                        //第六列
                        textRenderData.setText(a.getInsProduct().get(i - 2).getLastValue());
                        renderData.add(textRenderData);
                        paragraphRenderData.setContents(renderData);
                        paragraphRenderDataList.add(paragraphRenderData);
                        cellRenderData.setParagraphs(paragraphRenderDataList);
                        cells.add(cellRenderData);
                    } else {
                        //第七列
                        InsProduct p = a.getInsProduct().get(i - 2);
                        if (p.getInsResult() == 0) {
                            textRenderData.setText("×");
                        } else if (a.getInsProduct().get(i - 2).getInsResult() == 1) {
                            textRenderData.setText("√");
                        } else {
                            textRenderData.setText("-");
                        }
                        renderData.add(textRenderData);
                        paragraphRenderData.setContents(renderData);
                        paragraphRenderDataList.add(paragraphRenderData);
                        cellRenderData.setParagraphs(paragraphRenderDataList);
                        cells.add(cellRenderData);
                    }
                }
            }
            rowRenderData.setCells(cells);
            if (!rowRenderData.getCells().isEmpty()) {
                rows.add(rowRenderData);
            }
        }
        //写入表格的行
        TableRenderData tableRenderData = new TableRenderData();
        tableRenderData.setRows(rows);
        List<TableRenderData> tables1 = new ArrayList<>();
        tableRenderData.setRows(new ArrayList<>());
        double totalHeight = 0;
        double heightThreshold = 700.0; // å•页高度阈值
        List<RowRenderData> firstTwoRows = new ArrayList<>(); // ä¿å­˜å‰ä¸¤è¡Œä»¥ä¾¿å¤åˆ¶åˆ°æ–°è¡¨æ ¼
        List<RowRenderData> endRows = new ArrayList<>(); // ä¿å­˜å‰ä¸¤è¡Œä»¥ä¾¿å¤åˆ¶åˆ°æ–°è¡¨æ ¼
        // ä¿å­˜å‰ä¸¤è¡Œä»¥ä¾¿å¤åˆ¶åˆ°æ–°è¡¨æ ¼
        firstTwoRows.add(rows.get(0));
        firstTwoRows.add(rows.get(1));
        endRows.add(rows.get(rows.size() - 1));
        for (RowRenderData row : rows) {
            double rowHeight = row.getRowStyle().getHeight(); // èŽ·å–å½“å‰è¡Œçš„è¡Œé«˜
            // åˆ¤æ–­å­—体内容是否有多的, å¤šçš„行高乘倍数
            RowRenderData lastRaw = rows.get(rows.size() - 1);
            // æŽ’除最后一行
            if (rows.get(0) != row && rows.get(1) != row  && lastRaw != row) {
                // è°ƒæ•´é«˜åº¦
                rowHeight = adjustRowHeight(row, rowHeight);
            }
            totalHeight += rowHeight; // æ›´æ–°æ€»è¡Œé«˜
            if (totalHeight> heightThreshold) {
                tableRenderData.getRows().addAll(endRows);
                // åˆ›å»ºæ–°è¡¨æ ¼å¹¶å¤åˆ¶å‰ä¸¤è¡Œ
                TableRenderData newTableRenderData = new TableRenderData();
                newTableRenderData.setRows(new ArrayList<>(firstTwoRows));
                //设置样式
                TableStyle tableStyle = new TableStyle();
                tableStyle.setColWidths(colWidths);
                tableStyle.setWidth("10000");
                tableStyle.setAlign(TableRowAlign.CENTER);
                BorderStyle borderStyle = new BorderStyle();
                borderStyle.setColor("000000");
                borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
                borderStyle.setSize(14);
                tableStyle.setLeftBorder(borderStyle);
                tableStyle.setTopBorder(borderStyle);
                tableStyle.setRightBorder(borderStyle);
                tableStyle.setBottomBorder(borderStyle);
                tableRenderData.setTableStyle(tableStyle);
                newTableRenderData.setTableStyle(tableStyle);
                // æ·»åŠ æœ€åŽä¸€è¡Œ
                tableRenderData.addRow(rows.get(rows.size() - 1));
                tables1.add(tableRenderData);
                tableRenderData = newTableRenderData;
                totalHeight = 180 + rowHeight;//180为新页面表头和最后一行的高度
            }
            tableRenderData.getRows().add(row);
        }
        if (!tableRenderData.getRows().isEmpty() && tableRenderData.getRows().size() != 3) {
            //设置样式
            TableStyle tableStyle = new TableStyle();
            tableStyle.setColWidths(colWidths);
            tableStyle.setWidth("10000");
            tableStyle.setAlign(TableRowAlign.CENTER);
            BorderStyle borderStyle = new BorderStyle();
            borderStyle.setColor("000000");
            borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
            borderStyle.setSize(14);
            tableStyle.setLeftBorder(borderStyle);
            tableStyle.setTopBorder(borderStyle);
            tableStyle.setRightBorder(borderStyle);
            tableStyle.setBottomBorder(borderStyle);
            tableRenderData.setTableStyle(tableStyle);
            tables1.add(tableRenderData);
        }
        tables1.forEach(table -> {
            Map<String, Object> tableMap = new HashMap<>();
            tableMap.put("table", table);
            tableMap.put("report", insReport);
            tables.add(tableMap);
        });
    }
    /**
     * è°ƒæ•´é«˜åº¦
     * @param row
     * @param rowHeight
     * @return
     */
    private static double adjustRowHeight(RowRenderData row, double rowHeight) {
        // æ ¹æ®æ£€éªŒé¡¹ç›®åç§°è¿›è¡Œé«˜åº¦è°ƒæ•´
        //根据检验项(i:1)、检验子项(i:2)、标准要求(i:4)中字符最长的来计算
        TextRenderData insItemData = (TextRenderData) row.getCells().get(1).getParagraphs().get(0).getContents().get(0);
        if(insItemData.getText().contains("成分分析")){
            return rowHeight;
        }
        TextRenderData insSubItemData = (TextRenderData) row.getCells().get(2).getParagraphs().get(0).getContents().get(0);
        TextRenderData requiredData = (TextRenderData) row.getCells().get(4).getParagraphs().get(0).getContents().get(0);
        String dataText = insItemData.getText();
        if(insSubItemData.getText().length()>dataText.length()){
            dataText = insSubItemData.getText();
        }
        if(Objects.nonNull(requiredData) && requiredData.getText().length()>dataText.length()){
            dataText = requiredData.getText();
        }
        TextRenderData valueData = (TextRenderData) row.getCells().get(5).getParagraphs().get(0).getContents().get(0);
        String valueText = valueData.getText();
        // èŽ·å–æ£€æµ‹å†…å®¹åˆ¤æ–­æ˜¯å¦è¶…å‡º
        if (StringUtils.isNotBlank(dataText)) {
            double number = 1;
            double chinaLength = 10;
            double englishLength = 20;
            double valueLength = 2;
            // æ ¹æ®@符号截取中英文
            String[] splits = dataText.split("∑");
            String[] split;
            if(splits.length>0){
                split = splits[0].split("@");
            }else{
                split = dataText.split("@");
            }
            // æ–‡å­—倍数
            double chinaMultiple = (Math.ceil(split[0].length() / chinaLength)) - 1;
            // è‹±æ–‡å€æ•°
            double englishMultiple = 0;
            if(split.length>1){
                englishMultiple = (Math.ceil(split[1].length() / englishLength)) - 1;
            }
            double multiple = number + chinaMultiple * 0.5 + englishMultiple * 0.5;
            if (StringUtils.isNotBlank(valueText)) {
                double valueMultiple = (Math.ceil(valueText.length() / valueLength)) - 1;
                if (multiple < number + valueMultiple * 0.4) {
                    multiple = number + valueMultiple * 0.4;
                }
            }
            rowHeight = rowHeight * multiple;
        }
        return rowHeight;
    }
}
cnas-require/src/main/java/com/ruoyi/require/handler/FiberConfigReportHandler.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,617 @@
package com.ruoyi.require.handler;
import com.deepoove.poi.data.*;
import com.deepoove.poi.data.style.*;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.framework.util.MyUtil;
import com.ruoyi.inspect.dto.SampleProductDto;
import com.ruoyi.inspect.mapper.InsProductMapper;
import com.ruoyi.inspect.mapper.InsSampleMapper;
import com.ruoyi.inspect.pojo.InsProduct;
import com.ruoyi.inspect.pojo.InsReport;
import com.ruoyi.inspect.pojo.InsSample;
import com.ruoyi.inspect.vo.InsProductFiberVO;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.TableRowAlign;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import java.text.Collator;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
/**
 * å…‰çº¤é…ç½®æŠ¥å‘Šå¤„理类
 */
public class FiberConfigReportHandler {
    /**
     * é»˜è®¤è¡¨æ ¼å®½åº¦
     */
    private final static int[] DEFAULT_COL_WIDTHS = {1600,0, 1200, 1200, 1200, 1200, 1200, 1200,1200};
    private final InsProductMapper insProductMapper;
    private final InsSampleMapper insSampleMapper;
    public FiberConfigReportHandler(InsProductMapper insProductMapper, InsSampleMapper insSampleMapper){
        this.insProductMapper = insProductMapper;
        this.insSampleMapper = insSampleMapper;
    }
    private final static String ITEM_SPLIT_CHAR = "&";//检验项分隔符
    private final static String COLOR_SPLIT_CHAR = "-";//色标分隔符
    /**
     *
     * @param samples    æ‰€æœ‰æ ·å“
     * @param insReport  report对象
     * @param tables2    å…‰çº¤é…ç½®é™„件表格行列表
     * @param colorDict  è‰²æ ‡å­—å…¸
     */
    public void doWrite(List<SampleProductDto> samples, InsReport insReport, List<Map<String,Object>> tables2,
                        List<String> colorDict){
        AtomicInteger index2 = new AtomicInteger(1);//页码
        samples.forEach(sample -> {
            //查询样品下的检验项和色标
            List<InsProductFiberVO> insProducts1 = insProductMapper.selectInsProductInsFiberList(sample.getId());
            //根据色标分组
            Map<String,List<InsProductFiberVO>> groupProducts = insProducts1.stream()
                    .filter(p->!p.getInspectionItem().equals("光纤接头损耗"))
                    .collect(Collectors.groupingBy(product -> product.getBushColor()+"-"+product.getColor()));
            if(groupProducts.isEmpty()){
                return;
            }
            List<String[]> collect = groupProducts.keySet().stream().map(k -> k.split(COLOR_SPLIT_CHAR)).sorted((o1, o2) -> {
                if (o1.length > 1 && o2.length > 1) {
                    if (!Objects.equals(o1[0], o2[0])) {
                        Integer o1Index = colorDict.indexOf(o1[0]);
                        Integer o2Index = colorDict.indexOf(o2[0]);
                        return o1Index.compareTo(o2Index);
                    }
                    if (!Objects.equals(o1[1], o2[1])) {
                        Integer o1Index = colorDict.indexOf(o1[1]);
                        Integer o2Index = colorDict.indexOf(o2[1]);
                        return o1Index.compareTo(o2Index);
                    }
                }
                return 0;
            }).collect(Collectors.toList());
            List<String> sortKeys = collect.stream().map(c->String.join(COLOR_SPLIT_CHAR,c)).collect(Collectors.toList());
            //检验项列表(表头)
            List<String> itemMap = insProducts1.stream().sorted((o1,o2)->{
                //根据检验项排序
                if(!Objects.equals(o1.getInspectionItem(),o2.getInspectionItem())){
                    List<String> specialItems = Arrays.asList("耐环境应力开裂","热收缩率");
                    if(specialItems.contains(o1.getInspectionItem()) && specialItems.contains(o2.getInspectionItem())){
                        return Integer.MAX_VALUE;
                    }
                    Collator instance = Collator.getInstance(Locale.CHINA);
                    return instance.compare(o1.getInspectionItem(),o2.getInspectionItem());
                }
                //检验子项排序
                if(StringUtils.isNotBlank(o1.getInspectionItemSubclass())&& StringUtils.isNotBlank(o2.getInspectionItemSubclass())){
                    if(!Objects.equals(o1.getInspectionItemSubclass(),o2.getInspectionItemSubclass())){
                        Collator instance = Collator.getInstance(Locale.CHINA);
                        return instance.compare(o1.getInspectionItemSubclass(),o2.getInspectionItemSubclass());
                    }
                }
                return 0;
            }).map(insProduct -> {
                String item = MyUtil.joinChars("@",insProduct.getInspectionItem(),insProduct.getInspectionItemEn());
                String itemSubClass = MyUtil.joinChars("@",insProduct.getInspectionItemSubclass(),insProduct.getInspectionItemSubclassEn());
                return MyUtil.joinChars(ITEM_SPLIT_CHAR,item,itemSubClass);
            }).distinct().collect(Collectors.toList());
            long size = itemMap.size();
            long size2 = insProducts1.stream().map(InsProduct::getInsFiberId).distinct().count();
            long number = 7;
            long k = 0;
            //判断检验项目是否有父子关系
            int a = itemMap.stream().anyMatch(p -> p.split(ITEM_SPLIT_CHAR).length>0) ? 2 : 1;
            for (long c = 0; c < size; c++) {
                if (c % number == 0) {
                    List<RowRenderData> rows = new ArrayList<>();
                    //表格的行数
                    for (long i = 0; i < size2 + a + 1; i++) {
                        RowRenderData rowRenderData = new RowRenderData();
                        RowStyle rowStyle = new RowStyle();
                        rowStyle.setHeight(40);
                        rowRenderData.setRowStyle(rowStyle);
                        List<CellRenderData> cells = new ArrayList<>();
                        //表格的列数
                        for (long j = 0; j < 9; j++) {
                            CellRenderData cellRenderData = new CellRenderData();
                            CellStyle cellStyle = new CellStyle();
                            cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
                            cellRenderData.setCellStyle(cellStyle);
                            List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
                            ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
                            ParagraphStyle paragraphStyle = new ParagraphStyle();
                            paragraphStyle.setAlign(ParagraphAlignment.CENTER);
                            paragraphRenderData.setParagraphStyle(paragraphStyle);
                            List<RenderData> renderData = new ArrayList<>();
                            TextRenderData textRenderData = new TextRenderData();
                            Style style = new Style();
                            style.setFontFamily("宋体");
                            style.setColor("000000");
                            style.setFontSize(10);
                            textRenderData.setStyle(style);
                            if(i==0){
                                //第一行
                                if (j == 0) {
                                    //第一列
                                    textRenderData.setText("样品编号@Sample number∑456");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 1) {
                                    //第二列
                                    textRenderData.setText("样品编号@Sample number∑456");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 2) {
                                    //第二列
                                    textRenderData.setText(sample.getSampleCode()+"∑4566");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }else if (j == 3) {
                                    //第二列
                                    textRenderData.setText(sample.getSampleCode()+"∑4566");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }else if (j == 4) {
                                    //第二列
                                    textRenderData.setText("规格型号@Type∑457");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }else if (j == 5) {
                                    //第二列
                                    textRenderData.setText("规格型号@Type∑457");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }else if (j == 6) {
                                    //第二列
                                    textRenderData.setText(sample.getModel()+"∑4577");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }else if (j == 7) {
                                    //第二列
                                    textRenderData.setText(sample.getModel()+"∑4577");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }else{
                                    //第二列
                                    textRenderData.setText(sample.getModel()+"∑4577");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            }
                            else if (i == 1) {
                                //第二行
                                if (j == 0) {
                                    //第一列
                                    textRenderData.setText("管色标@Pipe∑100");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 1) {
                                    //第二列
                                    textRenderData.setText("光纤色标@Scanning Number∑101");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                    if(itemMap.size()>(int) (j - 2 + k)){
                                        String inspectionItem = itemMap.get((int) (j - 2 + k)).split(ITEM_SPLIT_CHAR)[0];
                                        textRenderData.setText( inspectionItem + "∑" + inspectionItem);
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    }else{
                                        String inspectionItem = itemMap.get(itemMap.size()-1).split(ITEM_SPLIT_CHAR)[0];
                                        textRenderData.setText("∑" + inspectionItem);
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    }
                                }
                            }
                            else if (a == 2 && i == 2) {
                                //有父子项目关系的第三行
                                if (j == 0) {
                                    //第一列
                                    textRenderData.setText("管色标@Pipe∑100");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 1) {
                                    //第二列
                                    textRenderData.setText("光纤色标@Scanning Number∑101");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                    //项目信息
                                    if(itemMap.size()>(int)(j - 2 + k)){
                                        //判断是否有项目子类
                                        String[] splits = itemMap.get((int) (j - 2 + k)).split(ITEM_SPLIT_CHAR);
                                        if (splits.length<2 || "@".equals(splits[1])) {
                                            textRenderData.setText(splits[0] + "∑" + splits[0]);
                                        } else {
                                            textRenderData.setText(splits[1]+"∑"+splits[0]+splits[1]);
                                        }
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    }else{
                                        //判断是否有项目子类
                                        String[] splits = itemMap.get(itemMap.size()-1).split(ITEM_SPLIT_CHAR);
                                        if (splits.length<2 || "@".equals(splits[1])) {
                                            textRenderData.setText("∑" + splits[0]);
                                        } else {
                                            textRenderData.setText("∑"+splits[0]+splits[1]);
                                        }
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    }
                                }
                            }
                            else{
                                //循环色标
                                String key = sortKeys.get((int)i-3);
                                if(itemMap.size()>(int) (j - 2 + k)) {
                                    int index = Math.max((int) (j - 2 + k), 0);
                                    String item = itemMap.get(index);
                                    InsProductFiberVO insProduct = groupProducts.get(key).stream()
                                            .filter(p->{
                                                String insItem = MyUtil.joinChars("@",p.getInspectionItem(),p.getInspectionItemEn());
                                                String insSubItem = MyUtil.joinChars("@",p.getInspectionItemSubclass(),p.getInspectionItemSubclassEn());
                                                return item.equals(MyUtil.joinChars(ITEM_SPLIT_CHAR,insItem,insSubItem));
                                            }).findFirst().orElse(new InsProductFiberVO());
                                    //填值
                                    if (j == 0) {
                                        //第一列
                                        textRenderData.setText(insProduct.getBushColor());
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else if (j == 1) {
                                        //第二列
                                        textRenderData.setText(insProduct.getColor());
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else {
                                        //项目信息
                                        if((index+1)==groupProducts.get(key).size()){
                                            textRenderData.setText(insProduct.getLastValue()+"∑last"+key);
                                        }else{
                                            textRenderData.setText(insProduct.getLastValue());
                                        }
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    }
                                } else {
                                    textRenderData.setText("∑last"+key);
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            }
                        }
                        rowRenderData.setCells(cells);
                        if (!rowRenderData.getCells().isEmpty()) {
                            rows.add(rowRenderData);
                        }
                    }
                    TableRenderData tableRenderData = new TableRenderData();
                    tableRenderData.setRows(rows);
                    int countSize = tableRenderData.getRows().get(0).getCells().size();
                    for (RowRenderData row : tableRenderData.getRows()) {
                        if (row.getCells().size() != countSize) {
                            throw new ErrorException("每行单元格不相等4");
                        }
                    }
                    TableStyle tableStyle = new TableStyle();
                    tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
                    tableStyle.setAlign(TableRowAlign.CENTER);
                    BorderStyle borderStyle = new BorderStyle();
                    borderStyle.setColor("000000");
                    borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
                    borderStyle.setSize(14);
                    tableStyle.setLeftBorder(borderStyle);
                    tableStyle.setTopBorder(borderStyle);
                    tableStyle.setRightBorder(borderStyle);
                    tableStyle.setBottomBorder(borderStyle);
                    tableRenderData.setTableStyle(tableStyle);
                    Map<String, Object> table = new HashMap<>();
                    table.put("table2", tableRenderData);
                    table.put("report", insReport);
                    table.put("sample_number", sample.getSampleCode());
                    table.put("type", sample.getModel());
                    table.put("index2", index2.get());
                    tables2.add(table);
                    k += 7;
                    index2.getAndIncrement();
                }
            }
        });
    }
    /**
     * å…‰çº¤é™„件表格:写入行数据
     * @param fiberList å…‰çº¤é¡¹ç›®ä¿¡æ¯
     * @param tables2   å…‰çº¤é™„件表格
     */
    public void writeFiberEnclosureTableRow(List<InsProduct> fiberList, List<Map<String, Object>> tables2,InsReport insReport) {
        AtomicInteger index2 = new AtomicInteger(1);//页码
        int colCount = 9;//表格总列数
        int itemCount = 7;//表格项目列数
        int k = 0;//已遍历检验项数量
        //检验项列表(表头)
        List<String> itemMap = fiberList.stream().map(insProduct -> {
            String item = MyUtil.joinChars("@",insProduct.getInspectionItem(),insProduct.getInspectionItemEn());
            String itemSubClass = MyUtil.joinChars("@",insProduct.getInspectionItemSubclass(),insProduct.getInspectionItemSubclassEn());
            return MyUtil.joinChars(ITEM_SPLIT_CHAR,item,itemSubClass);
        }).sorted(Comparator.naturalOrder()).distinct().collect(Collectors.toList());
        //根据样品id分组
        Map<Integer,List<InsProduct>> groupProducts = fiberList.stream()
                .collect(Collectors.groupingBy(InsProduct::getInsSampleId));
        //sampleId顺序排序
        List<Integer> sortKeys = groupProducts.keySet().stream().sorted(Comparator.naturalOrder()).collect(Collectors.toList());
        //判断检验项目是否有父子关系
        int a = itemMap.stream().anyMatch(p -> p.split(ITEM_SPLIT_CHAR).length>0) ? 2 : 1;
        for (int c = 0; c < itemMap.size(); c++) {
            if (c % itemCount == 0) {
                List<RowRenderData> rows = new ArrayList<>();
                //表格的行数(样品数量+表头)
                int tableRow = sortKeys.size() + a;
                for (int i = 0; i < tableRow; i++) {
                    RowRenderData rowRenderData = new RowRenderData();
                    RowStyle rowStyle = new RowStyle();
                    rowStyle.setHeight(40);
                    rowRenderData.setRowStyle(rowStyle);
                    List<CellRenderData> cells = new ArrayList<>();
                    //表格的列数
                    for (int j = 0; j < colCount; j++) {
                        CellRenderData cellRenderData = new CellRenderData();
                        CellStyle cellStyle = new CellStyle();
                        cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
                        cellRenderData.setCellStyle(cellStyle);
                        List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
                        ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
                        ParagraphStyle paragraphStyle = new ParagraphStyle();
                        paragraphStyle.setAlign(ParagraphAlignment.CENTER);
                        paragraphRenderData.setParagraphStyle(paragraphStyle);
                        List<RenderData> renderData = new ArrayList<>();
                        TextRenderData textRenderData = new TextRenderData();
                        Style style = new Style();
                        style.setFontFamily("宋体");
                        style.setColor("000000");
                        style.setFontSize(10);
                        textRenderData.setStyle(style);
                        //第一行
                        if(i==0){
                            if (j < 2) {
                                //第一列
                                textRenderData.setText("样品编号@Sample number∑45678");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else{
                                //生成表头
                                if(itemMap.size()> (j - 2 + k)){
                                    String inspectionItem = itemMap.get(j - 2 + k).split(ITEM_SPLIT_CHAR)[0];
                                    textRenderData.setText( inspectionItem + "∑" + inspectionItem);
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }else{
                                    String inspectionItem = itemMap.get(itemMap.size()-1).split(ITEM_SPLIT_CHAR)[0];
                                    textRenderData.setText("∑" + inspectionItem);
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            }
                        }
                        else if (a == 2 && i == 1) {
                            //有父子项目关系的第二行
                            if (j < 2) {
                                //第一列
                                textRenderData.setText("样品编号@Sample number∑45678");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else {
                                //项目信息
                                if(itemMap.size()> (j - 2 + k)){
                                    //判断是否有项目子类
                                    String[] splits = itemMap.get(j - 2 + k).split(ITEM_SPLIT_CHAR);
                                    if (splits.length<2 || "@".equals(splits[1])) {
                                        textRenderData.setText(splits[0] + "∑" + splits[0]);
                                    } else {
                                        textRenderData.setText(splits[1]+"∑"+splits[0]+splits[1]);
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }else{
                                    //判断是否有项目子类
                                    String[] splits = itemMap.get(itemMap.size()-1).split(ITEM_SPLIT_CHAR);
                                    if (splits.length<2 || "@".equals(splits[1])) {
                                        textRenderData.setText("∑" + splits[0]);
                                    } else {
                                        textRenderData.setText("∑"+splits[0]+splits[1]);
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            }
                        }
                        else{
                            //循环样品
                            Integer key = sortKeys.get(i-2);
                            if(itemMap.size()>j - 2 + k) {
                                //查询当前样品信息
                                InsSample insSample = insSampleMapper.selectById(key);
                                int index = Math.max(j - 2 + k, 0);
                                String item = itemMap.get(index);
                                InsProduct insProduct = groupProducts.get(key).stream()
                                        .filter(p->{
                                            String insItem = MyUtil.joinChars("@",p.getInspectionItem(),p.getInspectionItemEn());
                                            String insItemSubClass = MyUtil.joinChars("@",p.getInspectionItemSubclass(),p.getInspectionItemSubclassEn());
                                            return item.equals(MyUtil.joinChars(ITEM_SPLIT_CHAR,insItem,insItemSubClass));
                                        })
                                        .findFirst().orElse(new InsProduct());
                                //填值
                                if (j < 2) {
                                    //第一列
                                    textRenderData.setText(insSample.getSampleCode()+"∑"+key);
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                    //项目信息
                                    if((index+1)==groupProducts.get(key).size()){
                                        textRenderData.setText(insProduct.getLastValue()+"∑last"+key);
                                    }else{
                                        textRenderData.setText(insProduct.getLastValue());
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            } else {
                                textRenderData.setText("∑last"+key);
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                        }
                    }
                    rowRenderData.setCells(cells);
                    if (!rowRenderData.getCells().isEmpty()) {
                        rows.add(rowRenderData);
                    }
                }
                TableRenderData tableRenderData = new TableRenderData();
                tableRenderData.setRows(rows);
                int countSize = tableRenderData.getRows().get(0).getCells().size();
                for (RowRenderData row : tableRenderData.getRows()) {
                    if (row.getCells().size() != countSize) {
                        throw new ErrorException("光纤报告附件表格列数不匹配");
                    }
                }
                TableStyle tableStyle = new TableStyle();
                tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
//                tableStyle.setColWidths(DEFAULT_COL_WIDTHS);
//                tableStyle.setWidth("10000");
                tableStyle.setAlign(TableRowAlign.CENTER);
                BorderStyle borderStyle = new BorderStyle();
                borderStyle.setColor("000000");
                borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
                borderStyle.setSize(14);
                tableStyle.setLeftBorder(borderStyle);
                tableStyle.setTopBorder(borderStyle);
                tableStyle.setRightBorder(borderStyle);
                tableStyle.setBottomBorder(borderStyle);
                tableRenderData.setTableStyle(tableStyle);
                Map<String, Object> table = new HashMap<>();
                table.put("table2", tableRenderData);
                table.put("report", insReport);
                table.put("index2", index2.get());
                tables2.add(table);
                k += 7;
                index2.getAndIncrement();
            }
        }
    }
    /**
     * å…‰çº¤é™„件表格:写入行数据
     * @param ribbonList å…‰çº¤é¡¹ç›®ä¿¡æ¯
     * @param tables6   å…‰çº¤å¸¦å°ºå¯¸å‚数附件表格
     */
    public void writeFiberOpticRibbonEnclosureTableRow(List<InsProduct> ribbonList, List<Map<String, Object>> tables6,InsReport insReport){
    }
}
cnas-require/src/main/java/com/ruoyi/require/handler/FiberOpticConnectorLossReportHandler.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,210 @@
package com.ruoyi.require.handler;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.deepoove.poi.data.*;
import com.deepoove.poi.data.style.*;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.framework.util.MyUtil;
import com.ruoyi.inspect.mapper.InsProductMapper;
import com.ruoyi.inspect.pojo.InsProduct;
import com.ruoyi.inspect.pojo.InsReport;
import com.ruoyi.inspect.pojo.InsSample;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.TableRowAlign;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import java.util.*;
import java.util.stream.Collectors;
/**
 * å…‰çº¤æŽ¥å¤´æŸè€—报告处理类
 */
public class FiberOpticConnectorLossReportHandler {
    private final InsProductMapper insProductMapper;
    public FiberOpticConnectorLossReportHandler(InsProductMapper insProductMapper){
        this.insProductMapper = insProductMapper;
    }
    /**
     *
     * @param insProducts0 å½“前订单下的所有检验项
     * @param insSamples   å½“前订单所有样品
     * @param insReport    report对象
     * @param tables4      å…‰çº¤æŽ¥å¤´æŸè€—附件表格行数据
     */
    public void doWrite(List<InsProduct> insProducts0,
                        List<InsSample> insSamples,
                        InsReport insReport,
                        List<Map<String,Object>> tables4){
//            //去重的检验项目
            List<String> filteredProducts = insProducts0.stream()
                    .map(insProduct -> (MyUtil.joinChars(",",insProduct.getInspectionItem(),insProduct.getInspectionItemEn(),insProduct.getInspectionItemSubclass(),insProduct.getInspectionItemSubclassEn(),insProduct.getTell())))
                    .distinct().collect(Collectors.toList());
            long index4 = 0;
            //光纤接头损耗的报告还是tables4
            //查询样品(只查询带"/")的数量
            List<InsSample> sampleList = insSamples.stream().filter(insSample -> insSample.getSampleCode().contains("/")).collect(Collectors.toList());
            //过滤出光纤接头损耗的检验项目
            List<String> strings = filteredProducts.stream().filter(s -> s.contains("光纤接头损耗")).distinct().sorted(Comparator.naturalOrder()).collect(Collectors.toList());
            long index41 = 1;
            for (int i = 0; i < sampleList.size(); i++) {
                if (i % 16 == 0) {
                    //样品数量超过16需要新增表格
                    List<RowRenderData> rows = new ArrayList<>();
                    int count2 = sampleList.size() - (index41 - 1) * 16 < 16 ? (int) (sampleList.size() - (index41 - 1) * 16 + 1) : 17;
                    //表格的行数
                    for (int j = 0; j < count2; j++) {
                        RowRenderData rowRenderData = new RowRenderData();
                        RowStyle rowStyle = new RowStyle();
                        rowStyle.setHeight(40);
                        rowRenderData.setRowStyle(rowStyle);
                        List<CellRenderData> cells = new ArrayList<>();
                        //表格的列数
                        for (int k = 0; k < 6; k++) {
                            CellRenderData cellRenderData = new CellRenderData();
                            CellStyle cellStyle = new CellStyle();
                            cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
                            cellRenderData.setCellStyle(cellStyle);
                            List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
                            ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
                            ParagraphStyle paragraphStyle = new ParagraphStyle();
                            paragraphStyle.setAlign(ParagraphAlignment.CENTER);
                            paragraphRenderData.setParagraphStyle(paragraphStyle);
                            List<RenderData> renderData = new ArrayList<>();
                            TextRenderData textRenderData = new TextRenderData();
                            Style style = new Style();
                            style.setFontFamily("宋体");
                            style.setColor("000000");
                            textRenderData.setStyle(style);
                            if (j == 0) {
                                //第一行
                                if (k == 0) {
                                    //第一列
                                    textRenderData.setText("光纤类型@Fiber type");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (k == 1 || k == 2) {
                                    //第二 ä¸‰åˆ—
                                    textRenderData.setText("样品编号@Sample number∑3333");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                    String[] split = strings.get(k - 3).split(",");
                                    if (ObjectUtils.isEmpty(split[3]) || split[3].isEmpty()) {
                                        textRenderData.setText(split[2]);
                                    } else {
                                        textRenderData.setText(split[2] + "@" + split[3]);
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            } else {
                                if (k == 0) {
                                    //第一列
                                    textRenderData.setText(sampleList.get(0).getModel() + "∑44");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (k == 1) {
                                    //第二列
                                    textRenderData.setText(sampleList.get(j - 1).getSampleCode().split("/")[0]);
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (k == 2) {
                                    //第三列
                                    textRenderData.setText(sampleList.get(j - 1).getSampleCode().split("/")[1]);
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                    //根据对应的样品编号和检验项目查询对应数据(最终值)
                                    String[] split = strings.get(k - 3).split(",");
                                    // å¦‚果是检验项为光纤接头损耗,则取第一条
                                    InsProduct insProduct = null;
                                    if(split[0].equals("光纤接头损耗")) {
                                        insProduct = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                .eq(InsProduct::getState, 1)
                                                .eq(InsProduct::getInsSampleId, sampleList.get(j - 1).getId())
                                                .eq(InsProduct::getInspectionItem, split[0])
                                                .eq(InsProduct::getInspectionItemSubclass, split[2])).get(0);
                                    }else {
                                        insProduct = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                                .eq(InsProduct::getState, 1)
                                                .eq(InsProduct::getInsSampleId, sampleList.get(j - 1).getId())
                                                .eq(InsProduct::getInspectionItem, split[0])
                                                .eq(InsProduct::getInspectionItemSubclass, split[2]));
                                    }
                                    textRenderData.setText(insProduct.getLastValue());
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            }
                        }
                        rowRenderData.setCells(cells);
                        if (!rowRenderData.getCells().isEmpty()) {
                            rows.add(rowRenderData);
                        }
                    }
                    TableRenderData tableRenderData = new TableRenderData();
                    tableRenderData.setRows(rows);
                    int countSize = tableRenderData.getRows().get(0).getCells().size();
                    for (RowRenderData row : tableRenderData.getRows()) {
                                /*for (CellRenderData cell : row.getCells()) {
                                    System.out.print(cell.getParagraphs().get(0).getContents());
                                }
                                System.out.println("");*/
                        if (row.getCells().size() != countSize) {
                            throw new ErrorException("每行单元格不相等3");
                        }
                    }
                    TableStyle tableStyle = new TableStyle();
                    tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
                    tableStyle.setAlign(TableRowAlign.CENTER);
                    BorderStyle borderStyle = new BorderStyle();
                    borderStyle.setColor("000000");
                    borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
                    borderStyle.setSize(14);
                    tableStyle.setLeftBorder(borderStyle);
                    tableStyle.setTopBorder(borderStyle);
                    tableStyle.setRightBorder(borderStyle);
                    tableStyle.setBottomBorder(borderStyle);
                    tableRenderData.setTableStyle(tableStyle);
                    Map<String, Object> table = new HashMap<>();
                    table.put("table4", tableRenderData);
                    table.put("report", insReport);
                    table.put("index4", index4 + 1);
                    tables4.add(table);
                    index4++;
                    index41++;
                }
            }
            tables4.forEach(table4 -> {
                table4.put("tableSize4", tables4.size());
            });
    }
}
cnas-require/src/main/java/com/ruoyi/require/handler/FiberOpticRibbonReportHandler.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,734 @@
package com.ruoyi.require.handler;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.deepoove.poi.data.*;
import com.deepoove.poi.data.style.*;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.framework.util.MyUtil;
import com.ruoyi.inspect.dto.SampleProductDto;
import com.ruoyi.inspect.mapper.InsProductMapper;
import com.ruoyi.inspect.mapper.InsSampleMapper;
import com.ruoyi.inspect.pojo.InsProduct;
import com.ruoyi.inspect.pojo.InsReport;
import com.ruoyi.inspect.pojo.InsSample;
import com.ruoyi.inspect.vo.InsProductFiberVO;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.TableRowAlign;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import java.text.Collator;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
/**
 * å…‰çº¤å¸¦å°ºå¯¸å‚数报告处理类
 */
public class FiberOpticRibbonReportHandler {
    /**
     * é»˜è®¤è¡¨æ ¼å®½åº¦
     */
    private final static int[] DEFAULT_COL_WIDTHS = {1600,0, 1200, 1200, 1200, 1200, 1200, 1200,1200};
    private final InsProductMapper insProductMapper;
    private final InsSampleMapper insSampleMapper;
    public FiberOpticRibbonReportHandler(InsProductMapper insProductMapper, InsSampleMapper insSampleMapper){
        this.insProductMapper = insProductMapper;
        this.insSampleMapper = insSampleMapper;
    }
    private final static String ITEM_SPLIT_CHAR = "&";//检验项分隔符
    private final static String COLOR_SPLIT_CHAR = "-";//色标分隔符
    /**
     *
     * @param samples    æ‰€æœ‰æ ·å“
     * @param insReport  report对象
     * @param tables6    å°ºå¯¸å‚数附件表格行列表
     * @param colorDict  è‰²æ ‡å­—å…¸
     */
    public void doWrite(List<SampleProductDto> samples, InsReport insReport, List<Map<String,Object>> tables6,
                        List<String> colorDict){
        AtomicInteger index6 = new AtomicInteger(1);//页码
        samples.forEach(sample -> {
            //查询样品下的检验项和光纤带编号
            List<InsProductFiberVO> insProducts1 = insProductMapper.selectInsProductInsFibersList(sample.getId());
            //根据光纤带编号
            Map<String,List<InsProductFiberVO>> groupProducts = insProducts1.stream()
                    .filter(p->p.getInspectionItem().equals("尺寸参数"))
                    .collect(Collectors.groupingBy(product -> product.getBushColor()+"-"+product.getCode()));
            if(groupProducts.isEmpty()){
                return;
            }
            List<String[]> collect = groupProducts.keySet().stream().map(k -> k.split(COLOR_SPLIT_CHAR)).sorted((o1, o2) -> {
                if (o1.length > 1 && o2.length > 1) {
                    if (!Objects.equals(o1[0], o2[0])) {
                        Integer o1Index = colorDict.indexOf(o1[0]);
                        Integer o2Index = colorDict.indexOf(o2[0]);
                        return o1Index.compareTo(o2Index);
                    }
                    if (!Objects.equals(o1[1], o2[1])) {
                        Integer o1Index = colorDict.indexOf(o1[1]);
                        Integer o2Index = colorDict.indexOf(o2[1]);
                        return o1Index.compareTo(o2Index);
                    }
                }
                return 0;
            }).collect(Collectors.toList());
            List<String> sortKeys = collect.stream().map(c->String.join(COLOR_SPLIT_CHAR,c)).collect(Collectors.toList());
            //检验项列表(表头)
            List<String> itemMap = insProducts1.stream().sorted((o1,o2)->{
                //根据检验项排序
                if(!Objects.equals(o1.getInspectionItem(),o2.getInspectionItem())){
                    List<String> specialItems = Arrays.asList("耐环境应力开裂","热收缩率");
                    if(specialItems.contains(o1.getInspectionItem()) && specialItems.contains(o2.getInspectionItem())){
                        return Integer.MAX_VALUE;
                    }
                    Collator instance = Collator.getInstance(Locale.CHINA);
                    return instance.compare(o1.getInspectionItem(),o2.getInspectionItem());
                }
                //检验子项排序
                if(StringUtils.isNotBlank(o1.getInspectionItemSubclass())&& StringUtils.isNotBlank(o2.getInspectionItemSubclass())){
                    if(!Objects.equals(o1.getInspectionItemSubclass(),o2.getInspectionItemSubclass())){
                        Collator instance = Collator.getInstance(Locale.CHINA);
                        return instance.compare(o1.getInspectionItemSubclass(),o2.getInspectionItemSubclass());
                    }
                }
                return 0;
            }).map(insProduct -> {
                String item = MyUtil.joinChars("@",insProduct.getInspectionItem(),insProduct.getInspectionItemEn());
                String itemSubClass = MyUtil.joinChars("@",insProduct.getInspectionItemSubclass(),insProduct.getInspectionItemSubclassEn());
                return MyUtil.joinChars(ITEM_SPLIT_CHAR,item,itemSubClass);
            }).distinct().collect(Collectors.toList());
            long size = itemMap.size();//表头长度
            long size2 = insProducts1.stream().map(InsProduct::getInsFibersId).distinct().count();
            long number = 10;
            //判断检验项目是否有父子关系
            int a = itemMap.stream().anyMatch(p -> p.split(ITEM_SPLIT_CHAR).length>0) ? 2 : 1;
            for (long c = 0; c < size; c++) {
                if (c % number == 0) {
                    List<RowRenderData> rows = new ArrayList<>();
                    //表格的行数
                    for (long i = 0; i < size2 + a + 2; i++) {
                        RowRenderData rowRenderData = new RowRenderData();
                        RowStyle rowStyle = new RowStyle();
                        rowStyle.setHeight(40);
                        rowRenderData.setRowStyle(rowStyle);
                        List<CellRenderData> cells = new ArrayList<>();
                        //表格的列数
                        for (long j = 0; j < 12; j++) {
                            CellRenderData cellRenderData = new CellRenderData();
                            CellStyle cellStyle = new CellStyle();
                            cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
                            cellRenderData.setCellStyle(cellStyle);
                            List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
                            ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
                            ParagraphStyle paragraphStyle = new ParagraphStyle();
                            paragraphStyle.setAlign(ParagraphAlignment.CENTER);
                            paragraphRenderData.setParagraphStyle(paragraphStyle);
                            List<RenderData> renderData = new ArrayList<>();
                            TextRenderData textRenderData = new TextRenderData();
                            Style style = new Style();
                            style.setFontFamily("宋体");
                            style.setColor("000000");
                            style.setFontSize(10);
                            textRenderData.setStyle(style);
                            if(i==0){
                                //第一行
                                if (j<=2) {
                                    textRenderData.setText("样品编号@Sample number∑456");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j >2&&j<=5) {
                                    textRenderData.setText(sample.getSampleCode()+"∑4566");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j >5&&j<=8) {
                                    textRenderData.setText("规格型号@Type∑457");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }else{
                                    textRenderData.setText(sample.getModel()+"∑4577");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            }
                            else if (i == 1) {
                                //第二行
                                if (j == 0) {
                                    //第一列
                                    textRenderData.setText("管色标@Pipe∑100");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 1) {
                                    //第二列
                                    textRenderData.setText("光纤带编号@Scanning Number∑101");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                    String inspectionItem = itemMap.get(itemMap.size()-1).split(ITEM_SPLIT_CHAR)[0];
                                    textRenderData.setText("∑" + inspectionItem);
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            }
                            else if (a == 2 && i == 2) {
                                //有父子项目关系的第三行
                                if (j == 0) {
                                    //第一列
                                    textRenderData.setText("管色标@Pipe∑100");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                                else if (j == 1) {
                                    //第二列
                                    textRenderData.setText("光纤带编号@Scanning Number∑101");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                                else if (j >1&& j<=3) {
                                    String[] splits = itemMap.get(0).split(ITEM_SPLIT_CHAR);
                                    if (splits.length<2 || "@".equals(splits[1])) {
                                        textRenderData.setText(splits[0] + "∑" + splits[0]);
                                    } else {
                                        textRenderData.setText(splits[1]+"∑"+splits[0]+splits[1]);
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                                else if (j>3&&j<=5) {
                                    String[] splits = itemMap.get(1).split(ITEM_SPLIT_CHAR);
                                    if (splits.length<2 || "@".equals(splits[1])) {
                                        textRenderData.setText(splits[0] + "∑" + splits[0]);
                                    } else {
                                        textRenderData.setText(splits[1]+"∑"+splits[0]+splits[1]);
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                                else if (j >5&&j<=7) {
                                    String[] splits = itemMap.get(2).split(ITEM_SPLIT_CHAR);
                                    if (splits.length<2 || "@".equals(splits[1])) {
                                        textRenderData.setText(splits[0] + "∑" + splits[0]);
                                    } else {
                                        textRenderData.setText(splits[1]+"∑"+splits[0]+splits[1]);
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                                else if (j >7&&j<=9) {
                                    String[] splits = itemMap.get(3).split(ITEM_SPLIT_CHAR);
                                    if (splits.length<2 || "@".equals(splits[1])) {
                                        textRenderData.setText(splits[0] + "∑" + splits[0]);
                                    } else {
                                        textRenderData.setText(splits[1]+"∑"+splits[0]+splits[1]);
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                                else{
                                    String[] splits = itemMap.get(4).split(ITEM_SPLIT_CHAR);
                                    if (splits.length<2 || "@".equals(splits[1])) {
                                        textRenderData.setText(splits[0] + "∑" + splits[0]);
                                    } else {
                                        textRenderData.setText(splits[1]+"∑"+splits[0]+splits[1]);
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            }
                            else if ( i == 3) {
                                //第四行
                                if (j == 0) {
                                    //第一列
                                    textRenderData.setText("管色标@Pipe∑100");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 1) {
                                    //第二列
                                    textRenderData.setText("光纤带编号@Scanning Number∑101");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                    //项目信息
                                    if((int)(j - 2)%2==0){
                                        textRenderData.setText("A端");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    }else{
                                        textRenderData.setText("B端");
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    }
                                }
                            }
                            else{
                                //循环光纤带编号
                                String key = sortKeys.get((int)i-4);
                                String item;
                                if (j<=3) {
                                    item = itemMap.get(0);
                                }
                                else if (j>3&&j<=5) {
                                    item = itemMap.get(1);
                                }
                                else if (j >5&&j<=7) {
                                    item =  itemMap.get(2);
                                }
                                else if (j >7&&j<=9) {
                                    item =  itemMap.get(3);
                                } else{
                                    item =  itemMap.get(4);
                                }
                                InsProductFiberVO insProduct = groupProducts.get(key).stream()
                                        .filter(p->{
                                            String insItem = MyUtil.joinChars("@",p.getInspectionItem(),p.getInspectionItemEn());
                                            String insSubItem = MyUtil.joinChars("@",p.getInspectionItemSubclass(),p.getInspectionItemSubclassEn());
                                            return item.equals(MyUtil.joinChars(ITEM_SPLIT_CHAR,insItem,insSubItem));
                                        }).findFirst().orElse(new InsProductFiberVO());
                                //填值
                                if (j == 0) {
                                    //第一列
                                    textRenderData.setText(insProduct.getBushColor());
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 1) {
                                    //第二列
                                    textRenderData.setText(insProduct.getCode());
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                    //项目信息
                                    if((int)(j - 2)%2==0){
                                        textRenderData.setText(transformInsValue(insProduct.getInsValue()).get(0));
                                    }else{
                                        textRenderData.setText(transformInsValue(insProduct.getInsValue()).get(1));
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            }
                        }
                        rowRenderData.setCells(cells);
                        if (!rowRenderData.getCells().isEmpty()) {
                            rows.add(rowRenderData);
                        }
                    }
                    TableRenderData tableRenderData = new TableRenderData();
                    tableRenderData.setRows(rows);
                    int countSize = tableRenderData.getRows().get(0).getCells().size();
                    for (RowRenderData row : tableRenderData.getRows()) {
                        if (row.getCells().size() != countSize) {
                            throw new ErrorException("每行单元格不相等6");
                        }
                    }
                    TableStyle tableStyle = new TableStyle();
                    tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
                    tableStyle.setAlign(TableRowAlign.CENTER);
                    BorderStyle borderStyle = new BorderStyle();
                    borderStyle.setColor("000000");
                    borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
                    borderStyle.setSize(14);
                    tableStyle.setLeftBorder(borderStyle);
                    tableStyle.setTopBorder(borderStyle);
                    tableStyle.setRightBorder(borderStyle);
                    tableStyle.setBottomBorder(borderStyle);
                    tableRenderData.setTableStyle(tableStyle);
                    Map<String, Object> table = new HashMap<>();
                    table.put("table6", tableRenderData);
                    table.put("report", insReport);
                    table.put("sample_number", sample.getSampleCode());
                    table.put("type", sample.getModel());
                    table.put("index6", index6.get());
                    tables6.add(table);
                    index6.getAndIncrement();
                }
            }
        });
    }
    /**
     * æ ¼å¼åŒ–检验过程值json字符串
     * @param insValue æ£€éªŒè¿‡ç¨‹å€¼json字符串
     * @return
     */
    private static List<String> transformInsValue(String insValue){
        List<String> list = new ArrayList<>();
        if(!insValue.isEmpty() && !"[]".equals(insValue)){
            for (Object o : JSONUtil.parseArray(insValue)) {
                JSONObject obj = JSON.parseObject(JSON.toJSONString(o));
                if(Objects.nonNull(obj.get("v"))){
                    list.add(obj.get("v").toString());
                }
            }
        }
        return list;
    }
    /**
     * å…‰çº¤é™„件表格:写入行数据
     * @param ribbonList å…‰çº¤é¡¹ç›®ä¿¡æ¯
     * @param tables6   å…‰çº¤å¸¦å°ºå¯¸å‚数附件表格
     */
    public void writeFiberOpticRibbonEnclosureTableRow(List<InsProductFiberVO> ribbonList, List<Map<String, Object>> tables6,InsReport insReport){
        AtomicInteger index6 = new AtomicInteger(1);//页码
        int colCount = 12;//表格总列数
        int itemCount = 10;//表格项目列数
        //检验项列表(表头)
        List<String> itemMap = ribbonList.stream().sorted((o1,o2)->{
            //根据检验项排序
            if(!Objects.equals(o1.getInspectionItem(),o2.getInspectionItem())){
                List<String> specialItems = Arrays.asList("耐环境应力开裂","热收缩率");
                if(specialItems.contains(o1.getInspectionItem()) && specialItems.contains(o2.getInspectionItem())){
                    return Integer.MAX_VALUE;
                }
                Collator instance = Collator.getInstance(Locale.CHINA);
                return instance.compare(o1.getInspectionItem(),o2.getInspectionItem());
            }
            //检验子项排序
            if(StringUtils.isNotBlank(o1.getInspectionItemSubclass())&& StringUtils.isNotBlank(o2.getInspectionItemSubclass())){
                if(!Objects.equals(o1.getInspectionItemSubclass(),o2.getInspectionItemSubclass())){
                    Collator instance = Collator.getInstance(Locale.CHINA);
                    return instance.compare(o1.getInspectionItemSubclass(),o2.getInspectionItemSubclass());
                }
            }
            return 0;
        }).map(insProduct -> {
            String item = MyUtil.joinChars("@",insProduct.getInspectionItem(),insProduct.getInspectionItemEn());
            String itemSubClass = MyUtil.joinChars("@",insProduct.getInspectionItemSubclass(),insProduct.getInspectionItemSubclassEn());
            return MyUtil.joinChars(ITEM_SPLIT_CHAR,item,itemSubClass);
        }).distinct().collect(Collectors.toList());
        //根据样品id分组
        Map<Integer,List<InsProductFiberVO>> groupProducts = ribbonList.stream()
                .collect(Collectors.groupingBy(InsProductFiberVO::getInsSampleId));
        //sampleId顺序排序
        List<Integer> sortKeys = groupProducts.keySet().stream().sorted(Comparator.naturalOrder()).collect(Collectors.toList());
        //判断检验项目是否有父子关系
        int a = itemMap.stream().anyMatch(p -> p.split(ITEM_SPLIT_CHAR).length>0) ? 2 : 1;
        for (int c = 0; c < itemMap.size(); c++) {
            if (c % itemCount == 0) {
                List<RowRenderData> rows = new ArrayList<>();
                //表格的行数(样品数量+表头)
                int tableRow = sortKeys.size() + a + 1;
                for (int i = 0; i < tableRow; i++) {
                    RowRenderData rowRenderData = new RowRenderData();
                    RowStyle rowStyle = new RowStyle();
                    rowStyle.setHeight(40);
                    rowRenderData.setRowStyle(rowStyle);
                    List<CellRenderData> cells = new ArrayList<>();
                    //表格的列数
                    for (int j = 0; j < colCount; j++) {
                        CellRenderData cellRenderData = new CellRenderData();
                        CellStyle cellStyle = new CellStyle();
                        cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
                        cellRenderData.setCellStyle(cellStyle);
                        List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
                        ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
                        ParagraphStyle paragraphStyle = new ParagraphStyle();
                        paragraphStyle.setAlign(ParagraphAlignment.CENTER);
                        paragraphRenderData.setParagraphStyle(paragraphStyle);
                        List<RenderData> renderData = new ArrayList<>();
                        TextRenderData textRenderData = new TextRenderData();
                        Style style = new Style();
                        style.setFontFamily("宋体");
                        style.setColor("000000");
                        style.setFontSize(10);
                        textRenderData.setStyle(style);
                        //第一行
                        if(i==0){
                            if (j < 2) {
                                //第一列
                                textRenderData.setText("样品编号@Sample number∑45678");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else{
                                //生成表头
                                if(itemMap.size()> (j - 2)){
                                    String inspectionItem = itemMap.get(j - 2).split(ITEM_SPLIT_CHAR)[0];
                                    textRenderData.setText( inspectionItem + "∑" + inspectionItem);
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }else{
                                    String inspectionItem = itemMap.get(itemMap.size()-1).split(ITEM_SPLIT_CHAR)[0];
                                    textRenderData.setText("∑" + inspectionItem);
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            }
                        }
                        else if (a == 2 && i == 1) {
                            //有父子项目关系的第二行
                            if (j < 2) {
                                //第一列
                                textRenderData.setText("样品编号@Sample number∑45678");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else if (j >1&& j<=3) {
                                String[] splits = itemMap.get(0).split(ITEM_SPLIT_CHAR);
                                if (splits.length<2 || "@".equals(splits[1])) {
                                    textRenderData.setText(splits[0] + "∑" + splits[0]);
                                } else {
                                    textRenderData.setText(splits[1]+"∑"+splits[0]+splits[1]);
                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                            else if (j>3&&j<=5) {
                                String[] splits = itemMap.get(1).split(ITEM_SPLIT_CHAR);
                                if (splits.length<2 || "@".equals(splits[1])) {
                                    textRenderData.setText(splits[0] + "∑" + splits[0]);
                                } else {
                                    textRenderData.setText(splits[1]+"∑"+splits[0]+splits[1]);
                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                            else if (j >5&&j<=7) {
                                String[] splits = itemMap.get(2).split(ITEM_SPLIT_CHAR);
                                if (splits.length<2 || "@".equals(splits[1])) {
                                    textRenderData.setText(splits[0] + "∑" + splits[0]);
                                } else {
                                    textRenderData.setText(splits[1]+"∑"+splits[0]+splits[1]);
                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                            else if (j >7&&j<=9) {
                                String[] splits = itemMap.get(3).split(ITEM_SPLIT_CHAR);
                                if (splits.length<2 || "@".equals(splits[1])) {
                                    textRenderData.setText(splits[0] + "∑" + splits[0]);
                                } else {
                                    textRenderData.setText(splits[1]+"∑"+splits[0]+splits[1]);
                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                            else{
                                String[] splits = itemMap.get(4).split(ITEM_SPLIT_CHAR);
                                if (splits.length<2 || "@".equals(splits[1])) {
                                    textRenderData.setText(splits[0] + "∑" + splits[0]);
                                } else {
                                    textRenderData.setText(splits[1]+"∑"+splits[0]+splits[1]);
                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                        }
                        else if (i == 2) {
                            //第三行
                            if (j < 2) {
                                //第一列
                                textRenderData.setText("样品编号@Sample number∑45678");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else {
                                //项目信息
                                if((j - 2) %2==0){
                                    textRenderData.setText("A端");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }else{
                                    textRenderData.setText("B端");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            }
                        }
                        else{
                            //循环样品
                            Integer key = sortKeys.get(i-3);
                            //查询当前样品信息
                            InsSample insSample = insSampleMapper.selectById(key);
                            int index = Math.max(j - 2, 0);
                            String item;
                            if (j<=3) {
                                item = itemMap.get(0);
                            }
                            else if (j>3&&j<=5) {
                                item = itemMap.get(1);
                            }
                            else if (j >5&&j<=7) {
                                item =  itemMap.get(2);
                            }
                            else if (j >7&&j<=9) {
                                item =  itemMap.get(3);
                            } else{
                                item =  itemMap.get(4);
                            }
                            InsProductFiberVO insProduct = groupProducts.get(key).stream()
                                    .filter(p->{
                                        String insItem = MyUtil.joinChars("@",p.getInspectionItem(),p.getInspectionItemEn());
                                        String insItemSubClass = MyUtil.joinChars("@",p.getInspectionItemSubclass(),p.getInspectionItemSubclassEn());
                                        return item.equals(MyUtil.joinChars(ITEM_SPLIT_CHAR,insItem,insItemSubClass));
                                    })
                                    .findFirst().orElse(new InsProductFiberVO());
                            //填值
                            if (j < 2) {
                                //第一列
                                textRenderData.setText(insSample.getSampleCode()+"∑"+key);
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            } else {
                                //项目信息
                                if(index%2==0){
                                    textRenderData.setText(transformInsValue(insProduct.getInsValue()).get(0));
                                }else{
                                    textRenderData.setText(transformInsValue(insProduct.getInsValue()).get(1));
                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
//                            if(itemMap.size()>j - 2) {
//                            }
                        }
                    }
                    rowRenderData.setCells(cells);
                    if (!rowRenderData.getCells().isEmpty()) {
                        rows.add(rowRenderData);
                    }
                }
                TableRenderData tableRenderData = new TableRenderData();
                tableRenderData.setRows(rows);
                int countSize = tableRenderData.getRows().get(0).getCells().size();
                for (RowRenderData row : tableRenderData.getRows()) {
                    if (row.getCells().size() != countSize) {
                        throw new ErrorException("光纤带报告附件表格列数不匹配");
                    }
                }
                TableStyle tableStyle = new TableStyle();
                tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
//                tableStyle.setColWidths(DEFAULT_COL_WIDTHS);
//                tableStyle.setWidth("10000");
                tableStyle.setAlign(TableRowAlign.CENTER);
                BorderStyle borderStyle = new BorderStyle();
                borderStyle.setColor("000000");
                borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
                borderStyle.setSize(14);
                tableStyle.setLeftBorder(borderStyle);
                tableStyle.setTopBorder(borderStyle);
                tableStyle.setRightBorder(borderStyle);
                tableStyle.setBottomBorder(borderStyle);
                tableRenderData.setTableStyle(tableStyle);
                Map<String, Object> table = new HashMap<>();
                table.put("table6", tableRenderData);
                table.put("report", insReport);
                table.put("index6", index6.get());
                tables6.add(table);
                index6.getAndIncrement();
            }
        }
    }
}
cnas-require/src/main/java/com/ruoyi/require/handler/PiperConfigReportHandler.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,388 @@
package com.ruoyi.require.handler;
import com.deepoove.poi.data.*;
import com.deepoove.poi.data.style.*;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.framework.util.MyUtil;
import com.ruoyi.inspect.dto.SampleProductDto;
import com.ruoyi.inspect.mapper.InsProductMapper;
import com.ruoyi.inspect.pojo.InsProduct;
import com.ruoyi.inspect.pojo.InsReport;
import com.ruoyi.inspect.vo.InsProductFiberVO;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.TableRowAlign;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import java.text.Collator;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
/**
 * æ¾å¥—管报告处理类
 */
public class PiperConfigReportHandler {
    private final InsProductMapper insProductMapper;
    public PiperConfigReportHandler(InsProductMapper insProductMapper){
        this.insProductMapper = insProductMapper;
    }
    private final static String ITEM_SPLIT_CHAR = "&";//检验项分隔符
    private final static String COLOR_SPLIT_CHAR = "-";//色标分隔符
    /**
     *
     * @param samples    æ‰€æœ‰æ ·å“
     * @param insReport  report对象
     * @param tables5    æ¾å¥—管附件表格行列表
     * @param colorDict  è‰²æ ‡å­—å…¸
     */
    public void doWrite(List<SampleProductDto> samples, InsReport insReport, List<Map<String,Object>> tables5, List<String> colorDict){
        AtomicInteger index5 = new AtomicInteger(1);//页码
        samples.forEach(sample -> {
            //查询样品下的检验项和色标
            List<InsProductFiberVO> insProducts1 = insProductMapper.selectInsProductInsBushList(sample.getId());//查询套管相关数据
            //根据色标分组
            Map<String,List<InsProductFiberVO>> groupProducts = insProducts1.stream()
                    .filter(p->!p.getInspectionItem().equals("光纤接头损耗"))
                    .collect(Collectors.groupingBy(product -> product.getBushColor()+"-"+product.getColor()));
            if(groupProducts.isEmpty()){
                return;
            }
            List<String[]> collect = groupProducts.keySet().stream().map(k -> k.split(COLOR_SPLIT_CHAR)).sorted((o1, o2) -> {
                if (o1.length > 1 && o2.length > 1) {
                    if (!Objects.equals(o1[0], o2[0])) {
                        Integer o1Index = colorDict.indexOf(o1[0]);
                        Integer o2Index = colorDict.indexOf(o2[0]);
                        return o1Index.compareTo(o2Index);
                    }
                    if (!Objects.equals(o1[1], o2[1])) {
                        Integer o1Index = colorDict.indexOf(o1[1]);
                        Integer o2Index = colorDict.indexOf(o2[1]);
                        return o1Index.compareTo(o2Index);
                    }
                }
                return 0;
            }).collect(Collectors.toList());
            List<String> sortKeys = collect.stream().map(c->String.join(COLOR_SPLIT_CHAR,c)).collect(Collectors.toList());
            //检验项列表(表头)
            List<String> itemMap = insProducts1.stream().sorted((o1,o2)->{
                //根据检验项排序
                if(!Objects.equals(o1.getInspectionItem(),o2.getInspectionItem())){
                    List<String> specialItems = Arrays.asList("耐环境应力开裂","热收缩率");
                    if(specialItems.contains(o1.getInspectionItem()) && specialItems.contains(o2.getInspectionItem())){
                        return Integer.MAX_VALUE;
                    }
                    Collator instance = Collator.getInstance(Locale.CHINA);
                    return instance.compare(o1.getInspectionItem(),o2.getInspectionItem());
                }
                //检验子项排序
                if(StringUtils.isNotBlank(o1.getInspectionItemSubclass())&& StringUtils.isNotBlank(o2.getInspectionItemSubclass())){
                    if(!Objects.equals(o1.getInspectionItemSubclass(),o2.getInspectionItemSubclass())){
                        Collator instance = Collator.getInstance(Locale.CHINA);
                        return instance.compare(o1.getInspectionItemSubclass(),o2.getInspectionItemSubclass());
                    }
                }
                return 0;
            }).map(insProduct -> {
                String item = MyUtil.joinChars("@",insProduct.getInspectionItem(),insProduct.getInspectionItemEn());
                String itemSubClass = MyUtil.joinChars("@",insProduct.getInspectionItemSubclass(),insProduct.getInspectionItemSubclassEn());
                return MyUtil.joinChars(ITEM_SPLIT_CHAR,item,itemSubClass);
            }).distinct().collect(Collectors.toList());
            long size = itemMap.size();
            long size2 = insProducts1.stream().map(InsProduct::getInsBushId).distinct().count();
            long number = 7;
            long k = 0;
            //判断检验项目是否有父子关系
            int a = itemMap.stream().anyMatch(p -> p.split(ITEM_SPLIT_CHAR).length>0) ? 2 : 1;
            for (long c = 0; c < size; c++) {
                if (c % number == 0) {
                    List<RowRenderData> rows = new ArrayList<>();
                    //表格的行数
                    for (long i = 0; i < size2 + a + 1; i++) {
                        RowRenderData rowRenderData = new RowRenderData();
                        RowStyle rowStyle = new RowStyle();
                        rowStyle.setHeight(40);
                        rowRenderData.setRowStyle(rowStyle);
                        List<CellRenderData> cells = new ArrayList<>();
                        //表格的列数
                        for (long j = 0; j < 9; j++) {
                            CellRenderData cellRenderData = new CellRenderData();
                            CellStyle cellStyle = new CellStyle();
                            cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
                            cellRenderData.setCellStyle(cellStyle);
                            List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
                            ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
                            ParagraphStyle paragraphStyle = new ParagraphStyle();
                            paragraphStyle.setAlign(ParagraphAlignment.CENTER);
                            paragraphRenderData.setParagraphStyle(paragraphStyle);
                            List<RenderData> renderData = new ArrayList<>();
                            TextRenderData textRenderData = new TextRenderData();
                            Style style = new Style();
                            style.setFontFamily("宋体");
                            style.setColor("000000");
                            style.setFontSize(10);
                            textRenderData.setStyle(style);
                            if(i==0){
                                //第一行
                                if (j == 0) {
                                    //第一列
                                    textRenderData.setText("样品编号@Sample number∑456");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 1) {
                                    //第二列
                                    textRenderData.setText("样品编号@Sample number∑456");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 2) {
                                    //第二列
                                    textRenderData.setText(sample.getSampleCode()+"∑4566");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }else if (j == 3) {
                                    //第二列
                                    textRenderData.setText(sample.getSampleCode()+"∑4566");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }else if (j == 4) {
                                    //第二列
                                    textRenderData.setText("规格型号@Type∑457");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }else if (j == 5) {
                                    //第二列
                                    textRenderData.setText("规格型号@Type∑457");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }else if (j == 6) {
                                    //第二列
                                    textRenderData.setText(sample.getModel()+"∑4577");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }else if (j == 7) {
                                    //第二列
                                    textRenderData.setText(sample.getModel()+"∑4577");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }else{
                                    //第二列
                                    textRenderData.setText(sample.getModel()+"∑4577");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            }
                            else if (i == 1) {
                                //第二行
                                if (j == 0) {
                                    //第一列
                                    textRenderData.setText("管色标@Pipe∑100");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 1) {
                                    //第二列
                                    textRenderData.setText("管色标@Pipe∑100");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                    if(itemMap.size()>(int) (j - 2 + k)){
                                        String inspectionItem = itemMap.get((int) (j - 2 + k)).split(ITEM_SPLIT_CHAR)[0];
                                        textRenderData.setText( inspectionItem + "∑" + inspectionItem);
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    }else{
                                        String inspectionItem = itemMap.get(itemMap.size()-1).split(ITEM_SPLIT_CHAR)[0];
                                        textRenderData.setText("∑" + inspectionItem);
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    }
                                }
                            }
                            else if (a == 2 && i == 2) {
                                //有父子项目关系的第三行
                                if (j == 0) {
                                    //第一列
                                    textRenderData.setText("管色标@Pipe∑100");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 1) {
                                    //第二列
                                    textRenderData.setText("管色标@Pipe∑100");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                    //项目信息
                                    if(itemMap.size()>(int)(j - 2 + k)){
                                        //判断是否有项目子类
                                        String[] splits = itemMap.get((int) (j - 2 + k)).split(ITEM_SPLIT_CHAR);
                                        if (splits.length<2 || "@".equals(splits[1])) {
                                            textRenderData.setText(splits[0] + "∑" + splits[0]);
                                        } else {
                                            textRenderData.setText(splits[1]+"∑"+splits[0]+splits[1]);
                                        }
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    }else{
                                        //判断是否有项目子类
                                        String[] splits = itemMap.get(itemMap.size()-1).split(ITEM_SPLIT_CHAR);
                                        if (splits.length<2 || "@".equals(splits[1])) {
                                            textRenderData.setText("∑" + splits[0]);
                                        } else {
                                            textRenderData.setText("∑"+splits[0]+splits[1]);
                                        }
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    }
                                }
                            }
                            else{
                                //循环色标
                                String key = sortKeys.get((int)i-3);
                                if(itemMap.size()>(int) (j - 2 + k)) {
                                    int index = Math.max((int) (j - 2 + k), 0);
                                    String item = itemMap.get(index);
                                    InsProductFiberVO insProduct = groupProducts.get(key).stream()
                                            .filter(p->{
                                                String insItem = MyUtil.joinChars("@",p.getInspectionItem(),p.getInspectionItemEn());
                                                String insSubItem = MyUtil.joinChars("@",p.getInspectionItemSubclass(),p.getInspectionItemSubclassEn());
                                                return item.equals(MyUtil.joinChars(ITEM_SPLIT_CHAR,insItem,insSubItem));
                                            }).findFirst().orElse(new InsProductFiberVO());
                                    //填值
                                    if (j == 0) {
                                        //第一列
                                        textRenderData.setText(insProduct.getBushColor()+"∑"+key);
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else if (j == 1) {
                                        //第二列
                                        textRenderData.setText(insProduct.getBushColor()+"∑"+key);
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    } else {
                                        //项目信息
                                        if((index+1)==groupProducts.get(key).size()){
                                            textRenderData.setText(insProduct.getLastValue()+"∑last"+key);
                                        }else{
                                            textRenderData.setText(insProduct.getLastValue());
                                        }
                                        renderData.add(textRenderData);
                                        paragraphRenderData.setContents(renderData);
                                        paragraphRenderDataList.add(paragraphRenderData);
                                        cellRenderData.setParagraphs(paragraphRenderDataList);
                                        cells.add(cellRenderData);
                                    }
                                } else {
                                    textRenderData.setText("∑last"+key);
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            }
                        }
                        rowRenderData.setCells(cells);
                        if (!rowRenderData.getCells().isEmpty()) {
                            rows.add(rowRenderData);
                        }
                    }
                    TableRenderData tableRenderData = new TableRenderData();
                    tableRenderData.setRows(rows);
                    int countSize = tableRenderData.getRows().get(0).getCells().size();
                    for (RowRenderData row : tableRenderData.getRows()) {
                        if (row.getCells().size() != countSize) {
                            throw new ErrorException("每行单元格不相等4");
                        }
                    }
                    TableStyle tableStyle = new TableStyle();
                    tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
                    tableStyle.setAlign(TableRowAlign.CENTER);
                    BorderStyle borderStyle = new BorderStyle();
                    borderStyle.setColor("000000");
                    borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
                    borderStyle.setSize(14);
                    tableStyle.setLeftBorder(borderStyle);
                    tableStyle.setTopBorder(borderStyle);
                    tableStyle.setRightBorder(borderStyle);
                    tableStyle.setBottomBorder(borderStyle);
                    tableRenderData.setTableStyle(tableStyle);
                    Map<String, Object> table = new HashMap<>();
                    table.put("table5", tableRenderData);
                    table.put("report", insReport);
                    table.put("sample_number", sample.getSampleCode());
                    table.put("type", sample.getModel());
                    table.put("index5", index5.get());
                    tables5.add(table);
                    k += 7;
                    index5.getAndIncrement();
                }
            }
        });
    }
}
cnas-require/src/main/java/com/ruoyi/require/handler/TemperatureCyclingReportHandler1.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,582 @@
package com.ruoyi.require.handler;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.deepoove.poi.data.*;
import com.deepoove.poi.data.style.*;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.dto.SampleProductDto;
import com.ruoyi.inspect.mapper.InsFiberMapper;
import com.ruoyi.inspect.mapper.InsProductMapper;
import com.ruoyi.inspect.mapper.InsProductResultMapper;
import com.ruoyi.inspect.pojo.InsFiber;
import com.ruoyi.inspect.pojo.InsProduct;
import com.ruoyi.inspect.pojo.InsProductResult;
import com.ruoyi.inspect.pojo.InsReport;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.TableRowAlign;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
 * æ¸©åº¦å¾ªçŽ¯æŠ¥å‘Šç”Ÿæˆå¤„ç†æ–¹æ³•
 */
public class TemperatureCyclingReportHandler1 {
    private final InsProductMapper insProductMapper;
    private final InsFiberMapper insFiberMapper;
    private final InsProductResultMapper insProductResultMapper;
    public TemperatureCyclingReportHandler1(InsProductMapper insProductMapper, InsFiberMapper insFiberMapper, InsProductResultMapper insProductResultMapper) {
        this.insProductMapper = insProductMapper;
        this.insFiberMapper = insFiberMapper;
        this.insProductResultMapper = insProductResultMapper;
    }
    public void doWrite(List<SampleProductDto> samples, InsReport insReport, List<Map<String, Object>> tables3) {
        AtomicInteger index3 = new AtomicInteger(1);
        // è‡ªå®šä¹‰æ¯”较器
        Comparator<InsProduct> customComparator = Comparator.comparing(
                InsProduct::getInspectionItemSubclass,
                Comparator.naturalOrder()
        );
        samples.forEach(sample -> {
            // æŸ¥è¯¢æ¸©åº¦å¾ªçŽ¯ä¸‹çš„æ£€éªŒé¡¹ç›®
            List<InsProduct> insPros = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                    .eq(InsProduct::getState, 1)
                    .eq(InsProduct::getInsSampleId, sample.getId())
                    .isNotNull(InsProduct::getSpecialItemParentId)
                    .isNotNull(InsProduct::getInsFiberId)
                    .isNotNull(InsProduct::getInspectionItemClass));
            //获取所有光纤色标
            List<InsFiber> insFibers = insFiberMapper.selectBatchIds(insPros.stream().map(InsProduct::getInsFiberId).collect(Collectors.toList()));
            //获取光纤色标的数量(行数)
            long size2 = insPros.stream().map(InsProduct::getInsFiberId).distinct().count();
            //获取所有的光纤项目(1310nm)
            List<String> nm = insPros.stream().map(InsProduct::getInspectionItemClass).distinct().collect(Collectors.toList());
            /*先根据循环次数进行遍历*/
            Map<String, List<InsProduct>> xunhuans = insPros.stream().collect(Collectors.groupingBy(InsProduct::getInspectionItem));
            for (int i = 0; i < xunhuans.entrySet().size(); i++) {
                //获取该循环的所有温度
                String s1 = String.valueOf((i + 1));
                //过滤出20℃(常温)和20℃
                List<InsProduct> filterList = xunhuans.get(s1).stream().filter(f->f.getInspectionItemSubclass().equals("20℃(常温)")).collect(Collectors.toList());
                List<InsProduct> filterList2 = xunhuans.get(s1).stream().filter(f->f.getInspectionItemSubclass().equals("20℃")).collect(Collectors.toList());
                //排序其他温度
                List<InsProduct> sortList = xunhuans.get(s1).stream()
                        .filter(f->!Arrays.asList("20℃(常温)","20℃").contains(f.getInspectionItemSubclass()))
                        .sorted(customComparator).collect(Collectors.toList());
                //合并
                Map<String, List<InsProduct>> wendus = Stream.of(filterList,sortList,filterList2).flatMap(List::stream).collect(Collectors.groupingBy(
                        InsProduct::getInspectionItemSubclass,
                        LinkedHashMap::new, // ä¿è¯ Map ä¸­é”®çš„顺序是插入顺序
                        Collectors.toCollection(ArrayList::new) // ä¿è¯æ¯ä¸ªç»„内元素顺序
                ));
                List<String> wendu = new ArrayList<>(wendus.keySet());
                for (int m = 0; m < wendu.size(); m += 3) {
                    //三个温度一张表,当遍历到第四个温度的时候需要重新建表
                    List<RowRenderData> rows = new ArrayList<>();
                    //表格的行数(光纤色标的数量+8)
                    for (int j = 0; j < size2 + 8; j++) {
                        RowRenderData rowRenderData = new RowRenderData();
                        RowStyle rowStyle = new RowStyle();
                        rowStyle.setHeight(40);
                        rowRenderData.setRowStyle(rowStyle);
                        List<CellRenderData> cells = new ArrayList<>();
                        //表格的列数(2*光纤项目*3+1)
                        for (int k = 0; k < 6 * nm.size() + 1; k++) {
                            CellRenderData cellRenderData = new CellRenderData();
                            CellStyle cellStyle = new CellStyle();
                            cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
                            cellRenderData.setCellStyle(cellStyle);
                            List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
                            ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
                            ParagraphStyle paragraphStyle = new ParagraphStyle();
                            paragraphStyle.setAlign(ParagraphAlignment.CENTER);
                            paragraphRenderData.setParagraphStyle(paragraphStyle);
                            List<RenderData> renderData = new ArrayList<>();
                            TextRenderData textRenderData = new TextRenderData();
                            Style style = new Style();
                            style.setFontFamily("宋体");
                            style.setColor("000000");
                            style.setFontSize(10);
                            textRenderData.setStyle(style);
                            if (j == 0) {
                                //第一行
                                if (k <= (6L * nm.size() + 1) / 4) {
                                    //第一列
                                    textRenderData.setText("样品编号@Sample number∑1000");
                                } else if (k > (6L * nm.size() + 1) / 4 && k <= (6L * nm.size() + 1) / 2) {
                                    //第二列
                                    textRenderData.setText(sample.getSampleCode() + "∑998");
                                } else if (k > (6L * nm.size() + 1) / 2 && k < 6L * nm.size()) {
                                    //第三列
                                    textRenderData.setText("规格型号@Type âˆ‘999");
                                } else {
                                    //第四列
                                    textRenderData.setText(sample.getModel());
                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                            else if (j == 1) {
                                //第二行
                                if (k == 0) {
                                    //第一列
                                    textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                } else {
                                    textRenderData.setText("检测结果(dB/km)(循环" + (i + 1) + ")∑1005");
                                }
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                            else if (j == 2) {
                                //第三行
                                if (k == 0) {
                                    //第一列
                                    textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (k <= 6L * nm.size() / 3) {
                                    textRenderData.setText(wendu.get(m) + "∑52"+j + m);
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (k > 6L * nm.size() / 3 && k <= 6L * nm.size() / 3 * 2) {
                                    int i1 = m + 1;
                                    String s = "";
                                    try {
                                        s = wendu.get(m + 1);
                                    } catch (Exception e) {
                                    }
                                    textRenderData.setText(s + "∑52"+j + i1);
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                    int i1 = m + 2;
                                    String s = "";
                                    try {
                                        s = wendu.get(m + 2);
                                    } catch (Exception e) {
                                    }
                                    textRenderData.setText(s + "∑52" +j+ i1);
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            }
                            else if (j == 3) {
                                //第四行
                                if (k == 0) {
                                    //第一列
                                    textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                    for (int j1 = 0; j1 < 3; j1++) {//一张表3个温度
                                        for (int i1 = 0; i1 < nm.size(); i1++) {//循环光纤项目:1310nm
                                            if (k > 2 * j1 * nm.size() + 2 * i1 && k <= 2 * j1 * nm.size() + 2 * (i1 + 1)) {
                                                textRenderData.setText(nm.get(i1) + "∑88888" + ((k + 1) / nm.size()) + i1);
                                                renderData.add(textRenderData);
                                                paragraphRenderData.setContents(renderData);
                                                paragraphRenderDataList.add(paragraphRenderData);
                                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                                cells.add(cellRenderData);
                                            }
                                        }
                                    }
                                }
                            }
                            else if (j == 4) {
                                //第五行
                                if (k == 0) {
                                    //第一列
                                    textRenderData.setText("光纤色标@ScanningNumber∑1004");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (k % 2 == 1) {
                                    if (k <= 6L * nm.size() / 3 && wendu.get(m).equals("20℃(常温)")) {
                                        textRenderData.setText("衰减" + "∑42" +j+ k);
                                    } else {
                                        textRenderData.setText(" è¡°å‡ ");
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                    if (k <= 6L * nm.size() / 3 && wendu.get(m).equals("20℃(常温)")) {
                                        textRenderData.setText("衰减" + "∑42"+j + (k - 1));
                                    } else {
                                        textRenderData.setText("|∆ Î±|");
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            }
                            else if (j == size2 + 5) {
                                //倒数第三行
                                if (k == 0) {
                                    //第一列
                                    textRenderData.setText("|max|");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                                else if (k % 2 == 0) {
                                    String s = "";
                                    if (k <= 6L * nm.size() / 3) {
                                        s = wendu.get(m);
                                    } else if (k > 6L * nm.size() / 3 && k <= 6L * nm.size() / 3 * 2) {
                                        try {
                                            s = wendu.get(m + 1);
                                        } catch (Exception e) {
                                        }
                                    } else {
                                        try {
                                            s = wendu.get(m + 2);
                                        } catch (Exception e) {
                                        }
                                    }
                                    //计算第()温度的第()个项目的所有色标的最终值的最大值
                                    if (s.equals("")) {
                                        textRenderData.setText("");
                                    } else {
                                        try {
                                            if (k <= 6L * nm.size() / 3 && wendu.get(m).equals("20℃(常温)")){
                                                List<Integer> ips = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                                .eq(InsProduct::getInsSampleId, sample.getId())
                                                                .isNotNull(InsProduct::getInsFiberId)
                                                                .eq(InsProduct::getInspectionItem, i + 1)
                                                                .eq(InsProduct::getInspectionItemSubclass, s)
                                                                .eq(InsProduct::getInspectionItemClass, nm.get((k - 2) / 2 % nm.size())))
                                                        .stream().map(InsProduct::getId).collect(Collectors.toList());
                                                List<InsProductResult> insProductResults = insProductResultMapper.selDetail(ips);
                                                Optional<String> max = insProductResults.stream().map(insProductResult -> {
                                                    {
                                                        String[] splitStr = insProductResult.getComValue().split(":");
                                                        return splitStr[splitStr.length - 1].split("\"")[1];
                                                    }
                                                }).filter(value -> !value.isEmpty()).max(String::compareTo);
                                                textRenderData.setText(max.get() + "∑"+j+ (k-1));
                                            }else {
                                                Optional<String> max = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                                .eq(InsProduct::getInsSampleId, sample.getId())
                                                                .isNotNull(InsProduct::getInsFiberId)
                                                                .eq(InsProduct::getInspectionItem, i + 1)
                                                                .eq(InsProduct::getInspectionItemSubclass, s)
                                                                .eq(InsProduct::getInspectionItemClass, nm.get((k - 2) / 2 % nm.size())))
                                                        .stream().map(InsProduct::getLastValue)
                                                        .filter(value -> !value.isEmpty())
                                                        .max(String::compareTo);
                                                if (max.isPresent()) {
                                                    textRenderData.setText(max.get());
                                                } else {
                                                    textRenderData.setText("");
                                                }
                                            }
                                        } catch (Exception e) {
                                            textRenderData.setText("");
                                        }
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                                else {
                                    String s = "";
                                    if (k <= 6L * nm.size() / 3) {
                                        s = wendu.get(m);
                                    } else if (k > 6L * nm.size() / 3 && k <= 6L * nm.size() / 3 * 2) {
                                        try {
                                            s = wendu.get(m + 1);
                                        } catch (Exception e) {
                                        }
                                    } else {
                                        try {
                                            s = wendu.get(m + 2);
                                        } catch (Exception e) {
                                        }
                                    }
                                    //计算第()温度的第()个项目的所有色标的平均值的最大值
                                    if (s.equals("")) {
                                        textRenderData.setText("");
                                    } else {
                                        List<Integer> ips = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                .eq(InsProduct::getInsSampleId, sample.getId())
                                                .isNotNull(InsProduct::getInsFiberId)
                                                .eq(InsProduct::getInspectionItem, i + 1)
                                                .eq(InsProduct::getInspectionItemSubclass, s)
                                                .eq(InsProduct::getInspectionItemClass, nm.get((k - 1) / 2 % nm.size()))).stream().map(InsProduct::getId).collect(Collectors.toList());
                                        List<InsProductResult> insProductResults = insProductResultMapper.selDetail(ips);
                                        Optional<String> max = insProductResults.stream().map(insProductResult -> {
                                            {
                                                String[] splitStr = insProductResult.getComValue().split(":");
                                                return splitStr[splitStr.length - 1].split("\"")[1];
                                            }
                                        }).filter(value -> !value.isEmpty()).max(String::compareTo);
                                        if (k <= 6L * nm.size() / 3 && wendu.get(m).equals("20℃(常温)")){
                                            textRenderData.setText(max.get() + "∑"+j+ k);
                                        }else {
                                            if (max.isPresent()) {
                                                textRenderData.setText(max.get());
                                            } else {
                                                textRenderData.setText("");
                                            }
                                        }
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            }
                            else if (j == size2 + 6) {
                                //倒数第二行
                                if (k == 0) {
                                    //第一列
                                    textRenderData.setText("|∆ Î± max|");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (k % 2 == 0) {
                                    String s = "";
                                    if (k <= 6L * nm.size() / 3) {
                                        s = wendu.get(m);
                                    } else if (k > 6L * nm.size() / 3 && k <= 6L * nm.size() / 3 * 2) {
                                        try {
                                            s = wendu.get(m + 1);
                                        } catch (Exception e) {
                                        }
                                    } else {
                                        try {
                                            s = wendu.get(m + 2);
                                        } catch (Exception e) {
                                        }
                                    }
                                    //计算第()温度的第()个项目的所有色标的最终值的最大值
                                    if (s.equals("")) {
                                        textRenderData.setText("");
                                    } else {
                                        if (k <= 6L * nm.size() / 3 && wendu.get(m).equals("20℃(常温)")) {
                                            textRenderData.setText("-" + "∑" + j + (k-1));
                                        } else {
                                            List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                    .eq(InsProduct::getInsSampleId, sample.getId())
                                                    .isNotNull(InsProduct::getInsFiberId)
                                                    .eq(InsProduct::getInspectionItem, i + 1)
                                                    .eq(InsProduct::getInspectionItemSubclass, s)
                                                    .eq(InsProduct::getInspectionItemClass, nm.get((k - 2) / 2 % nm.size())));
                                            try {
                                                Optional<String> max = insProducts.stream().map(InsProduct::getLastValue)
                                                        .filter(value -> !value.isEmpty())
                                                        .max(String::compareTo);
                                                if (max.isPresent()) {
                                                    textRenderData.setText(max.get());
                                                } else {
                                                    textRenderData.setText("");
                                                }
                                            } catch (Exception e) {
                                                textRenderData.setText("");
                                            }
                                        }
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                    if (k <= 6L * nm.size() / 3 && wendu.get(m).equals("20℃(常温)")) {
                                        textRenderData.setText("-" + "∑" + j + k);
                                    } else {
                                        textRenderData.setText("-");
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            }
                            else if (j == size2 + 7) {
                                //倒数第一行
                                textRenderData.setText("“|∆ Î±|”表示附加衰减绝对值∑111111");
                                renderData.add(textRenderData);
                                paragraphRenderData.setContents(renderData);
                                paragraphRenderDataList.add(paragraphRenderData);
                                cellRenderData.setParagraphs(paragraphRenderDataList);
                                cells.add(cellRenderData);
                            }
                            else {
                                //其余填写检验值的内容
                                if (k == 0) {
                                    //第一列填写色标
                                    InsFiber insFiber = insFibers.get((j - 5));
                                    textRenderData.setText(insFiber.getBushColor() + "-" + insFiber.getColor());
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (k % 2 == 0) {
                                    //填写衰减差就是last_value
                                    String s = "";
                                    if (k <= 6L * nm.size() / 3) {
                                        s = wendu.get(m);
                                    } else if (k > 6L * nm.size() / 3 && k <= 6L * nm.size() / 3 * 2) {
                                        try {
                                            s = wendu.get(m + 1);
                                        } catch (Exception e) {
                                        }
                                    } else {
                                        try {
                                            s = wendu.get(m + 2);
                                        } catch (Exception e) {
                                        }
                                    }
                                    if (s.isEmpty()) {
                                        textRenderData.setText("");
                                    } else {
                                        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                .eq(InsProduct::getInsSampleId, sample.getId())
                                                .isNotNull(InsProduct::getInsFiberId)
                                                .eq(InsProduct::getInsFiberId, insFibers.get(j - 5).getId())
                                                .eq(InsProduct::getInspectionItem, i + 1)
                                                .eq(InsProduct::getInspectionItemSubclass, s)
                                                .eq(InsProduct::getInspectionItemClass, nm.get((k - 2) / 2 % nm.size())));
                                        if (k <= 6L * nm.size() / 3 && s.equals("20℃(常温)")) {
                                            String comValue = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery()
                                                            .eq(InsProductResult::getInsProductId, insProducts.get(0).getId()))
                                                    .getComValue();
                                            String[] splitStr = comValue.split(":");
                                            textRenderData.setText(splitStr[splitStr.length - 1].split("\"")[1] + "∑" + j + (k - 1));
                                        } else {
                                            textRenderData.setText(insProducts.get(0).getLastValue());
                                        }
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                    //填写其余正常温度的衰减(result表里面的com_value)
                                    String s = "";
                                    if (k <= 6L * nm.size() / 3) {
                                        s = wendu.get(m);
                                    } else if (k > 6L * nm.size() / 3 && k <= 6L * nm.size() / 3 * 2) {
                                        try {
                                            s = wendu.get(m + 1);
                                        } catch (Exception e) {
                                        }
                                    } else {
                                        try {
                                            s = wendu.get(m + 2);
                                        } catch (Exception e) {
                                        }
                                    }
                                    if (s.equals("")) {
                                        textRenderData.setText("");
                                    } else {
                                        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                                .eq(InsProduct::getInsSampleId, sample.getId())
                                                .isNotNull(InsProduct::getInsFiberId)
                                                .eq(InsProduct::getInsFiberId, insFibers.get(j - 5).getId())
                                                .eq(InsProduct::getInspectionItem, i + 1)
                                                .eq(InsProduct::getInspectionItemSubclass, s)
                                                .eq(InsProduct::getInspectionItemClass, nm.get((k - 1) / 2 % nm.size())));
                                        String comValue = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery()
                                                        .eq(InsProductResult::getInsProductId, insProducts.get(0).getId()))
                                                .getComValue();
                                        String[] splitStr = comValue.split(":");
                                        if (k <= 6L * nm.size() / 3 && s.equals("20℃(常温)")) {
                                            textRenderData.setText(splitStr[splitStr.length - 1].split("\"")[1] + "∑" + j + k);
                                        } else {
                                            textRenderData.setText(splitStr[splitStr.length - 1].split("\"")[1]);
                                        }
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            }
                        }
                        rowRenderData.setCells(cells);
                        if (!rowRenderData.getCells().isEmpty()) {
                            rows.add(rowRenderData);
                        }
                    }
                    TableRenderData tableRenderData = new TableRenderData();
                    tableRenderData.setRows(rows);
                    int countSize = tableRenderData.getRows().get(0).getCells().size();
                    for (RowRenderData row : tableRenderData.getRows()) {
                        if (row.getCells().size() != countSize) {
                            throw new ErrorException("每行单元格不相等5");
                        }
                    }
                    TableStyle tableStyle = new TableStyle();
                    tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
                    tableStyle.setAlign(TableRowAlign.CENTER);
                    BorderStyle borderStyle = new BorderStyle();
                    borderStyle.setColor("000000");
                    borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
                    borderStyle.setSize(14);
                    tableStyle.setLeftBorder(borderStyle);
                    tableStyle.setTopBorder(borderStyle);
                    tableStyle.setRightBorder(borderStyle);
                    tableStyle.setBottomBorder(borderStyle);
                    tableRenderData.setTableStyle(tableStyle);
                    Map<String, Object> table = new HashMap<>();
                    table.put("table3", tableRenderData);
                    table.put("report", insReport);
                    table.put("index3", index3.get());
                    tables3.add(table);
                    index3.getAndIncrement();
                }
            }
        });
    }
}
cnas-require/src/main/java/com/ruoyi/require/handler/TemperatureTestReportHandler.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,367 @@
package com.ruoyi.require.handler;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.deepoove.poi.data.*;
import com.deepoove.poi.data.style.*;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.dto.SampleProductDto;
import com.ruoyi.inspect.mapper.InsProductMapper;
import com.ruoyi.inspect.mapper.InsProductResultMapper;
import com.ruoyi.inspect.pojo.InsProduct;
import com.ruoyi.inspect.pojo.InsProductResult;
import com.ruoyi.inspect.pojo.InsReport;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.TableRowAlign;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * æ¸©å‡è¯•验报告处理类
 */
public class TemperatureTestReportHandler {
    private final InsProductMapper insProductMapper;
    private final InsProductResultMapper insProductResultMapper;
    public TemperatureTestReportHandler(InsProductMapper insProductMapper, InsProductResultMapper insProductResultMapper){
        this.insProductMapper = insProductMapper;
        this.insProductResultMapper = insProductResultMapper;
    }
    /**
     *
     * @param samples   å½“前订单的所有样品
     * @param insReport report对象
     * @param tables3   æ¸©å‡è¯•验附件表格数据
     */
    public void doWrite(List<SampleProductDto> samples, InsReport insReport, List<Map<String,Object>> tables3){
        samples.forEach(sample -> {
            //查询温升试验下的检验项目
            List<InsProduct> insPros = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                    .eq(InsProduct::getState, 1)
                    .eq(InsProduct::getInsSampleId, sample.getId())
                    .isNotNull(InsProduct::getSpecialItemParentId)  //区分常规项目
                    .isNull(InsProduct::getInspectionItemClass)//用检验分项字段区别温升试验与热循环
                    .isNull(InsProduct::getInsFiberId) //用光纤区别温升试验和温度循环
                    .eq(InsProduct::getInspectionItem, "1")); //温升试验的循环只有1次
            //查询填写的检验值有多少种
            InsProductResult insProductResult = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPros.get(0).getId())).get(0);
            int vCount = StringUtils.countMatches(insProductResult.getInsValue(), "\"v\":\"");
            long index3 = 1;
            for (int c = 0; c < vCount; c++) {
                if (c % 16 == 0) {
                    List<RowRenderData> rows = new ArrayList<>();
                    //表格的行数
                    for (int i = 0; i < 3 + vCount; i++) {
                        RowRenderData rowRenderData = new RowRenderData();
                        RowStyle rowStyle = new RowStyle();
                        rowStyle.setHeight(40);
                        rowRenderData.setRowStyle(rowStyle);
                        List<CellRenderData> cells = new ArrayList<>();
                        String a = null;//导线温度
                        String b = null;//耐张温度
                        String d = null;//接续温度
                        //列数
                        for (int j = 0; j < 6; j++) {
                            CellRenderData cellRenderData = new CellRenderData();
                            CellStyle cellStyle = new CellStyle();
                            cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
                            cellRenderData.setCellStyle(cellStyle);
                            List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
                            ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
                            ParagraphStyle paragraphStyle = new ParagraphStyle();
                            paragraphStyle.setAlign(ParagraphAlignment.CENTER);
                            paragraphRenderData.setParagraphStyle(paragraphStyle);
                            List<RenderData> renderData = new ArrayList<>();
                            TextRenderData textRenderData = new TextRenderData();
                            Style style = new Style();
                            style.setFontFamily("宋体");
                            style.setColor("000000");
                            textRenderData.setStyle(style);
                            if (i == 0) {
                                //第一行
                                if (j == 0) {
                                    //第一列
                                    textRenderData.setText("样品编号@Sample number");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 1) {
                                    //第二列
                                    textRenderData.setText(sample.getSampleCode());
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 2) {
                                    //第三列
                                    textRenderData.setText("规格型号@Type and size");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 3) {
                                    //第四列
                                    textRenderData.setText(sample.getModel());
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 4) {
                                    //第五列
                                    textRenderData.setText("检测项@Testing items");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                    //第六列
                                    textRenderData.setText("温升试验@Temperature rise test");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            } else if (i == 1) {
                                //第二行
                                if (j == 0) {
                                    //第一列
                                    textRenderData.setText("环境温度@Ambient temperature(℃)");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 1) {
                                    //第二列
                                    textRenderData.setText("导线温度@Wire temperature(℃)");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 2) {
                                    //第三列
                                    textRenderData.setText("耐张温度@Tensile temperature(℃)");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 3) {
                                    //第四列
                                    textRenderData.setText("接续温度@Connection temperature(℃)");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                    //第五列第六列
                                    textRenderData.setText("结果判定@Result judgment∑100");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            }
                            else if (i == 2 + vCount) {
                                //最后一行
                                if (j == 0 || j == 1) {
                                    //第一列和第二列
                                    textRenderData.setText("备注∑101");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                    //其余列
                                    textRenderData.setText("“√”表示项目合格,“×”表示项目不合格。∑102");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            }
                            else {
                                //其余行
                                if (j == 0) {
                                    //第一列(环境温度)
                                    InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                            .eq(InsProduct::getState, 1)
                                            .eq(InsProduct::getInsSampleId, sample.getId())
                                            .eq(InsProduct::getInspectionItemSubclass, "环境温度")
                                            .isNotNull(InsProduct::getSpecialItemParentId)  //区分常规项目
                                            .isNull(InsProduct::getInspectionItemClass)//用检验分项字段区别温升试验与热循环
                                            .isNull(InsProduct::getInsFiberId) //用光纤区别温升试验和温度循环
                                            .eq(InsProduct::getInspectionItem, "1")); //温升试验的循环只有1次
                                    String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue();
                                    JSONArray jsonArray = JSONArray.parseArray(insValue);
                                    JSONObject jsonObject = jsonArray.getJSONObject(i - 2);
                                    String vValue = jsonObject.getString("v");
                                    System.out.println("环境温度第 " + (i - 1) + " ä¸ª 'v' å­—段的值是: " + vValue);
                                    textRenderData.setText(vValue);
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                                else if (j == 1) {
                                    //第二列(导线温度)
                                    InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                            .eq(InsProduct::getState, 1)
                                            .eq(InsProduct::getInsSampleId, sample.getId())
                                            .eq(InsProduct::getInspectionItemSubclass, "导线温度")
                                            .isNotNull(InsProduct::getSpecialItemParentId)  //区分常规项目
                                            .isNull(InsProduct::getInspectionItemClass)//用检验分项字段区别温升试验与热循环
                                            .isNull(InsProduct::getInsFiberId) //用光纤区别温升试验和温度循环
                                            .eq(InsProduct::getInspectionItem, "1")); //温升试验的循环只有1次
                                    String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue();
                                    JSONArray jsonArray = JSONArray.parseArray(insValue);
                                    JSONObject jsonObject = jsonArray.getJSONObject(i - 2);
                                    String vValue = jsonObject.getString("v");
                                    a = vValue;
                                    System.out.println("导线温度第 " + (i - 1) + " ä¸ª 'v' å­—段的值是: " + vValue);
                                    textRenderData.setText(vValue);
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                                else if (j == 2) {
                                    //第三列(耐张温度)
                                    InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                            .eq(InsProduct::getState, 1)
                                            .eq(InsProduct::getInsSampleId, sample.getId())
                                            .eq(InsProduct::getInspectionItemSubclass, "耐张温度")
                                            .isNotNull(InsProduct::getSpecialItemParentId)  //区分常规项目
                                            .isNull(InsProduct::getInspectionItemClass)//用检验分项字段区别温升试验与热循环
                                            .isNull(InsProduct::getInsFiberId) //用光纤区别温升试验和温度循环
                                            .eq(InsProduct::getInspectionItem, "1")); //温升试验的循环只有1次
                                    if (ObjectUtils.isNotEmpty(insPro)) {
                                        String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue();
                                        JSONArray jsonArray = JSONArray.parseArray(insValue);
                                        JSONObject jsonObject = jsonArray.getJSONObject(i - 2);
                                        String vValue = jsonObject.getString("v");
                                        b = vValue;
                                        System.out.println("耐张温度第 " + (i - 1) + " ä¸ª 'v' å­—段的值是: " + vValue);
                                        textRenderData.setText(vValue);
                                    } else {
                                        textRenderData.setText("");
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                                else if (j == 3) {
                                    //第四列(接续温度)
                                    InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                            .eq(InsProduct::getState, 1)
                                            .eq(InsProduct::getInsSampleId, sample.getId())
                                            .eq(InsProduct::getInspectionItemSubclass, "接续温度")
                                            .isNotNull(InsProduct::getSpecialItemParentId)  //区分常规项目
                                            .isNull(InsProduct::getInspectionItemClass)//用检验分项字段区别温升试验与热循环
                                            .isNull(InsProduct::getInsFiberId) //用光纤区别温升试验和温度循环
                                            .eq(InsProduct::getInspectionItem, "1")); //温升试验的循环只有1次
                                    if (ObjectUtils.isNotEmpty(insPro)) {
                                        String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue();
                                        JSONArray jsonArray = JSONArray.parseArray(insValue);
                                        JSONObject jsonObject = jsonArray.getJSONObject(i - 2);
                                        String vValue = jsonObject.getString("v");
                                        d = vValue;
                                        System.out.println("接续温度第 " + (i - 1) + " ä¸ª 'v' å­—段的值是: " + vValue);
                                        textRenderData.setText(vValue);
                                    } else {
                                        textRenderData.setText("");
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                                else {
                                    //第五列 ç¬¬å…­åˆ—(结论)
                                    //判断合格与不合格
                                    BigDecimal decimal1 = new BigDecimal(a);
                                    BigDecimal decimal2 = new BigDecimal(b == null ? "0" : b);
                                    BigDecimal decimal3 = new BigDecimal(d == null ? "0" : d);
                                    if (decimal1.compareTo(decimal2) > 0 && decimal1.compareTo(decimal3) > 0) {
                                        textRenderData.setText("√∑20"+i);
                                    } else {
                                        textRenderData.setText("×∑20"+i);
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            }
                        }
                        rowRenderData.setCells(cells);
                        if (rowRenderData.getCells().size() != 0) {
                            rows.add(rowRenderData);
                        }
                    }
                    TableRenderData tableRenderData = new TableRenderData();
                    tableRenderData.setRows(rows);
                    int countSize = tableRenderData.getRows().get(0).getCells().size();
                    for (RowRenderData row : tableRenderData.getRows()) {
                            /*for (CellRenderData cell : row.getCells()) {
                                System.out.print(cell.getParagraphs().get(0).getContents());
                            }
                            System.out.println("");*/
                        if (row.getCells().size() != countSize) {
                            throw new ErrorException("每行单元格不相等5");
                        }
                    }
                    TableStyle tableStyle = new TableStyle();
                    tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
                    tableStyle.setAlign(TableRowAlign.CENTER);
                    BorderStyle borderStyle = new BorderStyle();
                    borderStyle.setColor("000000");
                    borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
                    borderStyle.setSize(14);
                    tableStyle.setLeftBorder(borderStyle);
                    tableStyle.setTopBorder(borderStyle);
                    tableStyle.setRightBorder(borderStyle);
                    tableStyle.setBottomBorder(borderStyle);
                    tableRenderData.setTableStyle(tableStyle);
                    Map<String, Object> table = new HashMap<>();
                    table.put("table3", tableRenderData);
                    table.put("report", insReport);
                    table.put("index3", index3);
                    tables3.add(table);
                    index3++;
                }
            }
        });
    }
}
cnas-require/src/main/java/com/ruoyi/require/handler/ThermalCycleReportHandler.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,599 @@
package com.ruoyi.require.handler;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.deepoove.poi.data.*;
import com.deepoove.poi.data.style.*;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.dto.SampleProductDto;
import com.ruoyi.inspect.mapper.InsProductMapper;
import com.ruoyi.inspect.mapper.InsProductResultMapper;
import com.ruoyi.inspect.pojo.InsProduct;
import com.ruoyi.inspect.pojo.InsProductResult;
import com.ruoyi.inspect.pojo.InsReport;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.TableRowAlign;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * çƒ­å¾ªçŽ¯æŠ¥å‘Šå¤„ç†ç±»
 */
public class ThermalCycleReportHandler {
    private final InsProductMapper insProductMapper;
    private final InsProductResultMapper insProductResultMapper;
    public ThermalCycleReportHandler(InsProductMapper insProductMapper, InsProductResultMapper insProductResultMapper){
        this.insProductMapper = insProductMapper;
        this.insProductResultMapper = insProductResultMapper;
    }
    /**
     *
     * @param samples   å½“前订单的所有样品
     * @param insReport report对象
     * @param tables3   çƒ­å¾ªçŽ¯é™„ä»¶è¡¨æ ¼æ•°æ®
     */
    public void doWrite(List<SampleProductDto> samples, InsReport insReport, List<Map<String,Object>> tables3){
        samples.forEach(sample -> {
            //计算数据的行数,先查出有多少次循环,再查每个循环的填写数量
            InsProduct insProduct = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                    .eq(InsProduct::getState, 1)
                    .eq(InsProduct::getInsSampleId, sample.getId())
                    .eq(InsProduct::getInspectionItem, "热循环"));
            String[] split = insProduct.getAsk().split(";");
            Integer cycle = Integer.parseInt(split[split.length - 1]);//循环次数
            int vCount = 0;
            List<Integer> list = new ArrayList<>();
            for (Integer i = 1; i <= cycle; i++) {
                //查每个循环里面的填写数量
                List<InsProduct> insPros = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                        .eq(InsProduct::getState, 1)
                        .eq(InsProduct::getInsSampleId, sample.getId())
                        .isNotNull(InsProduct::getSpecialItemParentId)  //区分常规项目
                        .eq(InsProduct::getInspectionItemClass, "直流电阻")
                        .isNull(InsProduct::getInsFiberId) //用光纤区别温升试验和温度循环
                        .eq(InsProduct::getInspectionItem, i + ""));
                InsProductResult insProductResult = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPros.get(0).getId())).get(0);
                vCount += StringUtils.countMatches(insProductResult.getInsValue(), "\"v\":\"");
                list.add(StringUtils.countMatches(insProductResult.getInsValue(), "\"v\":\""));
            }
            long index3 = 1;
            for (int c = 0; c < vCount; c++) {
                if (c % 18 == 0) {
                    List<RowRenderData> rows = new ArrayList<>();
                    //表格的行数
                    for (int i = 0; i < 4 + vCount; i++) {
                        RowRenderData rowRenderData = new RowRenderData();
                        RowStyle rowStyle = new RowStyle();
                        rowStyle.setHeight(40);
                        rowRenderData.setRowStyle(rowStyle);
                        List<CellRenderData> cells = new ArrayList<>();
                        String a = null;//导线温度
                        String b = null;//耐张温度
                        String d = null;//接续温度
                        //列数
                        for (int j = 0; j < 9; j++) {
                            CellRenderData cellRenderData = new CellRenderData();
                            CellStyle cellStyle = new CellStyle();
                            cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
                            cellRenderData.setCellStyle(cellStyle);
                            List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
                            ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
                            ParagraphStyle paragraphStyle = new ParagraphStyle();
                            paragraphStyle.setAlign(ParagraphAlignment.CENTER);
                            paragraphRenderData.setParagraphStyle(paragraphStyle);
                            List<RenderData> renderData = new ArrayList<>();
                            TextRenderData textRenderData = new TextRenderData();
                            Style style = new Style();
                            style.setFontFamily("宋体");
                            style.setColor("000000");
                            textRenderData.setStyle(style);
                            if (i == 0) {
                                //第一行
                                if (j == 0) {
                                    //第一列
                                    textRenderData.setText("样品编号@Sample number");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 1) {
                                    //第二列
                                    textRenderData.setText(sample.getSampleCode());
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 2 || j == 3) {
                                    //第三列和第四列
                                    textRenderData.setText("规格型号@Type and size∑301");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 4 || j == 5) {
                                    //第五列和第六列
                                    textRenderData.setText(sample.getModel()+"∑302");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 6) {
                                    //第七列
                                    textRenderData.setText("检测项@Testing items");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                    //第八列和第九列
                                    textRenderData.setText("热循环@Thermal cycle∑303");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            }
                            else if (i == 1) {
                                //第二行
                                if (j == 0) {
                                    //第一列
                                    textRenderData.setText("循环次数@Number of cycles(times)∑100");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 1) {
                                    //第二列
                                    textRenderData.setText("环境温度@Ambient temperature(℃)∑101");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 2 || j == 3) {
                                    //第三列和第四列
                                    textRenderData.setText("导线@Conductor∑102");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 4 || j == 5) {
                                    //第五列和第六列
                                    textRenderData.setText("耐张线夹@Tension clamp∑103");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 6 || j == 7) {
                                    //第七列第八列
                                    textRenderData.setText("接续金具@Splicing fittings∑104");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                    //第九列
                                    textRenderData.setText("结果判定@Result judgment∑105");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            }
                            else if (i == 2) {
                                //第三行
                                if (j == 0) {
                                    //第一列
                                    textRenderData.setText("循环次数@Number of cycles(times)∑100");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 1) {
                                    //第二列
                                    textRenderData.setText("环境温度@Ambient temperature(℃)∑101");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 2) {
                                    //第三列
                                    textRenderData.setText("温度@Temperature(℃)");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 3) {
                                    //第四列
                                    textRenderData.setText("直流电阻@DC resistance(Ω/km)");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 4) {
                                    //第五列
                                    textRenderData.setText("温度@Temperature(℃)");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 5) {
                                    //第六列
                                    textRenderData.setText("直流电阻@DC resistance(Ω/km)");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 6) {
                                    //第七列
                                    textRenderData.setText("温度@Temperature(℃)");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else if (j == 7) {
                                    //第八列
                                    textRenderData.setText("直流电阻@DC resistance(Ω/km)");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                    //第九列
                                    textRenderData.setText("结果判定@Result judgment∑105");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            }
                            else if (i == 3 + vCount) {
                                //最后一行
                                if (j == 0) {
                                    //第一列
                                    textRenderData.setText("备注");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                } else {
                                    //其余列
                                    textRenderData.setText("“√”表示项目合格,“×”表示项目不合格。∑108");
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            }
                            else {
                                //其余行
                                if (j == 0) {
                                    //第一列
                                    int aa= 0;
                                    for (int m = 0; m < cycle; m++) {
                                        aa += list.get(m);
                                        if (i-3<aa){
                                            textRenderData.setText((m+1)+"");
                                            break;
                                        }
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                                else if (j == 1) {
                                    //第二列
                                    int aa= 0;
                                    for (int m = 0; m < cycle; m++) {
                                        aa += list.get(m);
                                        if (i-3<aa){
                                            InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                                    .eq(InsProduct::getState, 1)
                                                    .eq(InsProduct::getInsSampleId, sample.getId())
                                                    .eq(InsProduct::getInspectionItemSubclass, "环境温度")
                                                    .isNotNull(InsProduct::getSpecialItemParentId)
                                                    .eq(InsProduct::getInspectionItemClass,"直流电阻")
                                                    .isNull(InsProduct::getInsFiberId)
                                                    .eq(InsProduct::getInspectionItem, (m+1)+""));
                                            String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue();
                                            JSONArray jsonArray = JSONArray.parseArray(insValue);
                                            JSONObject jsonObject = jsonArray.getJSONObject(i - 3-(aa-list.get(m)));
                                            String vValue = jsonObject.getString("v");
                                            System.out.println("环境温度第 " + (i - 2-(aa-list.get(m))) + " ä¸ª 'v' å­—段的值是: " + vValue);
                                            textRenderData.setText(vValue);
                                            break;
                                        }
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                                else if (j == 2) {
                                    //第三列
                                    int aa= 0;
                                    for (int m = 0; m < cycle; m++) {
                                        aa += list.get(m);
                                        if (i-3<aa){
                                            InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                                    .eq(InsProduct::getState, 1)
                                                    .eq(InsProduct::getInsSampleId, sample.getId())
                                                    .eq(InsProduct::getInspectionItemSubclass, "导线温度")
                                                    .isNotNull(InsProduct::getSpecialItemParentId)
                                                    .eq(InsProduct::getInspectionItemClass,"直流电阻")
                                                    .isNull(InsProduct::getInsFiberId)
                                                    .eq(InsProduct::getInspectionItem, (m+1)+""));
                                            if (ObjectUtils.isNotEmpty(insPro)) {
                                                String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue();
                                                JSONArray jsonArray = JSONArray.parseArray(insValue);
                                                JSONObject jsonObject = jsonArray.getJSONObject(i - 3 - (aa - list.get(m)));
                                                String vValue = jsonObject.getString("v");
                                                a=vValue;
                                                System.out.println("导线温度第 " + (i - 2 - (aa - list.get(m))) + " ä¸ª 'v' å­—段的值是: " + vValue);
                                                textRenderData.setText(vValue);
                                            }else textRenderData.setText("");
                                            break;
                                        }
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                                else if (j == 3) {
                                    //第四列
                                    int aa= 0;
                                    for (int m = 0; m < cycle; m++) {
                                        aa += list.get(m);
                                        if (i-3<aa){
                                            InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                                    .eq(InsProduct::getState, 1)
                                                    .eq(InsProduct::getInsSampleId, sample.getId())
                                                    .eq(InsProduct::getInspectionItemSubclass, "导线温度")
                                                    .isNotNull(InsProduct::getSpecialItemParentId)
                                                    .eq(InsProduct::getInspectionItemClass,"直流电阻")
                                                    .isNull(InsProduct::getInsFiberId)
                                                    .eq(InsProduct::getInspectionItem, (m+1)+""));
                                            if (ObjectUtils.isNotEmpty(insPro)) {
                                                String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue();
                                                JSONArray jsonArray = JSONArray.parseArray(insValue);
                                                JSONObject jsonObject = jsonArray.getJSONObject(i - 3 - (aa - list.get(m)));
                                                String vValue = jsonObject.getString("w");
                                                System.out.println("导线温度第 " + (i - 2 - (aa - list.get(m))) + " ä¸ª 'w' å­—段的值是: " + vValue);
                                                textRenderData.setText(vValue);
                                            }else textRenderData.setText("");
                                            break;
                                        }
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                                else if (j == 4) {
                                    //第五列
                                    int aa= 0;
                                    for (int m = 0; m < cycle; m++) {
                                        aa += list.get(m);
                                        if (i-3<aa){
                                            InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                                    .eq(InsProduct::getState, 1)
                                                    .eq(InsProduct::getInsSampleId, sample.getId())
                                                    .eq(InsProduct::getInspectionItemSubclass, "耐张温度")
                                                    .isNotNull(InsProduct::getSpecialItemParentId)
                                                    .eq(InsProduct::getInspectionItemClass,"直流电阻")
                                                    .isNull(InsProduct::getInsFiberId)
                                                    .eq(InsProduct::getInspectionItem, (m+1)+""));
                                            if (ObjectUtils.isNotEmpty(insPro)) {
                                                String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue();
                                                JSONArray jsonArray = JSONArray.parseArray(insValue);
                                                JSONObject jsonObject = jsonArray.getJSONObject(i - 3 - (aa - list.get(m)));
                                                String vValue = jsonObject.getString("v");
                                                b=vValue;
                                                System.out.println("耐张温度第 " + (i - 2 - (aa - list.get(m))) + " ä¸ª 'v' å­—段的值是: " + vValue);
                                                textRenderData.setText(vValue);
                                            }else textRenderData.setText("");
                                            break;
                                        }
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                                else if (j == 5) {
                                    //第六列
                                    int aa= 0;
                                    for (int m = 0; m < cycle; m++) {
                                        aa += list.get(m);
                                        if (i-3<aa){
                                            InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                                    .eq(InsProduct::getState, 1)
                                                    .eq(InsProduct::getInsSampleId, sample.getId())
                                                    .eq(InsProduct::getInspectionItemSubclass, "耐张温度")
                                                    .isNotNull(InsProduct::getSpecialItemParentId)
                                                    .eq(InsProduct::getInspectionItemClass,"直流电阻")
                                                    .isNull(InsProduct::getInsFiberId)
                                                    .eq(InsProduct::getInspectionItem, (m+1)+""));
                                            if (ObjectUtils.isNotEmpty(insPro)) {
                                                String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue();
                                                JSONArray jsonArray = JSONArray.parseArray(insValue);
                                                JSONObject jsonObject = jsonArray.getJSONObject(i - 3 - (aa - list.get(m)));
                                                String vValue = jsonObject.getString("w");
                                                System.out.println("耐张温度第 " + (i - 2 - (aa - list.get(m))) + " ä¸ª 'w' å­—段的值是: " + vValue);
                                                textRenderData.setText(vValue);
                                            }else textRenderData.setText("");
                                            break;
                                        }
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                                else if (j == 6) {
                                    //第七列
                                    int aa= 0;
                                    for (int m = 0; m < cycle; m++) {
                                        aa += list.get(m);
                                        if (i-3<aa){
                                            InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                                    .eq(InsProduct::getState, 1)
                                                    .eq(InsProduct::getInsSampleId, sample.getId())
                                                    .eq(InsProduct::getInspectionItemSubclass, "接续温度")
                                                    .isNotNull(InsProduct::getSpecialItemParentId)
                                                    .eq(InsProduct::getInspectionItemClass,"直流电阻")
                                                    .isNull(InsProduct::getInsFiberId)
                                                    .eq(InsProduct::getInspectionItem, (m+1)+""));
                                            if (ObjectUtils.isNotEmpty(insPro)) {
                                                String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue();
                                                JSONArray jsonArray = JSONArray.parseArray(insValue);
                                                JSONObject jsonObject = jsonArray.getJSONObject(i - 3 - (aa - list.get(m)));
                                                String vValue = jsonObject.getString("v");
                                                d=vValue;
                                                System.out.println("接续温度第 " + (i - 2 - (aa - list.get(m))) + " ä¸ª 'v' å­—段的值是: " + vValue);
                                                textRenderData.setText(vValue);
                                            }else textRenderData.setText("");
                                            break;
                                        }
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                                else if (j == 7) {
                                    //第八列
                                    int aa= 0;
                                    for (int m = 0; m < cycle; m++) {
                                        aa += list.get(m);
                                        if (i-3<aa){
                                            InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                                    .eq(InsProduct::getState, 1)
                                                    .eq(InsProduct::getInsSampleId, sample.getId())
                                                    .eq(InsProduct::getInspectionItemSubclass, "接续温度")
                                                    .isNotNull(InsProduct::getSpecialItemParentId)
                                                    .eq(InsProduct::getInspectionItemClass,"直流电阻")
                                                    .isNull(InsProduct::getInsFiberId)
                                                    .eq(InsProduct::getInspectionItem, (m+1)+""));
                                            if (ObjectUtils.isNotEmpty(insPro)) {
                                                String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue();
                                                JSONArray jsonArray = JSONArray.parseArray(insValue);
                                                JSONObject jsonObject = jsonArray.getJSONObject(i - 3 - (aa - list.get(m)));
                                                String vValue = jsonObject.getString("w");
                                                System.out.println("接续温度第 " + (i - 2 - (aa - list.get(m))) + " ä¸ª 'w' å­—段的值是: " + vValue);
                                                textRenderData.setText(vValue);
                                            }else textRenderData.setText("");
                                            break;
                                        }
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                                else  {
                                    //判断合格与不合格
                                    BigDecimal decimal1 = new BigDecimal(a);
                                    BigDecimal decimal2 = new BigDecimal(b == null ? "0" : b);
                                    BigDecimal decimal3 = new BigDecimal(d == null ? "0" : d);
                                    if (decimal1.compareTo(decimal2) > 0 && decimal1.compareTo(decimal3) > 0) {
                                        textRenderData.setText("√");
                                    } else {
                                        textRenderData.setText("×");
                                    }
                                    renderData.add(textRenderData);
                                    paragraphRenderData.setContents(renderData);
                                    paragraphRenderDataList.add(paragraphRenderData);
                                    cellRenderData.setParagraphs(paragraphRenderDataList);
                                    cells.add(cellRenderData);
                                }
                            }
                        }
                        rowRenderData.setCells(cells);
                        if (rowRenderData.getCells().size() != 0) {
                            rows.add(rowRenderData);
                        }
                    }
                    TableRenderData tableRenderData = new TableRenderData();
                    tableRenderData.setRows(rows);
                    int countSize = tableRenderData.getRows().get(0).getCells().size();
                    for (RowRenderData row : tableRenderData.getRows()) {
                            /*for (CellRenderData cell : row.getCells()) {
                                System.out.print(cell.getParagraphs().get(0).getContents());
                            }
                            System.out.println("");*/
                        if (row.getCells().size() != countSize) {
                            throw new ErrorException("每行单元格不相等5");
                        }
                    }
                    TableStyle tableStyle = new TableStyle();
                    tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
                    tableStyle.setAlign(TableRowAlign.CENTER);
                    BorderStyle borderStyle = new BorderStyle();
                    borderStyle.setColor("000000");
                    borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
                    borderStyle.setSize(14);
                    tableStyle.setLeftBorder(borderStyle);
                    tableStyle.setTopBorder(borderStyle);
                    tableStyle.setRightBorder(borderStyle);
                    tableStyle.setBottomBorder(borderStyle);
                    tableRenderData.setTableStyle(tableStyle);
                    Map<String, Object> table = new HashMap<>();
                    table.put("table3", tableRenderData);
                    table.put("report", insReport);
                    table.put("index3", index3);
                    tables3.add(table);
                    index3++;
                }
            }
        });
    }
}
cnas-require/src/main/java/com/ruoyi/require/mapper/DataConfigMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.require.dto.DeviceConfigDtoPage;
import com.ruoyi.require.pojo.DataConfig;
import java.util.List;
/**
 * <p>
 *  Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-07-13 12:23:00
 */
public interface DataConfigMapper extends BaseMapper<DataConfig> {
    List<DeviceConfigDtoPage> selectDataConfigList(Integer deviceId);
    List<Integer> deleteDataConfig();
}
cnas-require/src/main/java/com/ruoyi/require/mapper/DeviceBorrowMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.require.pojo.DeviceBorrow;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
 *  Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-09-21 10:53:51
 */
public interface DeviceBorrowMapper extends BaseMapper<DeviceBorrow> {
    IPage<DeviceBorrow> deviceBorrowPage(Page page, @Param("ew")QueryWrapper<DeviceBorrow> ew);
    List<DeviceBorrow> getDeviceBorrowBydeviceId(Integer deviceId);
}
cnas-require/src/main/java/com/ruoyi/require/mapper/DeviceFaultMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.require.pojo.DeviceFault;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface DeviceFaultMapper extends BaseMapper<DeviceFault> {
}
cnas-require/src/main/java/com/ruoyi/require/mapper/DeviceFaultOneMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.require.dto.DeviceFaultOneDto;
import com.ruoyi.require.pojo.DeviceFaultOne;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
 * è®¾å¤‡æ•…障表 Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-09-26 02:03:29
 */
public interface DeviceFaultOneMapper extends BaseMapper<DeviceFaultOne> {
    IPage<DeviceFaultOneDto> deviceFaultOnePage(@Param("deviceId") Integer deviceId, Page page, @Param("processNumber") String processNumber);
}
cnas-require/src/main/java/com/ruoyi/require/mapper/DeviceLogMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.require.pojo.DeviceLog;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface DeviceLogMapper extends BaseMapper<DeviceLog> {
}
cnas-require/src/main/java/com/ruoyi/require/mapper/DeviceMaintenanceMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.require.dto.DeviceMaintenanceExport;
import com.ruoyi.require.pojo.DeviceMaintenance;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface DeviceMaintenanceMapper extends BaseMapper<DeviceMaintenance> {
    List<DeviceMaintenance> getDeviceMaintenanceParam();
//    IPage<DeviceMaintenance> getDeviceMaintenancePage(Page page, Integer deviceId);
    List<DeviceMaintenanceExport> deviceMaintenanceExport(Integer deviceId);
}
cnas-require/src/main/java/com/ruoyi/require/mapper/DeviceMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.require.dto.DeviceDto;
import com.ruoyi.require.pojo.Device;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
 * è®¾å¤‡(Device)表数据库访问层
 */
public interface DeviceMapper extends BaseMapper<Device> {
    IPage<Device> selectDeviceParameter(Page page, QueryWrapper<Device> ew);
    List<Device> selectEquipmentOverview(Page page, QueryWrapper<Device> ew);
    //获取被授权人
    List<Device> authorizedPerson();
    //查询
    List<Device> search(@Param(value = "status") Integer status, @Param(value = "deviceName") String deviceName,
                        @Param(value = "specificationModel") String specificationModel, @Param(value = "largeCategory") String largeCategory);
    //获取图片数据
    void selectDeviceImage(@Param(value = "name") String name ,@Param(value = "id") Integer id);
    //查询设备负责人
    List<Device> selectDevicePrincipal();
    IPage<DeviceDto> selectDeviceParameterPage(Page page, @Param("ew") QueryWrapper<DeviceDto> queryWrappers, @Param("laboratoryNameIsNull") Boolean laboratoryNameIsNull);
    List<Map<String, Object>> getInspectionItemSubclass(@Param("id") Integer id);
    List<Map<String, Object>> treeDevice(@Param("deviceName") String deviceName);
    DeviceDto selectDeviceByCode(Integer id);
}
cnas-require/src/main/java/com/ruoyi/require/mapper/DeviceMetricMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.require.pojo.DeviceMetric;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface DeviceMetricMapper extends BaseMapper<DeviceMetric> {
}
cnas-require/src/main/java/com/ruoyi/require/mapper/DeviceMetricRecordMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.require.pojo.DeviceMetricRecord;
/**
 * <p>
 * è®¾å¤‡æ ¡å‡† - æ ¡å‡†è®°å½• Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-09-27 10:20:01
 */
public interface DeviceMetricRecordMapper extends BaseMapper<DeviceMetricRecord> {
}
cnas-require/src/main/java/com/ruoyi/require/mapper/DeviceMetricsCopyMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.require.pojo.DeviceMetricsCopy;
/**
 * <p>
 * è®¾å¤‡æ ¡å‡† - æ ¡å‡†è®°å½• - æ ¡å‡†æ¡ç›® Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-09-27 10:20:11
 */
public interface DeviceMetricsCopyMapper extends BaseMapper<DeviceMetricsCopy> {
}
cnas-require/src/main/java/com/ruoyi/require/mapper/DeviceRecordMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.require.dto.DeviceRecordDto;
import com.ruoyi.require.excel.DeviceRecordExport;
import com.ruoyi.require.pojo.DeviceRecord;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
 * cnas设备使用记录表 Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-09-21 11:06:47
 */
public interface DeviceRecordMapper extends BaseMapper<DeviceRecord> {
    IPage<DeviceRecordDto> deviceRecordPage(@Param("deviceId") Integer deviceId, Page page,@Param("deviceNumber") String deviceNumber);
    List<DeviceRecordExport> incidentReportExport(Integer deviceId);
}
cnas-require/src/main/java/com/ruoyi/require/mapper/DeviceStateMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.require.dto.DeviceStateDto;
import com.ruoyi.require.pojo.DeviceState;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
 * è®¾å¤‡åœç”¨/启用 Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-09-26 09:51:40
 */
public interface DeviceStateMapper extends BaseMapper<DeviceState> {
    IPage<DeviceStateDto> getDeviceStatePage(@Param("deviceId") Integer deviceId, Page page,@Param("processNumber") String processNumber);
}
cnas-require/src/main/java/com/ruoyi/require/mapper/DocumentDao.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.require.pojo.Document;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface DocumentDao extends BaseMapper<Document> {
}
cnas-require/src/main/java/com/ruoyi/require/mapper/FeCalibrationScheduleMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.require.pojo.FeCalibrationSchedule;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
 * ä»ªå™¨è®¾å¤‡æ£€å®š/校准计划表 Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-13 02:53:05
 */
public interface FeCalibrationScheduleMapper extends BaseMapper<FeCalibrationSchedule> {
    IPage<FeCalibrationSchedule> ipage(Page page, @Param("instrumentName") String instrumentName, @Param("managementNumber") String managementNumber);
}
cnas-require/src/main/java/com/ruoyi/require/mapper/FeIlluminationDetectionAreaMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.require.pojo.FeIlluminationDetectionArea;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-照度记录表-检测区域 Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-07 04:16:28
 */
public interface FeIlluminationDetectionAreaMapper extends BaseMapper<FeIlluminationDetectionArea> {
}
cnas-require/src/main/java/com/ruoyi/require/mapper/FeIlluminationMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.require.dto.FeIlluminationDto;
import com.ruoyi.require.dto.FeIlluminationExportDto;
import com.ruoyi.require.pojo.FeIllumination;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-照度记录表 Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-07 04:15:57
 */
public interface FeIlluminationMapper extends BaseMapper<FeIllumination> {
    IPage<FeIlluminationDto> getFeLightningProtection(Page page);
    /**
     * æŸ¥è¯¢ç…§æ˜Žè®°å½•
     * @param intensityIlluminationId
     * @return
     */
    FeIlluminationExportDto selectFeIllumination(Integer intensityIlluminationId);
}
cnas-require/src/main/java/com/ruoyi/require/mapper/FeLightningProtectionMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.require.excel.FeLightningProtectionExcel;
import com.ruoyi.require.pojo.FeLightningProtection;
import java.util.List;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-防雷检测 Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-07 04:16:36
 */
public interface FeLightningProtectionMapper extends BaseMapper<FeLightningProtection> {
    List<FeLightningProtectionExcel> exportOfLightningProtectionDetection();
}
cnas-require/src/main/java/com/ruoyi/require/mapper/FeMeasuredQuantityMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.require.pojo.FeMeasuredQuantity;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-电源稳定性-测定量 Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-07 04:16:44
 */
public interface FeMeasuredQuantityMapper extends BaseMapper<FeMeasuredQuantity> {
}
cnas-require/src/main/java/com/ruoyi/require/mapper/FePowerStableMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.require.dto.FePowerStableDto;
import com.ruoyi.require.dto.FePowerStableExportDto;
import com.ruoyi.require.pojo.FePowerStable;
import org.apache.ibatis.annotations.Param;
import java.util.Map;
import java.util.Objects;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-电源稳定性 Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-07 04:16:52
 */
public interface FePowerStableMapper extends BaseMapper<FePowerStable> {
    IPage<FePowerStableDto> getLaboratoryFacilityPowerStablePage(Page page);
    Map<String, Objects> getCalibrationDate(Integer deviceId);
    /**
     * æŸ¥è¯¢ç”µæºç¨³å®šæ€§
     * @param powerStableId
     * @return
     */
    FePowerStableExportDto selectPowerStable(@Param("powerStableId") Integer powerStableId);
}
cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceAcceptanceInspectionMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.require.pojo.FeStandardSubstanceAcceptanceInspection;
/**
 * <p>
 * éªŒæ”¶å¼€ç®±è®°å½• Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-14 03:30:09
 */
public interface FeStandardSubstanceAcceptanceInspectionMapper extends BaseMapper<FeStandardSubstanceAcceptanceInspection> {
}
cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceAcceptanceMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.require.pojo.FeStandardSubstanceAcceptance;
import com.ruoyi.require.vo.AcceptanceVo;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
 * æ ‡å‡†ç‰©è´¨éªŒæ”¶ Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-14 03:29:41
 */
public interface FeStandardSubstanceAcceptanceMapper extends BaseMapper<FeStandardSubstanceAcceptance> {
    IPage<AcceptanceVo> getPageAcceptance(Page page, @Param("name")String name);
}
cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.require.pojo.FeStandardSubstance;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
 * æ ‡å‡†ç‰©è´¨æ¸…单 Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-13 03:58:59
 */
public interface FeStandardSubstanceMapper extends BaseMapper<FeStandardSubstance> {
    IPage<FeStandardSubstance> getPage(Page page,@Param("ew")FeStandardSubstance feStandardSubstance);
}
cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceRecordMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.require.pojo.FeStandardSubstanceRecord;
import com.ruoyi.require.vo.SubstanceRecordVo;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
 * æ ‡å‡†ç‰©è´¨æ¸…单借用归还记录表 Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-14 01:49:11
 */
public interface FeStandardSubstanceRecordMapper extends BaseMapper<FeStandardSubstanceRecord> {
    IPage<SubstanceRecordVo> getPage(Page page,@Param("ew") SubstanceRecordVo vo);
}
cnas-require/src/main/java/com/ruoyi/require/mapper/FeTempHumDateMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.require.dto.FeTempHumDateDto;
import com.ruoyi.require.pojo.FeTempHumDate;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-温湿度 åŒºåŸŸ -父 Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-09 11:02:18
 */
public interface FeTempHumDateMapper extends BaseMapper<FeTempHumDate> {
    IPage<FeTempHumDateDto> getFeTempHumDate(Page page);
}
cnas-require/src/main/java/com/ruoyi/require/mapper/FeTempHumRecordMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.require.dto.FeTempHumRecordDto;
import com.ruoyi.require.pojo.FeTempHumRecord;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-温湿度记录 Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-07 04:28:52
 */
public interface FeTempHumRecordMapper extends BaseMapper<FeTempHumRecord> {
    IPage<FeTempHumRecordDto> getFeTempHumRecordPage(Page page, Integer dateId);
}
cnas-require/src/main/java/com/ruoyi/require/mapper/ForeignRegisterMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.require.dto.ForeignRegisterDto;
import com.ruoyi.require.pojo.ForeignRegister;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
 * å¤–来人员登记 Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-19 07:17:35
 */
public interface ForeignRegisterMapper extends BaseMapper<ForeignRegister> {
    /**
     * å¤–来人员登记分页查询
     * @return
     */
    IPage<ForeignRegisterDto> pageForeignRegister(Page page, @Param("ew") QueryWrapper<ForeignRegisterDto> ew,
                                                  @Param("beginDate") String beginDate,
                                                  @Param("endDate") String endDate);
    /**
     * æŸ¥è¯¢å¤–来人员登记列表
     * @param
     * @return
     */
    List<ForeignRegisterDto> getForeignRegisterList(@Param("ew") QueryWrapper<ForeignRegisterDto> ew,
                                                    @Param("beginDate") String beginDate,
                                                    @Param("endDate") String endDate);
}
cnas-require/src/main/java/com/ruoyi/require/mapper/IncidentAcceptanceCheckMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.ruoyi.require.mapper;
import com.ruoyi.framework.mybatis_config.MyBaseMapper;
import com.ruoyi.require.pojo.IncidentAcceptanceCheck;
/**
 * <p>
 * è®¾å¤‡éªŒæ”¶-验收核查 Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-09-19 04:41:19
 */
public interface IncidentAcceptanceCheckMapper extends MyBaseMapper<IncidentAcceptanceCheck> {
}
cnas-require/src/main/java/com/ruoyi/require/mapper/IncidentFileMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.ruoyi.require.mapper;
import com.ruoyi.framework.mybatis_config.MyBaseMapper;
import com.ruoyi.require.pojo.IncidentFile;
/**
 * <p>
 * è®¾å¤‡éªŒæ”¶-文件类确认 Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-09-19 04:41:36
 */
public interface IncidentFileMapper extends MyBaseMapper<IncidentFile> {
}
cnas-require/src/main/java/com/ruoyi/require/mapper/IncidentInstallMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.ruoyi.require.mapper;
import com.ruoyi.framework.mybatis_config.MyBaseMapper;
import com.ruoyi.require.pojo.IncidentInstall;
/**
 * <p>
 * è®¾å¤‡éªŒæ”¶-安装验收检查 Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-09-19 04:41:50
 */
public interface IncidentInstallMapper extends MyBaseMapper<IncidentInstall> {
}
cnas-require/src/main/java/com/ruoyi/require/mapper/IncidentReportMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.require.dto.IncidentReportAddDto;
import com.ruoyi.require.excel.IncidentReportExport;
import com.ruoyi.require.pojo.IncidentReport;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
 * è®¾å¤‡éªŒæ”¶æ·»åŠ éªŒæ”¶å­—æ®µè¡¨ Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-09-19 03:54:49
 */
public interface IncidentReportMapper extends BaseMapper<IncidentReport> {
    IPage<IncidentReportAddDto> getByDeviceId(Page page, @Param("deviceId") Integer deviceId, @Param("processNumber") String processNumber);
    IncidentReportAddDto getShowIncidentReport(Integer id);
    List<IncidentReportExport> incidentReportExport(Integer deviceId);
}
cnas-require/src/main/java/com/ruoyi/require/mapper/IncidentSparePartsMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.ruoyi.require.mapper;
import com.ruoyi.framework.mybatis_config.MyBaseMapper;
import com.ruoyi.require.pojo.IncidentSpareParts;
/**
 * <p>
 * è®¾å¤‡éªŒæ”¶-备件确认 Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-09-19 04:42:06
 */
public interface IncidentSparePartsMapper extends MyBaseMapper<IncidentSpareParts> {
}
cnas-require/src/main/java/com/ruoyi/require/mapper/InformationNotificationMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.require.dto.InformationNotificationDto;
import com.ruoyi.require.pojo.InformationNotification;
/**
 * <p>
 * æ¶ˆæ¯é€šçŸ¥ Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-04-23 02:14:30
 */
public interface InformationNotificationMapper extends BaseMapper<InformationNotification> {
    IPage<InformationNotificationDto> getPage(Page page, String messageType, Integer userId);
}
cnas-require/src/main/java/com/ruoyi/require/mapper/InstructionMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.require.pojo.Instruction;
/**
 * <p>
 * ä½œä¸šæŒ‡å¯¼ä¹¦æ·»åŠ å—æŽ§æ–‡ä»¶è¡¨ Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-12-04 10:29:18
 */
public interface InstructionMapper extends BaseMapper<Instruction> {
    IPage<Instruction> pageByPageQueryOfHomeworkInstructions(Page page);
}
cnas-require/src/main/java/com/ruoyi/require/mapper/InternalWastesDetailMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.require.pojo.InternalWastesDetail;
/**
 * <p>
 * å®‰å…¨å†…务三废登记详情 Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-19 06:39:54
 */
public interface InternalWastesDetailMapper extends BaseMapper<InternalWastesDetail> {
}
cnas-require/src/main/java/com/ruoyi/require/mapper/InternalWastesMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.require.dto.InternalWastesDto;
import com.ruoyi.require.pojo.InternalWastes;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
 * å®‰å…¨å†…务三废登记 Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-19 06:39:27
 */
@Mapper
public interface InternalWastesMapper extends BaseMapper<InternalWastes> {
    /**
     * å®‰å…¨å†…务三废登记分页查询
     * @param page
     * @param ew
     * @return
     */
    IPage<InternalWastesDto> pageInternalWastes(Page page, @Param("ew") QueryWrapper<InternalWastes> ew);
}
cnas-require/src/main/java/com/ruoyi/require/mapper/OperationInstructionMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.require.pojo.OperationInstruction;
import com.ruoyi.require.vo.OperationInstructionVo;
import java.util.List;
/**
 * <p>
 * è®¾å¤‡ - ä½œä¸šæŒ‡å¯¼ä¹¦ æ·»åŠ å—æŽ§æ–‡ä»¶ å­ Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-12-04 10:43:32
 */
public interface OperationInstructionMapper extends BaseMapper<OperationInstruction> {
    List<OperationInstructionVo> homeworkGuidebookEditor(Integer instructionId);
}
cnas-require/src/main/java/com/ruoyi/require/mapper/PkMasterMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.require.pojo.PkMaster;
/**
 * <p>
 *  Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-07-29 01:16:26
 */
public interface PkMasterMapper extends BaseMapper<PkMaster> {
}
cnas-require/src/main/java/com/ruoyi/require/mapper/PkSlaveMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.require.pojo.PkSlave;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
 *  Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-07-29 01:16:39
 */
public interface PkSlaveMapper extends BaseMapper<PkSlave> {
    List<PkSlave> selectList1(@Param("isid") String isid);
}
cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesConsumablesMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.require.pojo.ProcurementSuppliesConsumables;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface ProcurementSuppliesConsumablesMapper extends BaseMapper<ProcurementSuppliesConsumables> {
}
cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesContentsMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.require.pojo.ProcurementSuppliesContents;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface ProcurementSuppliesContentsMapper extends BaseMapper<ProcurementSuppliesContents> {
}
cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesExpendsMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.require.dto.ProcurementSuppliesExpendDto;
import com.ruoyi.require.pojo.ProcurementSuppliesExpends;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
 *  Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-15 03:47:19
 */
public interface ProcurementSuppliesExpendsMapper extends BaseMapper<ProcurementSuppliesExpends> {
    IPage<ProcurementSuppliesExpendDto> pageList(Page page, @Param("ew") LambdaQueryWrapper<ProcurementSuppliesExpendDto> eq);
}
cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesListMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.require.dto.ProcurementSuppliesListDto;
import com.ruoyi.require.pojo.ProcurementSuppliesList;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
 * æœåŠ¡ä¸Žä¾›åº”å•† è€—材列表 Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-15 04:04:32
 */
public interface ProcurementSuppliesListMapper extends BaseMapper<ProcurementSuppliesList> {
    IPage<ProcurementSuppliesList> selectProcurementSuppliesList(Page page,@Param("contentsId") Long contentsId, @Param("ew") QueryWrapper<ProcurementSuppliesListDto> ew);
    ProcurementSuppliesList selectProcurementSuppliesListForUpdate(@Param("id") Long id);
    List<ProcurementSuppliesList> selectProcurementSuppliesListAll(@Param("ew") ProcurementSuppliesListDto ew);
    List<ProcurementSuppliesList> selectProcurementSuppliesListByContentsId(@Param("id") Integer contentsId);
}
cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesStoreMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.require.dto.StoreDto;
import com.ruoyi.require.excel.StoreExcel;
import com.ruoyi.require.pojo.ProcurementSuppliesStore;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface ProcurementSuppliesStoreMapper extends BaseMapper<ProcurementSuppliesStore> {
    IPage<StoreDto> selectStoreList(Page page, @Param("ew") QueryWrapper<StoreDto> ew);
    /**
     *       å’Œæ ‘关联的条件,,,目前没有关联关系    WHERE s.contents_id = #{contentsId}
     * @param contentsId
     * @return
     */
    List<StoreExcel> exportExcel(Integer contentsId);
}
cnas-require/src/main/java/com/ruoyi/require/mapper/ReservationMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.require.dto.ReservationDto;
import com.ruoyi.require.pojo.Reservation;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
 * èµ„源预定新建预定表 Mapper æŽ¥å£
 * </p>
 *
 * @author baomidou
 * @since 2024-09-14
 */
public interface ReservationMapper extends BaseMapper<Reservation> {
    List<ReservationDto> selectReservationParameterPage(@Param("deviceId") Integer deviceId, @Param("reservationTime") String reservationTime, @Param("specificTime") String specificTime);
}
cnas-require/src/main/java/com/ruoyi/require/mapper/SupplierManagementMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.require.pojo.SupplierManagement;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
 *  Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-15 02:46:45
 */
@Mapper
public interface SupplierManagementMapper extends BaseMapper<SupplierManagement> {
    IPage<SupplierManagement> pageSupplierManagement(Page page, @Param("ew") QueryWrapper<SupplierManagement> supplierManagementQueryWrapper);
    IPage<SupplierManagement> selectQualifiedSupplierManagement(Page page, @Param("ew") QueryWrapper<SupplierManagement> supplierManagementQueryWrapper);
    List<SupplierManagement> selectSupplierManagementAll(@Param("parentId") Integer parentId);
    List<SupplierManagement> selectSupplierManagement(@Param("parentId")Integer parentId);
}
cnas-require/src/main/java/com/ruoyi/require/mapper/SuppliersDirectoryContentsMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.require.pojo.SuppliersDirectoryContents;
/**
 * <p>
 * æœåŠ¡å’Œä¾›åº”å“é‡‡è´­ç›®å½• Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-12-17 06:14:51
 */
public interface SuppliersDirectoryContentsMapper extends BaseMapper<SuppliersDirectoryContents> {
}
cnas-require/src/main/java/com/ruoyi/require/pojo/DataConfig.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,69 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
 * <p>
 *
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-07-13 12:23:00
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("device_data_config")
@ApiModel(value = "DataConfig对象", description = "")
public class DataConfig implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("主键id")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("公式")
    private String formula;
    @ApiModelProperty("参照X")
    private String referx;
    @ApiModelProperty("参照Y")
    private String refery;
    @ApiModelProperty("x")
    private String x;
    @ApiModelProperty("y")
    private String y;
    @ApiModelProperty("设备id")
    private Integer deviceId;
    @ApiModelProperty("检验项目")
    private String inspectionItem;
    @ApiModelProperty("检验项子项")
    private String inspectionItemSubclass;
    @TableField(exist = false)
    @ApiModelProperty("检验项子项")
    private String insProductItem;
    @ApiModelProperty("检验项id")
    private Integer structureItemParameterId;
    @ApiModelProperty("序号")
    private String serialNumber;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/Device.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,140 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
 * è®¾å¤‡(Device)表对象
 */
@TableName(value = "device")
@Data
public class Device implements Serializable {
    @ApiModelProperty(value = "主键")
    @TableId(type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty(value = "设备名称")
    private String deviceName;
    @ApiModelProperty(value = "en设备名称")
    private String enDeviceName;
    @ApiModelProperty(value = "规格型号")
    private String specificationModel;
    @ApiModelProperty(value = "生产厂家")
    private String manufacturer;
    @ApiModelProperty(value = "出厂编号")
    private String factoryNo;
    @ApiModelProperty(value = "管理编号")
    private String managementNumber;
    @ApiModelProperty(value = "技术指标")
    private String technicalIndicators;
    @ApiModelProperty(value = "购置日期")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime acquisitionDate;
    @ApiModelProperty(value = "启用日期")
    private LocalDateTime activationDate;
    @ApiModelProperty(value = "管理人Id")
    private Integer equipmentManager;
    @ApiModelProperty(value = "存放点")
    private String storagePoint;
    @ApiModelProperty(value = "所属部门Id")
    private Integer subordinateDepartmentsId;
    @ApiModelProperty(value = "检验项目Id")
    private String insProductIds;
    @ApiModelProperty(value = "校准服务机构")
    private String calibrationServices;
    @ApiModelProperty(value = "最近校准日期")
    private LocalDateTime lastCalibrationDate;
    @ApiModelProperty(value = "下次校准日期")
    private LocalDateTime nextCalibrationDate;
    @ApiModelProperty(value = "设备类型")
    private String largeCategory;
    @ApiModelProperty(value = "单价")
    private BigDecimal unitPrice;
    @ApiModelProperty(value = "设备状态")
    private Integer deviceStatus;
    @ApiModelProperty(value = "校准周期(月)")
    private String calibrationDate;
    @ApiModelProperty(value = "图片上传")
    private String imageUpload;
    @ApiModelProperty(value = "图片备注")
    private String imageName;
    @ApiModelProperty(value = "创建人id")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty(value = "更新时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    @ApiModelProperty(value = "创建时间")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    @ApiModelProperty("数采-文件后缀")
    private String fileType;
    @ApiModelProperty("数采-采集地址")
    private String collectUrl;
    @ApiModelProperty("数采-存储地址")
    private String storageUrl;
    @ApiModelProperty("数采-设备IP")
    private String ip;
    @ApiModelProperty("数采-是否为数采设备")
    @TableField(exist = false)
    private Boolean isItADataAcquisitionDevice;
    @ApiModelProperty("数采-委托字段")
    private String entrustCode;
    @ApiModelProperty("数采-样品字段")
    private String sampleCode;
    @ApiModelProperty("数采-db,mdb文件名称")
    private String dbFileName;
    @ApiModelProperty("数采-db文件 å…‰çº¤å¸¦ç¼–号")
    private String fiberOpticRibbon;
    @ApiModelProperty("被授权人")
    private String authorizedPerson;
    @ApiModelProperty("资产编码")
    private String assetCode;
    @ApiModelProperty("产地")
    private String origin;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/DeviceBorrow.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,145 @@
package com.ruoyi.require.pojo;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
/**
 * <p>
 *
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-09-21 10:53:51
 */
@Getter
@Setter
@TableName("device_borrow")
@ApiModel(value = "DeviceBorrow对象", description = "设备借用")
public class DeviceBorrow implements Serializable {
    @TableId(value = "id", type = IdType.AUTO)
    @ExcelIgnore
    private Integer id;
    @ApiModelProperty("流程编号")
    @ExcelProperty(value = "流程编号")
    private String processNumber;
    @ApiModelProperty("设备id")
    @ExcelIgnore
    private Integer deviceId;
    @ApiModelProperty("管理编号")
    @ExcelProperty(value = "管理编号")
    private String unifyNumber;
    @ApiModelProperty("借用人")
    @ExcelProperty(value = "借用人")
    private String recipientUser;
    @ExcelProperty(value = "借用人联系方式")
    @ApiModelProperty("借用人联系方式")
    private String borrowerContactInformation;
    @ApiModelProperty("借用时状态")
    @ExcelProperty(value = "借用时状态")
    //0合格;1ç»´ä¿®;2停用;3报废
    private Integer recipientState;
    @ApiModelProperty("借用日期")
    @ExcelProperty(value = "提交日期")
    private Date recipientTime;
    @ApiModelProperty("借出人")
    @ExcelProperty(value = "借出人")
    private String submitUser;
    @ApiModelProperty("借出日期")
    @ExcelProperty(value = "借出日期")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("当前状态")
    @ExcelProperty(value = "当前状态")
    private String nowState;
    @ApiModelProperty("当前责任人")
    @ExcelProperty(value = "当前责任人")
    private String nowUser;
    @ExcelIgnore
    @ApiModelProperty("附件")
    //路径
    private String url;
    @ApiModelProperty("附件")
    @ExcelProperty(value = "附件")
    //文件名
    private String fileName;
    @ApiModelProperty("下环节责任人")
    @ExcelIgnore
    private String nextUser;
    @ApiModelProperty("提交操作人")
    @ExcelIgnore
    private String submitOperationUser;
    @ApiModelProperty("提交操作时间")
    @ExcelIgnore
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime submitOperationTime;
    @ApiModelProperty("归还人")
    @ExcelIgnore
    private String rebackUser;
    @ApiModelProperty("归还日期")
    @ExcelIgnore
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime rebackTime;
    @ApiModelProperty("接受状态0合格;1ç»´ä¿®;2停用;3报废")
    @ExcelIgnore
    private Integer receiveState;
    @ApiModelProperty("设备责任人")
    @ExcelIgnore
    private String deviceUser;
    @ApiModelProperty("备注")
    @ExcelIgnore
    private String note;
    @ApiModelProperty("接收操作人")
    @ExcelIgnore
    private String receiveOperationUser;
    @ApiModelProperty("接收操作时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ExcelIgnore
    private LocalDateTime receiveOperationTime;
    @ApiModelProperty("设备名称")
    @TableField(select = false, exist = false)
    @ExcelProperty(value = "设备名称")
    private String deviceName;
    @ApiModelProperty("流程跟踪")
    @TableField(select = false, exist = false)
    @ExcelIgnore
    private List<DeviceLog> deviceLogs;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/DeviceFault.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.time.LocalDate;
@Data
@TableName("device_faults")
public class DeviceFault {
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    //设备di
    private Integer deviceId;
    //故障次数
    private Integer faultCount;
    //最近故障日期
    private LocalDate recentFaultDate;
    //最近校准日期
    private LocalDate recentCalibrationDate;
   // æœ€è¿‘校准结论
    private String calibrationConclusion;
  // æœ€è¿‘检查日期
    private LocalDate recentCheckDate;
  // ä¸‹ä¸€æ¬¡æ£€æŸ¥æ—¥æœŸ
    private LocalDate nextCheckDate;
//检查结论
    private String checkConclusion;
//维护类型
    private String maintenanceType;
//维护人员
    private String maintenancePerson;
//备注
    private String comments;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/DeviceFaultOne.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,125 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
 * <p>
 * è®¾å¤‡æ•…障表
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-09-26 02:03:29
 */
@Getter
@Setter
@TableName("device_fault_one")
@ApiModel(value = "DeviceFaultOne对象", description = "设备故障表")
public class DeviceFaultOne implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("设备id")
    private Integer deviceId;
    @ApiModelProperty("1流程编号")
    private String processNumber;
    @ApiModelProperty("1准确度量值")
    private String measureOfAccuracy;
    @ApiModelProperty("1故障情况")
    private String faultSituation;
    @ApiModelProperty("1文件原名")
    private String fileName;
    @ApiModelProperty("1系统文件名")
    private String systemFileName;
    @ApiModelProperty("1下环节负责人")
    private String submitNextPesponsible;
    @ApiModelProperty("1操作人")
    private String submitOperatingPersonnel;
    @ApiModelProperty("1日期")
    private LocalDateTime submitDate;
    @ApiModelProperty("2维修方式及费用")
    private String methodCost;
    @ApiModelProperty("2审核意见")
    private String adminAuditOption;
    @ApiModelProperty("2设备管理员-下环节负责人")
    private String adminNextPesponsible;
    @ApiModelProperty("2管理员-操作人")
    private String adminOperatingPersonnel;
    @ApiModelProperty("2管理员-日期")
    private LocalDateTime adminDate;
    @ApiModelProperty("3 æŠ€æœ¯è´Ÿè´£äºº å®¡æ ¸æ„è§")
    private String technicalAuditOption;
    @ApiModelProperty("3技术负责人 ä¸‹çŽ¯èŠ‚è´Ÿè´£äºº")
    private String technicalNextPesponsible;
    @ApiModelProperty("3 æŠ€æœ¯è´Ÿè´£äºº æ“ä½œäºº")
    private String technicalOperatingPersonnel;
    @ApiModelProperty("3 æŠ€æœ¯è´Ÿè´£äºº æ—¥æœŸ")
    private LocalDateTime technicalDate;
    @ApiModelProperty("4维修情况")
    private String maintainSituation;
    @ApiModelProperty("4 ç»´ä¿® ä¸‹çŽ¯èŠ‚è´Ÿè´£äºº")
    private String maintainNextPesponsible;
    @ApiModelProperty("4 ç»´ä¿® æ“ä½œäºº")
    private String maintainOperatingPersonnel;
    @ApiModelProperty("4 ç»´ä¿® æ—¥æœŸ")
    private LocalDateTime maintainDate;
    @ApiModelProperty("5验收确认校准情况")
    private String checkCalSituation;
    @ApiModelProperty("5 ç»´ä¿®åŽ æ“ä½œäºº")
    private String afterMaintenanceOperatingPersonnel;
    @ApiModelProperty("5 ç»´ä¿®åŽ æ—¥æœŸ")
    private LocalDateTime afterMaintenanceDate;
    @ApiModelProperty("当前状态")
    private String currentState;
    @ApiModelProperty("提交人")
    private String submitPerson;
    @ApiModelProperty("当前责任人")
    private String currentResponsible;
    @ApiModelProperty("创建日期")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("故障日期")
    private LocalDate faultDate;
    @ApiModelProperty("要求修复日期")
    private LocalDate requestRepairDate;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/DeviceLog.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
@TableName("device_log") // è®°å½•
public class DeviceLog implements Serializable {
    @TableId(type= IdType.AUTO)
    private Integer id;
    private String operator;
//    @JsonFormat()
    private LocalDateTime operationTime;
    private String operationType;
    private String operationContent;
    private Integer deviceId;
    //关联的表名
    private String relevanceForm;
    //关联的id
    private Integer relevanceId;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/DeviceMaintenance.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDate;
@Data
@EqualsAndHashCode(callSuper = false)
//@Accessors(chain = true)
@TableName("device_maintenance")
public class DeviceMaintenance {
//    @TableId(value = "id", type = IdType.AUTO)
    private static final long serialVersionUID = 1L;
    //设备id
    @TableId(type=IdType.AUTO)
    private Integer id;
    private Integer deviceId;
    private String deviceName;
    //编号
    private String deviceNumber;
    //统一编号
    private String managementNumber;
    //维护内容
    private String content;
    //维护日期
    @TableField(fill = FieldFill.INSERT)
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate date;
    //下次维护日期
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate nextDate;
    //维护类型
    private Integer maintenanceType;
    //维护人员
    private String name;
    //备注
    private String comments;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/DeviceMetric.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
@TableName("device_metrics")
public class DeviceMetric implements Serializable {
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id; //id
    private Integer deviceId;            // è®¾å¤‡ID
    private String measurementParameter; // è®¡é‡å‚æ•°
    private String rangeOfMeasurement;   // é‡ç¨‹èŒƒå›´
    private String maxPermissibleError;  // æœ€å¤§å…è®¸è¯¯å·®
    private String judgmentCriteria;     // åˆ¤å®šæ ‡å‡†
    private String createdBy;           // åˆ›å»ºäºº
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime creationTime;      // åˆ›å»ºæ—¶é—´
    @ApiModelProperty("calibrate:校准;examine:核查")
    private String type; // ç±»åž‹
}
cnas-require/src/main/java/com/ruoyi/require/pojo/DeviceMetricRecord.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,115 @@
package com.ruoyi.require.pojo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
/**
 * <p>
 * è®¾å¤‡æ ¡å‡† - æ ¡å‡†è®°å½•
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-09-27 10:20:01
 */
@Getter
@Setter
@TableName("device_metric_record")
@ApiModel(value = "DeviceMetricRecord对象", description = "设备校准 - æ ¡å‡†è®°å½•")
@ExcelIgnoreUnannotated
public class DeviceMetricRecord implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("主键id")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("记录编号")
    @ExcelProperty(value = "记录编号",index = 0)
    private String processNumber;
    @ApiModelProperty("计量单位")
    @ExcelProperty(value = "机构",index = 1)
    private String unitOfMeasure;
    @ApiModelProperty("校准日期")
    @ExcelProperty(value = "校准/核查日期",index = 5)
    @JsonFormat(pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @ColumnWidth(20)
    private Date calibrationDate;
    @ApiModelProperty("下次校准日期")
    @ExcelProperty(value = "下次校准/核查日期",index = 6)
    @JsonFormat(pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @ColumnWidth(20)
    private Date nextCalibrationDate;
    @ApiModelProperty("计算器具")
    private String calculatingApparatus;
    @ApiModelProperty("计算标准量程")
    private String standardRange;
    @ApiModelProperty("计量标准不确定度")
    private String calibrationStandardUncertainty;
    @ApiModelProperty("依据文件")
    private String byDocument;
    @ApiModelProperty("证书编号")
    @ExcelProperty(value = "校准/核查证书编号",index = 3)
    private String certificateSerialNumber;
    @ApiModelProperty("状态")
    @ExcelProperty(value = "校准/核查结论",index = 2)
    private String status;
    @ApiModelProperty("原文件名称")
    private String fileName;
    @ApiModelProperty("系统生成文件名称")
    private String systemFileName;
    @ApiModelProperty("备注")
    @ExcelProperty(value = "说明",index = 4)
    private String remark;
    @ApiModelProperty("设备id")
    private Integer deviceId;
    @ApiModelProperty("创建时间 / ç™»è®°æ—¥æœŸ")
    @TableField(fill = FieldFill.INSERT)
    @ExcelProperty(value = "登记日期",index = 9)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ColumnWidth(20)
    private LocalDateTime createTime;
    @ApiModelProperty("登记人")
    @ExcelProperty(value = "登记人",index = 8)
    private String createUser;
    @ApiModelProperty("calibrate:校准;examine:核查")
    private String type;
    @ApiModelProperty("确认时间")
    @ExcelProperty(value = "确认日期",index = 7)
    @JsonFormat(pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @ColumnWidth(20)
    private Date confirmDate;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/DeviceMetricsCopy.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,73 @@
package com.ruoyi.require.pojo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * è®¾å¤‡æ ¡å‡† - æ ¡å‡†è®°å½• - æ ¡å‡†æ¡ç›®
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-09-27 10:20:11
 */
@Getter
@Setter
@TableName("device_metrics_copy")
@ApiModel(value = "DeviceMetricsCopy对象", description = "设备校准 - æ ¡å‡†è®°å½• - æ ¡å‡†æ¡ç›®")
@ExcelIgnoreUnannotated
public class DeviceMetricsCopy implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("id")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("设备校准 - æ ¡å‡†è®°å½•id")
    private Integer deviceMetricsId;
    @ApiModelProperty("计量参数")
    private String measurementParameter;
    @ApiModelProperty("量程范围")
    private String rangeOfMeasurement;
    @ApiModelProperty("最大允许误差")
    private String maxPermissibleError;
    @ApiModelProperty("判定标准")
    private String judgmentCriteria;
    @ApiModelProperty("创建人")
    private String createdBy;
    @ApiModelProperty("创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDateTime creationTime;
    @ApiModelProperty("是否校准")
    private String isCalibration;
    @ApiModelProperty("判定结果")
    private String result;
    @ApiModelProperty("单项结果说明")
    private String singleResultStatement;
    @ApiModelProperty("calibrate:校准;examine:核查")
    private String type;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/DeviceRecord.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,64 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDate;
/**
 * <p>
 * cnas设备使用记录表
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-09-21 11:06:47
 */
@Getter
@Setter
@TableName("device_record")
@ApiModel(value = "DeviceRecord对象", description = "cnas设备使用记录表")
public class DeviceRecord implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    private Integer deviceId;
    @ApiModelProperty("设备编号")
    private String deviceNumber;
    @ApiModelProperty("温度")
    private String temperature;
    @ApiModelProperty("湿度")
    private String humidity;
    @ApiModelProperty("使用前0代表不正常1代表正常")
    private Integer useBefore;
    @ApiModelProperty("使用后0代表不正常1代表正常")
    private Integer useAfter;
    @ApiModelProperty("异常情况")
    private String abnormal;
    @ApiModelProperty("使用人")
    private String usePerson;
    @ApiModelProperty("备注")
    private String remark;
    @ApiModelProperty("使用开始日期")
    private LocalDate useStartDate;
    @ApiModelProperty("使用结束日期")
    private LocalDate useEndDate;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/DeviceState.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,107 @@
package com.ruoyi.require.pojo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * è®¾å¤‡åœç”¨/启用
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-09-26 09:51:40
 */
@Getter
@Setter
@TableName("device_state")
@ApiModel(value = "DeviceState对象", description = "设备停用/启用")
public class DeviceState implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("设备停用启用id")
    @TableId(value = "state_id", type = IdType.AUTO)
    private Integer stateId;
    @ApiModelProperty("流程编号")
    private String processNumber;
    @ApiModelProperty("0配件")
    private String accessoryPart;
    @ApiModelProperty("0设备状态")
    private String deviceStatus;
    @ApiModelProperty("0停用启用理由")
    private String reason;
    @ApiModelProperty("0下环节责任人")
    private String submitNextPesponsible;
    @ApiModelProperty("0操作人")
    private String submitOperatingPersonnel;
    @ApiModelProperty("0日期")
    private LocalDateTime submitDate;
    @ApiModelProperty("1部门负责人意见")
    private String departmentReviewOpinion;
    @ApiModelProperty("1下环节责任人")
    private String departmentNextPesponsible;
    @ApiModelProperty("1操作人")
    private String departmentOperatingPersonnel;
    @ApiModelProperty("1日期")
    private LocalDateTime departmentDate;
    @ApiModelProperty("2计量室意见")
    private String measuringRoomReviewOpinion;
    @ApiModelProperty("2下环节责任人")
    private String measuringRoomNextPesponsible;
    @ApiModelProperty("2操作人")
    private String measuringRoomOperatingPersonnel;
    @ApiModelProperty("2日期")
    private LocalDateTime measuringRoomDate;
    @ApiModelProperty("3批准意见")
    private String approvalOpinion;
    @ApiModelProperty("3下环节责任人")
    private String approvalNextPesponsible;
    @ApiModelProperty("3操作人")
    private String approvalOperatingPersonnel;
    @ApiModelProperty("3日期")
    private LocalDateTime approvalDate;
    @ApiModelProperty("当前状态")
    private String currentState;
    @ApiModelProperty("设备Id")
    private Integer deviceId;
    @ApiModelProperty("当前环节负责人")
    private String currentResponsible;
    @ApiModelProperty("提交人")
    @ExcelProperty(value = "提交人")
    private String createUser;
    @ApiModelProperty("提交日期")
    @ExcelProperty(value = "提交日期")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/Document.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,89 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
@TableName(value = "device_documents")
public class Document implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * ä¸»é”®ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * æ–‡æ¡£ç±»åž‹ï¼ˆæžšä¸¾ï¼‰
     */
    private String documentType;
    /**
     * åç§°
     */
    private String name;
    /**
     * ç‰ˆæœ¬å·
     */
    private String version;
    /**
     * æ•°é‡
     */
    private Integer quantity;
    /**
     * é¡µæ•°
     */
    private Integer pageCount;
    /**
     * æä¾›å•†
     */
    private String provider;
    /**
     * æä¾›æ—¥æœŸ
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime provideDate;
    /**
     * å¤‡æ³¨
     */
    private String comments;
    /**
     * åˆ›å»ºæ—¶é—´
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime createdAt;
    /**
     * æ›´æ–°æ—¶é—´
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updatedAt;
    private int deviceId;
    @ApiModelProperty("资产编号")
    private String number;
    @ApiModelProperty("原始文件名称")
    private String systemFileName;
    @ApiModelProperty("系统生成文件名称")
    private String fileName;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/FeCalibrationSchedule.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,81 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * ä»ªå™¨è®¾å¤‡æ£€å®š/校准计划表
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-13 02:53:05
 */
@Getter
@Setter
@TableName("cnas_fe_calibration_schedule")
@ApiModel(value = "FeCalibrationSchedule对象", description = "仪器设备检定/校准计划表")
public class FeCalibrationSchedule implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("仪器名称")
    private String instrumentName;
    @ApiModelProperty("规格型号")
    private String model;
    @ApiModelProperty("管理编号")
    private Integer managementNumber;
    @ApiModelProperty("技术指标")
    private String technicalIndicators;
    @ApiModelProperty("检定周期")
    private String verificationCyde;
    @ApiModelProperty("检定单位")
    private String verificationUnit;
    @ApiModelProperty("最近检定时间")
    private LocalDateTime recentlyTime;
    @ApiModelProperty("计划下次检定时间")
    private LocalDateTime nextTime;
    @ApiModelProperty("备注")
    private String remark;
    @ApiModelProperty("编制")
    private String organization;
    @ApiModelProperty("编制日期")
    private LocalDateTime organizationDate;
    @ApiModelProperty("批准")
    private String approve;
    @ApiModelProperty("批准日期")
    private LocalDateTime approveDate;
    @TableField(fill = FieldFill.INSERT)
    private String createUser;
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updateUser;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/FeIllumination.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,55 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-照度记录表
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-07 04:15:57
 */
@Getter
@Setter
@TableName("cnas_fe_illumination")
@ApiModel(value = "FeIllumination对象", description = "设施和环境条件-设施和环境条件要求-照度记录表")
public class FeIllumination implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("照度记录表id")
    @TableId(value = "intensity_illumination_id", type = IdType.AUTO)
    private Integer intensityIlluminationId;
    @ApiModelProperty("设备id")
    private Integer deviceId;
    @ApiModelProperty("结论")
    private String conclusion;
    @ApiModelProperty("检测人")
    private Integer testerId;
    @ApiModelProperty("核查人")
    private Integer checkerId;
    @ApiModelProperty("检测日期")
    private Date testDate;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("更新时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/FeIlluminationDetectionArea.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-照度记录表-检测区域
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-07 04:16:28
 */
@Getter
@Setter
@TableName("cnas_fe_illumination_detection_area")
@ApiModel(value = "FeIlluminationDetectionArea对象", description = "设施和环境条件-设施和环境条件要求-照度记录表-检测区域")
public class FeIlluminationDetectionArea implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("检测区域id")
    @TableId(value = "detection_area_id", type = IdType.AUTO)
    private Integer detectionAreaId;
    @ApiModelProperty("检测区域名称")
    private String detectionAreaLabel;
    @ApiModelProperty("检测值-第一次")
    private Integer valueOne;
    @ApiModelProperty("检测值-第二次")
    private Integer valueTwo;
    @ApiModelProperty("检测值-第三次")
    private Integer valueThree;
    @ApiModelProperty("平均值")
    private Integer average;
    @ApiModelProperty("备注")
    private String remark;
    @ApiModelProperty("照度记录表id")
    private Integer intensityIlluminationId;
    // å¯¼å‡ºä½¿ç”¨
    @TableField(select = false, exist = false)
    @ApiModelProperty("序号(导出使用)")
    private Integer index;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/FeLightningProtection.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,58 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-防雷检测
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-07 04:16:36
 */
@Getter
@Setter
@TableName("cnas_fe_lightning_protection")
@ApiModel(value = "FeLightningProtection对象", description = "设施和环境条件-设施和环境条件要求-防雷检测")
public class FeLightningProtection implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("主键id")
    @TableId(value = "lightning_protection_id", type = IdType.AUTO)
    private Integer lightningProtectionId;
    @ApiModelProperty("原文件名")
    private String fileName;
    @ApiModelProperty("系统生成文件名")
    private String systemFileName;
    @ApiModelProperty("检测日期")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate detectionDate;
    @ApiModelProperty("有效期")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate termValidity;
    @ApiModelProperty("检测单位")
    private String detectionUnit;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("更新时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/FeMeasuredQuantity.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,54 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-电源稳定性-测定量
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-07 04:16:44
 */
@Getter
@Setter
@TableName("cnas_fe_measured_quantity")
@ApiModel(value = "FeMeasuredQuantity对象", description = "设施和环境条件-设施和环境条件要求-电源稳定性-测定量")
public class FeMeasuredQuantity implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("主键id")
    @TableId(value = "measured_quantity_id", type = IdType.AUTO)
    private Integer measuredQuantityId;
    @ApiModelProperty("测定量名称")
    private String measuredQuantityLabel;
    @ApiModelProperty("值A")
    private String valueA;
    @ApiModelProperty("值B")
    private String valueB;
    @ApiModelProperty("值C")
    private String valueC;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("更新时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty("电源稳定性id")
    private Integer powerStableId;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/FePowerStable.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,58 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-电源稳定性
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-07 04:16:52
 */
@Getter
@Setter
@TableName("cnas_fe_power_stable")
@ApiModel(value = "FePowerStable对象", description = "设施和环境条件-设施和环境条件要求-电源稳定性")
public class FePowerStable implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("电源稳定性id")
    @TableId(value = "power_stable_id", type = IdType.AUTO)
    private Integer powerStableId;
    @ApiModelProperty("测试地点")
    private String testLocation;
    @ApiModelProperty("测试日期")
    private Date testDate;
    @ApiModelProperty("设备id")
    private Integer deviceId;
    @ApiModelProperty("结论")
    private String conclusion;
    @ApiModelProperty("检测者id")
    private Integer testerId;
    @ApiModelProperty("核查人id")
    private Integer checkerId;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("更新时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstance.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,81 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * æ ‡å‡†ç‰©è´¨æ¸…单
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-13 03:58:59
 */
@Getter
@Setter
@TableName("cnas_fe_standard_substance")
@ApiModel(value = "FeStandardSubstance对象", description = "标准物质清单")
public class FeStandardSubstance implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("标准物质名称")
    private String name;
    @ApiModelProperty("规格型号")
    private String model;
    @ApiModelProperty("生产厂家")
    private String factoryManufacturer;
    @ApiModelProperty("出场编号")
    private String factoryNum;
    @ApiModelProperty("管理编号")
    private String manageNum;
    @ApiModelProperty("不确定度")
    private String uncertainty;
    @ApiModelProperty("数量")
    private Long quantity;
    @ApiModelProperty("购置日期")
    private LocalDateTime acquisitionDate;
    @ApiModelProperty("有效期")
    private LocalDateTime effectiveDate;
    @ApiModelProperty("文档编号")
    private String fileNum;
    @ApiModelProperty("存放位置")
    private String position;
    @ApiModelProperty("借调状态(0:未借调 1:已借调)")
    private Integer state;
    @ApiModelProperty("备注")
    private String remark;
    @TableField(fill = FieldFill.INSERT)
    private String createUser;
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updateUser;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceAcceptance.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,87 @@
package com.ruoyi.require.pojo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
 * <p>
 * æ ‡å‡†ç‰©è´¨éªŒæ”¶
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-14 03:29:41
 */
@Getter
@Setter
@TableName("cnas_fe_standard_substance_acceptance")
@ApiModel(value = "FeStandardSubstanceAcceptance对象", description = "标准物质验收")
@ExcelIgnoreUnannotated
public class FeStandardSubstanceAcceptance implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("清单id")
    private Integer substanceId;
    @ApiModelProperty("到货日期")
    @ExcelProperty("到货日期")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate arriveDate;
    @ApiModelProperty("维修单位")
    @ExcelProperty("维修单位")
    private String maintenanceUnit;
    @ApiModelProperty("参数")
    @ExcelProperty("参数")
    private String perameters;
    @ApiModelProperty("安装调试情况")
    @ExcelProperty("安装调试情况")
    private String installation;
    @ApiModelProperty("验收情况")
    @ExcelProperty("验收情况")
    private String situation;
    @ApiModelProperty("接受签字")
    @ExcelProperty("接受签字")
    private String signature;
    @ApiModelProperty("厂家代表")
    @ExcelProperty("厂家代表")
    private String producer;
    @ApiModelProperty("接收人")
    @ExcelProperty("接收人")
    private String recipient;
    @ApiModelProperty("附件")
    @ExcelProperty("附件")
    private String file;
    @TableField(fill = FieldFill.INSERT)
    private String createUser;
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updateUser;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceAcceptanceInspection.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,47 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * éªŒæ”¶å¼€ç®±è®°å½•
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-14 03:30:09
 */
@Getter
@Setter
@TableName("cnas_fe_standard_substance_acceptance_inspection")
@ApiModel(value = "FeStandardSubstanceAcceptanceInspection对象", description = "验收开箱记录")
public class FeStandardSubstanceAcceptanceInspection implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    private Integer acceptanceId;
    private String name;
    private Integer number;
    @TableField(fill = FieldFill.INSERT)
    private String createUser;
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updateUser;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceRecord.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,78 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * æ ‡å‡†ç‰©è´¨æ¸…单借用归还记录表
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-14 01:49:11
 */
@Getter
@Setter
@TableName("cnas_fe_standard_substance_record")
@ApiModel(value = "FeStandardSubstanceRecord对象", description = "标准物质清单借用归还记录表")
public class FeStandardSubstanceRecord implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("物质id")
    private Integer substanceId;
    @ApiModelProperty("借用-完好性")
    private String integrity;
    @ApiModelProperty("借用-借用人")
    private String borrowUser;
    @ApiModelProperty("借用-联系方式")
    private String phone;
    @ApiModelProperty("借用-借出日期")
    private LocalDateTime borrowDate;
    @ApiModelProperty("归还日期")
    private LocalDateTime borrowReturnDate;
    @ApiModelProperty("借出人")
    private String lender;
    @ApiModelProperty("归还-检查人")
    private String rummager;
    @ApiModelProperty("0:借用 1:归还")
    private String status;
    @ApiModelProperty("归还人")
    private String returnedPerson;
    @ApiModelProperty("归还-日期")
    private LocalDateTime returnDate;
    @ApiModelProperty("归还-完好性")
    private String returnIntegrity;
    @TableField(fill = FieldFill.INSERT)
    private String createUser;
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updateUser;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/FeTempHumDate.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,54 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-温湿度 åŒºåŸŸ -父
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-09 11:02:18
 */
@Getter
@Setter
@TableName("cnas_fe_temp_hum_date")
@ApiModel(value = "FeTempHumDate对象", description = "设施和环境条件-设施和环境条件要求-温湿度 åŒºåŸŸ -父")
public class FeTempHumDate implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("主键ID")
    @TableId(value = "date_id", type = IdType.AUTO)
    private Integer dateId;
    @ApiModelProperty("月度时间")
    private LocalDate monthDate;
    @ApiModelProperty("试验区域名称")
    private String testAreaName;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("更新时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("更新人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/FeTempHumRecord.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-温湿度记录
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-07 04:28:52
 */
@Getter
@Setter
@TableName("cnas_fe_temp_hum_record")
@ApiModel(value = "FeTempHumRecord对象", description = "设施和环境条件-设施和环境条件要求-温湿度记录")
public class FeTempHumRecord implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("温湿度记录")
    @TableId(value = "temp_hum_id", type = IdType.AUTO)
    private Integer tempHumId;
    @ApiModelProperty("上午-时间")
    private LocalDateTime morningTestTime;
    @ApiModelProperty("上午温度")
    private String morningTemp;
    @ApiModelProperty("上午湿度")
    private String morningHum;
    @ApiModelProperty("上午记录员")
    private Integer morningRecorderId;
    @ApiModelProperty("下午时间")
    private LocalDateTime afternoonTime;
    @ApiModelProperty("下午温度")
    private String afternoonTemp;
    @ApiModelProperty("下午湿度")
    private String afternoonHum;
    @ApiModelProperty("下午记录员")
    private Integer afternoonRecorderId;
    @ApiModelProperty("备注")
    private String note;
    @ApiModelProperty("温度循环主表id")
    private Integer dateId;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/ForeignRegister.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,72 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
 * <p>
 * å¤–来人员登记
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-19 07:17:35
 */
@Data
@TableName("cnas_foreign_register")
@ApiModel(value = "ForeignRegister对象", description = "外来人员登记")
public class ForeignRegister {
    @TableId(value = "register_id", type = IdType.AUTO)
    private Integer registerId;
    @ApiModelProperty("登记如期")
    private LocalDate registerDate;
    @ApiModelProperty("进入区域")
    private String area;
    @ApiModelProperty("进入人员")
    private String personnel;
    @ApiModelProperty("进入原因")
    private String reason;
    @ApiModelProperty("陪同人员id")
    private Integer accompanyingId;
    @ApiModelProperty("陪同人员")
    private String accompanyingName;
    @ApiModelProperty("批准人id")
    private Integer approveId;
    @ApiModelProperty("批准人")
    private String approveName;
    @ApiModelProperty("保密及其他情况")
    private String confidentiality;
    @ApiModelProperty("备注")
    private String remark;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/IncidentAcceptanceCheck.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,50 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
/**
 * <p>
 * è®¾å¤‡éªŒæ”¶-验收核查
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-09-19 04:41:19
 */
@Getter
@Setter
@TableName("device_incident_acceptance_check")
@ApiModel(value = "IncidentAcceptanceCheck对象", description = "设备验收-验收核查")
public class IncidentAcceptanceCheck implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("主键id")
    @TableId(type = IdType.AUTO)
    private Integer acceptanceCheckId;
    @ApiModelProperty("仪器模块")
    private String instrumentModule;
    @ApiModelProperty("核查参数")
    private String verificationParameter;
    @ApiModelProperty("可接收限")
    private String acceptableLimit;
    @ApiModelProperty("核查结果")
    private String verificationResult;
    @ApiModelProperty("核查结论")
    private String verificationConclusion;
    @ApiModelProperty("设备验收ID")
    private Integer incidentId;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/IncidentFile.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
/**
 * <p>
 * è®¾å¤‡éªŒæ”¶-文件类确认
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-09-19 04:41:36
 */
@Getter
@Setter
@TableName("device_incident_file")
@ApiModel(value = "IncidentFile对象", description = "设备验收-文件类确认")
public class IncidentFile implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(type = IdType.AUTO)
    private Integer fileId;
    @ApiModelProperty("应有册数")
    private Integer expectedCopies;
    @ApiModelProperty("实际收到册数")
    private Integer actualCopies;
    @ApiModelProperty("设备验收id")
    private Integer incidentId;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/IncidentInstall.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
/**
 * <p>
 * è®¾å¤‡éªŒæ”¶-安装验收检查
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-09-19 04:41:50
 */
@Getter
@Setter
@TableName("device_incident_install")
@ApiModel(value = "IncidentInstall对象", description = "设备验收-安装验收检查")
public class IncidentInstall implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("主键id")
    @TableId(type = IdType.AUTO)
    private Integer installId;
    @ApiModelProperty("项目")
    private String installationProject;
    @ApiModelProperty("安装情况")
    private String installationSituation;
    @ApiModelProperty("安装完成")
    private String installationCompleted;
    @ApiModelProperty("设备验收")
    private Integer incidentId;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/IncidentReport.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,142 @@
package com.ruoyi.require.pojo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * è®¾å¤‡éªŒæ”¶æ·»åŠ éªŒæ”¶å­—æ®µè¡¨
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-09-19 03:54:49
 */
@Getter
@Setter
@TableName("device_incident_report")
@ApiModel(value = "IncidentReport对象", description = "设备验收添加验收字段表")
public class IncidentReport implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ExcelProperty(value = "流程编号")
    @ApiModelProperty("流程编号")
    private String processNumber;
    @ApiModelProperty("设备id")
    private Integer deviceId;
    @ApiModelProperty("序列号")
    private String serialNumber;
    @ApiModelProperty("设备类别")
    private String deviceClass;
    @ApiModelProperty("开箱前检查外包装有无破损")
    private String checkOuterPackaging;
    @ApiModelProperty("原文件名称")
    private String fileName;
    @ApiModelProperty("系统生成文件名称")
    private String systemFileName;
    @ApiModelProperty("设备开箱验收结论")
    private String unpackingAcceptanceConclusion;
    @ApiModelProperty("1提交 ä¸‹çŽ¯èŠ‚è´Ÿè´£äººåç§°")
    private String submitNextPesponsible;
    @ApiModelProperty("1提交 æäº¤å¤‡æ³¨")
    private String submitRemarks;
    @ApiModelProperty("1提交 æäº¤æ“ä½œäºº")
    private String submitOperatingPersonnel;
    @ApiModelProperty("1提交 æäº¤æ—¥æœŸ")
    private LocalDateTime submitDate;
    @ApiModelProperty("2开箱验收复核 å¤æ ¸æ„è§")
    private String unpackingReviewOpinion;
    @ApiModelProperty("2开箱验收复核 ä¸‹çŽ¯èŠ‚è´Ÿè´£äºº")
    private String unpackingNextPesponsible;
    @ApiModelProperty("2开箱验收复核 æ“ä½œäºº")
    private String unpackingOperatingPersonnel;
    @ApiModelProperty("2开箱验收复核 æ—¥æœŸ")
    private LocalDateTime unpackingDate;
    @ApiModelProperty("3安装位置")
    private String installLocation;
    @ApiModelProperty("3安装备注")
    private String installRemarks;
    @ApiModelProperty("3安装下环节负责人")
    private String installNextPesponsible;
    @ApiModelProperty("3安装操作人")
    private String installOperatingPersonnel;
    @ApiModelProperty("3安装日期")
    private LocalDateTime installDate;
    @ApiModelProperty("4安装验收复核意见")
    private String installationAcceptanceCompoundOpinion;
    @ApiModelProperty("4安装验收下环节负责人")
    private String installationAcceptanceNextPesponsible;
    @ApiModelProperty("4安装验收操作人")
    private String installationAcceptanceOperatingPersonnel;
    @ApiModelProperty("4安装验收日期")
    private LocalDateTime installationAcceptanceDate;
    @ApiModelProperty("5验收核查 è®¾å¤‡å¼€ç®±éªŒæ”¶ç»“论")
    private String acceptanceCheckUnpackingConclusion;
    @ApiModelProperty("5验收核查 ä¸‹çŽ¯èŠ‚è´Ÿè´£äºº")
    private String acceptanceCheckNextPesponsible;
    @ApiModelProperty("5验收核查 æ“ä½œäºº")
    private String acceptanceCheckOperatingPersonnel;
    @ApiModelProperty("5验收核查 æ—¥æœŸ")
    private LocalDateTime acceptanceCheckDate;
    @ApiModelProperty("6验收核查审核 å®¡æ ¸æ„è§")
    private String acceptanceAuditAuditOpinion;
    @ApiModelProperty("6验收核查审核 æ“ä½œäºº")
    private String acceptanceAuditOperatingPersonnel;
    @ApiModelProperty("6验收核查审核 æ—¥æœŸ")
    private LocalDateTime acceptanceAuditDate;
    @ApiModelProperty(value = "创建人id")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("当前状态")
    private String currentState;
    @ApiModelProperty(value = "创建日期 / æäº¤æ—¥æœŸ")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("当前负责人")
    private String currentResponsible;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/IncidentSpareParts.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
/**
 * <p>
 * è®¾å¤‡éªŒæ”¶-备件确认
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-09-19 04:42:06
 */
@Getter
@Setter
@TableName("device_incident_spare_parts")
@ApiModel(value = "IncidentSpareParts对象", description = "设备验收-备件确认")
public class IncidentSpareParts implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("主键id")
    @TableId(type = IdType.AUTO)
    private Integer sparePartsId;
    @ApiModelProperty("名称")
    private String name;
    @ApiModelProperty("数量")
    private Integer number;
    @ApiModelProperty("备注")
    private String note;
    @ApiModelProperty("设备验收ID")
    private Integer incidentId;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/InformationNotification.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,69 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * æ¶ˆæ¯é€šçŸ¥
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-04-23 02:14:30
 */
@Getter
@Setter
@TableName("information_notification")
@ApiModel(value = "InformationNotification对象", description = "消息通知")
public class InformationNotification implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("主键ID")
    @TableId(type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("创建人")
    private String createUser;
    @ApiModelProperty("更新时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty("创建时间/发送时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("待办、接收、审核、批准、预警提醒、通知公告")
    private String messageType;
    @ApiModelProperty("主题")
    private String theme;
    @ApiModelProperty("内容")
    private String content;
    @ApiModelProperty("发送人Id")
    private Integer senderId;
    @ApiModelProperty("收件人")
    private Integer consigneeId;
    @ApiModelProperty("查看状态:已读,未读")
    private Boolean viewStatus;
    @ApiModelProperty("消息状态(拒绝、接收)(根据消息类型展示)")
    private Boolean messageStatus;
    @ApiModelProperty("跳转路径")
    private String jumpPath;
    @ApiModelProperty("跳转Id")
    private String jumpId;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/Instruction.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,64 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * ä½œä¸šæŒ‡å¯¼ä¹¦æ·»åŠ å—æŽ§æ–‡ä»¶è¡¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-12-04 10:29:18
 */
@Getter
@Setter
@TableName("device_instruction")
@ApiModel(value = "Instruction对象", description = "作业指导书添加受控文件表")
public class Instruction implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("申请编号")
    private String applicationNumber;
    @ApiModelProperty("申请部门")
    private String applicationDepartment;
    @ApiModelProperty("责任人")
    private String personLiable;
    @ApiModelProperty("受控申请说明")
    private String controlledApplicationDescription;
    @ApiModelProperty("系统生成名称")
    private String fileName;
    @ApiModelProperty("系统生成名称")
    private String fileSystemName;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("更新时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("更新人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/InternalWastes.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
 * <p>
 * å®‰å…¨å†…务三废登记
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-19 06:39:27
 */
@Data
@TableName("cnas_internal_wastes")
@ApiModel(value = "InternalWastes对象", description = "安全内务三废登记")
public class InternalWastes {
    @TableId(value = "wastes_id", type = IdType.AUTO)
    private Integer wastesId;
    @ApiModelProperty("备注")
    private String remark;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/InternalWastesDetail.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,66 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
 * <p>
 * å®‰å…¨å†…务三废登记详情
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-19 06:39:54
 */
@Data
@TableName("cnas_internal_wastes_detail")
@ApiModel(value = "InternalWastesDetail对象", description = "安全内务三废登记详情")
public class InternalWastesDetail {
    @TableId(value = "wastes_detail_id", type = IdType.AUTO)
    private Integer wastesDetailId;
    @ApiModelProperty("主表id")
    private Integer wastesId;
    @ApiModelProperty("名称")
    private String designation;
    @ApiModelProperty("体积")
    private String volume;
    @ApiModelProperty("送处理日期")
    private String deliveryDate;
    @ApiModelProperty("移交人")
    private String transferPeople;
    @ApiModelProperty("接收人")
    private String acceptor;
    @ApiModelProperty("接收单位")
    private String receivingUnit;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    // å¯¼å‡ºä½¿ç”¨
    @TableField(select = false, exist = false)
    private Integer index;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/OperationInstruction.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,92 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
 * <p>
 * è®¾å¤‡ - ä½œä¸šæŒ‡å¯¼ä¹¦ æ·»åŠ å—æŽ§æ–‡ä»¶ å­
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-12-04 10:43:32
 */
@Getter
@Setter
@TableName("device_operation_instruction")
@ApiModel(value = "OperationInstruction对象", description = "设备 - ä½œä¸šæŒ‡å¯¼ä¹¦ æ·»åŠ å—æŽ§æ–‡ä»¶ å­")
public class OperationInstruction implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("设备主键id")
    private String deviceId;
    @ApiModelProperty("文件类型")
    private String documentType;
    @ApiModelProperty("文档编号")
    private String documentNumber;
    @ApiModelProperty("文件版本")
    private String documentVersion;
    @ApiModelProperty("作者")
    private String author;
    @ApiModelProperty("提交日期")
    private LocalDate submitDate;
    @ApiModelProperty("文档说明")
    private String documentNote;
    @ApiModelProperty("系统生成名称")
    private String fileName;
    @ApiModelProperty("系统生成名称")
    private String fileSystemName;
    @ApiModelProperty("作业指导书id")
    private Integer instructionId;
    @ApiModelProperty("上传人id")
    private Integer uploader;
    @ApiModelProperty("审批人id")
    private Integer approverId;
    @ApiModelProperty("审批状态")
    private Boolean status;
    @ApiModelProperty("生效时间")
    private LocalDateTime entryIntoForceTime;
    @ApiModelProperty("上传时间")
    private LocalDateTime uploadTime;
    @ApiModelProperty("更新时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("更新人id")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("创建人id")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/PkMaster.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 *
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-07-29 01:16:26
 */
@Getter
@Setter
@TableName("device_pk_master")
@ApiModel(value = "PkMaster对象", description = "温度循环数采子表")
public class PkMaster implements Serializable {
    @ApiModelProperty("主键id")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("委托单编号")
    private String entrustCode;
    @ApiModelProperty("样品编号")
    private String sampleCode;
    @ApiModelProperty("型号")
    private String model;
    @ApiModelProperty("循环次数")
    private String cycles;
    @ApiModelProperty("温度循环")
    private String temperature;
    @ApiModelProperty("光纤根数")
    private Integer numberOpticalFibers;
    @ApiModelProperty("device_pk_slave关联字段")
    private String isid;
    @ApiModelProperty("检验时间")
    private LocalDateTime detectionDate;
    @ApiModelProperty("检验人")
    private String detectionPeople;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/PkSlave.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,75 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 *
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-07-29 01:16:39
 */
@Getter
@Setter
@TableName("device_pk_slave")
@ApiModel(value = "PkSlave对象", description = "温度循环数采子表")
public class PkSlave implements Serializable {
    @ApiModelProperty("主键id")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("衰减系统1310(dB/km)-A端")
    private Double weaken1310A;
    @ApiModelProperty("衰减系统1310(dB/km)-B端")
    private Double weaken1310B;
    @ApiModelProperty("衰减系统1550(dB/km)-A端")
    private Double weaken1550A;
    @ApiModelProperty("衰减系统1550(dB/km)-B端")
    private Double weaken1550B;
    @ApiModelProperty("衰减系统1625(dB/km)-A端")
    private Double weaken1625A;
    @ApiModelProperty("衰减系统1625(dB/km)-B端")
    private Double weaken1625B;
    @ApiModelProperty("衰减系统1383(dB/km)-A端")
    private Double weaken1383A;
    @ApiModelProperty("衰减系统1383(dB/km)-B端")
    private Double weaken1383B;
    @ApiModelProperty("衰减系统1490(dB/km)-A端")
    private Double weaken1490A;
    @ApiModelProperty("衰减系统1490(dB/km)-B端")
    private Double weaken1490B;
    @ApiModelProperty("管色标id")
    private String insBushingId;
    @ApiModelProperty("光纤带id")
    private String insFibersId;
    @ApiModelProperty("光纤编号id")
    private String insFiberId;
    @ApiModelProperty("device_pk_master关联字段")
    private String shiftId;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesConsumables.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,50 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@TableName("procurement_supplies_consumables")
@ApiModel("耗材采购明细表")
@JsonIgnoreProperties(ignoreUnknown = true)
public class ProcurementSuppliesConsumables {
    @TableId(type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("耗材主表id")
    private Integer storeId;
    @ApiModelProperty("耗材名称")
    private String consumablesName;
    @ApiModelProperty("单价")
    private Double unitPrice;
    @ApiModelProperty("入库数量")
    private Integer storeNumber;
    @ApiModelProperty("总价")
    private Double totalPrice;
    @ApiModelProperty("货号")
    private String itemNumber;
    @ApiModelProperty("类别")
    private String type;
    @ApiModelProperty("规格")
    private String specifications;
    @ApiModelProperty("参考供应商")
    private String supplier;
    @ApiModelProperty("计量单位")
    private String unit;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesContents.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
@Data
@TableName("procurement_supplies_contents")
@ApiModel("服务和供应品采购表")
public class ProcurementSuppliesContents {
    @TableId(type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("节点名称")
    private String nodeName;
    @ApiModelProperty("代号")
    private String code;
    @ApiModelProperty("更新人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("更新时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty("父节点")
    private Integer parentId;
    @TableField(exist = false)
    private List<ProcurementSuppliesContents> children;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesExpends.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 *
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-15 03:47:19
 */
@Getter
@Setter
@TableName("procurement_supplies_expends")
@ApiModel(value = "ProcurementSuppliesExpends对象", description = "")
public class ProcurementSuppliesExpends implements Serializable {
    @ApiModelProperty("主表Id")
    @TableId(value = "expend_id", type = IdType.AUTO)
    private Long expendId;
    @ApiModelProperty("耗材Id")
    private Long listId;
    @ApiModelProperty("消耗数量")
    private Integer amount;
    @ApiModelProperty("检验对象名称")
    private String specimenName;
    @ApiModelProperty("检验项")
    private String inspectionItem;
    @ApiModelProperty("检验子项")
    private String inspectionItemSubclass;
    @ApiModelProperty("录入人id")
    private Integer enterUserId;
    @ApiModelProperty("更新人id")
    private Integer updateUserId;
    @ApiModelProperty("更新时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesList.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,101 @@
package com.ruoyi.require.pojo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
 * <p>
 * æœåŠ¡ä¸Žä¾›åº”å•† è€—材列表
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-15 04:04:32
 */
@Getter
@Setter
@TableName("procurement_supplies_list")
@ApiModel(value = "ProcurementSuppliesList对象", description = "服务与供应商 è€—材列表")
public class ProcurementSuppliesList implements Serializable {
    @TableId(value = "id", type = IdType.AUTO)
    @ApiModelProperty("编号")
    @ExcelProperty("编号")
    private Long id;
    @ApiModelProperty("目录id")
    private Long contentsId;
    @ApiModelProperty("耗材类型")
    @ExcelProperty("类别")
    private String consumablesType;
    @ApiModelProperty("货号")
    @ExcelProperty("货号")
    private String itemNumber;
    @ApiModelProperty("耗材名称")
    @ExcelProperty("名称")
    private String consumablesName;
    @ApiModelProperty("规格")
    @ExcelProperty("规格")
    private String specifications;
    @ApiModelProperty("计量单位")
    @ExcelProperty("计量单位")
    private String unit;
    @ApiModelProperty("参考价格")
    private BigDecimal referencePrice;
    @ApiModelProperty("存放位置")
    private Integer contentId;
    @ApiModelProperty("负责人")
    private Integer personInCharge;
    @ApiModelProperty("库存上限")
    private Integer upperLimit;
    @ApiModelProperty("库存下限")
    @ExcelProperty("库存下限")
    private Integer lowerLimit;
    @ApiModelProperty("供应商")
    private Integer supplier;
    @ApiModelProperty("耗材图标")
    private String consumablesIcon;
    @ApiModelProperty("耗材附件")
    private String attachment;
    @ApiModelProperty("备注")
    @ExcelProperty("备注")
    private String remark;
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("当前库存数量")
    @ExcelProperty("当前库存")
    private Integer currentAmount;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesStore.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,52 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDate;
@Data
@TableName("procurement_supplies_store")
@ApiModel("耗材入库表")
@JsonIgnoreProperties(ignoreUnknown = true)
public class ProcurementSuppliesStore implements Serializable {
    @TableId(type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("目录id")
    private Integer contentsId;
    @ApiModelProperty("入库单号")
    private String oddNumbers;
    @ApiModelProperty("入库库存")
    private String inventory;
    @ApiModelProperty("入库总金额")
    private Double totalAmount;
    @ApiModelProperty("入库人")
    private Integer storageUser;
    @ApiModelProperty("入库时间")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private LocalDate storageTime;
    @ApiModelProperty("入库说明")
    private String remark;
    @ApiModelProperty("登记人")
    private Integer registrant;
    @ApiModelProperty("登记时间")
    private LocalDate registrantTime;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/Reservation.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,84 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Getter;
import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * èµ„源预定新建预定表
 * </p>
 *
 * @author baomidou
 * @since 2024-09-14
 */
@Getter
@Setter
@TableName("device_reservation")
public class Reservation implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     *  è®¾å¤‡id
     */
    private Integer deviceId;
    /**
     * é¢„定设备
     */
    private String deviceName;
    /**
     *  å®¢æˆ·åç§°
     */
    private String customerName;
    /**
     *  é¢„定时间
     */
    private String reservationTime;
    /**
     *  å…·ä½“æ—¶é—´
     */
    private String specificTime;
    /**
     * è”系人
     */
    private String linkPerson;
    /**
     *  è”系电话
     */
    private String phone;
    /**
     *  æµç¨‹ç¼–号
     */
    private String deviceNumber;
    /**
     *  é¢„定说明
     */
    private String reservationSpecification;
    /**
     * åˆ›å»ºäºº
     */
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDateTime createDate;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/SupplierManagement.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,111 @@
package com.ruoyi.require.pojo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 *
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-15 02:46:45
 */
@Getter
@Setter
@TableName("cnas_supplier_management")
@ApiModel(value = "SupplierManagement对象", description = "")
public class SupplierManagement implements Serializable {
    @ApiModelProperty("主表Id")
    @TableId(value = "supplier_management_id", type = IdType.AUTO)
    private Integer supplierManagementId;
    @ApiModelProperty("供应商")
    @ExcelProperty("供应商")
    private String supplierName;
    @ApiModelProperty("编号")
    @ExcelProperty("编号")
    private String supplierRef;
    @ApiModelProperty("供应商物品服务名称")
    @ExcelProperty("供应商物品服务名称")
    private String supplierItemServiceName;
    @ApiModelProperty("邮编")
    @ExcelProperty("邮编")
    private String postalCode;
    @ApiModelProperty("地址")
    @ExcelProperty("地址")
    private String adress;
    @ApiModelProperty("logo")
    private String logo;
    @ApiModelProperty("联系人")
    @ExcelProperty("联系人")
    private String contacts;
    @ApiModelProperty("联系电话")
    @ExcelProperty("联系电话")
    private String phone;
    @ApiModelProperty("户名")
    @ExcelProperty("户名")
    private String householdName;
    @ApiModelProperty("传真")
    @ExcelProperty("传真")
    private String fax;
    @ApiModelProperty("开户行")
    @ExcelProperty("开户行")
    private String openingName;
    @ApiModelProperty("网址")
    @ExcelProperty("网址")
    private String website;
    @ApiModelProperty("账号")
    @ExcelProperty("账号")
    private String accountName;
    @ApiModelProperty("email")
    @ExcelProperty("email")
    private String email;
    @ApiModelProperty("备注")
    @ExcelProperty("备注")
    private String remarks;
    @ApiModelProperty("附件")
    private String enclosure;
    @ApiModelProperty("状态")
    private String status;
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("父id")
    private Integer parentId;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/SuppliersDirectoryContents.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,52 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
/**
 * <p>
 * æœåŠ¡å’Œä¾›åº”å“é‡‡è´­ç›®å½•
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-12-17 06:14:51
 */
@Getter
@Setter
@TableName("suppliers_directory_contents")
@ApiModel(value = "SuppliersDirectoryContents对象", description = "服务和供应品采购目录")
public class SuppliersDirectoryContents implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("节点名称")
    private String nodeName;
    @ApiModelProperty("代号")
    private String code;
    @ApiModelProperty("更新人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("更新时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty("父节点")
    private Integer parentId;
    @TableField(exist = false)
    private List<SuppliersDirectoryContents> children;
}
cnas-require/src/main/java/com/ruoyi/require/service/DataConfigService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.require.dto.DataConfigDto;
import com.ruoyi.require.pojo.DataConfig;
/**
 * <p>
 *  æœåŠ¡ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-07-13 12:23:00
 */
public interface DataConfigService extends IService<DataConfig> {
    void deleteDataConfig();
    void saveDataAcquisitionConfiguration(Integer deviceId, DataConfigDto dataConfigList);
    Result<?> queryDataAcquisitionConfiguration(Integer deviceId, Boolean isDevice, String inspectionItem, String inspectionItemSubclass);
}
cnas-require/src/main/java/com/ruoyi/require/service/DeviceBorrowService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.pojo.DeviceBorrow;
import java.util.List;
/**
 * <p>
 *  æœåŠ¡ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-09-21 10:53:51
 */
public interface DeviceBorrowService extends IService<DeviceBorrow> {
    IPage<DeviceBorrow> deviceBorrowPage(Page page, DeviceBorrow deviceBorrow);
    int saveDeviceBorrow(DeviceBorrow deviceBorrow);
    DeviceBorrow getDeviceBorrow(Integer id);
    List<DeviceBorrow> getDeviceBorrowBydeviceId(Integer deviceId);
}
cnas-require/src/main/java/com/ruoyi/require/service/DeviceFaultOneService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.dto.DeviceFaultOneDto;
import com.ruoyi.require.pojo.DeviceFaultOne;
/**
 * <p>
 * è®¾å¤‡æ•…障表 æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-09-26 02:03:29
 */
public interface DeviceFaultOneService extends IService<DeviceFaultOne> {
    IPage<DeviceFaultOneDto> deviceFaultOnePage(Integer deviceId, Page page, String processNumber);
}
cnas-require/src/main/java/com/ruoyi/require/service/DeviceFaultService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.pojo.DeviceFault;
import java.util.Map;
public interface DeviceFaultService extends IService<DeviceFault> {
    Map<String,Object> findByDeviceId(Integer deviceId);
}
cnas-require/src/main/java/com/ruoyi/require/service/DeviceMaintenanceService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.dto.DeviceMaintenanceExport;
import com.ruoyi.require.pojo.DeviceMaintenance;
import java.util.List;
public interface DeviceMaintenanceService extends IService<DeviceMaintenance> {
    IPage<DeviceMaintenance> getDeviceMaintenancePage(Page page, Integer deviceId, String deviceNumber);
    List<DeviceMaintenanceExport> deviceMaintenanceExport(Integer deviceId);
}
cnas-require/src/main/java/com/ruoyi/require/service/DeviceMetricRecordService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.pojo.DeviceMetricRecord;
/**
 * <p>
 * è®¾å¤‡æ ¡å‡† - æ ¡å‡†è®°å½• æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-09-27 10:20:01
 */
public interface DeviceMetricRecordService extends IService<DeviceMetricRecord> {
}
cnas-require/src/main/java/com/ruoyi/require/service/DeviceMetricsCopyService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.pojo.DeviceMetricsCopy;
/**
 * <p>
 * è®¾å¤‡æ ¡å‡† - æ ¡å‡†è®°å½• - æ ¡å‡†æ¡ç›® æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-09-27 10:20:11
 */
public interface DeviceMetricsCopyService extends IService<DeviceMetricsCopy> {
}
cnas-require/src/main/java/com/ruoyi/require/service/DeviceRecordService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.dto.DeviceRecordDto;
import com.ruoyi.require.excel.DeviceRecordExport;
import com.ruoyi.require.pojo.DeviceRecord;
import java.util.List;
/**
 * <p>
 * cnas设备使用记录表 æœåŠ¡ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-09-21 11:06:47
 */
public interface DeviceRecordService extends IService<DeviceRecord> {
    IPage<DeviceRecordDto> deviceRecordPage(Integer deviceId, Page page, String deviceNumber);
    List<DeviceRecordExport> incidentReportExport(Integer deviceId);
}
cnas-require/src/main/java/com/ruoyi/require/service/DeviceService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.require.dto.ADto;
import com.ruoyi.require.dto.DeviceDto;
import com.ruoyi.require.pojo.Device;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/**
 * è®¾å¤‡(Device)表服务接口
 */
public interface DeviceService extends IService<Device> {
    List<User> selectUserList();
    List<User> selectUserListByDepartLimsId(String departLimsId);
    IPage<DeviceDto> selectDeviceParameter(Page page, DeviceDto itemParameter, Boolean laboratoryNameIsNull);
    int addDeviceParameter(Device itemParameter);
    int delDeviceParameter(Integer id);
    int upDeviceParameter(Device itemParameter);
    List<Device> selectEquipmentOverview();
    List<Device> authorizedPerson();
    List<Device> search(Integer status, String deviceName, String specificationModel, String largeCategory);
    List<Device> selectDevicePrincipal();
    List<Device> selectDeviceByCategory(String inspectionItem, String inspectionItemSubclass,String sonLaboratory);
    DeviceDto selectDeviceByCode(Integer id);
    /**
     *
     * @param request å–请求中的ip
     * @param id æ£€éªŒæ ·å“ ä¸»é”®id
     * @param entrustCode å§”托编号
     * @param sampleCode æ ·å“ç¼–号
     * @param fiberOpticRibbon å…‰çº¤å¸¦ç¼–号
     * @return
     */
    Result<?> dataAcquisition(HttpServletRequest request, Integer id, String entrustCode, String sampleCode, String fiberOpticRibbon);
    List<ADto> menu();
    List<Map<String, Object>> treeDevice(String deviceName);
    Result<?> determineWhetherToCollectData(String managementNumber, HttpServletRequest request);
    void exportData(DeviceDto deviceDto, HttpServletResponse response);
}
cnas-require/src/main/java/com/ruoyi/require/service/DeviceStateService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.dto.DeviceStateDto;
import com.ruoyi.require.pojo.DeviceState;
/**
 * <p>
 * è®¾å¤‡åœç”¨/启用 æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-09-26 09:51:40
 */
public interface DeviceStateService extends IService<DeviceState> {
    IPage<DeviceStateDto> getDeviceStatePage(Integer deviceId, Page page, String processNumber);
}
cnas-require/src/main/java/com/ruoyi/require/service/DocumentService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.pojo.Document;
public interface DocumentService extends IService<Document> {
}
cnas-require/src/main/java/com/ruoyi/require/service/FeCalibrationScheduleService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.pojo.FeCalibrationSchedule;
/**
 * <p>
 * ä»ªå™¨è®¾å¤‡æ£€å®š/校准计划表 æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-13 02:53:05
 */
public interface FeCalibrationScheduleService extends IService<FeCalibrationSchedule> {
    IPage<FeCalibrationSchedule> page(Page page,String instrumentName, String managementNumber);
}
cnas-require/src/main/java/com/ruoyi/require/service/FeIlluminationDetectionAreaService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.pojo.FeIlluminationDetectionArea;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-照度记录表-检测区域 æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-07 04:16:28
 */
public interface FeIlluminationDetectionAreaService extends IService<FeIlluminationDetectionArea> {
}
cnas-require/src/main/java/com/ruoyi/require/service/FeIlluminationService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.dto.FeIlluminationDto;
import com.ruoyi.require.pojo.FeIllumination;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-照度记录表 æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-07 04:15:57
 */
public interface FeIlluminationService extends IService<FeIllumination> {
    IPage<FeIlluminationDto> getFeLightningProtection(Page page);
    /**
     * å¯¼å‡ºç…§åº¦è®°å½•
     * @param intensityIlluminationId
     * @param response
     */
    void exportFeIllumination(Integer intensityIlluminationId, HttpServletResponse response);
}
cnas-require/src/main/java/com/ruoyi/require/service/FeLightningProtectionService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.excel.FeLightningProtectionExcel;
import com.ruoyi.require.pojo.FeLightningProtection;
import java.util.List;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-防雷检测 æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-07 04:16:36
 */
public interface FeLightningProtectionService extends IService<FeLightningProtection> {
    List<FeLightningProtectionExcel> exportOfLightningProtectionDetection();
}
cnas-require/src/main/java/com/ruoyi/require/service/FeMeasuredQuantityService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.pojo.FeMeasuredQuantity;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-电源稳定性-测定量 æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-07 04:16:44
 */
public interface FeMeasuredQuantityService extends IService<FeMeasuredQuantity> {
}
cnas-require/src/main/java/com/ruoyi/require/service/FePowerStableService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.dto.FePowerStableDto;
import com.ruoyi.require.pojo.FePowerStable;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
import java.util.Objects;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-电源稳定性 æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-07 04:16:52
 */
public interface FePowerStableService extends IService<FePowerStable> {
    IPage<FePowerStableDto> getLaboratoryFacilityPowerStablePage(Page page);
    Map<String, Objects> getCalibrationDate(Integer deviceId);
    /**
     * å¯¼å‡ºç”µæºç¨³å®šæ€§
     * @param powerStableId
     * @param response
     */
    void exportFePowerStable(Integer powerStableId, HttpServletResponse response);
}
cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceAcceptanceInspectionService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.pojo.FeStandardSubstanceAcceptanceInspection;
/**
 * <p>
 * éªŒæ”¶å¼€ç®±è®°å½• æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-14 03:30:09
 */
public interface FeStandardSubstanceAcceptanceInspectionService extends IService<FeStandardSubstanceAcceptanceInspection> {
}
cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceAcceptanceService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.dto.AcceptanceDto;
import com.ruoyi.require.pojo.FeStandardSubstanceAcceptance;
import com.ruoyi.require.vo.AcceptanceDetailsVo;
import com.ruoyi.require.vo.AcceptanceVo;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * æ ‡å‡†ç‰©è´¨éªŒæ”¶ æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-14 03:29:41
 */
public interface FeStandardSubstanceAcceptanceService extends IService<FeStandardSubstanceAcceptance> {
    void addAcceptance(AcceptanceDto dto);
    IPage<AcceptanceVo> getPageAcceptance(Page page, String name);
    AcceptanceDetailsVo getAcceptanceDetails(Integer id);
    Integer deleteAcceptance(Integer id);
    void exportFeStandardSubstanceAcceptance(HttpServletResponse response);
}
cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceRecordService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.pojo.FeStandardSubstanceRecord;
import com.ruoyi.require.vo.SubstanceRecordVo;
import java.util.List;
/**
 * <p>
 * æ ‡å‡†ç‰©è´¨æ¸…单借用归还记录表 æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-14 01:49:11
 */
public interface FeStandardSubstanceRecordService extends IService<FeStandardSubstanceRecord> {
    void borrowSubstance(FeStandardSubstanceRecord feStandardSubstanceRecord);
    void returnSubstance(FeStandardSubstanceRecord feStandardSubstanceRecord);
    List<FeStandardSubstanceRecord> getSubstanceRecord(Integer id);
    IPage<SubstanceRecordVo> getPage(Page page, SubstanceRecordVo vo);
}
cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.pojo.FeStandardSubstance;
/**
 * <p>
 * æ ‡å‡†ç‰©è´¨æ¸…单 æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-13 03:58:59
 */
public interface FeStandardSubstanceService extends IService<FeStandardSubstance> {
    IPage<FeStandardSubstance> page(Page page,FeStandardSubstance feStandardSubstance);
}
cnas-require/src/main/java/com/ruoyi/require/service/FeTempHumDateService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.dto.FeTempHumDateDto;
import com.ruoyi.require.pojo.FeTempHumDate;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-温湿度 åŒºåŸŸ -父 æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-09 11:02:18
 */
public interface FeTempHumDateService extends IService<FeTempHumDate> {
    IPage<FeTempHumDateDto> getFeTempHumDate(Page page);
    void exportTemperatureAndHumidityRecords(Integer dateId, HttpServletResponse response);
}
cnas-require/src/main/java/com/ruoyi/require/service/FeTempHumRecordService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.dto.FeTempHumRecordDto;
import com.ruoyi.require.pojo.FeTempHumRecord;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-温湿度记录 æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-07 04:28:52
 */
public interface FeTempHumRecordService extends IService<FeTempHumRecord> {
    IPage<FeTempHumRecordDto> getFeTempHumRecordPage(Page page, Integer dateId);
}
cnas-require/src/main/java/com/ruoyi/require/service/ForeignRegisterService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.dto.ForeignRegisterDto;
import com.ruoyi.require.pojo.ForeignRegister;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * å¤–来人员登记 æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-19 07:17:35
 */
public interface ForeignRegisterService extends IService<ForeignRegister> {
    /**
     * å¤–来人员登记分页查询
     * @param page
     * @param foreignRegister
     * @return
     */
    IPage<ForeignRegisterDto> pageForeignRegister(Page page, ForeignRegisterDto foreignRegister);
    /**
     * å¯¼å‡ºå¤–来人员登记
     * @param foreignRegister
     */
    void exportForeignRegister(ForeignRegisterDto foreignRegister, HttpServletResponse response);
}
cnas-require/src/main/java/com/ruoyi/require/service/IDeviceMetricService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.pojo.DeviceMetric;
public interface IDeviceMetricService extends IService<DeviceMetric> {
}
cnas-require/src/main/java/com/ruoyi/require/service/IncidentAcceptanceCheckService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.pojo.IncidentAcceptanceCheck;
public interface IncidentAcceptanceCheckService extends IService<IncidentAcceptanceCheck> {
}
cnas-require/src/main/java/com/ruoyi/require/service/IncidentFileService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.pojo.IncidentFile;
public interface IncidentFileService extends IService<IncidentFile> {
}
cnas-require/src/main/java/com/ruoyi/require/service/IncidentInstallService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.pojo.IncidentInstall;
public interface IncidentInstallService extends IService<IncidentInstall> {
}
cnas-require/src/main/java/com/ruoyi/require/service/IncidentReportService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.dto.IncidentReportAddDto;
import com.ruoyi.require.excel.IncidentReportExport;
import com.ruoyi.require.pojo.IncidentReport;
import java.util.List;
/**
 * <p>
 * è®¾å¤‡éªŒæ”¶æ·»åŠ éªŒæ”¶å­—æ®µè¡¨ æœåŠ¡ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-09-19 03:54:49
 */
public interface IncidentReportService extends IService<IncidentReport> {
    void saveIncidentReportData(IncidentReportAddDto incidentReportAddDto);
    IPage<IncidentReportAddDto> getByDeviceId(Integer deviceId, Page page, String processNumber);
    void deleteIncidentReport(Integer id);
    IncidentReportAddDto getShowIncidentReport(Integer id);
    void deleteIncidentReportAll(Integer sparePartsId, Integer fileId, Integer installId, Integer acceptanceCheckId);
    List<IncidentReportExport> incidentReportExport(Integer deviceId);
}
cnas-require/src/main/java/com/ruoyi/require/service/IncidentSparePartsService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.pojo.IncidentSpareParts;
public interface IncidentSparePartsService extends IService<IncidentSpareParts> {
}
cnas-require/src/main/java/com/ruoyi/require/service/InformationNotificationService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.dto.InformationNotificationDto;
import com.ruoyi.require.pojo.InformationNotification;
import java.util.Map;
/**
 * <p>
 * æ¶ˆæ¯é€šçŸ¥ æœåŠ¡ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-04-23 02:14:30
 */
public interface InformationNotificationService extends IService<InformationNotification> {
    IPage<InformationNotificationDto> getPage(Page page, String messageType);
    void markAllInformationReadOrDeleteAllReadMessages(Boolean isMarkAllInformationRead);
    Boolean checkForUnreadData();
    void triggerModificationStatusToRead(Integer id);
    int addInformationNotification(InformationNotification informationNotification);
    Map<String, Object> getNumberFourTypesMessagesHomePage();
}
cnas-require/src/main/java/com/ruoyi/require/service/InsOrderPlanService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,78 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.inspect.dto.InsOrderPlanDTO;
import com.ruoyi.inspect.dto.InsProductResultDTO;
import com.ruoyi.inspect.dto.TasksShowDto;
import com.ruoyi.inspect.dto.UnInsProductsDTO;
import com.ruoyi.inspect.pojo.InsOrderFile;
import com.ruoyi.inspect.pojo.InsProduct;
import com.ruoyi.inspect.vo.InsOrderPlanTaskSwitchVo;
import com.ruoyi.inspect.vo.InsOrderPlanVO;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
/**
 * æ£€éªŒä»»åŠ¡-业务层
 */
public interface InsOrderPlanService {
    void exportInsOrderPlanResult(Map<String, Object> data, HttpServletResponse response);
    List<Map<String,Object>> getInsOrderPlanList(Map<String,Object> data);
    void exportCommissionFees(Map<String, Object> data,HttpServletResponse response);
    Map<String, Object> getTabHeader(String sonLaboratory,String samples);
    IPage<InsOrderPlanVO> selectInsOrderPlanList(Page page, InsOrderPlanDTO insOrderPlanDTO);
    IPage<InsOrderPlanTaskSwitchVo> inspectionOrderDetailsTaskSwitching(Page page, InsOrderPlanDTO insOrderPlanDTO);
    boolean claimInsOrderPlan(InsOrderPlanDTO entity);
    void saveInsContext(Map<String, Object> insContext,Integer currentTable,Integer sampleId,Integer orderId,String sonLaboratory,Boolean isDelete);
    Map<String, Object> doInsOrder(Integer id, String laboratory);
    int upPlanUser(Integer userId, Integer orderId,String sonLaboratory);
    int verifyPlan(Integer orderId, String laboratory, Integer type, String tell);
    int submitPlan(Integer orderId, String laboratory, Integer verifyUser, String entrustCode);
    List<String> getEquipName(Integer orderId,String sonLaboratory);
    List<InsProduct> getInsProduct(Integer id, Integer type, String laboratory, HttpServletRequest request);
    List<String> checkSubmitPlan(Integer orderId, String laboratory,String temperature,String humidity);
    IPage<InsOrderFile> getFileList(Page page, InsOrderFile insOrderFile);
    int uploadFile(Integer orderId, MultipartFile file);
    Map<String,Object> getReportModel(Integer sampleId, String sonLaboratory);
    Map<String,Object> temCycle(Integer sampleId, String inspectionItem, String inspectionItemSubclass);
    List<String> upPlanUser2(Integer orderId);
    Map<String,Object> getSagTemperatureProducts(Integer sampleId);
    Map<String,Object> getSampleInfoByOrderId(Integer id,String laboratory);
    void exportUnInsProducts(UnInsProductsDTO unInsProductsDTO, HttpServletResponse response);
    int saveInsContext2(InsProductResultDTO insProductResult);
    IPage<TasksShowDto> tasksShow(Page page, String sonLaboratory);
    int getCurrentMonthPlanTotalBySonLaboratory(String sonLaboratory, LocalDateTime startTime, LocalDateTime endTime);
}
cnas-require/src/main/java/com/ruoyi/require/service/InsReportService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,56 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.inspect.dto.ReportPageDto;
import com.ruoyi.inspect.pojo.InsReport;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;
/**
* @author Administrator
* @description é’ˆå¯¹è¡¨ã€ins_report(检验报告)】的数据库操作Service
* @createDate 2024-03-17 22:10:02
*/
public interface InsReportService extends IService<InsReport> {
    IPage<ReportPageDto> pageInsReport(Page page, ReportPageDto reportPageDto);
//    void wordToPdf(String path,String sealUrl);
    int inReport(String url, Integer id);
    int upReportUrl(Integer id);
    // ä¸‹è½½
    void downReport(Integer id, Integer type ,HttpServletResponse response);
    //提交
    int writeReport(Integer id);
    //审核
    int examineReport(Integer id, Integer isExamine, String examineTell);
    //批准
    int ratifyReport(Integer id, Integer isRatify, String ratifyTell);
    int wordInsertUrl(Map<String, Object> map, String url);
    String downAll(String ids);
    int upAll(MultipartFile file) throws IOException;
    void withdraw(Map<String,Object> map);
    List<Map<String,Object>> getLaboratoryByReportId(Integer id);
    Map<String,Object> getReportCountInfo(ReportPageDto reportPageDto);
    void batchApprovalReport(List<Integer> ids);
    Map<String,Object> getBatchApprovalProgress();
}
cnas-require/src/main/java/com/ruoyi/require/service/InstructionService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.dto.InstructionDto;
import com.ruoyi.require.pojo.Instruction;
/**
 * <p>
 * ä½œä¸šæŒ‡å¯¼ä¹¦æ·»åŠ å—æŽ§æ–‡ä»¶è¡¨ æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-12-04 10:29:18
 */
public interface InstructionService extends IService<Instruction> {
    IPage<Instruction> pageByPageQueryOfHomeworkInstructions(Page page);
    void newHomeworkGuidebookAdded(InstructionDto instructionDto);
}
cnas-require/src/main/java/com/ruoyi/require/service/InternalWastesDetailService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.pojo.InternalWastesDetail;
/**
 * <p>
 * å®‰å…¨å†…务三废登记详情 æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-19 06:39:54
 */
public interface InternalWastesDetailService extends IService<InternalWastesDetail> {
}
cnas-require/src/main/java/com/ruoyi/require/service/InternalWastesService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.dto.InternalWastesDto;
import com.ruoyi.require.pojo.InternalWastes;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * å®‰å…¨å†…务三废登记 æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-19 06:39:27
 */
public interface InternalWastesService extends IService<InternalWastes> {
    /**
     * å®‰å…¨å†…务三废处理分页查询
     * @param page
     * @param internalWastes
     * @return
     */
    IPage<InternalWastesDto> pageInternalWastes(Page page, InternalWastes internalWastes);
    /**
     * å®‰å…¨å†…务三废处理新增
     * @param internalWastes
     * @return
     */
    boolean addInternalWastes(InternalWastesDto internalWastes);
    /**
     * å®‰å…¨å†…务三废处理修改
     * @param internalWastes
     * @return
     */
    boolean updateInternalWastes(InternalWastesDto internalWastes);
    /**
     * å®‰å…¨å†…务三废处理删除
     * @param wastesId
     * @return
     */
    boolean delInternalWastes(Integer wastesId);
    /**
     * å®‰å…¨å†…务三废处理查看详情
     * @param wastesId
     * @return
     */
    InternalWastesDto getInternalWastesOne(Integer wastesId);
    /**
     * å¯¼å‡ºä¸‰åºŸå¤„理
     * @param wastesId
     * @param response
     */
    void exportInternalWastes(Integer wastesId, HttpServletResponse response);
}
cnas-require/src/main/java/com/ruoyi/require/service/OperationInstructionService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.pojo.OperationInstruction;
import com.ruoyi.require.vo.OperationInstructionVo;
import java.util.List;
/**
 * <p>
 * è®¾å¤‡ - ä½œä¸šæŒ‡å¯¼ä¹¦ æ·»åŠ å—æŽ§æ–‡ä»¶ å­ æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-12-04 10:43:32
 */
public interface OperationInstructionService extends IService<OperationInstruction> {
    List<OperationInstructionVo> homeworkGuidebookEditor(Integer instructionId);
}
cnas-require/src/main/java/com/ruoyi/require/service/PkMasterService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.pojo.PkMaster;
/**
 * <p>
 *  æœåŠ¡ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-07-29 01:16:26
 */
public interface PkMasterService extends IService<PkMaster> {
    //温度循环数采
    int temDataAcquisition(PkMaster pkMaster);
    //温度循环数采总体
    int temDataAcquisition2(PkMaster pkMaster);
}
cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesConsumablesService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.pojo.ProcurementSuppliesConsumables;
public interface ProcurementSuppliesConsumablesService extends IService<ProcurementSuppliesConsumables> {
}
cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesContentsService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.pojo.ProcurementSuppliesContents;
import java.util.List;
import java.util.Map;
public interface ProcurementSuppliesContentsService extends IService<ProcurementSuppliesContents> {
    List<ProcurementSuppliesContents> directoryListing();
    List<Map<String,Object>> getNodeNames();
    List<Map<String,Object>> getUserList();
}
cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesExpendsService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.dto.ProcurementSuppliesExpendDto;
import com.ruoyi.require.pojo.ProcurementSuppliesExpends;
/**
 * <p>
 *  æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-15 03:47:19
 */
public interface ProcurementSuppliesExpendsService extends IService<ProcurementSuppliesExpends> {
    IPage<ProcurementSuppliesExpendDto> selectAll(Page page, Long procurementSuppliesListId);
    Integer addExpends(ProcurementSuppliesExpendDto expendDto);
    Integer deleteExpends(Long id);
}
cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesListService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.dto.ProcurementSuppliesListDto;
import com.ruoyi.require.pojo.ProcurementSuppliesList;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * æœåŠ¡ä¸Žä¾›åº”å•† è€—材列表 æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-15 04:04:32
 */
public interface ProcurementSuppliesListService extends IService<ProcurementSuppliesList> {
    IPage<ProcurementSuppliesListDto> selectList(Page page, ProcurementSuppliesListDto list);
    public Integer addProcurementSuppliesList(ProcurementSuppliesListDto dto);
    public Integer updateProcurementSuppliesList(ProcurementSuppliesListDto dto);
    void exportProcurementSuppliesList(Integer contentsId,HttpServletResponse response);
}
cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesStoreService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.dto.StoreDto;
import com.ruoyi.require.pojo.ProcurementSuppliesStore;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;
public interface ProcurementSuppliesStoreService extends IService<ProcurementSuppliesStore> {
    void addStore(Map<String,Object> map);
    void updateStore(Map<String,Object> map);
    void deleteStore(Integer id, Integer consumablesId);
    IPage<StoreDto> selectStoreList(Page page, StoreDto storeDto);
    void exportExcel(Integer contentsId, HttpServletResponse response) throws IOException;
}
cnas-require/src/main/java/com/ruoyi/require/service/QrShowService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
package com.ruoyi.require.service;
import org.springframework.ui.Model;
public interface QrShowService {
    void transformModelByType(Model model,String code,String type);
}
cnas-require/src/main/java/com/ruoyi/require/service/ReservationService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.ruoyi.require.service;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.dto.DeviceDto;
import com.ruoyi.require.dto.ReservationDto;
import com.ruoyi.require.pojo.Reservation;
import java.util.ArrayList;
import java.util.List;
/**
 * <p>
 * èµ„源预定新建预定表 æœåŠ¡ç±»
 * </p>
 *
 * @author baomidou
 * @since 2024-09-14
 */
public interface ReservationService extends IService<Reservation> {
    ArrayList<JSONObject> selectDeviceParameter(Page page, DeviceDto itemParameter, Boolean laboratoryNameIsNull, String starttime, String endtime);
    List<ReservationDto> selectReservationParameterPage(String deviceId, String reservationTime, String specificTime);
}
cnas-require/src/main/java/com/ruoyi/require/service/SupplierManagementService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.pojo.SupplierManagement;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
 * <p>
 *  æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-15 02:46:45
 */
public interface SupplierManagementService extends IService<SupplierManagement> {
    List<SupplierManagement> selectSupplierManagement(SupplierManagement supplierManagement);
    void exportSupplierManagement(Integer parentId, HttpServletResponse response);
    IPage<SupplierManagement> selectQualifiedSupplierManagement(Page page, SupplierManagement supplierManagement);
    List<SupplierManagement> selectQualifiedSupplierManagementById(Integer supplierManagementId);
    List<SupplierManagement> selectSupplierManagementByParentId(Integer parentId);
    List<SupplierManagement> selectSupplierManagementAll();
}
cnas-require/src/main/java/com/ruoyi/require/service/SuppliersDirectoryContentsService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.pojo.SuppliersDirectoryContents;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
 * <p>
 * æœåŠ¡å’Œä¾›åº”å“é‡‡è´­ç›®å½• æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-12-17 06:14:51
 */
public interface SuppliersDirectoryContentsService extends IService<SuppliersDirectoryContents> {
    ArrayList<SuppliersDirectoryContents> directoryListing();
    List<Map<String, Object>> getSuppliersDirectoryContentsNodeNames();
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/DataConfigServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,66 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.require.dto.DataConfigDto;
import com.ruoyi.require.mapper.DataConfigMapper;
import com.ruoyi.require.mapper.DeviceMapper;
import com.ruoyi.require.pojo.DataConfig;
import com.ruoyi.require.pojo.Device;
import com.ruoyi.require.service.DataConfigService;
import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * <p>
 *  æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-07-13 12:23:00
 */
@Service
@AllArgsConstructor
public class DataConfigServiceImpl extends ServiceImpl<DataConfigMapper, DataConfig> implements DataConfigService {
    private DeviceMapper deviceMapper;
    private DataConfigMapper dataConfigMapper;
    @Override
    public void deleteDataConfig() {
        List<Integer> integers = dataConfigMapper.deleteDataConfig();
        if (!integers.isEmpty()) {
            dataConfigMapper.deleteBatchIds(integers);
        }
    }
    @Override
    public void saveDataAcquisitionConfiguration(Integer deviceId, DataConfigDto dataConfigList) {
        if (dataConfigList.getIsDevice()) {
            Device device = new Device();
            BeanUtils.copyProperties(dataConfigList, device);
            device.setId(deviceId);
            deviceMapper.updateById(device);
        } else {
            this.saveOrUpdateBatch(dataConfigList.getDataConfigList());
        }
    }
    @Override
    public Result<?> queryDataAcquisitionConfiguration(Integer deviceId, Boolean isDevice, String inspectionItem, String inspectionItemSubclass) {
        if (isDevice) {
            List<DataConfig> list = baseMapper.selectList(Wrappers.<DataConfig>lambdaQuery()
                    .eq(DataConfig::getDeviceId, deviceId)
                    .eq(DataConfig::getInspectionItem, inspectionItem)
                    .eq(DataConfig::getInspectionItemSubclass, inspectionItemSubclass));
            return Result.success(list);
        } else {
            return Result.success(dataConfigMapper.selectDataConfigList(deviceId));
        }
    }
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/DeviceBorrowServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,116 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.common.numgen.NumberGenerator;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.require.mapper.DeviceBorrowMapper;
import com.ruoyi.require.mapper.DeviceLogMapper;
import com.ruoyi.require.pojo.DeviceBorrow;
import com.ruoyi.require.pojo.DeviceLog;
import com.ruoyi.require.service.DeviceBorrowService;
import com.ruoyi.system.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.*;
/**
 * <p>
 * æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-09-21 10:53:51
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class DeviceBorrowServiceImpl extends ServiceImpl<DeviceBorrowMapper, DeviceBorrow> implements DeviceBorrowService {
    @Resource
    DeviceBorrowMapper deviceBorrowMapper;
    @Resource
    DeviceLogMapper deviceLogMapper;
    @Resource
    UserMapper userMapper;
    @Autowired
    private NumberGenerator<DeviceBorrow> numberGenerator;
    @Override
    public IPage<DeviceBorrow> deviceBorrowPage(Page page, DeviceBorrow deviceBorrow) {
        IPage<DeviceBorrow> iPage = deviceBorrowMapper.deviceBorrowPage(page, QueryWrappers.queryWrappers(deviceBorrow));
        return iPage;
    }
    @Override
    public int saveDeviceBorrow(DeviceBorrow deviceBorrow) {
        User user = userMapper.selectById(SecurityUtils.getUserId());
        //新增的时候添加新建流程
        if (ObjectUtils.isEmpty(deviceBorrow.getId())) {
            deviceBorrow.setSubmitUser(user.getName());
            String year = new SimpleDateFormat("yy", Locale.CHINESE).format(new Date());
            String month = new SimpleDateFormat("MM", Locale.CHINESE).format(new Date());
            String processNumber = numberGenerator.generateNumberWithPrefix(3, "DG-TC-23FM " + month + "-" + year + month, DeviceBorrow::getProcessNumber);
            deviceBorrow.setProcessNumber(processNumber);
            deviceBorrowMapper.insert(deviceBorrow);
            DeviceLog deviceLog = new DeviceLog();
            deviceLog.setOperator(user.getName());
            deviceLog.setOperationTime(LocalDateTime.now());
            deviceLog.setOperationType("新建");
            deviceLog.setOperationContent("新建流程");
            deviceLog.setRelevanceForm("device_borrow");
            deviceLog.setRelevanceId(deviceBorrow.getId());
            deviceLogMapper.insert(deviceLog);
        } else {
            DeviceBorrow borrow = deviceBorrowMapper.selectById(deviceBorrow.getId());
            deviceBorrowMapper.updateById(deviceBorrow);
            //通过或者驳回增加流程跟踪
            if (deviceBorrow.getNowState().equals("关闭")) {
                DeviceLog deviceLog = new DeviceLog();
                deviceLog.setOperator(user.getName());
                deviceLog.setOperationTime(LocalDateTime.now());
                deviceLog.setOperationType("接收通过");
                deviceLog.setRelevanceForm("device_borrow");
                deviceLog.setRelevanceId(deviceBorrow.getId());
                deviceLogMapper.insert(deviceLog);
            }
            else if (deviceBorrow.getNowState().equals("提交") && borrow.getNowState().equals("接收")) {
                DeviceLog deviceLog = new DeviceLog();
                deviceLog.setOperator(user.getName());
                deviceLog.setOperationTime(LocalDateTime.now());
                deviceLog.setOperationType("接收驳回");
                deviceLog.setRelevanceForm("device_borrow");
                deviceLog.setRelevanceId(deviceBorrow.getId());
                deviceLogMapper.insert(deviceLog);
            }
        }
        return 0;
    }
    @Override
    public DeviceBorrow getDeviceBorrow(Integer id) {
        List<DeviceLog> deviceLogs = deviceLogMapper.selectList(Wrappers.<DeviceLog>lambdaQuery()
                .eq(DeviceLog::getRelevanceForm, "device_borrow")
                .eq(DeviceLog::getRelevanceId, id));
        DeviceBorrow deviceBorrow = deviceBorrowMapper.selectById(id);
        deviceBorrow.setDeviceLogs(deviceLogs);
        return deviceBorrow;
    }
    @Override
    public List<DeviceBorrow> getDeviceBorrowBydeviceId(Integer deviceId) {
        return deviceBorrowMapper.getDeviceBorrowBydeviceId(deviceId);
    }
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/DeviceFaultOneServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.require.dto.DeviceFaultOneDto;
import com.ruoyi.require.mapper.DeviceFaultOneMapper;
import com.ruoyi.require.pojo.DeviceFaultOne;
import com.ruoyi.require.service.DeviceFaultOneService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * è®¾å¤‡æ•…障表 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-09-26 02:03:29
 */
@Service
public class DeviceFaultOneServiceImpl extends ServiceImpl<DeviceFaultOneMapper, DeviceFaultOne> implements DeviceFaultOneService {
    @Override
    public IPage<DeviceFaultOneDto> deviceFaultOnePage(Integer deviceId, Page page, String processNumber) {
        return baseMapper.deviceFaultOnePage(deviceId, page, processNumber);
    }
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/DeviceFaultServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,105 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.basic.mapper.StructureItemParameterMapper;
import com.ruoyi.basic.pojo.StructureItemParameter;
import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.require.mapper.DeviceFaultMapper;
import com.ruoyi.require.mapper.DeviceFaultOneMapper;
import com.ruoyi.require.mapper.DeviceMaintenanceMapper;
import com.ruoyi.require.mapper.DeviceMapper;
import com.ruoyi.require.pojo.*;
import com.ruoyi.require.service.DeviceFaultService;
import com.ruoyi.system.mapper.SysDictDataMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
@Service
public class DeviceFaultServiceImpl extends ServiceImpl<DeviceFaultMapper, DeviceFault> implements DeviceFaultService {
    @Autowired
    private DeviceMapper deviceMapper;
    @Autowired
    private QrShowServiceImpl qrShowService;
    @Resource
    private SysDictDataMapper sysDictDataMapper;
    @Autowired
    private DeviceMaintenanceMapper deviceMaintenanceMapper;
    @Autowired
    private StructureItemParameterMapper structureItemParameterMapper;
    @Autowired
    private DeviceFaultOneMapper deviceFaultOneMapper;
    @Override
    public Map<String,Object> findByDeviceId(Integer deviceId) {
        Map<String,Object> map = new HashMap<>();
        if(Objects.isNull(deviceId)){
            return map;
        }
        //查询设备主表信息
        Device device = deviceMapper.selectById(deviceId);
        if(!Objects.isNull(device)){
            //查询设备校准信息
            DeviceMetricRecord calibrate = qrShowService.getDeviceMetricRecord(device.getId(), "calibrate");
            //查询设备核查信息
            DeviceMetricRecord examine = qrShowService.getDeviceMetricRecord(device.getId(), "examine");
            //查询设备维护记录
            DeviceMaintenance deviceMaintenance = Optional.ofNullable(deviceMaintenanceMapper.selectOne(Wrappers.<DeviceMaintenance>lambdaQuery()
                    .eq(DeviceMaintenance::getDeviceId, device.getId())
                    .orderByDesc(DeviceMaintenance::getId)
                    .last("limit 1"))).orElse(new DeviceMaintenance());
            //查询设备故障信息
            List<DeviceFaultOne> deviceFaultOneList = Optional.ofNullable(deviceFaultOneMapper.selectList(Wrappers.<DeviceFaultOne>lambdaQuery()
                    .eq(DeviceFaultOne::getDeviceId, device.getId())
                    .orderByDesc(DeviceFaultOne::getId))).orElse(new ArrayList<>());
            //查询设备状态字典
            List<SysDictData> sysDictDataList = sysDictDataMapper.selectDictDataByType("device_status");
//            List<SysDictData> sysDictDataList = DictUtils.getDictCache("设备状态");
            SysDictData findEnum = sysDictDataList.stream().filter(e-> Integer.parseInt(e.getDictValue()) ==device.getDeviceStatus()).findFirst().orElse(new SysDictData());
            map.put("progress",qrShowService.calcDeviceNextCheckRatio(calibrate.getCalibrationDate(),calibrate.getNextCalibrationDate()));//距离下次校准日期的天数百分比
            map.put("deviceName",device.getDeviceName());//设备名称
            map.put("deviceCode",device.getManagementNumber());//设备编号
            map.put("usedYears",qrShowService.calcUsedYears(device.getActivationDate()));//启用时长(å¹´)
            map.put("deviceStatus",findEnum.getDictLabel());//设备运行状态
            map.put("faultCount",deviceFaultOneList.size());//故障次数
            String faultDate = !deviceFaultOneList.isEmpty() ?qrShowService.formatDate(deviceFaultOneList.get(0).getFaultDate(),"yyyy-MM-dd"):"";
            map.put("faultDate",faultDate);//最近故障日期
            map.put("lastCalibrationDate",qrShowService.formatDate(calibrate.getCalibrationDate(),"yyyy-MM-dd"));//最近校准日期
            map.put("nextCalibrationDate",qrShowService.formatDate(calibrate.getNextCalibrationDate(),"yyyy-MM-dd"));//下次校准日期
            String calibrateStatus = "0yes".equals(calibrate.getStatus())?"合格":"1no".equals(calibrate.getStatus())?"不合格":"其他";
            map.put("calibrateStatus",Objects.isNull(calibrate.getCalibrationDate())?"":calibrateStatus);//校准总结论
            map.put("lastExamineDate",examine.getCalibrationDate());//最近核查日期
            map.put("nextExamineDate",examine.getNextCalibrationDate());//下次核查日期
            String examineStatus = "0yes".equals(examine.getStatus())?"合格":"1no".equals(examine.getStatus())?"不合格":"其他";
            map.put("examineStatus",Objects.isNull(examine.getCalibrationDate())?"":examineStatus);//核查总结论
            map.put("maintenanceDate",deviceMaintenance.getDate());//最近维护日期
            map.put("nextMaintenanceDate",deviceMaintenance.getNextDate());//下次维护日期
            String maintenanceType = "";
            if(!Objects.isNull(deviceMaintenance.getMaintenanceType())){
                maintenanceType = 0==deviceMaintenance.getMaintenanceType()?"使用前维护":"使用后维护";
            }
            map.put("maintenanceType",maintenanceType);//维护总结论
            //测量项目
            String insProduct = "";
            if(StringUtils.isNotBlank(device.getInsProductIds())){
                String[] ids = device.getInsProductIds().split(",");
                List<StructureItemParameter> parameters = structureItemParameterMapper.selectBatchIds(Arrays.asList(ids));
                List<String> itemList = parameters.stream().map(StructureItemParameter::getInspectionItem).distinct().collect(Collectors.toList());
                insProduct = String.join(",",itemList);
            }
            map.put("insProduct",insProduct);//测量项目
        }
        return map;
    }
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/DeviceMaintenanceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,45 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.require.dto.DeviceMaintenanceExport;
import com.ruoyi.require.mapper.DeviceMaintenanceMapper;
import com.ruoyi.require.pojo.DeviceMaintenance;
import com.ruoyi.require.service.DeviceMaintenanceService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class DeviceMaintenanceImpl extends ServiceImpl<DeviceMaintenanceMapper, DeviceMaintenance> implements DeviceMaintenanceService {
    @Resource
    DeviceMaintenanceMapper deviceMaintenanceMapper;
    @Override
    public IPage<DeviceMaintenance> getDeviceMaintenancePage(Page page, Integer deviceId, String deviceNumber) {
        LambdaQueryWrapper<DeviceMaintenance> queryWrapper = Wrappers.<DeviceMaintenance>lambdaQuery();
        queryWrapper.eq(DeviceMaintenance::getDeviceId, deviceId);
        if(!StringUtils.isEmpty(deviceNumber)){
            queryWrapper.like(DeviceMaintenance::getDeviceNumber, deviceNumber);
        }
        return baseMapper.selectPage(page,queryWrapper );
    }
    @Override
    public List<DeviceMaintenanceExport> deviceMaintenanceExport(Integer deviceId) {
        return baseMapper.deviceMaintenanceExport(deviceId);
    }
//    @Override
//    public List<DeviceMaintenance> getDeviceMaintenanceParam() {
//        Map<String, Object> map = new HashMap<>();
//        map.put("head",PrintChina.printChina(DeviceMaintenance.class));
//        IPage<DeviceMaintenance> iPage = deviceMaintenanceMapper.getDeviceMaintenanceParam(page, QueryWrappers.queryWrappers(itemParameter));
//        map.put("body",page);
//        return deviceMaintenanceMapper.getDeviceMaintenanceParam();
//    }
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/DeviceMetricRecordServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.require.mapper.DeviceMetricRecordMapper;
import com.ruoyi.require.pojo.DeviceMetricRecord;
import com.ruoyi.require.service.DeviceMetricRecordService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * è®¾å¤‡æ ¡å‡† - æ ¡å‡†è®°å½• æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-09-27 10:20:01
 */
@Service
public class DeviceMetricRecordServiceImpl extends ServiceImpl<DeviceMetricRecordMapper, DeviceMetricRecord> implements DeviceMetricRecordService {
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/DeviceMetricServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.require.mapper.DeviceMetricMapper;
import com.ruoyi.require.pojo.DeviceMetric;
import com.ruoyi.require.service.IDeviceMetricService;
import org.springframework.stereotype.Service;
@Service
public class DeviceMetricServiceImpl extends ServiceImpl<DeviceMetricMapper, DeviceMetric> implements IDeviceMetricService {
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/DeviceMetricsCopyServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.require.mapper.DeviceMetricsCopyMapper;
import com.ruoyi.require.pojo.DeviceMetricsCopy;
import com.ruoyi.require.service.DeviceMetricsCopyService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * è®¾å¤‡æ ¡å‡† - æ ¡å‡†è®°å½• - æ ¡å‡†æ¡ç›® æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-09-27 10:20:11
 */
@Service
public class DeviceMetricsCopyServiceImpl extends ServiceImpl<DeviceMetricsCopyMapper, DeviceMetricsCopy> implements DeviceMetricsCopyService {
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/DeviceRecordServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.require.dto.DeviceRecordDto;
import com.ruoyi.require.excel.DeviceRecordExport;
import com.ruoyi.require.mapper.DeviceRecordMapper;
import com.ruoyi.require.pojo.DeviceRecord;
import com.ruoyi.require.service.DeviceRecordService;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * <p>
 * cnas设备使用记录表 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-09-21 11:06:47
 */
@Service
public class DeviceRecordServiceImpl extends ServiceImpl<DeviceRecordMapper, DeviceRecord> implements DeviceRecordService {
    @Override
    public IPage<DeviceRecordDto> deviceRecordPage(Integer deviceId, Page page, String deviceNumber) {
        return baseMapper.deviceRecordPage(deviceId, page, deviceNumber);
    }
    @Override
    public List<DeviceRecordExport> incidentReportExport(Integer deviceId) {
        return baseMapper.incidentReportExport(deviceId);
    }
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/DeviceServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,1112 @@
package com.ruoyi.require.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.basic.mapper.StructureItemParameterMapper;
import com.ruoyi.basic.pojo.StructureItemParameter;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.common.utils.DictUtils;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.require.dto.ADto;
import com.ruoyi.require.dto.BDto;
import com.ruoyi.require.dto.DeviceDto;
import com.ruoyi.require.mapper.DeviceMapper;
import com.ruoyi.require.pojo.DataConfig;
import com.ruoyi.require.pojo.Device;
import com.ruoyi.require.pojo.DeviceMetricRecord;
import com.ruoyi.require.service.DataConfigService;
import com.ruoyi.require.service.DeviceService;
import com.ruoyi.require.util.DataAcquisition;
import com.ruoyi.system.mapper.UserMapper;
import lombok.AllArgsConstructor;
import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.*;
import java.util.stream.Collectors;
/**
 * è®¾å¤‡(Device)表服务实现类
 */
@Service
@AllArgsConstructor
public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> implements DeviceService {
    private DeviceMapper deviceMapper;
    private UserMapper userMapper;
    private StructureItemParameterMapper structureItemParameterMapper;
    @Autowired
    private DataConfigService dataConfigService;
    @Autowired
    private QrShowServiceImpl qrShowService;
    @Override
    public List<User> selectUserList() {
        List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>().like(User::getDepartLimsId, "1"));
        return users;
    }
    @Override
    public List<User> selectUserListByDepartLimsId(String departLimsId) {
        List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>().like(User::getDepartLimsId, departLimsId));
        return users;
    }
    @Override
    public IPage<DeviceDto> selectDeviceParameter(Page page, DeviceDto itemParameter, Boolean laboratoryNameIsNull) {
        IPage<DeviceDto> iPage = deviceMapper.selectDeviceParameterPage(page, QueryWrappers.queryWrappers(itemParameter), laboratoryNameIsNull);
        return iPage;
    }
    @Override
    public int addDeviceParameter(Device itemParameter) {
        return deviceMapper.insert(itemParameter);
    }
    @Override
    public int delDeviceParameter(Integer id) {
        return deviceMapper.deleteById(id);
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    public int upDeviceParameter(Device itemParameter) {
        // åˆ é™¤æ•°é‡‡é›†é…ç½®æ•°æ®
        dataConfigService.deleteDataConfig();
        // éœ€è¦åŒæ—¶æ›´æ”¹ device表
        return deviceMapper.updateById(itemParameter);
    }
    @Override
    public List<Device> selectEquipmentOverview() {
        return deviceMapper.selectEquipmentOverview(new Page(1, 10), QueryWrappers.queryWrappers(new Device()));
    }
    @Override
    public List<Device> authorizedPerson() {
        return deviceMapper.authorizedPerson();
    }
    @Override
    public List<Device> search(Integer status, String deviceName, String specificationModel, String largeCategory) {
        return deviceMapper.search(status, deviceName, specificationModel, largeCategory);
    }
    @Override
    public List<Device> selectDevicePrincipal() {
        return deviceMapper.selectDevicePrincipal();
    }
    @Override
    public List<Device> selectDeviceByCategory(String inspectionItem, String inspectionItemSubclass,String sonLaboratory) {
//        Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
//        User user = Optional.ofNullable(userMapper.selectById(userId)).orElse(new User());
//        String departLimsId = user.getDepartLimsId();
//        if(departLimsId.isEmpty()){
//
//        }
        List<Integer> id;
        try {
            id = structureItemParameterMapper.selectList(Wrappers.<StructureItemParameter>lambdaQuery()
                    .eq(StructureItemParameter::getInspectionItem, inspectionItem)
                    .eq(ObjectUtils.isNotEmpty(inspectionItemSubclass),StructureItemParameter::getInspectionItemSubclass, inspectionItemSubclass)
                    .eq(ObjectUtils.isNotEmpty(sonLaboratory),StructureItemParameter::getSonLaboratory,sonLaboratory)
                    .select(StructureItemParameter::getId)).stream().map(StructureItemParameter::getId).collect(Collectors.toList());
//            if () {
////                id = structureItemParameterMapper.selectOne(Wrappers.<StructureItemParameter>lambdaQuery()
////                        .eq(StructureItemParameter::getInspectionItem, inspectionItem)
////                        .last("limit 1").select(StructureItemParameter::getId)).getId();
//
//
//            }else {
////                id = structureItemParameterMapper.selectOne(Wrappers.<StructureItemParameter>lambdaQuery()
////                        .eq(StructureItemParameter::getInspectionItem, inspectionItem)
////                        .eq(StructureItemParameter::getInspectionItemSubclass, inspectionItemSubclass)
////                        .last("limit 1").select(StructureItemParameter::getId)).getId();
//                id = structureItemParameterMapper.selectList(Wrappers.<StructureItemParameter>lambdaQuery()
//                        .eq(StructureItemParameter::getInspectionItem, inspectionItem)
//
//                        .select(StructureItemParameter::getId)).stream().map(StructureItemParameter::getId).collect(Collectors.toList());
//            }
        } catch (Exception e) {
            return null;
        }
        List<Device> devices = deviceMapper.selectList(Wrappers.<Device>lambdaQuery()
                .eq(Device::getDeviceStatus, 0)
                .isNotNull(Device::getInsProductIds));
        List<Device> devices2 = new ArrayList<>();
        for (Device device : devices) {
            String[] ids = device.getInsProductIds().split(",");
            for (String i : ids) {
                if (ObjectUtils.isNotEmpty(i)) {
                    if (id.contains(Integer.parseInt(i))) {
                        devices2.add(device);
                        break;
                    }
                }
            }
        }
        return devices2;
    }
    @Override
    public DeviceDto selectDeviceByCode(Integer id) {
        DeviceDto deviceDto = deviceMapper.selectDeviceByCode(id);
        List<Integer> ids = new ArrayList<>();
        if(Strings.isNotEmpty(deviceDto.getAuthorizedPerson())) {
            if(deviceDto.getAuthorizedPerson().equals("null")) {
                deviceDto.setAuthorizedPerson("[]");
            }
            ids = JSON.parseArray(deviceDto.getAuthorizedPerson(), Integer.class);
        }
        String name = "";
        if(!ids.isEmpty()) {
             name = userMapper.selectBatchIds(ids).stream().map(User::getName).collect(Collectors.joining(","));
        }
        deviceDto.setAuthorizedPersonName(name);
        //查询设备校准信息
        DeviceMetricRecord calibrate = qrShowService.getDeviceMetricRecord(id, "calibrate");
        //deviceDto.setCalibrationDate(qrShowService.formatDate(calibrate.getCalibrationDate(),"yyyy-MM-dd"));
        deviceDto.setCalibrateNo(calibrate.getCertificateSerialNumber());
        if(Objects.nonNull(calibrate.getNextCalibrationDate())){
            deviceDto.setCalibrationServices(calibrate.getUnitOfMeasure());
            deviceDto.setNextCalibrationDate(calibrate.getNextCalibrationDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
            deviceDto.setLastCalibrationDate(calibrate.getCalibrationDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
        }
        // åˆ°äº†åœç”¨æ—¥æœŸï¼Œè‡ªåŠ¨å°†çŠ¶æ€æ”¹ä¸ºåœç”¨
        if(Objects.nonNull(deviceDto.getNextCalibrationDate()) && LocalDateTime.now().isAfter(deviceDto.getNextCalibrationDate())) {
            List<SysDictData> enums = DictUtils.getDictCache("设备状态");
            List<SysDictData> status = enums.stream().filter(item -> item.getDictValue().equals("停用")).collect(Collectors.toList());
            deviceDto.setDeviceStatus(Integer.parseInt(status.get(0).getDictValue()));
            deviceMapper.updateById(deviceDto);
        }
        return deviceDto;
    }
    /**
     *
     * @param request å–请求中的ip
     * @param id æ£€éªŒæ ·å“ ä¸»é”®id
     * @param entrustCode å§”托编号
     * @param sampleCode æ ·å“ç¼–号
     * @param fiberOpticRibbon å…‰çº¤å¸¦ç¼–号
     * @return
     */
    @Override
    public Result<?> dataAcquisition(HttpServletRequest request, Integer id, String entrustCode, String sampleCode, String fiberOpticRibbon) {
        // é˜²æ­¢å›žçŽ¯åœ°å€å˜ä¸ºIPv6
        String ip = DataAcquisition.getIp(request);
        List<Device> device = baseMapper.selectList(Wrappers.<Device>lambdaQuery()
                .eq(Device::getIp, ip));
        // 1、检验
        if(device.size() > 1) {
            String str = "";
            for (Device device1 : device) {
                str += device1.getDeviceName() + ",";
            }
            throw new ErrorException("IP:" + ip + "配置了设备多个设备:" + str + ",无法进行数采!");
        }
        if (ObjectUtils.isEmpty(device)) {
            throw new ErrorException("未给该IP:" + ip + "配置设备,无法进行数采!");
        }
        List<Map<String, Object>> inspectionItemSubclass = baseMapper.getInspectionItemSubclass(id);
        if (ObjectUtils.isEmpty(device.get(0).getFileType()) || ObjectUtils.isEmpty(device.get(0).getCollectUrl())) {
            throw new ErrorException("未给该:" + device.get(0).getDeviceName() + "设备配置采集路径或文件后缀!");
        }
        // 2、取设备关联的检验项,检验子项
        List<DataConfig> list1 = new ArrayList<>();
        inspectionItemSubclass.forEach(i -> {
             List<DataConfig> list = dataConfigService.list(Wrappers.<DataConfig>lambdaQuery()
                .eq(DataConfig::getDeviceId, device.get(0).getId())
                .eq(DataConfig::getInspectionItem, i.get("inspection_item"))
                .eq(DataConfig::getInspectionItemSubclass, i.get("inspection_item_subclass"))
                .orderBy(false, false, DataConfig::getId));
            list1.addAll(list);
        });
        List<DataConfig> collect = list1.stream().distinct().collect(Collectors.toList());
        // 3、采集,取数据
        Map<String, Object> map = DataAcquisition.dataAcquisitionEntrance(collect, device.get(0), entrustCode, sampleCode, ip, fiberOpticRibbon);
        // 4、造循环次数,参与公式计算
        if (ObjectUtils.isNotEmpty(map)) {
            Map<String, Object> frequency = DataAcquisition.createFrequency(entrustCode, sampleCode,fiberOpticRibbon, map);
            return Result.success(frequency);
        } else {
            return Result.success(null);
        }
    }
    @Override
    public List<ADto> menu() {
        //查询所有设备信息
        List<Device> devices = baseMapper.selectList(null);
        List<String> name = devices.stream().map(Device::getDeviceName).collect(Collectors.toList());
        //查询所有用户信息
        List<User> users = userMapper.selectList(null);
        List<String> collect = users.stream().map(User::getName).collect(Collectors.toList());
        String menu="[\n" +
                "\t{\n" +
                "\t\tk: 0,\n" +
                "\t\tv: \"个人首页\",\n" +
                "\t\ti: \"font icon-shouyefill\",\n" +
                "\t\tself: true,\n" +
                "\t\tc: [{\n" +
                "\t\t\tk: 0,\n" +
                "\t\t\tv: \"个人首页\",\n" +
                "\t\t\ti: \"font icon-shouyefill\",\n" +
                "\t\t\tu: \"index-index\"\n" +
                "\t\t}]\n" +
                "\t},\n" +
                "\t{\n" +
                "\t\tv: \"业务管理\",\n" +
                "\t\ti: \"font icon-kexueyanjiuheshiyankaifa\",\n" +
                "\t\tp: \"selectInsOrderParameter selectInsOrderPlanList pageInsReport costStatistics selectWarehouse\",\n" +
                "\t\tc: [\n" +
                "      {\n" +
                "        v: \"原材料检验下单\",\n" +
                "        i: \"font icon-erjidaohang\",\n" +
                "        u: \"b1-material-inspection-order\",\n" +
                "        p: \"selectInsOrderParameter\"\n" +
                "      },\n" +
                "      {\n" +
                "\t\t\tv: \"检验下单\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"b1-inspection-order\",\n" +
                "\t\t\tp: \"selectInsOrderParameter\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"检验任务\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"b1-inspect-order-plan\",\n" +
                "\t\t\tp: \"selectInsOrderPlanList\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"报告编制\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"b1-report-preparation\",\n" +
                "\t\t\tp: \"pageInsReport\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"费用统计\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"b1-expenses\",\n" +
                "\t\t\tp: \"costStatistics\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"样品管理\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"b1-sample\",\n" +
                "\t\t\tp: \"selectWarehouse\"\n" +
                "\t\t},{\n" +
                "\t\t\tv: \"不合格管理\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"b1-unpass\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}\n" +
                "\t]\n" +
                "\t},\n" +
                "\t{\n" +
                "\t\tv: \"标准集\",\n" +
                "\t\ti: \"font icon-biaozhunji\",\n" +
                "\t\tp: \"selectStandardTreeList selectStandardTemplatePageList\",\n" +
                "\t\tc: [{\n" +
                "\t\t\tv: \"标准库\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"b2-standard\",\n" +
                "\t\t\tp: \"selectStandardTreeList\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"原始记录模板\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"b2-standard-template\",\n" +
                "\t\t\tp: \"selectStandardTemplatePageList\"\n" +
                "\t\t}]\n" +
                "\t},\n" +
                "\t{\n" +
                "\t\tv: \"绩效管理\",\n" +
                "\t\ti: \"font icon-jixiaoguanli\",\n" +
                "\t\tp: \"\",\n" +
                "\t\tc: [{\n" +
                "\t\t\tv: \"工时管理\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"b3-work-time-management\",\n" +
                "\t\t\tp: \"selectAuxiliaryWorkingHours\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"人员考勤\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"人员考评\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"b3-personnel-evaluation\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"人员考核\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"技能等级\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"工资结算\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"班次\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"b3-classes\",\n" +
                "\t\t\tp: \"performanceShiftPage performanceShiftPageYear\"\n" +
                "\t\t}]\n" +
                "\t},\n" +
                "\t{\n" +
                "\t\tv: \"统计图表\",\n" +
                "\t\ti: \"font icon-tongjitubiao\",\n" +
                "\t\tp: \"\",\n" +
                "\t\tc: [{\n" +
                "\t\t\tv: \"实验室要素\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"每日业务统计\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"b4-daily-business-statistics\",\n" +
                "\t\t\tp: \"businessStatisticsByDay\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"检测项目统计\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"b4-inspection-item-statistics\",\n" +
                "\t\t\tp: \"testProductByDay\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"样品缺陷指数\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"b4-sample-defects\",\n" +
                "\t\t\tp: \"selectSampleDefects\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"耗材统计\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"人员工作报表\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}]\n" +
                "\t},\n" +
                "\t{\n" +
                "\t\tv: \"电子看板\",\n" +
                "\t\ti: \"font icon-dianzikanban-fan\",\n" +
                "\t\tp: \"\",\n" +
                "\t\tc: [{\n" +
                "\t\t\tv: \"客户接待\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"任务展示\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"设备状态及饱和度\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}]\n" +
                "\t},\n" +
                "\t{\n" +
                "\t\tv: \"系统功能\",\n" +
                "\t\ti: \"el-icon-s-tools\",\n" +
                "\t\tp: \"\",\n" +
                "\t\tc: [{\n" +
                "\t\t\tv: \"数据字典\",\n" +
                "\t\t\ti: \"el-icon-s-tools\",\n" +
                "\t\t\tu: \"enums\",\n" +
                "\t\t\tp: \"selectEnumList\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"角色管理\",\n" +
                "\t\t\ti: \"el-icon-s-tools\",\n" +
                "\t\t\tu: \"role-manage\",\n" +
                "\t\t\tp: \"selectRoleLists\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"用户管理\",\n" +
                "\t\t\ti: \"el-icon-s-tools\",\n" +
                "\t\t\tu: \"person-manage\",\n" +
                "\t\t\tp: \"selectUserList\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"客户管理\",\n" +
                "\t\t\ti: \"el-icon-s-tools\",\n" +
                "\t\t\tu: \"custom_manage\",\n" +
                "\t\t\tp: \"selectCustomPageList\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"系统日志\",\n" +
                "\t\t\ti: \"el-icon-s-tools\",\n" +
                "\t\t\tu: \"system-log\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"消息详情\",\n" +
                "\t\t\ti: \"el-icon-s-tools\",\n" +
                "\t\t\tu: \"notice-detail\",\n" +
                "\t\t\tp: \"abcd\"\n" +
                "\t\t}]\n" +
                "\t},\n" +
                "\t{\n" +
                "\t\tv: \"4 é€šç”¨è¦æ±‚\",\n" +
                "\t\ti: \"font icon-tongyongyaoqiu\",\n" +
                "\t\tp: \"\",\n" +
                "\t\tc: [{\n" +
                "\t\t\t\tv: \"通用要求\",\n" +
                "\t\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\t\tu: \"\",\n" +
                "\t\t\t\tg: \"4 é€šç”¨è¦æ±‚\",\n" +
                "\t\t\t\tp: \"\"\n" +
                "\t\t\t},\n" +
                "\t\t\t{\n" +
                "\t\t\t\tv: \"公正性\",\n" +
                "\t\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\t\tu: \"\",\n" +
                "\t\t\t\tg: \"4.1 å…¬æ­£æ€§\",\n" +
                "\t\t\t\tp: \"\"\n" +
                "\t\t\t},\n" +
                "\t\t\t{\n" +
                "\t\t\t\tv: \"保密性\",\n" +
                "\t\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\t\tu: \"\",\n" +
                "\t\t\t\tg: \"4.2 ä¿å¯†æ€§\",\n" +
                "\t\t\t\tp: \"\"\n" +
                "\t\t\t}\n" +
                "\t\t]\n" +
                "\t},\n" +
                "\t{\n" +
                "\t\tv: \"5 ç»“构要求\",\n" +
                "\t\ti: \"font icon-jiegouyaoqiu\",\n" +
                "\t\tp: \"\",\n" +
                "\t\tc: [{\n" +
                "\t\t\tv: \"实验室的法律地位\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"A实验室的法律地位\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"全权负责的管理层\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"B全权负责的管理层\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"实验室资质\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"a5-laboratory-qualifications\",\n" +
                "\t\t\tg: \"C能力范围和资质\",\n" +
                "\t\t\tp: \"getCertificationDetail\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"能力范围\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"a5-capacity-scope\",\n" +
                "\t\t\tg: \"C能力范围和资质\",\n" +
                "\t\t\tp: \"selectItemParameterList selectTestObjectList\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"场所或设施\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"a5-laboratory-management\",\n" +
                "\t\t\tg: \"D场所或设施\",\n" +
                "\t\t\tp: \"selectItemParameter\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"组织相关文件\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"E组织相关文件\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"人员岗位任职\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"F人员岗位任职\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"沟通和宣贯\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"G沟通和宣贯\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}]\n" +
                "\t}, {\n" +
                "\t\tv: \"6 èµ„源要求\",\n" +
                "\t\ti: \"font icon-ziyuanyaoqiu\",\n" +
                "\t\tp: \"\",\n" +
                "\t\tc: [{\n" +
                "\t\t\tv: \"总则\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.1 æ€»åˆ™\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"人员总览\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"a6-personnel-overview\",\n" +
                "\t\t\tg: \"6.2 äººå‘˜\",\n" +
                "\t\t\tp: \"selectPersonnelOverview\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"人员明细\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"a6-personnel-detail\",\n" +
                "\t\t\tg: \"6.2 äººå‘˜\",\n" +
                "\t\t\tp: \"selectDepartmentLim\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"人员培训\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.2 äººå‘˜\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"人员监督\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.2 äººå‘˜\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"岗位职责\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.2 äººå‘˜\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"人员基本信息\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.2 äººå‘˜\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"工作履历\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.2 äººå‘˜\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"奖惩记录\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.2 äººå‘˜\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"培训记录\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.2 äººå‘˜\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"监督记录\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.2 äººå‘˜\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"任职授权记录\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.2 äººå‘˜\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"人员能力监控记录\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.2 äººå‘˜\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"沟通记录\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.2 äººå‘˜\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"外来人员管理\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"a6-external-personnel-management\",\n" +
                "\t\t\tg: \"6.3 è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"实验室设施场所信息\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.3 è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"设施和环境条件要求\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.3 è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"环境条件引用\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.3 è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"安全区代表检查\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.3 è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"安全内务\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.3 è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"废物处理交接记录\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"a6-waste-handover\",\n" +
                "\t\t\tg: \"6.3 è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"设备总览\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"a6-device-overview\",\n" +
                "\t\t\tg: \"6.4 è®¾å¤‡\",\n" +
                "\t\t\tp: \"selectDeviceParameter\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"设备工具明细\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"a6-device-management\",\n" +
                "\t\t\tg: \"6.4 è®¾å¤‡\",\n" +
                "\t\t\tp: \"selectDeviceParameter\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"资源预定\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.4 è®¾å¤‡\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"作业指导书\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.4 è®¾å¤‡\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"设备运行总览\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.4 è®¾å¤‡\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"设备档案\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.4 è®¾å¤‡\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"设备验收\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.4 è®¾å¤‡\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"设备校准\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.4 è®¾å¤‡\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"设备核查\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.4 è®¾å¤‡\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"设备维护\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.4 è®¾å¤‡\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"设备借用\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.4 è®¾å¤‡\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"设备故障\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.4 è®¾å¤‡\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"使用记录\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.4 è®¾å¤‡\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"设备停用/启用\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.4 è®¾å¤‡\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"量值溯源计划\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.5 è®¡é‡æº¯æºæ€§\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"标准物质清单\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"a6-standard-material-list\",\n" +
                "\t\t\tg: \"6.5 è®¡é‡æº¯æºæ€§\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"标准物质验收\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.5 è®¡é‡æº¯æºæ€§\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"标准物质领用\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"a6-standard-material-requisition\",\n" +
                "\t\t\tg: \"6.5 è®¡é‡æº¯æºæ€§\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"过期标样处置\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.5 è®¡é‡æº¯æºæ€§\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"服务和供应品采购\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.6 å¤–部提供的产品和服务\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t},{\n" +
                "\t\t\tv: \"供应商管理\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"6.6 å¤–部提供的产品和服务\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}]\n" +
                "\t},\n" +
                "\t{\n" +
                "\t\tv: \"7 è¿‡ç¨‹è¦æ±‚\",\n" +
                "\t\ti: \"font icon-guochengyaoqiu\",\n" +
                "\t\tp: \"\",\n" +
                "\t\tc: [{\n" +
                "\t\t\tv: \"检验委托单\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.1 è¦æ±‚、标书和合同评审\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"合同评审\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.1 è¦æ±‚、标书和合同评审\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"实验室的检测能力档案\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"a7-standard-method\",\n" +
                "\t\t\tg: \"7.2 æ–¹æ³•的选择、验证和确认\",\n" +
                "\t\t\tp: \"selectStandardMethodList\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"标准查新\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.2 æ–¹æ³•的选择、验证和确认\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"标准方法的变更\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.2 æ–¹æ³•的选择、验证和确认\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"方法验证\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.2 æ–¹æ³•的选择、验证和确认\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"抽样\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.3 æŠ½æ ·\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"检测或校准物品的处置\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.4 æ£€æµ‹æˆ–校准物品的处置\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"技术记录\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.5 æŠ€æœ¯è®°å½•\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"测量不确定度的评定\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.6 æµ‹é‡ä¸ç¡®å®šåº¦çš„评定\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"确保结果有效性\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.7 ç¡®ä¿ç»“果有效性\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"报告结果\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.8 æŠ¥å‘Šç»“æžœ\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"投诉详情\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.9 æŠ•诉\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"投诉情况汇总表\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.9 æŠ•诉\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"不符合项\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.10 ä¸ç¬¦åˆå·¥ä½œ\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"不符合项的分布\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.10 ä¸ç¬¦åˆå·¥ä½œ\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"数据控制和信息管理\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"7.11 æ•°æ®æŽ§åˆ¶å’Œä¿¡æ¯ç®¡ç†\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}]\n" +
                "\t},\n" +
                "\t{\n" +
                "\t\tv: \"8 ä½“系管理要求\",\n" +
                "\t\ti: \"font icon-guanlitixiyaoqiu\",\n" +
                "\t\tp: \"\",\n" +
                "\t\tc: [{\n" +
                "\t\t\tv: \"方式\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"8.1 æ–¹å¼\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"管理体系文件\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"8.2 ç®¡ç†ä½“系文件\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"文件清单\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"8.3 ç®¡ç†ä½“系文件的控制\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"文件受控\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"8.3 ç®¡ç†ä½“系文件的控制\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"文件发放回收\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"8.3 ç®¡ç†ä½“系文件的控制\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"文件变更\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"8.3 ç®¡ç†ä½“系文件的控制\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"文件作废\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"8.3 ç®¡ç†ä½“系文件的控制\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"记录的控制\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"8.4 è®°å½•的控制\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"应对风险和机遇的措施\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"8.5 åº”对风险和机遇的措施\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"客户基本信息管理\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"8.6 æ”¹è¿›\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"客户满意度\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"8.6 æ”¹è¿›\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"纠正措施\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"8.7 çº æ­£æŽªæ–½\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"内审管理\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"8.8 å†…审管理\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}, {\n" +
                "\t\t\tv: \"管理评审\",\n" +
                "\t\t\ti: \"font icon-erjidaohang\",\n" +
                "\t\t\tu: \"\",\n" +
                "\t\t\tg: \"8.9 ç®¡ç†è¯„审\",\n" +
                "\t\t\tp: \"\"\n" +
                "\t\t}]\n" +
                "\t}\n" +
                "]";
        List<ADto> aDtos = JSONArray.parseArray(menu, ADto.class);
        List<BDto> bDtos = aDtos.get(9).getC();
        for (String s : name) {
            BDto bDto = new BDto();
            bDto.setV(s);
            bDto.setI("font icon-erjidaohang");
            bDto.setU("a6-device-overview");
            bDto.setG("6.4 è®¾å¤‡");
            bDto.setP("selectDeviceParameter");
            bDtos.add(bDto);
        }
        for (String s : collect) {
            BDto bDto = new BDto();
            bDto.setV(s);
            bDto.setI("font icon-erjidaohang");
            bDto.setU("a6-personnel-overview");
            bDto.setG("6.2 äººå‘˜");
            bDto.setP("selectPersonnelOverview");
            bDtos.add(bDto);
        }
        return aDtos;
    }
    @Override
    public List<Map<String, Object>> treeDevice(String deviceName) {
        List<Map<String, Object>>  listMap = deviceMapper.treeDevice(deviceName);
        return listMap;
    }
    @Override
    public Result<?> determineWhetherToCollectData(String managementNumber, HttpServletRequest request) {
        String ip = DataAcquisition.getIp(request);
        List<Device> device = baseMapper.selectList(Wrappers.<Device>lambdaQuery()
                .eq(Device::getIp, ip));
        if (ObjectUtils.isEmpty(device)) {
            return Result.success(false);
        }
        if (ObjectUtils.isEmpty(device.get(0).getFileType()) || ObjectUtils.isEmpty(device.get(0).getCollectUrl())) {
            return Result.success(false);
        } else {
            return Result.success(true);
        }
    }
    @Override
    public void exportData(DeviceDto deviceDto, HttpServletResponse response){
         //查询导出的费用统计数据
//        String dates = deviceDto.getDates();
//        String[] split = dates.replaceAll("\\[", "").replaceAll("]", "").replaceAll("\"", "").split(",");
//       deviceDto.setDates(null);
//        List<CostStatisticsDto> deviceDtos = deviceMapper.selectList(QueryWrappers.queryWrappers(deviceDto).ge("create_time", split[0]).le("create_time", split[1] + " 23:59:59"));
//        deviceDtos = deviceDtos.stream().map(dto -> {
//            Set<String> uniqueTags = new HashSet<>();
//            if (dto.getInspectionItem().contains(",")) {
//                for (String s : dto.getInspectionItem().split(",")) {
//                    uniqueTags.add(s.split("@")[0]);
//                }
//            } else {
//                uniqueTags.add(dto.getInspectionItem().split("@")[0]);
//            }
//            dto.setInspectionItem(uniqueTags.toString());
//            return dto;
//        }).collect(Collectors.toList());
//
//        response.setContentType("application/vnd.ms-excel");
//        response.setCharacterEncoding("UTF-8");
//        // è¿™é‡ŒURLEncoder.encode可以防止中文乱码 å½“ç„¶å’Œeasyexcel没有关系
//        String fileName = URLEncoder.encode("样品费用统计导出", "UTF-8");
//        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
//        Map<String, List<CostStatisticsDto>> groupByCompany =
//                deviceDtos.stream().filter(e -> StrUtil.isNotEmpty(e.getCompany()))
//                        .collect(Collectors.groupingBy(CostStatisticsDto::getCompany));
//        try {
//            // æ–°å»ºExcelWriter
//            // æ–°å»ºExcelWriter
//            ExcelWriter excelWriter =
//                    EasyExcel.write(response.getOutputStream())
//                            .registerWriteHandler(new SimpleColumnWidthStyleStrategy(25))
//                            .build();
//            for (Map.Entry<String, List<CostStatisticsDto>> companyDataEntry : groupByCompany.entrySet()) {
//                String sheetName = companyDataEntry.getKey();
//                List<CostStatisticsDto> dataList = companyDataEntry.getValue();
//                WriteSheet mainSheet = EasyExcel.writerSheet(sheetName)
//                        .head(CostStatisticsDto.class)
//                        .registerWriteHandler(new SimpleColumnWidthStyleStrategy(25))
//                        .build();
//                excelWriter.write(dataList, mainSheet);
//            }
//            // å…³é—­æµ
//            excelWriter.finish();
//        } catch (IOException e) {
//            throw new RuntimeException("导出失败");
//        }
    }
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/DeviceStateServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.require.dto.DeviceStateDto;
import com.ruoyi.require.mapper.DeviceStateMapper;
import com.ruoyi.require.pojo.DeviceState;
import com.ruoyi.require.service.DeviceStateService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * è®¾å¤‡åœç”¨/启用 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-09-26 09:51:40
 */
@Service
public class DeviceStateServiceImpl extends ServiceImpl<DeviceStateMapper, DeviceState> implements DeviceStateService {
    @Override
    public IPage<DeviceStateDto> getDeviceStatePage(Integer deviceId, Page page, String processNumber) {
        return baseMapper.getDeviceStatePage(deviceId, page, processNumber);
    }
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/DocumentServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.require.mapper.DocumentDao;
import com.ruoyi.require.pojo.Document;
import com.ruoyi.require.service.DocumentService;
import org.springframework.stereotype.Service;
@Service
public class DocumentServiceImpl extends ServiceImpl<DocumentDao, Document> implements DocumentService {
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeCalibrationScheduleServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.require.mapper.FeCalibrationScheduleMapper;
import com.ruoyi.require.pojo.FeCalibrationSchedule;
import com.ruoyi.require.service.FeCalibrationScheduleService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * ä»ªå™¨è®¾å¤‡æ£€å®š/校准计划表 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-13 02:53:05
 */
@Service
public class FeCalibrationScheduleServiceImpl extends ServiceImpl<FeCalibrationScheduleMapper, FeCalibrationSchedule> implements FeCalibrationScheduleService {
    @Override
    public IPage<FeCalibrationSchedule> page(Page page, String instrumentName, String managementNumber) {
        IPage<FeCalibrationSchedule> ipage = this.baseMapper.ipage(page,instrumentName, managementNumber);
        return ipage;
    }
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeIlluminationDetectionAreaServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.require.mapper.FeIlluminationDetectionAreaMapper;
import com.ruoyi.require.pojo.FeIlluminationDetectionArea;
import com.ruoyi.require.service.FeIlluminationDetectionAreaService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-照度记录表-检测区域 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-07 04:16:28
 */
@Service
public class FeIlluminationDetectionAreaServiceImpl extends ServiceImpl<FeIlluminationDetectionAreaMapper, FeIlluminationDetectionArea> implements FeIlluminationDetectionAreaService {
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeIlluminationServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,135 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.data.Pictures;
import com.ruoyi.common.utils.DateImageUtil;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.framework.util.HackLoopTableRenderPolicy;
import com.ruoyi.system.mapper.UserMapper;
import com.ruoyi.require.dto.FeIlluminationDto;
import com.ruoyi.require.dto.FeIlluminationExportDto;
import com.ruoyi.require.mapper.FeIlluminationDetectionAreaMapper;
import com.ruoyi.require.mapper.FeIlluminationMapper;
import com.ruoyi.require.pojo.FeIllumination;
import com.ruoyi.require.pojo.FeIlluminationDetectionArea;
import com.ruoyi.require.service.FeIlluminationService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.HashMap;
import java.util.List;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-照度记录表 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-07 04:15:57
 */
@Service
public class FeIlluminationServiceImpl extends ServiceImpl<FeIlluminationMapper, FeIllumination> implements FeIlluminationService {
    @Resource
    private FeIlluminationDetectionAreaMapper feIlluminationDetectionAreaMapper;
    @Resource
    private UserMapper userMapper;
    @Value("${file.path}")
    private String imgUrl;
    @Override
    public IPage<FeIlluminationDto> getFeLightningProtection(Page page) {
        return baseMapper.getFeLightningProtection(page);
    }
    /**
     * å¯¼å‡ºç…§åº¦è®°å½•
     * @param intensityIlluminationId
     * @param response
     */
    @Override
    public void exportFeIllumination(Integer intensityIlluminationId, HttpServletResponse response) {
        FeIlluminationExportDto illuminationExportDto = baseMapper.selectFeIllumination(intensityIlluminationId);
        // æ£€æµ‹äºº
        String testerUrl = null;
        if (illuminationExportDto.getTesterId() != null) {
            testerUrl = userMapper.selectById(illuminationExportDto.getTesterId()).getSignatureUrl();
            if (StringUtils.isBlank(testerUrl)) {
                throw new ErrorException("找不到检测人的签名");
            }
        }
        // æ ¸æŸ¥äºº
        String checkerUrl = null;
        if (illuminationExportDto.getCheckerId() != null) {
            checkerUrl = userMapper.selectById(illuminationExportDto.getCheckerId()).getSignatureUrl();
            if (StringUtils.isBlank(checkerUrl)) {
                throw new ErrorException("找不到核查人的签名");
            }
        }
        // æŸ¥è¯¢è¯¦æƒ…
        List<FeIlluminationDetectionArea> feIlluminationDetectionAreas = feIlluminationDetectionAreaMapper.selectList(Wrappers.<FeIlluminationDetectionArea>lambdaQuery()
                .eq(FeIlluminationDetectionArea::getIntensityIlluminationId, intensityIlluminationId));
        for (int i = 0; i < feIlluminationDetectionAreas.size(); i++) {
            feIlluminationDetectionAreas.get(i).setIndex(i + 1);
        }
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/illumination.docx");
        Configure configure = Configure.builder()
                .bind("detectionAreaList", new HackLoopTableRenderPolicy())
                .build();
        String finalTesterUrl = testerUrl;
        String finalCheckerUrl = checkerUrl;
        // åˆ¤æ–­æ£€æµ‹æ—¥æœŸæ˜¯å¦ä¸ºç©º
        LocalDateTime localDateTime = null;
        if (illuminationExportDto.getTestDate() != null) {
            Instant instant = illuminationExportDto.getTestDate().toInstant();
            ZoneId zoneId = ZoneId.systemDefault();
            localDateTime = instant.atZone(zoneId).toLocalDateTime();
        }
        LocalDateTime finalLocalDateTime = localDateTime;
        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
                new HashMap<String, Object>() {{
                    put("illumination", illuminationExportDto);
                    put("detectionAreaList", feIlluminationDetectionAreas);
                    put("testerUrl", StringUtils.isNotBlank(finalTesterUrl) ? Pictures.ofLocal(imgUrl + "/" + finalTesterUrl).create() : null);
                    put("checkerUrl", StringUtils.isNotBlank(finalCheckerUrl) ? Pictures.ofLocal(imgUrl + "/" + finalCheckerUrl).create() : null);
                    put("testDateUrl", finalLocalDateTime != null ?
                            Pictures.ofStream(DateImageUtil.createDateImage(finalLocalDateTime)).create() : null);
                }});
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    "照明记录导出", "UTF-8");
            response.setHeader("Content-disposition",
                    "attachment;filename=" + fileName + ".docx");
            OutputStream os = response.getOutputStream();
            template.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        }
    }
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeLightningProtectionServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.require.excel.FeLightningProtectionExcel;
import com.ruoyi.require.mapper.FeLightningProtectionMapper;
import com.ruoyi.require.pojo.FeLightningProtection;
import com.ruoyi.require.service.FeLightningProtectionService;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-防雷检测 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-07 04:16:36
 */
@Service
public class FeLightningProtectionServiceImpl extends ServiceImpl<FeLightningProtectionMapper, FeLightningProtection> implements FeLightningProtectionService {
    @Override
    public List<FeLightningProtectionExcel> exportOfLightningProtectionDetection() {
        return baseMapper.exportOfLightningProtectionDetection();
    }
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeMeasuredQuantityServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.require.mapper.FeMeasuredQuantityMapper;
import com.ruoyi.require.pojo.FeMeasuredQuantity;
import com.ruoyi.require.service.FeMeasuredQuantityService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-电源稳定性-测定量 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-07 04:16:44
 */
@Service
public class FeMeasuredQuantityServiceImpl extends ServiceImpl<FeMeasuredQuantityMapper, FeMeasuredQuantity> implements FeMeasuredQuantityService {
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/FePowerStableServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,123 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.data.Pictures;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.framework.util.HackLoopTableRenderPolicy;
import com.ruoyi.system.mapper.UserMapper;
import com.ruoyi.require.dto.FePowerStableDto;
import com.ruoyi.require.dto.FePowerStableExportDto;
import com.ruoyi.require.mapper.FeMeasuredQuantityMapper;
import com.ruoyi.require.mapper.FePowerStableMapper;
import com.ruoyi.require.pojo.FeMeasuredQuantity;
import com.ruoyi.require.pojo.FePowerStable;
import com.ruoyi.require.service.FePowerStableService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-电源稳定性 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-07 04:16:52
 */
@Service
public class FePowerStableServiceImpl extends ServiceImpl<FePowerStableMapper, FePowerStable> implements FePowerStableService {
    @Resource
    private FeMeasuredQuantityMapper feMeasuredQuantityMapper;
    @Resource
    private UserMapper userMapper;
    @Value("${file.path}")
    private String imgUrl;
    @Override
    public IPage<FePowerStableDto> getLaboratoryFacilityPowerStablePage(Page page) {
        return baseMapper.getLaboratoryFacilityPowerStablePage(page);
    }
    @Override
    public Map<String, Objects> getCalibrationDate(Integer deviceId) {
        return baseMapper.getCalibrationDate(deviceId);
    }
    /**
     * å¯¼å‡ºç”µæºç¨³å®šæ€§
     * @param powerStableId
     * @param response
     */
    @Override
    public void exportFePowerStable(Integer powerStableId, HttpServletResponse response) {
        FePowerStableExportDto powerStable = baseMapper.selectPowerStable(powerStableId);
        // æ£€æµ‹äºº
        String testerUrl = null;
        if (powerStable.getTesterId() != null) {
            testerUrl = userMapper.selectById(powerStable.getTesterId()).getSignatureUrl();
            if (StringUtils.isBlank(testerUrl)) {
                throw new ErrorException("找不到检测人的签名");
            }
        }
        // æ ¸æŸ¥äºº
        String checkerUrl = null;
        if (powerStable.getCheckerId() != null) {
            checkerUrl = userMapper.selectById(powerStable.getCheckerId()).getSignatureUrl();
            if (StringUtils.isBlank(checkerUrl)) {
                throw new ErrorException("找不到核查人的签名");
            }
        }
        // æŸ¥è¯¢è¯¦æƒ…
        List<FeMeasuredQuantity> feMeasuredQuantities = feMeasuredQuantityMapper.selectList(Wrappers.<FeMeasuredQuantity>lambdaQuery()
                .eq(FeMeasuredQuantity::getPowerStableId, powerStableId));
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/power-stable.docx");
        Configure configure = Configure.builder()
                .bind("measuredQuantityList", new HackLoopTableRenderPolicy())
                .build();
        String finalTesterUrl = testerUrl;
        String finalCheckerUrl = checkerUrl;
        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
                new HashMap<String, Object>() {{
                    put("stable", powerStable);
                    put("measuredQuantityList", feMeasuredQuantities);
                    put("testerUrl", StringUtils.isNotBlank(finalTesterUrl) ? Pictures.ofLocal(imgUrl + "/" + finalTesterUrl).create() : null);
                    put("checkerUrl", StringUtils.isNotBlank(finalCheckerUrl) ? Pictures.ofLocal(imgUrl + "/" + finalCheckerUrl).create() : null);
                }});
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    "电源稳定性测试导出", "UTF-8");
            response.setHeader("Content-disposition",
                    "attachment;filename=" + fileName + ".docx");
            OutputStream os = response.getOutputStream();
            template.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        }
    }
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceAcceptanceInspectionServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.require.mapper.FeStandardSubstanceAcceptanceInspectionMapper;
import com.ruoyi.require.pojo.FeStandardSubstanceAcceptanceInspection;
import com.ruoyi.require.service.FeStandardSubstanceAcceptanceInspectionService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * éªŒæ”¶å¼€ç®±è®°å½• æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-14 03:30:09
 */
@Service
public class FeStandardSubstanceAcceptanceInspectionServiceImpl extends ServiceImpl<FeStandardSubstanceAcceptanceInspectionMapper, FeStandardSubstanceAcceptanceInspection> implements FeStandardSubstanceAcceptanceInspectionService {
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceAcceptanceServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,111 @@
package com.ruoyi.require.service.impl;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.require.dto.AcceptanceDto;
import com.ruoyi.require.mapper.FeStandardSubstanceAcceptanceInspectionMapper;
import com.ruoyi.require.mapper.FeStandardSubstanceAcceptanceMapper;
import com.ruoyi.require.mapper.FeStandardSubstanceMapper;
import com.ruoyi.require.pojo.FeStandardSubstance;
import com.ruoyi.require.pojo.FeStandardSubstanceAcceptance;
import com.ruoyi.require.pojo.FeStandardSubstanceAcceptanceInspection;
import com.ruoyi.require.service.FeStandardSubstanceAcceptanceService;
import com.ruoyi.require.vo.AcceptanceDetailsVo;
import com.ruoyi.require.vo.AcceptanceVo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.List;
/**
 * <p>
 * æ ‡å‡†ç‰©è´¨éªŒæ”¶ æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-14 03:29:41
 */
@Service
public class FeStandardSubstanceAcceptanceServiceImpl extends ServiceImpl<FeStandardSubstanceAcceptanceMapper, FeStandardSubstanceAcceptance> implements FeStandardSubstanceAcceptanceService {
    @Resource
    private FeStandardSubstanceAcceptanceInspectionMapper feStandardSubstanceAcceptanceInspectionMapper;
    @Resource
    private FeStandardSubstanceMapper feStandardSubstanceMapper;
    @Override
    public void addAcceptance(AcceptanceDto dto) {
        FeStandardSubstanceAcceptance acceptance = dto.getAcceptance();
        List<FeStandardSubstanceAcceptanceInspection> list = dto.getList();
        this.baseMapper.insert(acceptance);
        list.forEach(v->{
            v.setAcceptanceId(acceptance.getId());
            feStandardSubstanceAcceptanceInspectionMapper.insert(v);
        });
    }
    @Override
    public IPage<AcceptanceVo> getPageAcceptance(Page page, String name) {
        return this.baseMapper.getPageAcceptance(page,name);
    }
    @Override
    public AcceptanceDetailsVo getAcceptanceDetails(Integer id) {
        FeStandardSubstanceAcceptance acceptance = this.baseMapper.selectById(id);
        FeStandardSubstance substance = feStandardSubstanceMapper.selectById(acceptance.getSubstanceId());
        QueryWrapper<FeStandardSubstanceAcceptanceInspection> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("acceptance_id",id);
        List<FeStandardSubstanceAcceptanceInspection> list = feStandardSubstanceAcceptanceInspectionMapper.selectList(queryWrapper);
        AcceptanceDetailsVo vo = new AcceptanceDetailsVo();
        vo.setSubstance(substance);
        vo.setAcceptance(acceptance);
        vo.setList(list);
        return vo;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Integer deleteAcceptance(Integer id) {
        feStandardSubstanceAcceptanceInspectionMapper.delete(new QueryWrapper<FeStandardSubstanceAcceptanceInspection>()
                .lambda().eq(FeStandardSubstanceAcceptanceInspection::getAcceptanceId,id));
        return this.baseMapper.deleteById(id);
    }
    @Override
    public void exportFeStandardSubstanceAcceptance(HttpServletResponse response) {
        List<FeStandardSubstanceAcceptance> list = this.list();
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("UTF-8");
        // è¿™é‡ŒURLEncoder.encode可以防止中文乱码 å½“ç„¶å’Œeasyexcel没有关系
        try {
            String fileName = URLEncoder.encode("标准物质验收", "UTF-8");
            response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
            // æ–°å»ºExcelWriter
            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
            WriteSheet writeSheet = EasyExcel.writerSheet(0, "标准物质验收").head(FeStandardSubstanceAcceptance.class).build();
            excelWriter.write(list, writeSheet);
            // å…³é—­æµ
            excelWriter.finish();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        }
    }
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceRecordServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,79 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.require.mapper.FeStandardSubstanceMapper;
import com.ruoyi.require.mapper.FeStandardSubstanceRecordMapper;
import com.ruoyi.require.pojo.FeStandardSubstance;
import com.ruoyi.require.pojo.FeStandardSubstanceRecord;
import com.ruoyi.require.service.FeStandardSubstanceRecordService;
import com.ruoyi.require.vo.SubstanceRecordVo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
/**
 * <p>
 * æ ‡å‡†ç‰©è´¨æ¸…单借用归还记录表 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-14 01:49:11
 */
@Transactional(rollbackFor = Exception.class)
@Service
public class FeStandardSubstanceRecordServiceImpl extends ServiceImpl<FeStandardSubstanceRecordMapper, FeStandardSubstanceRecord> implements FeStandardSubstanceRecordService {
    @Resource
    private FeStandardSubstanceMapper feStandardSubstanceMapper;
    @Override
    public void borrowSubstance(FeStandardSubstanceRecord feStandardSubstanceRecord) {
        FeStandardSubstance standardSubstance = feStandardSubstanceMapper.selectOne(Wrappers.<FeStandardSubstance>lambdaQuery()
                .eq(FeStandardSubstance::getId, feStandardSubstanceRecord.getSubstanceId())
                .eq(FeStandardSubstance::getState, 0)
                .last("limit 1"));
        if (ObjectUtils.isEmpty(standardSubstance)){
            throw new ErrorException("该物质已被借出!");
        }
        this.baseMapper.insert(feStandardSubstanceRecord);
        standardSubstance.setState(1);
        feStandardSubstanceMapper.updateById(standardSubstance);
    }
    @Override
    public void returnSubstance(FeStandardSubstanceRecord feStandardSubstanceRecord) {
        FeStandardSubstance standardSubstance = feStandardSubstanceMapper.selectOne(Wrappers.<FeStandardSubstance>lambdaQuery()
                .eq(FeStandardSubstance::getId, feStandardSubstanceRecord.getSubstanceId())
                .eq(FeStandardSubstance::getState, 1));
        if (ObjectUtils.isEmpty(standardSubstance)){
            throw new ErrorException("该物质未被领用,无需归还!");
        }
        standardSubstance.setState(0);
        feStandardSubstanceMapper.updateById(standardSubstance);
        System.out.println(feStandardSubstanceRecord);
        baseMapper.update(feStandardSubstanceRecord, Wrappers.<FeStandardSubstanceRecord>lambdaUpdate()
                .eq(FeStandardSubstanceRecord::getSubstanceId, feStandardSubstanceRecord.getSubstanceId())
                .eq(FeStandardSubstanceRecord::getStatus, 0));
    }
    @Override
    public List<FeStandardSubstanceRecord> getSubstanceRecord(Integer id) {
        QueryWrapper<FeStandardSubstanceRecord> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("substance_id",id);
        List<FeStandardSubstanceRecord> list = this.baseMapper.selectList(queryWrapper);
        return list;
    }
    @Override
    public IPage<SubstanceRecordVo> getPage(Page page, SubstanceRecordVo vo) {
        return this.baseMapper.getPage(page,vo);
    }
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.require.mapper.FeStandardSubstanceMapper;
import com.ruoyi.require.pojo.FeStandardSubstance;
import com.ruoyi.require.service.FeStandardSubstanceService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * æ ‡å‡†ç‰©è´¨æ¸…单 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-13 03:58:59
 */
@Service
public class FeStandardSubstanceServiceImpl extends ServiceImpl<FeStandardSubstanceMapper, FeStandardSubstance> implements FeStandardSubstanceService {
    @Override
    public IPage<FeStandardSubstance> page(Page page,FeStandardSubstance feStandardSubstance) {
        return this.baseMapper.getPage(page,feStandardSubstance);
    }
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeTempHumDateServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,86 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.ruoyi.framework.util.HackLoopTableRenderPolicy;
import com.ruoyi.require.dto.FeTempHumDateDto;
import com.ruoyi.require.dto.FeTempHumRecordDto;
import com.ruoyi.require.mapper.FeTempHumDateMapper;
import com.ruoyi.require.pojo.FeTempHumDate;
import com.ruoyi.require.service.FeTempHumDateService;
import com.ruoyi.require.service.FeTempHumRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-温湿度 åŒºåŸŸ -父 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-09 11:02:18
 */
@Service
public class FeTempHumDateServiceImpl extends ServiceImpl<FeTempHumDateMapper, FeTempHumDate> implements FeTempHumDateService {
    @Autowired
    private FeTempHumRecordService feTempHumRecordService;
    @Override
    public IPage<FeTempHumDateDto> getFeTempHumDate(Page page) {
        return baseMapper.getFeTempHumDate(page);
    }
    @Override
    public void exportTemperatureAndHumidityRecords(Integer dateId, HttpServletResponse response) {
        FeTempHumDate feTempHumDate = baseMapper.selectById(dateId);
        IPage<FeTempHumRecordDto> list = feTempHumRecordService.getFeTempHumRecordPage(new Page<>(1, -1), dateId);
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        list.getRecords().forEach(i -> {
            i.setMonth(i.getMorningTestTime().getMonth().getValue());
            i.setMorningTestTimeStr(i.getMorningTestTime().format(formatter));
            i.setAfternoonTimeStr(i.getAfternoonTime().format(formatter));
        });
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/temp_hum_date.docx");
        Configure configure = Configure.builder()
                .bind("recordList", new HackLoopTableRenderPolicy())
                .build();
        HashMap<String, Object> map = new HashMap<>();
        map.put("testAreaName", feTempHumDate.getTestAreaName());
        map.put("experimentalYear", feTempHumDate.getMonthDate().getYear());
        map.put("experimentalMonth", feTempHumDate.getMonthDate().getMonth().getValue());
        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
                new HashMap<String, Object>() {{
                    put("feTempHum", map);
                    put("recordList", list.getRecords());
                }});
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    "温湿度记录导出", "UTF-8");
            response.setHeader("Content-disposition",
                    "attachment;filename=" + fileName + ".docx");
            OutputStream os = response.getOutputStream();
            template.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        }
    }
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeTempHumRecordServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.require.dto.FeTempHumRecordDto;
import com.ruoyi.require.mapper.FeTempHumRecordMapper;
import com.ruoyi.require.pojo.FeTempHumRecord;
import com.ruoyi.require.service.FeTempHumRecordService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-温湿度记录 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-07 04:28:52
 */
@Service
public class FeTempHumRecordServiceImpl extends ServiceImpl<FeTempHumRecordMapper, FeTempHumRecord> implements FeTempHumRecordService {
    @Override
    public IPage<FeTempHumRecordDto> getFeTempHumRecordPage(Page page, Integer dateId) {
        return baseMapper.getFeTempHumRecordPage(page, dateId);
    }
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/ForeignRegisterServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,101 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.data.Pictures;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.framework.util.HackLoopTableRenderPolicy;
import com.ruoyi.system.mapper.UserMapper;
import com.ruoyi.require.dto.ForeignRegisterDto;
import com.ruoyi.require.mapper.ForeignRegisterMapper;
import com.ruoyi.require.pojo.ForeignRegister;
import com.ruoyi.require.service.ForeignRegisterService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
/**
 * <p>
 * å¤–来人员登记 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-19 07:17:35
 */
@Service
public class ForeignRegisterServiceImpl extends ServiceImpl<ForeignRegisterMapper, ForeignRegister> implements ForeignRegisterService {
    @Resource
    private UserMapper userMapper;
    @Value("${file.path}")
    private String imgUrl;
    /**
     * å¤–来人员登记分页查询
     * @param page
     * @param foreignRegister
     * @return
     */
    @Override
    public IPage<ForeignRegisterDto> pageForeignRegister(Page page, ForeignRegisterDto foreignRegister) {
        String beginDate = foreignRegister.getBeginDate();
        String endDate = foreignRegister.getEndDate();
        foreignRegister.setBeginDate(null);
        foreignRegister.setEndDate(null);
        return baseMapper.pageForeignRegister(page, QueryWrappers.queryWrappers(foreignRegister), beginDate, endDate);
    }
    /**
     * å¯¼å‡ºå¤–来人员登记
     * @param foreignRegister
     */
    @Override
    public void exportForeignRegister(ForeignRegisterDto foreignRegister, HttpServletResponse response) {
        String beginDate = foreignRegister.getBeginDate();
        String endDate = foreignRegister.getEndDate();
        foreignRegister.setBeginDate(null);
        foreignRegister.setEndDate(null);
        List<ForeignRegisterDto> register = baseMapper.getForeignRegisterList(QueryWrappers.queryWrappers(foreignRegister), beginDate, endDate);
        for (ForeignRegisterDto foreignRegisterDto : register) {
            // æ·»åŠ ååŒäººå’Œæ‰¹å‡†äººç­¾å
            foreignRegisterDto.setAccompanyingRender(StringUtils.isNotBlank(foreignRegisterDto.getAccompanyingUrl())
                    ? Pictures.ofLocal(imgUrl + "/" + foreignRegisterDto.getAccompanyingUrl()).create() : null);
            foreignRegisterDto.setApproveRender(StringUtils.isNotBlank(foreignRegisterDto.getApproveUrl())
                    ? Pictures.ofLocal(imgUrl + "/" + foreignRegisterDto.getApproveUrl()).create() : null);
        }
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/foreign-register.docx");
        Configure configure = Configure.builder()
                .bind("register", new HackLoopTableRenderPolicy())
                .build();
        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
                new HashMap<String, Object>() {{
                    put("register", register);
                }});
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    "外来人员登记", "UTF-8");
            response.setHeader("Content-disposition",
                    "attachment;filename=" + fileName + ".docx");
            OutputStream os = response.getOutputStream();
            template.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        }
    }
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/IncidentAcceptanceCheckServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.require.mapper.IncidentAcceptanceCheckMapper;
import com.ruoyi.require.pojo.IncidentAcceptanceCheck;
import com.ruoyi.require.service.IncidentAcceptanceCheckService;
import org.springframework.stereotype.Service;
@Service
public class IncidentAcceptanceCheckServiceImpl extends ServiceImpl<IncidentAcceptanceCheckMapper, IncidentAcceptanceCheck> implements IncidentAcceptanceCheckService {
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/IncidentFileServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.require.mapper.IncidentFileMapper;
import com.ruoyi.require.pojo.IncidentFile;
import com.ruoyi.require.service.IncidentFileService;
import org.springframework.stereotype.Service;
@Service
public class IncidentFileServiceImpl extends ServiceImpl<IncidentFileMapper, IncidentFile> implements IncidentFileService {
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/IncidentInstallServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.require.mapper.IncidentInstallMapper;
import com.ruoyi.require.pojo.IncidentInstall;
import com.ruoyi.require.service.IncidentInstallService;
import org.springframework.stereotype.Service;
@Service
public class IncidentInstallServiceImpl extends ServiceImpl<IncidentInstallMapper, IncidentInstall> implements IncidentInstallService {
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/IncidentReportServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,116 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.numgen.NumberGenerator;
import com.ruoyi.require.dto.IncidentReportAddDto;
import com.ruoyi.require.excel.IncidentReportExport;
import com.ruoyi.require.mapper.IncidentReportMapper;
import com.ruoyi.require.pojo.*;
import com.ruoyi.require.service.*;
import com.ruoyi.system.mapper.UserMapper;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
/**
 * <p>
 * è®¾å¤‡éªŒæ”¶æ·»åŠ éªŒæ”¶å­—æ®µè¡¨ æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-09-19 03:54:49
 */
@Service
@AllArgsConstructor
@Transactional(rollbackFor = Exception.class)
public class IncidentReportServiceImpl extends ServiceImpl<IncidentReportMapper, IncidentReport> implements IncidentReportService {
    @Autowired
    private UserMapper userMapper;
    private IncidentSparePartsService incidentSparePartsService;
    private IncidentFileService incidentFileService;
    private IncidentInstallService incidentInstallService;
    private IncidentAcceptanceCheckService incidentAcceptanceCheckService;
    private final NumberGenerator<IncidentReport> numberGenerator;
    @Override
    public void saveIncidentReportData(IncidentReportAddDto incidentReportAddDto) {
        if (ObjectUtils.isEmpty(incidentReportAddDto.getProcessNumber())) {
            String year = new SimpleDateFormat("yy", Locale.CHINESE).format(new Date());
            String month = new SimpleDateFormat("MM", Locale.CHINESE).format(new Date());
            String processNumber = numberGenerator.generateNumberWithPrefix(3, "DG-TC-07FM " + month + "-" + year + month, IncidentReport::getProcessNumber);
            incidentReportAddDto.setProcessNumber(processNumber);
        }
        this.saveOrUpdate(incidentReportAddDto);
        // å¤‡ä»¶ç¡®è®¤List
        if (ObjectUtils.isNotEmpty(incidentReportAddDto.getSparePartsConfirmationList())) {
            incidentReportAddDto.getSparePartsConfirmationList().forEach(i -> i.setIncidentId(incidentReportAddDto.getId()));
            incidentSparePartsService.saveOrUpdateBatch(incidentReportAddDto.getSparePartsConfirmationList());
        }
        // æ–‡ä»¶ç¡®è®¤List
        if (ObjectUtils.isNotEmpty(incidentReportAddDto.getFileClassConfirmationList())) {
            incidentReportAddDto.getFileClassConfirmationList().forEach(i -> i.setIncidentId(incidentReportAddDto.getId()));
            incidentFileService.saveOrUpdateBatch(incidentReportAddDto.getFileClassConfirmationList());
        }
        // å®‰è£…验收记录
        if (ObjectUtils.isNotEmpty(incidentReportAddDto.getInstallationAcceptanceRecordList())) {
            incidentReportAddDto.getInstallationAcceptanceRecordList().forEach(i -> i.setIncidentId(incidentReportAddDto.getId()));
            incidentInstallService.saveOrUpdateBatch(incidentReportAddDto.getInstallationAcceptanceRecordList());
        }
        // éªŒæ”¶æ ¸æŸ¥è®°å½•
        if (ObjectUtils.isNotEmpty(incidentReportAddDto.getAcceptanceCheckRecordList())) {
            incidentReportAddDto.getAcceptanceCheckRecordList().forEach(i -> i.setIncidentId(incidentReportAddDto.getId()));
            incidentAcceptanceCheckService.saveOrUpdateBatch(incidentReportAddDto.getAcceptanceCheckRecordList());
        }
    }
    @Override
    public IPage<IncidentReportAddDto> getByDeviceId(Integer deviceId, Page page, String processNumber) {
        return baseMapper.getByDeviceId(page, deviceId, processNumber);
    }
    @Override
    public void deleteIncidentReport(Integer id) {
        baseMapper.deleteById(id);
        incidentSparePartsService.remove(Wrappers.<IncidentSpareParts>lambdaQuery().eq(IncidentSpareParts::getIncidentId, id));
        incidentFileService.remove(Wrappers.<IncidentFile>lambdaQuery().eq(IncidentFile::getIncidentId, id));
        incidentInstallService.remove(Wrappers.<IncidentInstall>lambdaQuery().eq(IncidentInstall::getIncidentId, id));
        incidentAcceptanceCheckService.remove(Wrappers.<IncidentAcceptanceCheck>lambdaQuery().eq(IncidentAcceptanceCheck::getIncidentId, id));
    }
    @Override
    public IncidentReportAddDto getShowIncidentReport(Integer id) {
        return baseMapper.getShowIncidentReport(id);
    }
    @Override
    public void deleteIncidentReportAll(Integer sparePartsId, Integer fileId, Integer installId, Integer acceptanceCheckId) {
        if (ObjectUtils.isNotEmpty(sparePartsId)) {
            incidentSparePartsService.removeById(sparePartsId);
        }
        if (ObjectUtils.isNotEmpty(fileId)) {
            incidentFileService.removeById(fileId);
        }
        if (ObjectUtils.isNotEmpty(installId)) {
            incidentInstallService.removeById(installId);
        }
        if (ObjectUtils.isNotEmpty(acceptanceCheckId)) {
            incidentAcceptanceCheckService.removeById(acceptanceCheckId);
        }
    }
    @Override
    public List<IncidentReportExport> incidentReportExport(Integer deviceId) {
        return baseMapper.incidentReportExport(deviceId);
    }
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/IncidentSparePartsServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.require.mapper.IncidentSparePartsMapper;
import com.ruoyi.require.pojo.IncidentSpareParts;
import com.ruoyi.require.service.IncidentSparePartsService;
import org.springframework.stereotype.Service;
@Service
public class IncidentSparePartsServiceImpl extends ServiceImpl<IncidentSparePartsMapper, IncidentSpareParts> implements IncidentSparePartsService {
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/InformationNotificationServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,95 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.require.dto.InformationNotificationDto;
import com.ruoyi.require.mapper.InformationNotificationMapper;
import com.ruoyi.require.pojo.InformationNotification;
import com.ruoyi.require.service.InformationNotificationService;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * <p>
 * æ¶ˆæ¯é€šçŸ¥ æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-04-23 02:14:30
 */
@Service
public class InformationNotificationServiceImpl extends ServiceImpl<InformationNotificationMapper, InformationNotification> implements InformationNotificationService {
    @Override
    public IPage<InformationNotificationDto> getPage(Page page, String messageType) {
        return baseMapper.getPage(page, messageType, SecurityUtils.getUserId().intValue());
    }
    @Override
    public void markAllInformationReadOrDeleteAllReadMessages(Boolean isMarkAllInformationRead) {
        if (isMarkAllInformationRead) {
            baseMapper.update(new InformationNotification(), Wrappers.<InformationNotification>lambdaUpdate()
                    .set(InformationNotification::getViewStatus, true)
                    .eq(InformationNotification::getConsigneeId, SecurityUtils.getUserId()));
        } else {
            baseMapper.delete(Wrappers.<InformationNotification>lambdaUpdate()
                    .eq(InformationNotification::getConsigneeId, SecurityUtils.getUserId())
                    .eq(InformationNotification::getViewStatus, true));
        }
    }
    @Override
    public Boolean checkForUnreadData() {
        Map<String, Integer> map1 = null;
        try {
            List<InformationNotification> informationNotifications = baseMapper.selectList(
                    Wrappers.<InformationNotification>lambdaQuery()
                            .eq(InformationNotification::getConsigneeId, SecurityUtils.getUserId())
                            .eq(InformationNotification::getViewStatus, false)
                            .last("limit 1"));
            return !informationNotifications.isEmpty();
        } catch (Exception e) {
        }
        return false;
    }
    @Override
    public void triggerModificationStatusToRead(Integer id) {
        baseMapper.update(new InformationNotification(), Wrappers.<InformationNotification>lambdaUpdate()
                .eq(InformationNotification::getId, id)
                .set(InformationNotification::getViewStatus, true));
    }
    @Override
    public int addInformationNotification(InformationNotification informationNotification) {
        return baseMapper.insert(informationNotification);
    }
    @Override
    public Map<String, Object> getNumberFourTypesMessagesHomePage() {
        Map<String, Object> map = new HashMap<>();
        Long totalNumberOfMessages = baseMapper.selectCount(Wrappers.<InformationNotification>lambdaQuery()
                .eq(InformationNotification::getConsigneeId, SecurityUtils.getUserId()));
        Long totalNumberOfReadMessages = baseMapper.selectCount(Wrappers.<InformationNotification>lambdaQuery()
                .eq(InformationNotification::getConsigneeId, SecurityUtils.getUserId())
                .eq(InformationNotification::getViewStatus, true));
        LocalDate today = LocalDate.now();
        LocalDate sevenDaysAgo = today.minusDays(7);
        Long totalNumberOfMessagesInThePastSevenDays = baseMapper.selectCount(Wrappers.<InformationNotification>lambdaQuery()
                .eq(InformationNotification::getConsigneeId, SecurityUtils.getUserId())
                .between(InformationNotification::getCreateTime, today, sevenDaysAgo));
        long remainingToDo = totalNumberOfMessages - totalNumberOfReadMessages;
        map.put("totalNumberOfMessages", totalNumberOfMessages);
        map.put("remainingToDo", remainingToDo);
        map.put("totalNumberOfReadMessages", totalNumberOfReadMessages);
        map.put("totalNumberOfMessagesInThePastSevenDays", totalNumberOfMessagesInThePastSevenDays);
        return map;
    }
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/InsOrderPlanServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,2784 @@
package com.ruoyi.require.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.UUID;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.metadata.style.WriteFont;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.config.ConfigureBuilder;
import com.deepoove.poi.data.*;
import com.deepoove.poi.data.style.Style;
import com.deepoove.poi.util.TableTools;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ruoyi.basic.mapper.StandardProductListMapper;
import com.ruoyi.basic.service.StandardTemplateService;
import com.ruoyi.basic.vo.StandardProductVO;
import com.ruoyi.common.constant.ExchangeConstants;
import com.ruoyi.common.constant.RouterKeyConstants;
import com.ruoyi.common.core.domain.entity.Custom;
import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.common.utils.DictUtils;
import com.ruoyi.common.utils.JackSonUtil;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.framework.util.MatrixToImageWriter;
import com.ruoyi.framework.util.RedisUtil;
import com.ruoyi.inspect.dto.*;
import com.ruoyi.inspect.mapper.*;
import com.ruoyi.inspect.pojo.*;
import com.ruoyi.inspect.service.InsBushingService;
import com.ruoyi.inspect.service.InsOrderService;
import com.ruoyi.inspect.service.InsUnPassService;
import com.ruoyi.inspect.service.impl.InsOrderServiceImpl;
import com.ruoyi.framework.util.SheetWriteHandlerUtil;
import com.ruoyi.inspect.vo.*;
import com.ruoyi.performance.mapper.AuxiliaryOutputWorkingHoursMapper;
import com.ruoyi.performance.mapper.PerformanceShiftMapper;
import com.ruoyi.performance.mapper.ShiftTimeMapper;
import com.ruoyi.require.handler.*;
import com.ruoyi.require.pojo.InformationNotification;
import com.ruoyi.require.service.InformationNotificationService;
import com.ruoyi.require.service.InsOrderPlanService;
import com.ruoyi.system.mapper.CustomMapper;
import com.ruoyi.system.mapper.UserMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.util.Strings;
import org.apache.poi.openxml4j.util.ZipSecureFile;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.xwpf.usermodel.*;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.locks.ReentrantLock;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
/**
 * æ£€éªŒä»»åŠ¡-业务实现层
 */
@Service
@Slf4j
public class InsOrderPlanServiceImpl extends ServiceImpl<InsOrderMapper, InsOrder> implements InsOrderPlanService {
    // æŠ¥å‘Šæ‰«ç è·¯å¾„
    @Value("${phoneQrCode}")
    private String phoneQrCode;
    @Resource
    private InsReportServiceImpl insReportService;
    @Resource
    private InsSampleMapper insSampleMapper;
    @Resource
    private InsSampleUserMapper insSampleUserMapper;
    @Resource
    private InsOrderMapper insOrderMapper;
    @Resource
    private InsOrderService insOrderService;
    @Resource
    private InsOrderServiceImpl insOrderServiceImpl;
    @Resource
    private StandardTemplateService standardTemplateService;
    @Resource
    private InsOrderStateMapper insOrderStateMapper;
    @Resource
    private InsProductMapper insProductMapper;
    @Resource
    private ShiftTimeMapper shiftTimeMapper;
    @Resource
    private PerformanceShiftMapper performanceShiftMapper;
    @Resource
    private StandardProductListMapper standardProductListMapper;
    @Value("${wordUrl}")
    private String wordUrl;
    @Value("${twoCode}")
    private String twoCode;
    @Resource
    private InsReportMapper insReportMapper;
    @Resource
    private InsProductResultMapper insProductResultMapper;
    @Resource
    private InsProductUserMapper insProductUserMapper;
    @Resource
    private InsUnPassService insUnPassService;
    @Resource
    AuxiliaryOutputWorkingHoursMapper auxiliaryOutputWorkingHoursMapper;
    @Resource
    private InformationNotificationService informationNotificationService;
    @Resource
    private UserMapper userMapper;
    @Resource
    private CustomMapper customMapper;
    @Value("${file.path}")
    private String imgUrl;
    @Resource
    private InsBushingService insBushingService;
    @Resource
    private InsBushingMapper insBushingMapper;
    @Resource
    private InsFiberMapper insFiberMapper;
    @Resource
    private InsFibersMapper insFibersMapper;
    @Resource
    private InsOrderFileMapper insOrderFileMapper;
    @Resource
    private InsReportApproveConfigMapper insReportApproveConfigMapper;
    @Autowired
    private RabbitTemplate rabbitTemplate;
    private ReentrantLock lock = new ReentrantLock();
    @Resource
    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
    @Override
    public void exportInsOrderPlanResult(Map<String, Object> data, HttpServletResponse response) {
        List<Map<String,Object>> dataList = new ArrayList<>();
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            Object o = getTabHeader(data.get("sonLaboratory").toString(), data.get("samples").toString()).get("tableHeader");// èŽ·å–åŠ¨æ€è¡¨å¤´
            List<Map<String, Object>>  tableHeader = objectMapper.readValue(JSONUtil.toJsonStr(o), new TypeReference<List<Map<String, Object>>>() {
            });// è¡¨å¤´æ•°æ®
            Map<String, Object> table = objectMapper.readValue(JSONUtil.toJsonStr(data.get("trendsTable")), new TypeReference<Map<String, Object>>() {
            });
            List<Map<String, Object>> trendsTable = getInsOrderPlanList(table); // è¡¨æ ¼æ•°æ®
            for (Map<String, Object> trend : trendsTable) {
                Map<String, Object> addMap = new HashMap<>();
                addMap.put("委托单号", trend.get("entrustCode"));
                addMap.put("样品编号", trend.get("sampleCode"));
                addMap.put("管色标", trend.get("bushing"));
                addMap.put("光纤带色标", trend.get("fibers"));
                addMap.put("光纤色标", trend.get("fiber"));
                addMap.put("检验项目分类", trend.get("inspectionItem"));
                addMap.put("创建人", trend.get("userName"));
                addMap.put("检测时间", trend.get("insTime"));
                addMap.put("下发时间", trend.get("sendTime"));
                for (Map<String, Object> map : tableHeader) {
                    if(Objects.isNull(trend.get(map.get("prop").toString())) || Objects.equals(trend.get(map.get("prop").toString()),"null")) {
                        addMap.put(map.get("label").toString(), "");
                    }else {
                        addMap.put(map.get("label").toString(), trend.get(map.get("prop").toString()));
                    }
                }
                dataList.add(addMap);
            }
            List<List<String>> head = head(tableHeader);
            response.setContentType("application/vnd.ms-excel");
            response.setCharacterEncoding("UTF-8");
            String fileName = URLEncoder.encode("检验结果", "UTF-8");
            response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
            HorizontalCellStyleStrategy horizontalCellStyleStrategy =
                    new HorizontalCellStyleStrategy(getHeadStyle((short) 12),new WriteCellStyle());
            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream())
                    .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
                    .registerWriteHandler(new SheetWriteHandlerUtil(data.get("samples").toString(),head.size()))
                    .useDefaultStyle(true).relativeHeadRowIndex(1)
                    .registerWriteHandler(horizontalCellStyleStrategy)
                    .build();
            WriteSheet mainSheet = EasyExcel.writerSheet("Sheet0").head(head).build();
            excelWriter.write(dataList(head,dataList), mainSheet);
            // å…³é—­æµ
            excelWriter.finish();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    /**
     * åŠ¨æ€è¡¨å¤´
     * @param tableHeader
     * @return
     */
    private List<List<String>> head(List<Map<String, Object>>  tableHeader) {
        List<List<String>> list = new ArrayList<>();
        List<String> head0 = new ArrayList<>();
        head0.add("委托单号");
        List<String> head1 = new ArrayList<>();
        head1.add("样品编号");
        List<String> head2 = new ArrayList<>();
        head2.add("检验项目分类");
        List<String> head3 = new ArrayList<>();
        head3.add("创建人");
        List<String> head4 = new ArrayList<>();
        head4.add("检测时间");
        List<String> head5 = new ArrayList<>();
        head5.add("下发时间");
        List<String> head6 = new ArrayList<>();
        head6.add("管色标");
        List<String> head7 = new ArrayList<>();
        head7.add("光纤带色标");
        List<String> head8 = new ArrayList<>();
        head8.add("光纤色标");
        list.add(head0);
        list.add(head1);
        list.add(head6);
        list.add(head7);
        list.add(head8);
        list.add(head2);
        list.add(head3);
        list.add(head4);
        list.add(head5);
        for (Map<String, Object> map : tableHeader) {
            List<String> head = new ArrayList<>();
            head.add(map.get("label").toString());
            list.add(head);
        }
        return list.stream().distinct().collect(Collectors.toList());
    }
    /**
     * excel导出数据
     * @param head
     * @param dataList
     * @return
     */
    private List<List<Object>> dataList(List<List<String>> head,List<Map<String,Object>> dataList) {
        List<List<Object>> list = new ArrayList<>();
        for(Map<String, Object> map : dataList) {
            List<Object> addList = new ArrayList<>();
            for(List<String> k : head) {
                if(map.containsKey(k.get(0))) {
                    addList.add(map.get(k.get(0)));
                }
            }
            list.add(addList);
        }
        return list;
    }
    /**
     * å¤´çš„ç­–ç•¥
     * @return
     */
    public  WriteCellStyle getHeadStyle(Short size){
        // å¤´çš„ç­–ç•¥
        WriteCellStyle headWriteCellStyle = new WriteCellStyle();
        // èƒŒæ™¯é¢œè‰²
        headWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
        headWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
        // å­—体
        WriteFont headWriteFont = new WriteFont();
        headWriteFont.setFontName("黑体");//设置字体名字
        headWriteFont.setFontHeightInPoints(size);//设置字体大小
        headWriteFont.setBold(true);//字体加粗
        headWriteCellStyle.setWriteFont(headWriteFont); //在样式用应用设置的字体;
        return headWriteCellStyle;
    }
    @Override
    public List<Map<String, Object>> getInsOrderPlanList(Map<String,Object> data) {
        String sampleType = data.get("sampleType").toString();
        String sonLaboratory = data.get("sonLaboratory").toString();
        String entrustCode = data.get("entrustCode").toString();
        Integer createUser = null;
        String name = "";
        if(StringUtils.isNotBlank(data.get("createUser").toString())) {
             createUser = Integer.parseInt(data.get("createUser").toString());
             name = userMapper.selectById(createUser).getName();
        }
        String sampleCode = data.get("sampleCode").toString();
        String startTime = "";
        String endTime = "";
        List<Map<String, Object>> maps = new ArrayList<>();
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            if(StringUtils.isNotBlank(data.get("insTime").toString()) && !Objects.isNull(data.get("insTime"))) {
                List insTime = objectMapper.readValue(JSONUtil.toJsonStr(data.get("insTime")), List.class);
                startTime = insTime.get(0).toString();
                endTime = insTime.get(1).toString();
            }
            // è¡¨å¤´ä¿¡æ¯
            List<Map<String, Object>> headerS = objectMapper.readValue(JSONUtil.toJsonStr(data.get("headerS")), new TypeReference<List<Map<String, Object>>>() {
            });
            // åˆ¤æ–­æ˜¯å¦æ˜¯æ¸©åº¦å¾ªçޝ
            if(sampleType.equals("温度循环")) {
                List<ExportInsProductVO> insOrderTemList = insOrderMapper.getInsOrderTemList(entrustCode, sampleCode, startTime, endTime,name);
                List<TemperatureCycling> temList = insOrderServiceImpl.getTemList(insOrderTemList);
                for (TemperatureCycling map : temList) {
                    Map<String, Object> resultMap = new HashMap<>();
                    resultMap.put("entrustCode", map.getEntrustCode()); //委托单号
                    resultMap.put("sampleCode", map.getSampleCode()); //样品编号
                    resultMap.put("bushing", map.getBushColor()); //套管
                    resultMap.put("fiber", map.getColor()); //光纤
                    resultMap.put("fibers", map.getCode()); //光纤带
                    resultMap.put("userName", map.getCheckName()); //检验人
                    resultMap.put("insTime", map.getInsTime()); //检测时间
                    resultMap.put("sendTime", map.getSendTime()); //下发时间
                    resultMap.put("inspectionItem", map.getSample()); //检验项目
                    //温度循环子项
                    resultMap.put("inspectionItems", map.getInspectionItem());
                    resultMap.put("inspectionItemSubclass", map.getInspectionItemSubclass());
                    resultMap.put("attenuationCoefficient1310", map.getAttenuationCoefficient1310());
                    resultMap.put("attenuationDifference1", map.getAttenuationDifference1());
                    resultMap.put("attenuationDifference2", map.getAttenuationDifference2());
                    resultMap.put("attenuationCoefficient1625", map.getAttenuationCoefficient1625());
                    resultMap.put("attenuationDifference3", map.getAttenuationDifference3());
                    resultMap.put("attenuationCoefficient1383", map.getAttenuationCoefficient1383());
                    resultMap.put("attenuationDifference4", map.getAttenuationDifference4());
                    resultMap.put("attenuationCoefficient1490", map.getAttenuationCoefficient1490());
                    resultMap.put("attenuationDifference5", map.getAttenuationDifference5());
                    resultMap.put("attenuationDifferenceMax", map.getAttenuationDifferenceMax());
                    resultMap.put("insResult", map.getInsResult());
                    maps.add(resultMap);
                }
            }
            else {
                List<Map<String, Object>> insOrderPlanList = baseMapper.getInsOrderPlanList(sonLaboratory, entrustCode, sampleCode, createUser, startTime, endTime,sampleType);
                for (Map<String, Object> map : insOrderPlanList) {
                    Map<String, Object> resultMap = new HashMap<>();
                    resultMap.put("entrustCode", map.get("entrustCode")); //委托单号
                    resultMap.put("sampleCode", map.get("sampleCode")); //样品编号
                    resultMap.put("bushing", map.get("bushing")); //套管
                    resultMap.put("fiber", map.get("fiber")); //光纤
                    resultMap.put("fibers", map.get("fibers")); //光纤带
                    resultMap.put("userName", map.get("userName")); //创建人
                    resultMap.put("insTime", map.get("insTime")); //检测时间
                    resultMap.put("sendTime", map.get("sendTime")); //下发时间
                    resultMap.put("inspectionItem", map.get("inspectionItem")); //检验项目
                    // æŸ¥çœ‹è¡¨å¤´æ˜¯å¦å­˜åœ¨å­é¡¹
                    List<Map<String, Object>> collect = headerS.stream().filter(item ->
                                    item.get("label").toString().equals(map.get("inspectionItemSubclass").toString()))
                            .collect(Collectors.toList());
                    // æœ‰å°±å–子项 æ²¡æœ‰å°±å–父项
                    if(!collect.isEmpty() && !Objects.isNull(collect)) {
                        resultMap.put(collect.get(0).get("prop").toString(), map.get("lastValue"));//检验子项目  æ£€éªŒç»“æžœ
                    }else {
                        List<Map<String, Object>> collect1 = headerS.stream().filter(item ->
                                        item.get("label").toString().equals(map.get("inspectionItem").toString()))
                                .collect(Collectors.toList());
                        if(!collect1.isEmpty() && !Objects.isNull(collect1)) {
                            resultMap.put(collect1.get(0).get("prop").toString(), map.get("lastValue"));//检验项目  æ£€éªŒç»“æžœ
                        }
                    }
                    maps.add(resultMap);
                }
            }
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
        return  maps.stream().distinct().collect(Collectors.toList());
    }
    /**
     * èŽ·å–å½“å‰ç”¨æˆ·çš„å®žéªŒå®¤
     * @return
     */
    private String getCurrentUserLaboratory(){
        // èŽ·å–å½“å‰äººæ‰€åœ¨å®žéªŒå®¤
        Integer userId = SecurityUtils.getUserId().intValue();
        String departLimsId = userMapper.selectById(userId).getDepartLimsId();
        String laboratory = "";
        if(StringUtils.isNotBlank(departLimsId)) {
            String[] split = departLimsId.split(",");
            for (String s : split) {
                if (StringUtils.isNotBlank(s) && (!Arrays.asList("1","22").contains(s))) {
                    laboratory = insOrderMapper.getDepartment(Integer.parseInt(s));
                }
            }
        }
        return laboratory;
    }
    /**
     * å¯¼å‡ºå§”托费用
     * @param data æ•°æ®
     */
    @Override
    public void exportCommissionFees(Map<String, Object> data,HttpServletResponse response) {
        String laboratory = getCurrentUserLaboratory();
        // æ—¥æœŸæ ¼å¼åŒ–
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        String start = LocalDateTime.of(
                LocalDate.parse(data.get("startTime").toString(),
                        dateTimeFormatter),LocalTime.of(00, 00, 00)
        ).toString();
        String end = LocalDateTime.of(
                LocalDate.parse(data.get("endTime").toString(),
                        dateTimeFormatter),LocalTime.of(23, 59, 59)
        ).toString();
        // èŽ·å–æ•°æ®
        String company = data.get("company").toString();
        List<CommissionFeesDto> list = insOrderMapper.selectCommissionFees(laboratory,company, start, end);
        list = list.stream().map(dto -> {
            Set<String> uniqueTags = new HashSet<>();
            if (dto.getInsItem().contains(",")) {
                for (String s : dto.getInsItem().split(",")) {
                    uniqueTags.add(s.split("@")[0]);
                }
            } else {
                uniqueTags.add(dto.getInsItem().split("@")[0]);
            }
            dto.setInsItem(uniqueTags.toString());
            return dto;
        }).collect(Collectors.toList());
        try {
            String fileName = URLEncoder.encode(laboratory+"委托费用统计", "UTF-8");
            response.setContentType("application/vnd.ms-excel");
            response.setCharacterEncoding("UTF-8");
            response.setHeader("content-disposition", "attachment;filename=" + fileName + ".xlsx");
            // æ–°å»ºExcelWriter
            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(),CommissionFeesDto.class).build();
            // æ ¹æ®å§”托单位进行sheet分类
            Map<String, List<CommissionFeesDto>> collect = list.stream().collect(Collectors.groupingBy(CommissionFeesDto::getCompany));
            Iterator<Map.Entry<String, List<CommissionFeesDto>>> iterator = collect.entrySet().iterator();
            int i = 0;
            while(iterator.hasNext()) {
                Map.Entry<String, List<CommissionFeesDto>> entry = iterator.next();
                WriteSheet writeSheet = EasyExcel.writerSheet(i, entry.getKey()).build();
                excelWriter.write(entry.getValue(), writeSheet);
                i++;
            }
//            WriteSheet writeSheet = EasyExcel.writerSheet().head(CommissionFeesDto.class).build();
//            excelWriter.write(list, writeSheet);
            // å°†æ•°æ®å†™å…¥
            excelWriter.finish();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    @Override
    public void exportUnInsProducts(UnInsProductsDTO unInsProductsDTO, HttpServletResponse response) {
        String laboratory = getCurrentUserLaboratory();
        //日期格式化
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDateTime startDateTime = LocalDateTime.of(LocalDate.parse(unInsProductsDTO.getStartDate(),dateTimeFormatter),LocalTime.MIN);
        LocalDateTime endDateTime = LocalDateTime.of(LocalDate.parse(unInsProductsDTO.getEndDate(),dateTimeFormatter),LocalTime.MAX);
        // èŽ·å–æ•°æ®
        List<UnInsProductsVO> list = baseMapper.selectUnInsProducts(laboratory, startDateTime, endDateTime,unInsProductsDTO);
        try {
            String fileName = URLEncoder.encode(laboratory+"待检任务统计", "UTF-8");
            response.setContentType("application/vnd.ms-excel");
            response.setCharacterEncoding("UTF-8");
            response.setHeader("content-disposition", "attachment;filename=" + fileName + ".xlsx");
            // æ–°å»ºExcelWriter
            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).build();
            WriteSheet writeSheet = EasyExcel.writerSheet().head(UnInsProductsVO.class).build();
            excelWriter.write(list, writeSheet);
            // å…³é—­æµ
            excelWriter.finish();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    @Override
    public IPage<TasksShowDto> tasksShow(Page page, String sonLaboratory) {
        IPage tasksShow = insOrderMapper.getTasksShow(page, sonLaboratory);
        return tasksShow;
    }
    @Override
    public int getCurrentMonthPlanTotalBySonLaboratory(String sonLaboratory,LocalDateTime startTime, LocalDateTime endTime) {
        if(StringUtils.isNotBlank(sonLaboratory)){
            if(Objects.isNull(startTime) || Objects.isNull(endTime)) {
                //获取当月的开始和结束时间
                // å½“月的开始时间(第一天 00:00:00)
                startTime = LocalDate.now()
                        .withDayOfMonth(1)
                        .atStartOfDay();
                // å½“月的结束时间(最后一天 23:59:59.999999999)
                endTime = LocalDate.now()
                        .with(TemporalAdjusters.lastDayOfMonth())
                        .atTime(LocalTime.MAX);
            }
            //查询当月该子试验室的总任务条数
            return baseMapper.selectPlanCountBySonLaboratory(sonLaboratory,startTime,endTime);
        }
        return 0;
    }
    @Override
    public Map<String, Object> getTabHeader(String sonLaboratory,String samples) {
        Map<String, Object> resultMap = new HashMap<>();
        List<String> list = new ArrayList<>();
        List<Map<String, Object>> maps = new ArrayList<>();
        if(StringUtils.isNotBlank(samples)) {
            samples = "[" + "\"" + samples + "\"";
        }
        List<Map<String, Object>> tabHeader = baseMapper.getTabHeader(sonLaboratory,samples);
        ObjectMapper objectMapper = new ObjectMapper();
        Long count = 1l;
        for (Map<String, Object> map : tabHeader) {
            try {
                List<List<String>> sample = objectMapper.readValue(JSONUtil.toJsonStr(map.get("sample").toString()), new TypeReference<List<List<String>>>() {
                });
                // èŽ·å–tab页表头
                for (List<String> strings : sample) {
                        list.add(strings.get(0));
                }
                // èŽ·å–è¡¨æ ¼è¡¨å¤´
                if(StringUtils.isNotBlank(samples)) {
                    if(map.containsKey("inspectionItemSubclass")) {
                        if(StringUtils.isNotBlank(map.get("inspectionItemSubclass").toString())) {
                            HashMap<String, Object> map1 = new HashMap<>();
                            map1.put("label", map.get("inspectionItemSubclass").toString());  // label
                            map1.put("prop","lastValue"+count); // prop
                            maps.add(map1);
                        }else {
                            HashMap<String, Object> map1 = new HashMap<>();
                            map1.put("label", map.get("inspectionItem").toString());  // label
                            map1.put("prop","lastValue"+count); // prop
                            maps.add(map1);
                        }
                    }else {
                        HashMap<String, Object> map1 = new HashMap<>();
                        map1.put("label", map.get("inspectionItem").toString());  // label
                        map1.put("prop","lastValue"+count); // prop
                        maps.add(map1);
                    }
                    count++;
                }
            } catch (JsonProcessingException e) {
                throw new RuntimeException(e);
            }
        }
        if (samples.contains("温度循环")){
            addElementToMaps(maps, "循环次数", "inspectionItems");
            addElementToMaps(maps, "温度点", "inspectionItemSubclass");
            addElementToMaps(maps, "衰减系数1310", "attenuationCoefficient1310");
            addElementToMaps(maps, "衰减差1", "attenuationDifference1");
            addElementToMaps(maps, "衰减系数1550", "attenuationCoefficient1550");
            addElementToMaps(maps, "衰减差2", "attenuationDifference2");
            addElementToMaps(maps, "衰减系数1625", "attenuationCoefficient1625");
            addElementToMaps(maps, "衰减差3", "attenuationDifference3");
            addElementToMaps(maps, "衰减1383", "attenuationCoefficient1383");
            addElementToMaps(maps, "衰减差4", "attenuationDifference4");
            addElementToMaps(maps, "衰减1490", "attenuationCoefficient1490");
            addElementToMaps(maps, "衰减差5", "attenuationDifference5");
            addElementToMaps(maps, "衰减差Max", "attenuationDifferenceMax");
            addElementToMaps(maps, "是否合格", "insResult");
        }
        Map<String, Map<String, Object>> uniqueByLabel = maps.stream()
                .collect(Collectors.toMap(
                        map -> (String) map.get("label"),
                        map -> map,
                        (existing, replacement) -> existing, // ä¿ç•™ç¬¬ä¸€ä¸ªé‡åˆ°çš„Map
                        LinkedHashMap::new
                ));
        // å°†ç»“果转换回List<Map<String, Object>>
        List<Map<String, Object>> collect1 = new ArrayList<>(uniqueByLabel.values());
//        List<Map<String, Object>> collect1 = maps.stream().distinct().collect(Collectors.toList());
        List<String> collect = list.stream().distinct().collect(Collectors.toList());
        collect.add("温度循环");
        resultMap.put("tabHeader", collect);
        resultMap.put("tableHeader", collect1);
        return resultMap;
    }
    private static void addElementToMaps(List<Map<String, Object>> maps, String label, String prop) {
        Map<String, Object> map = new HashMap<>();
        map.put("label", label);
        map.put("prop", prop);
        maps.add(map);
    }
    @Override
    public IPage<InsOrderPlanVO> selectInsOrderPlanList(Page page, InsOrderPlanDTO insOrderPlanDTO) {
        User user = userMapper.selectById(SecurityUtils.getUserId());//当前登录的人
        //获取当前人所属实验室id
        String departLimsId = user.getDepartLimsId();
        String laboratory = null;
        if (ObjectUtils.isNotEmpty(departLimsId) && !departLimsId.isEmpty()) {
            String[] split = departLimsId.split(",");
            //查询对应架构名称(通信实验室,电力实验室,检测办)
            String departLims = baseMapper.seldepLimsId(Integer.parseInt(split[split.length - 1]));
            if (departLims.contains("实验室")) {
                laboratory = departLims;
            }
        }
        String checkName = null;
        String userName = null;
        if (ObjectUtil.isNotEmpty(insOrderPlanDTO.getUserId())) {
            userName = userMapper.selectById(SecurityUtils.getUserId()).getName();
            if(Objects.equals(insOrderPlanDTO.getInsState(),"3")) {
                userName = "";
                checkName = userMapper.selectById(SecurityUtils.getUserId()).getName();
            }
            insOrderPlanDTO.setUserId(null);
        }
        InsOrderPlanDTO planDTO = new InsOrderPlanDTO();
        QueryWrapper<InsOrderPlanDTO> wrappers = QueryWrappers.queryWrappers(planDTO);
        IPage<InsOrderPlanVO> insOrderPage = insSampleMapper.findInsSampleAndOrder(
                page,
                userName,
                checkName,
                insOrderPlanDTO.getSonLaboratory(),
                insOrderPlanDTO.getSample(),
                insOrderPlanDTO.getSampleCode(),
                laboratory,
                insOrderPlanDTO.getEntrustCode(),
                insOrderPlanDTO.getInsState(),
                wrappers,
                insOrderPlanDTO.getSendTimeRange()
                );
        return insOrderPage;
    }
    @Override
    public IPage<InsOrderPlanTaskSwitchVo> inspectionOrderDetailsTaskSwitching(Page page, InsOrderPlanDTO insOrderPlanDTO) {
        Integer userId = SecurityUtils.getUserId().intValue();
        User user = userMapper.selectById(userId);//当前登录的人
        //获取当前人所属实验室id
        String departLimsId = user.getDepartLimsId();
        String laboratory = null;
        if (ObjectUtils.isNotEmpty(departLimsId) && !departLimsId.equals("")) {
            String[] split = departLimsId.split(",");
            //查询对应架构名称(通信实验室,电力实验室,检测办)
            String departLims = baseMapper.seldepLimsId(Integer.parseInt(split[split.length - 1]));
            if (departLims.contains("实验室")) {
                laboratory = departLims;
            }
        }
        if (ObjectUtil.isNotEmpty(insOrderPlanDTO.getUserId())) {
            insOrderPlanDTO.setUserId(userId.longValue());
        }
        String sonLaboratory = insOrderPlanDTO.getSonLaboratory();//试验室
        IPage<InsOrderPlanTaskSwitchVo> insOrderPage = insSampleMapper.inspectionOrderDetailsTaskSwitching(page, QueryWrappers.queryWrappers(insOrderPlanDTO), userId, sonLaboratory, laboratory);
        return insOrderPage;
    }
    //认领任务
    @Override
    public boolean claimInsOrderPlan(InsOrderPlanDTO entity) {
        if (Objects.isNull(entity)) {
            return false;
        }
        Integer userId = SecurityUtils.getUserId().intValue();
        InsSampleUser insSampleUser = new InsSampleUser(entity.getInsSampleId().intValue(), userId, 0, entity.getSonLaboratory());
        return insSampleUserMapper.insert(insSampleUser) > 0;
    }
    @Override
    public Map<String, Object> doInsOrder(Integer id, String laboratory) {
//        InsOrder insOrder = new InsOrder();
//        insOrder.setId(id);
        InsOrder order = insOrderMapper.selectById(id);
        InsOrderState insOrderState = insOrderStateMapper.selectOne(new LambdaQueryWrapper<InsOrderState>()
                .eq(InsOrderState::getInsOrderId, id)
                .eq(InsOrderState::getLaboratory, laboratory));
        if (BeanUtil.isEmpty(insOrderState.getInsTime())) {
            order.setInsTime(LocalDateTime.now());
            insOrderMapper.updateById(order);
            insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate().eq(InsOrderState::getInsOrderId, id).eq(InsOrderState::getLaboratory, laboratory).set(InsOrderState::getInsTime, LocalDateTime.now()).set(InsOrderState::getInsState, 1));
        }
        Map<String, Object> map = insOrderService.getInsOrderAndSample(id, laboratory);
        List<SampleProductDto> list = JSON.parseArray(JSON.toJSONString(map.get("sampleProduct")), SampleProductDto.class);
        for (SampleProductDto samples : list) {
            if (BeanUtil.isEmpty(samples.getInsProduct())) continue;
            samples.setBushing(insBushingService.selectBushingBySampleId(samples.getId()));
        }
        map.put("sampleProduct", list.stream().sorted(Comparator.comparing(SampleProductDto::getId)).collect(Collectors.toList()));
        return map;
    }
    @Override
    public List<InsProduct> getInsProduct(Integer id, Integer type, String laboratory, HttpServletRequest request) {
        List<InsProduct> insProducts = new ArrayList<>();
        switch (type) {
            case 0:
                //样品
                insProducts = insSampleMapper.getInsProduct1(id, laboratory);
                if(!insProducts.isEmpty()) {
                    boolean flag = false;
                    for(InsProduct insProduct : insProducts) {
                        if("温度循环".equals(insProduct.getInspectionItem())) {
                            flag = true;
                            break;
                        }
                    }
                    if(flag) {
                        insProducts = insSampleMapper.getInsProduct5(id, laboratory);
                    }
                }
                break;
            case 1:
                //光纤带
                insProducts = insSampleMapper.getInsProduct2(id, laboratory);
                break;
            case 2:
                //光纤
                insProducts = insSampleMapper.getInsProduct3(id, laboratory);
                break;
            case 3:
                //套管
                insProducts = insSampleMapper.getInsProduct4(id, laboratory);
                break;
        }
        //如果是大样品下的项目为空,那么查询第一个光纤的项目
        if (ObjectUtils.isEmpty(insProducts) && type == 0) {
            //查询第一个光纤的id
            List<InsFiber> insFibers = insFiberMapper.selectList(Wrappers.<InsFiber>lambdaQuery()
                    .eq(InsFiber::getInsBushingId, insBushingMapper.selectList(Wrappers.<InsBushing>lambdaQuery()
                            .eq(InsBushing::getInsSampleId, id)
                            .isNotNull(InsBushing::getStandNum)
                            .isNotNull(InsBushing::getTestNum)).get(0).getId()));
            if(CollectionUtils.isNotEmpty(insFibers)) {
                insProducts = insSampleMapper.getInsProduct3(insFibers.get(0).getId(),laboratory);
            }
            // å¦‚果光纤下的项目为空,那么查询第一个光纤带的项目
            else {
                List<InsFibers> insFibersS = insFibersMapper.selectList(Wrappers.<InsFibers>lambdaQuery()
                        .eq(InsFibers::getInsBushingId, insBushingMapper.selectList(Wrappers.<InsBushing>lambdaQuery()
                                .eq(InsBushing::getInsSampleId, id)
                                .isNotNull(InsBushing::getTestNum)
                        ).get(0).getId()));
                //如果光纤带不为空,查询光纤带下是否配有光纤
                if(!insFibersS.isEmpty()){
                    List<InsFiber> insFiberList = insFiberMapper.selectList(Wrappers.<InsFiber>lambdaQuery().eq(InsFiber::getInsFibersId, insFibersS.get(0).getId()));
                    if(!insFiberList.isEmpty()){
                        insProducts = insSampleMapper.getInsProduct3(insFiberList.get(0).getId(),laboratory);
                    }else{
                        insProducts = insSampleMapper.getInsProduct6(insFibersS.get(0).getId(),laboratory);
                    }
                }
            }
        }
        Set<Integer> set = new HashSet<>();
        Map<Integer, String> map2 = new HashMap<>();
        if (BeanUtil.isEmpty(insProducts)) return null;
        getTemplateThing(set, map2, insProducts);
        return insProducts;
    }
    @Override
    public List<String> checkSubmitPlan(Integer orderId, String laboratory,String temperature,String humidity) {
        List<String> collect = new ArrayList<>();
        List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId).select(InsSample::getId));
        List<Integer> ids = insSamples.stream().map(InsSample::getId).collect(Collectors.toList());
        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                .in(InsProduct::getInsSampleId, ids)
                .eq(InsProduct::getSonLaboratory, laboratory)
                .eq(InsProduct::getState, 1)
                .eq(InsProduct::getInsResult, 0));
        if (insProducts.size() > 0) {
            collect = insProducts.stream().map(insProduct -> {
                return insProduct.getInspectionItem() + "-" + insProduct.getInspectionItemSubclass();
            }).collect(Collectors.toList());
            insProductMapper.update(null,new LambdaUpdateWrapper<InsProduct>()
                    .set(InsProduct::getTemperature,temperature)
                    .set(InsProduct::getHumidity,humidity)
                    .in(InsProduct::getInsSampleId,ids));
        }
        return collect;
    }
    @Override
    public IPage<InsOrderFile> getFileList(Page page, InsOrderFile insOrderFile) {
        Integer insOrderId = insOrderFile.getInsOrderId();
        insOrderFile.setInsOrderId(null);
        IPage<InsOrderFile> insOrderFileIPage = insOrderFileMapper.getFileList(page, QueryWrappers.queryWrappers(insOrderFile),insOrderId);
        return insOrderFileIPage;
    }
    @Override
    public int uploadFile(Integer orderId, MultipartFile file) {
        String urlString;
        String pathName;
        String path;
        String filename = file.getOriginalFilename();
        String contentType = file.getContentType();
        InsOrderFile insOrderFile = new InsOrderFile();
        insOrderFile.setInsOrderId(orderId);
        insOrderFile.setFileName(filename);
        if (contentType != null && contentType.startsWith("image/")) {
            // æ˜¯å›¾ç‰‡
            path = imgUrl;
            insOrderFile.setType(1);
        } else {
            // æ˜¯æ–‡ä»¶
            path = wordUrl;
            insOrderFile.setType(2);
        }
        try {
            File realpath = new File(path);
            if (!realpath.exists()) {
                realpath.mkdirs();
            }
            pathName = UUID.randomUUID() + "_" + file.getOriginalFilename();
            urlString = realpath + "/" + pathName;
            file.transferTo(new File(urlString));
            insOrderFile.setFileUrl(pathName);
            return insOrderFileMapper.insert(insOrderFile);
        } catch (Exception e) {
            e.printStackTrace();
            System.err.println("附件上传错误");
            return 0;
        }
    }
    //切换记录模版查询检验内容
    @Override
    public Map<String, Object> getReportModel(Integer sampleId, String sonLaboratory) {
        Map<String, Object> map = new HashMap<>();
        //先查出套管
        List<InsBushing> insBushings = insBushingMapper.selectList(Wrappers.<InsBushing>lambdaQuery().eq(InsBushing::getInsSampleId, sampleId));
        List<InsFibersVO> fibers = new ArrayList<>();
        List<InsFiber> fiber = new ArrayList<>();
        List<InsBushing> bush = new ArrayList<>();
        for (InsBushing insBushing : insBushings) {
            //保存套管(松套管)
            List<InsProduct> insProductsByBush = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                    .eq(InsProduct::getInsBushId, insBushing.getId())
                    .eq(InsProduct::getSonLaboratory,sonLaboratory)
                    .eq(InsProduct::getState,1)
                    .and(i->i.like(InsProduct::getInspectionItem,"松套管")
                            .or()
                            .like(InsProduct::getInspectionItemSubclass,"松套管"))
            );
            List<Integer> collectByBush = insProductsByBush.stream()
                    .map(InsProduct::getInsResult)
                    .filter(sm -> ObjectUtils.isNotEmpty(sm) && sm != 2).collect(Collectors.toList());
            //1:已检验,0:未检验,2:在检
            int bushState = 0;
            if(insProductsByBush.size() == collectByBush.size()){
                bushState = 1;
            }else if(!collectByBush.isEmpty() && collectByBush.size()<insProductsByBush.size()){
                bushState = 2;
            }
            insBushing.setState(bushState);
            if(!insProductsByBush.isEmpty()){
                bush.add(insBushing);
            }
            //再查询出所有的光纤带
            List<InsFibers> insFibers = insFibersMapper.selectList(Wrappers.<InsFibers>lambdaQuery().eq(InsFibers::getInsBushingId, insBushing.getId()));
            List<InsFiber> insFiberList = insFiberMapper.selectList(Wrappers.<InsFiber>lambdaQuery().eq(InsFiber::getInsBushingId, insBushing.getId()));
            if (CollectionUtils.isNotEmpty(insFibers)) {
                for (InsFibers insFiberS : insFibers) {
                    //查询光纤带下的光纤配置
                    List<InsFiber> fiberList = insFiberMapper.selectList(Wrappers.<InsFiber>lambdaQuery().eq(InsFiber::getInsFibersId, insFiberS.getId()));
                    if(fiberList.isEmpty()){
                        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                .eq(InsProduct::getState,1)
                                .eq(InsProduct::getSonLaboratory,sonLaboratory)
                                .eq(InsProduct::getInsFibersId, insFiberS.getId()));
                        // è¿‡æ»¤å…‰çº¤æŽ¥å¤´æŸè€—
                        if(CollectionUtils.isNotEmpty(insProducts)) {
                            insProducts = insProducts.stream().filter(item -> !item.getInspectionItem().equals("光纤接头损耗")).collect(Collectors.toList());
                        }
                        //设置套管的检验状态
                        insFiberS.setState(getInsState(insProducts));
                        InsFibersVO insFibersVO = new InsFibersVO();
                        BeanUtil.copyProperties(insFiberS,insFibersVO);
                        insFibersVO.setIsExistProduct(!insProducts.isEmpty());//是否存在检验项
                        insFibersVO.setBushingColor(insBushing.getColor());
                        //如果光纤带下的项目没有光纤接头损耗项目,才添加光纤带信息
                        if(CollectionUtils.isNotEmpty(insProducts)) {
                            fibers.add(insFibersVO);
                        }
                    }else{
                        InsFibersVO insFibersVO = new InsFibersVO();
                        BeanUtil.copyProperties(insFiberS,insFibersVO);
                        insFibersVO.setBushingColor(insBushing.getColor());
                        //查询光纤带下的检验项
                        List<InsProduct> fibersProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                .eq(InsProduct::getState,1)
                                .eq(InsProduct::getSonLaboratory,sonLaboratory)
                                .eq(InsProduct::getInsFibersId, insFiberS.getId()));
                        insFibersVO.setIsExistProduct(!fibersProducts.isEmpty());//是否存在检验项
                        if(!fibersProducts.isEmpty()){
                            //设置光纤带色标的检验状态
                            insFibersVO.setState(getInsState(fibersProducts));
                        }
                        //添加光纤带信息
                        fibers.add(insFibersVO);
                        for (InsFiber insFiber : fiberList) {
                            List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                    .eq(InsProduct::getState,1)
                                    .eq(InsProduct::getSonLaboratory,sonLaboratory)
                                    .eq(InsProduct::getInsFiberId, insFiber.getId()));
                            // è¿‡æ»¤å…‰çº¤æŽ¥å¤´æŸè€—
                            if(CollectionUtils.isNotEmpty(insProducts)) {
                                insProducts = insProducts.stream().filter(item -> !item.getInspectionItem().equals("光纤接头损耗")).collect(Collectors.toList());
                            }
                            //设置光纤色标的检验状态
                            insFiber.setState(getInsState(insProducts));
                            //如果光纤下的项目没有光纤接头损耗项目,才添加光纤信息
                            if(CollectionUtils.isNotEmpty(insProducts)) {
                                fiber.add(insFiber);
                            }
                        }
                    }
                }
            }
            //如果套管下没有光纤带就只有光纤了
            else if (CollectionUtils.isNotEmpty(insFiberList)) {
                for (InsFiber insFiber : insFiberList) {
                    List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                            .eq(InsProduct::getState,1)
                            .eq(InsProduct::getSonLaboratory,sonLaboratory)
                            .eq(InsProduct::getInsFiberId, insFiber.getId()));
                    // è¿‡æ»¤å…‰çº¤æŽ¥å¤´æŸè€—
                    if(CollectionUtils.isNotEmpty(insProducts)) {
                        insProducts = insProducts.stream().filter(item -> !item.getInspectionItem().equals("光纤接头损耗")).collect(Collectors.toList());
                    }
                    //设置光纤色标的检验状态
                    insFiber.setState(getInsState(insProducts));
                    if(CollectionUtils.isNotEmpty(insProducts)){
                        fiber.add(insFiber);
                    }
                }
            }
        }
        map.put("光纤带", fibers);
        map.put("光纤", fiber);
        map.put("套管", bush);
        return map;
    }
    /**
     * åˆ¤æ–­æ£€éªŒé¡¹æ˜¯å¦æ£€æµ‹å®Œï¼Œè¿”回检测状态
     * @param insProducts
     * @return
     */
    private Integer getInsState(List<InsProduct> insProducts){
        List<Integer> collect = insProducts.stream().map(InsProduct::getInsResult)
                .filter(sm -> ObjectUtils.isNotEmpty(sm) && sm != 2).collect(Collectors.toList());
        if (insProducts.size() == collect.size()) {
            return 1;//已检验
        } else if(!collect.isEmpty() && collect.size()<insProducts.size()){
            return 2;//在检验
        }
        return 0;//未检验
    }
    //温度循环查看列表数据(包括通过样品id,循环次数,温度,循环次数进行筛选)
    @Override
    public Map<String, Object> temCycle(Integer sampleId, String inspectionItem, String inspectionItemSubclass) {
        Map<String, Object> map = new HashMap<>();
        //样品信息
        SampleVo sampleVo = insSampleMapper.getDetailById(sampleId);
        map.put("sampleVo", sampleVo);
        List<ProductVo> productVos = new ArrayList<>();
        //先查出这个样品下有哪些管色标,光纤带,光纤色标
        //先查出套管
        List<InsBushing> insBushings = insBushingMapper.selectList(Wrappers.<InsBushing>lambdaQuery().eq(InsBushing::getInsSampleId, sampleId));
        if (insBushings.size() > 0) {
            //通信--温度循环
            for (InsBushing insBushing : insBushings) {
                //再查询出所有的光纤带
                List<InsFibers> insFibers = insFibersMapper.selectList(Wrappers.<InsFibers>lambdaQuery().eq(InsFibers::getInsBushingId, insBushing.getId()));
                if (CollectionUtils.isNotEmpty(insFibers)) {
                    for (InsFibers insFiber : insFibers) {
                        //查出光纤带下所有的光纤
                        List<InsFiber> fiberList = insFiberMapper.selectList(Wrappers.<InsFiber>lambdaQuery().eq(InsFiber::getInsFibersId, insFiber.getId()));
                        for (InsFiber fiber : fiberList) {
                            //再根据关联的光纤配置的id和循环次数和温度和样品id进行查询检验项目
                            List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                    .eq(InsProduct::getInsSampleId, sampleId)
                                    .eq(InsProduct::getInspectionItem, inspectionItem)
                                    .eq(InsProduct::getInspectionItemSubclass, inspectionItemSubclass)
                                    .eq(InsProduct::getInsFiberId, fiber.getId()));
                            for (InsProduct insProduct : insProducts) {
                                InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery()
                                        .eq(InsProductResult::getInsProductId, insProduct.getId()));
                                ProductVo productVo = new ProductVo();
                                productVo.setCode(insFiber.getCode());
                                productVo.setColor(fiber.getColor());
                                productVo.setBushColor(insBushing.getColor());
                                if (ObjectUtils.isNotEmpty(insProductResult)) {
                                    insProduct.setInsProductResult(insProductResult);
                                }
                                //求同等条件下1次循环20度常温的计算值
                                InsProductResult insProductResult1 = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                        .eq(InsProduct::getInsSampleId, sampleId)
                                        .eq(InsProduct::getInspectionItem, "1")
                                        .eq(InsProduct::getInspectionItemSubclass, "20℃(常温)")
                                        .eq(InsProduct::getInspectionItemClass, insProduct.getInspectionItemClass())
                                        .eq(InsProduct::getInsFiberId, fiber.getId())).getId()));
                                if (ObjectUtils.isNotEmpty(insProductResult1) && !insProductResult1.getComValue().equals("[]")) {
                                    String[] splitStr = insProductResult1.getComValue().split(":");
                                    insProduct.setComplue(splitStr[splitStr.length-1].split("\"")[1]);
                                }
                                productVo.setInsProduct(insProduct);
                                productVos.add(productVo);
                            }
                        }
                    }
                } else {
                    //如果套管下没有光纤带就只有光纤了
                    List<InsFiber> insFiberList = insFiberMapper.selectList(Wrappers.<InsFiber>lambdaQuery().eq(InsFiber::getInsBushingId, insBushing.getId()));
                    for (InsFiber fiber : insFiberList) {
                        //再根据关联的光纤配置的id和循环次数和温度和样品id进行查询检验项目
                        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                .eq(InsProduct::getInsSampleId, sampleId)
                                .eq(InsProduct::getInspectionItem, inspectionItem)
                                .eq(InsProduct::getInspectionItemSubclass, inspectionItemSubclass)
                                .eq(InsProduct::getInsFiberId, fiber.getId()));
                        for (InsProduct insProduct : insProducts) {
                            InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insProduct.getId()));
                            ProductVo productVo = new ProductVo();
                            productVo.setCode("-");
                            productVo.setColor(fiber.getColor());
                            productVo.setBushColor(fiber.getBushColor());
                            insProduct.setInsProductResult(insProductResult);
                            //求同等条件下1次循环20度常温的计算值
                            InsProductResult insProductResult1 = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                    .eq(InsProduct::getInsSampleId, sampleId)
                                    .eq(InsProduct::getInspectionItem, "1")
                                    .eq(InsProduct::getInspectionItemSubclass, "20℃(常温)")
                                    .eq(InsProduct::getInspectionItemClass, insProduct.getInspectionItemClass())
                                    .eq(InsProduct::getInsFiberId, fiber.getId())).getId()));
                            if (ObjectUtils.isNotEmpty(insProductResult1) && !insProductResult1.getComValue().equals("[]")) {
                                String[] splitStr = insProductResult1.getComValue().split(":");
                                insProduct.setComplue(splitStr[splitStr.length-1].split("\"")[1]);
                            }
                            productVo.setInsProduct(insProduct);
                            productVos.add(productVo);
                        }
                    }
                }
            }
            productVos = productVos.stream().sorted(Comparator.comparing(productVo -> productVo.getInsProduct().getInspectionItemClass())).collect(Collectors.toList());
        } else {
            //电力--热循环和温升试验
            List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                    .eq(InsProduct::getInsSampleId, sampleId)
                    .eq(InsProduct::getInspectionItem, inspectionItem));
            for (InsProduct insProduct : insProducts) {
                InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insProduct.getId()));
                ProductVo productVo = new ProductVo();
                if (ObjectUtils.isNotEmpty(insProductResult)) {
                    insProduct.setInsProductResult(insProductResult);
                }
                productVo.setInsProduct(insProduct);
                productVos.add(productVo);
            }
        }
        map.put("productVos", productVos);
        return map;
    }
    @Override
    public List<String> upPlanUser2(Integer orderId) {
        List<Integer> sampleId = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId)).stream().map(InsSample::getId).collect(Collectors.toList());
        List<String> sonLaboratory = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getState, 1).in(InsProduct::getInsSampleId, sampleId)).stream().map(InsProduct::getSonLaboratory).distinct().collect(Collectors.toList());
        return sonLaboratory;
    }
    @Override
    public Map<String, Object> getSagTemperatureProducts(Integer sampleId) {
        Map<String, Object> map = new HashMap<>();
        //样品信息
        SampleVo sampleVo = insSampleMapper.getDetailById(sampleId);
        map.put("sampleVo", sampleVo);
        //电力:弧垂-温度特殊项
        List<ProductVo> productVos = new ArrayList<>();
        List<InsProduct> insProducts = insProductMapper.findSagTemperatureProducts(sampleId,"弧垂-温度");
        for (InsProduct insProduct : insProducts) {
            InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insProduct.getId()));
            ProductVo productVo = new ProductVo();
            if (ObjectUtils.isNotEmpty(insProductResult)) {
                insProduct.setInsProductResult(insProductResult);
            }
            productVo.setInsProduct(insProduct);
            productVos.add(productVo);
        }
        map.put("productVos", productVos);
        return map;
    }
    @Override
    public Map<String, Object> getSampleInfoByOrderId(Integer orderId,String sonLaboratory) {
        Map<String, Object> map = new HashMap<>();
        if(!Objects.isNull(orderId)){
            //检验内容对象
            List<InsProductVO> insProductVOS = insProductMapper.selectProductByOrderId(orderId,sonLaboratory);
            //根据样品id分组
            Map<Integer, List<InsProductVO>> groupMap = insProductVOS.stream().collect(Collectors.groupingBy(InsProductVO::getSampleId));
            List<InsProductVO> sampleList = new ArrayList<>();
            for (Integer key : groupMap.keySet()) {
                AtomicInteger insSum = new AtomicInteger(0);
                List<String> inspectNameList = new ArrayList<>();
                InsProductVO insProductVO = new InsProductVO();
                groupMap.get(key).forEach(k->{
                    if(StringUtils.isNotBlank(k.getInspectName())){
                        insSum.getAndIncrement();
                        inspectNameList.add(k.getInspectName());
                    }
                    insProductVO.setId(k.getSampleId());
                    insProductVO.setSampleCode(k.getSampleCode());
                });
                if(CollectionUtils.isEmpty(inspectNameList)){
                    insProductVO.setState(0);
                }else if(inspectNameList.size() < groupMap.get(key).size()){
                    insProductVO.setState(1);
                }else if(inspectNameList.size() == groupMap.get(key).size()){
                    insProductVO.setState(2);
                }
                insProductVO.setInspectName(inspectNameList.stream().distinct().collect(Collectors.joining(",")));
                sampleList.add(insProductVO);
            }
            map.put("insSamples",sampleList);
            map.put("insProductVOS",insProductVOS);
        }
        return map;
    }
    @Override
    @Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED)
    public void saveInsContext(Map<String, Object> insContext, Integer currentTable, Integer currentSampleId, Integer orderId, String sonLaboratory, Boolean isDelete) {
        try{
            if(lock.tryLock(10,TimeUnit.SECONDS)){
                Integer userId = SecurityUtils.getUserId().intValue();
                insContext.forEach((k, v) -> {
                    JSONObject jo = JSON.parseObject(JSON.toJSONString(v));
                    InsProduct insProduct = new InsProduct();
                    insProduct.setId(Integer.parseInt(k));
                    InsProduct product = insProductMapper.selectById(insProduct.getId());
                    if (currentTable.equals(product.getTemplateId()) && currentSampleId.equals(product.getInsSampleId())) {
                        List<InsProductResult> oldResults = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery()
                                .eq(InsProductResult::getInsProductId, insProduct.getId()));
                        InsProductResult newResult = new InsProductResult();
                        if (CollectionUtils.isNotEmpty(oldResults)) {
                            BeanUtil.copyProperties(oldResults.get(0), newResult);
                        }
                        newResult.setInsProductId(Integer.parseInt(k));
                        /*校验一下result表*/
                        if (oldResults.size() > 1) {
                            for (int i = 1; i < oldResults.size(); i++) {
                                insProductResultMapper.deleteById(oldResults.get(i));
                            }
                        }
                        // ä¿å­˜çš„æ•°æ®å°æ•°ä½æ•°å¿…须大于等于tell最大的小数位数
                        String tells = product.getTell();
                        Integer digit = null;
                        if(StringUtils.isEmpty(tells)) {
                            digit = -1;
                        }else {
                            // æ‰¾åˆ°å°æ•°ä½æ•°æœ€å¤šçš„æ•°å€¼
                            Map<String, Object> stringObjectMap = maxDecimalNumber(tells);
                            digit = Integer.parseInt(stringObjectMap.get("maxNumber").toString());
                        }
                        if (!Arrays.asList("应力应变","振动疲劳").contains(product.getInspectionItem())) {
                            //检验值
                            if (jo.get("insValue") != null) {
                                JSONArray jsonArray = JSON.parseArray(JSON.toJSONString(jo.get("insValue")));
                                List<Map<String, Object>> iv = new ArrayList<>();
                                for (Object o : jsonArray) {
                                    JSONObject insValue = JSON.parseObject(JSON.toJSONString(o));
                                    Map<String, Object> map = new HashMap<>();
                                    String val = "";
                                    if(Objects.nonNull(JSON.parseObject(JSON.toJSONString(insValue.get("v"))).get("v"))){
                                        val = JSON.parseObject(JSON.toJSONString(insValue.get("v"))).get("v").toString();
                                    }
                                    // å¦‚果可以转换为数字,就要进行位数的比较
                                    map.put("v", completion(val, digit));
                                    map.put("r", JSON.toJSONString(insValue.get("r")));
                                    map.put("c", JSON.toJSONString(insValue.get("c")));
                                    map.put("w", insValue.get("w"));
                                    try {
                                        if ((insValue.get("u") == null || insValue.get("u").equals("")) && StrUtil.isNotEmpty(val)) {
                                            map.put("u", userId + "");
                                        } else {
                                            map.put("u", insValue.get("u"));
                                        }
                                        iv.add(map);
                                    } catch (Exception e) {
                                    }
                                }
                                newResult.setInsValue(JSON.toJSONString(iv));
                            }
                        }
                        if (!Arrays.asList("应力应变","振动疲劳").contains(product.getInspectionItem())) {
                            //计算值
                            if (jo.get("comValue") != null && !Objects.equals(jo.get("comValue"), "")) {
                                JSONArray jsonArray2 = JSON.parseArray(JSON.toJSONString(jo.get("comValue")));
                                List<Map<String, Object>> cv = new ArrayList<>();
                                for (Object o : jsonArray2) {
                                    JSONObject comValue = JSON.parseObject(JSON.toJSONString(o));
                                    Map<String, Object> map = new HashMap<>();
                                    map.put("r", JSON.toJSONString(comValue.get("r")));
                                    map.put("c", JSON.toJSONString(comValue.get("c")));
                                    // å¦‚果可以转换为数字,就要进行位数的比较
                                    map.put("v", completion(JSON.parseObject(JSON.toJSONString(comValue.get("v"))).get("v").toString(), digit));
                                    cv.add(map);
                                }
                                newResult.setComValue(JSON.toJSONString(cv));
                            }
                        }
                        //最终值
                        try {
                            JSONObject resValue = JSON.parseObject(JSON.toJSONString(jo.get("resValue")));
                            if (resValue.get("v") != null) {
                                Object o = JSON.parseObject(JSON.toJSONString(resValue.get("v"))).get("v");
                                // å¦‚果可以转换为数字,就要进行位数的比较
                                insProduct.setLastValue(completion(o.equals("") ? null : (o.toString()), digit));
                            }
                        } catch (Exception e) {
                            insProduct.setLastValue("");//''
                        }
                        //设备编号
                        if (jo.get("equipValue") != null) {
                            JSONArray jsonArray2 = JSON.parseArray(JSON.toJSONString(jo.get("equipValue")));
                            List<Map<String, Object>> ev = new ArrayList<>();
                            for (Object o : jsonArray2) {
                                JSONObject equipValue = JSON.parseObject(JSON.toJSONString(o));
                                Map<String, Object> map = new HashMap<>();
                                map.put("v", JSON.parseObject(JSON.toJSONString(equipValue.get("v"))).get("v"));
                                ev.add(map);
                            }
                            newResult.setEquipValue(JSON.toJSONString(ev));
                        }
                        //设备名称
                        if (jo.get("equipName") != null) {
                            JSONArray jsonArray2 = JSON.parseArray(JSON.toJSONString(jo.get("equipName")));
                            List<Map<String, Object>> ev = new ArrayList<>();
                            for (Object o : jsonArray2) {
                                JSONObject equipValue = JSON.parseObject(JSON.toJSONString(o));
                                Map<String, Object> map = new HashMap<>();
                                map.put("v", JSON.parseObject(JSON.toJSONString(equipValue.get("v"))).get("v"));
                                ev.add(map);
                            }
                            newResult.setEquipName(JSON.toJSONString(ev));
                        }
                        //结论
                        try {
                            JSONObject insResult = JSON.parseObject(JSON.toJSONString(jo.get("insResult")));
                            String ir = JSON.parseObject(JSON.toJSONString(insResult.get("v"))).get("v") + "";
                            insProduct.setInsResult(Integer.parseInt(ir));
                            if (product.getInspectionItem().equals("热循环") || product.getInspectionItem().equals("温升试验")) {
                                List<Integer> collect = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
                                                .eq(InsProduct::getSpecialItemParentId, product.getId())).stream()
                                        .map(InsProduct::getInsResult)
                                        .collect(Collectors.toList());
                                if (collect.contains(null)) {
                                    insProduct.setInsResult(2);
                                } else if (collect.contains(0)) {
                                    insProduct.setInsResult(0);
                                } else {
                                    insProduct.setInsResult(1);
                                }
                            }
                        } catch (Exception e) {
                            insProduct.setInsResult(2);//待定
                            if (product.getInspectionItem().equals("应力应变") && product.getInspectionItemSubclass().equals("弹性模量")
                                    && Arrays.asList("/", "-").contains(product.getAsk())) {
                                insProduct.setInsResult(3);// ä¸åˆ¤å®š
                            }
                            // å¦‚果是弧垂的结论也改为不判定
                            if(product.getInspectionItem().equals("弧垂-温度")) {
                                insProduct.setInsResult(3);// ä¸åˆ¤å®š
                            }
                        }
                        if (Objects.isNull(newResult.getId())) {
                            newResult.setCreateUser(userId);
                            newResult.setUpdateUser(userId);
                            insProductResultMapper.insert(newResult);
                        } else {
                            newResult.setUpdateUser(userId);
                            newResult.setUpdateTime(LocalDateTime.now());
                            insProductResultMapper.updateById(newResult);
                        }
                        /*如果是第一次选择设备信息,且还有其余样品也有同一个检验项目,那么所有样品的该项目都用这个设备信息*/
                        //先查询是否还有其余样品
                        Integer insSampleId = product.getInsSampleId();
                        List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, insSampleMapper.selectById(insSampleId).getInsOrderId()));
                        //如果有多个样品或者是不是采集类型就同一个设备
                        if (insSamples.size() > 1 && !product.getInspectionItemType().equals("1")) {
                            //存在其余样品,查询是否有同一种检验项目
                            for (InsSample sample : insSamples.stream().filter(insSample -> !insSample.getId().equals(insSampleId)).collect(Collectors.toList())) {
                                InsProduct product1 = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                        .eq(InsProduct::getState, 1)
                                        .eq(InsProduct::getInsSampleId, sample.getId())
                                        .eq(InsProduct::getInspectionItem, product.getInspectionItem())
                                        .eq(InsProduct::getInspectionItemEn, product.getInspectionItemEn())
                                        .eq(InsProduct::getInspectionItemSubclass, product.getInspectionItemSubclass())
                                        .eq(InsProduct::getInspectionItemSubclassEn, product.getInspectionItemSubclassEn())
                                        .eq(InsProduct::getTemplateId, product.getTemplateId())
                                        .eq(InsProduct::getStandardMethodListId, product.getStandardMethodListId())
                                        .eq(InsProduct::getInsBushId, product.getInsBushId())
                                        .eq(InsProduct::getInsFibersId, product.getInsFibersId())
                                        .eq(InsProduct::getInsFiberId, product.getInsFiberId())
                                );
                                if (ObjectUtils.isNotEmpty(product1)) {
                                    //如果存在项目,查询是否有表
                                    InsProductResult productResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery()
                                            .eq(InsProductResult::getInsProductId, product1.getId()));
                                    if (ObjectUtils.isEmpty(productResult)) {
                                        //没有表新建表
                                        productResult = new InsProductResult();
                                        productResult.setInsProductId(product1.getId());
                                        productResult.setEquipValue(newResult.getEquipValue());
                                        productResult.setEquipName(newResult.getEquipValue());
                                        productResult.setCreateUser(userId);
                                        productResult.setUpdateUser(userId);
                                        insProductResultMapper.insert(productResult);
                                    } else if (ObjectUtils.isEmpty(productResult.getEquipValue())) {
                                        //有表判断是否有设备
                                        productResult.setEquipValue(newResult.getEquipValue());
                                        productResult.setEquipName(newResult.getEquipValue());
                                        productResult.setUpdateUser(userId);
                                        productResult.setUpdateTime(LocalDateTime.now());
                                        insProductResultMapper.updateById(productResult);
                                    }
                                }
                            }
                        }
                        insProduct.setUpdateUser(userId);
                        insProductMapper.updateById(insProduct);
                        // å½“前样品是否是光纤配置的光纤接头损耗
                        if ((!Objects.isNull(product.getInsFiberId()) || !Objects.isNull(product.getInsFibersId())) && product.getInspectionItem().equals("光纤接头损耗")) {
                            // æŸ¥æ‰¾åŒæ ·å“ä¸‹çš„光纤或光纤带的光纤接头损耗
                            List<InsProduct> insProducts = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
                                    .eq(InsProduct::getInsSampleId, product.getInsSampleId())
                                    .eq(InsProduct::getInspectionItem, product.getInspectionItem())
                                    .eq(InsProduct::getInspectionItemSubclass, product.getInspectionItemSubclass())
                                    .and(item -> item
                                            .isNotNull(InsProduct::getInsFiberId)
                                            .or()
                                            .isNotNull(InsProduct::getInsFibersId)));
                            // è¦å¤åˆ¶çš„result
                            InsProductResult copyResult = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>()
                                    .eq(InsProductResult::getInsProductId, product.getId()));
                            for (InsProduct insProduct1 : insProducts) {
                                InsProduct copyInsProduct = insProductMapper.selectById(product.getId()); // å¤åˆ¶çš„insProduct
                                if (!insProduct1.getId().equals(copyInsProduct.getId())) {
                                    copyInsProduct.setId(insProduct1.getId()); // å°†å¤åˆ¶çš„insProduct的id设置为被复制的id
                                    copyInsProduct.setInsFibersId(insProduct1.getInsFibersId()); // å…‰çº¤å¸¦id
                                    copyInsProduct.setInsFiberId(insProduct1.getInsFiberId()); // å…‰çº¤id
                                    copyInsProduct.setInsBushId(insProduct1.getInsBushId()); // å¥—管id
                                    insProductMapper.updateById(copyInsProduct);
                                    // èµ‹å€¼insProductResult
                                    InsProductResult insProductResult = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>()
                                            .eq(InsProductResult::getInsProductId, insProduct1.getId()));
                                    if (Objects.isNull(insProductResult)) {
                                        copyResult.setId(null);
                                        copyResult.setInsProductId(insProduct1.getId());
                                        insProductResultMapper.insert(copyResult);
                                    } else {
                                        copyResult.setId(insProductResult.getId());
                                        copyResult.setInsProductId(insProduct1.getId());
                                        insProductResultMapper.updateById(copyResult);
                                    }
                                }
                            }
                        }
                        insProductUserMapper.insert(new InsProductUser(null, userId, LocalDateTime.now(), insProduct.getId()));
                        insProduct = insProductMapper.selectById(insProduct);
                        //查询检验单信息
                        InsSample insSample = insSampleMapper.selectById(insProduct.getInsSampleId());
                        InsOrder insOrder = insOrderMapper.selectById(insSample.getInsOrderId());
                        //查询父检验项
                        InsProduct parentInsProduct;
                        if (ObjectUtil.isNotNull(insProduct.getSpecialItemParentId())) {
                            parentInsProduct = insProductMapper.selectById(insProduct.getSpecialItemParentId());
                        } else {
                            parentInsProduct = null;
                        }
                        if (!Objects.isNull(parentInsProduct)) {
                            if ("温升试验".equals(parentInsProduct.getInspectionItem()) || "热循环".equals(parentInsProduct.getInspectionItem())) {
                                // æ¸©å‡è¯•验以及热循环的删除
                                if (isDelete) {
                                    String inspectionItem = insProduct.getInspectionItem();
                                    List<InsProduct> insProducts = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
                                                    .eq(InsProduct::getSpecialItemParentId, parentInsProduct.getId()))
                                            .stream()
                                            .filter(item -> item.getInspectionItem().equals(inspectionItem)).collect(Collectors.toList());
                                    for (InsProduct insProduct1 : insProducts) {
                                        InsProductResult insProductResult = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>()
                                                .eq(InsProductResult::getInsProductId, insProduct1.getId()));
                                        if (!Objects.isNull(insProductResult)) {
                                            if (insProductResult.getInsProductId().equals(Integer.parseInt(k))) {
                                                continue;
                                            }
                                            String insValue = insProductResult.getInsValue();
                                            List<Map> maps = com.alibaba.fastjson2.JSON.parseArray(insValue, Map.class);
                                            if (maps.size() > 1) {
                                                maps.remove(maps.size() - 1);
                                                insProductResult.setInsValue(com.alibaba.fastjson2.JSON.toJSONString(maps));
                                                insProductResultMapper.updateById(insProductResult);
                                            }
                                        }
                                    }
                                }
                                // æ¸©å‡è¯•验以及热循环查询
                                // çƒ­å¾ªçŽ¯æ‰€æœ‰å­é¡¹
                                List<InsProduct> c = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
                                        .eq(InsProduct::getSpecialItemParentId, parentInsProduct.getId()));
                                //通过inspectionItem分组
                                Map<String, List<InsProduct>> collect1 = c.stream().collect(Collectors.groupingBy(InsProduct::getInspectionItem));
                                HashMap<Integer, InsProductResult> map1 = new HashMap<>();
                                Integer maxKey = Integer.MIN_VALUE;
                                for (Map.Entry<String, List<InsProduct>> m : collect1.entrySet()) {
                                    List<InsProduct> thermalCycleCollect = m.getValue();
                                    if (!thermalCycleCollect.isEmpty()) {
                                        for (InsProduct product1 : thermalCycleCollect) {
                                            InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery()
                                                    .eq(InsProductResult::getInsProductId, product1.getId()));
                                            if (!Objects.isNull(insProductResult)) {
                                                List<Map> maps = com.alibaba.fastjson2.JSON.parseArray(insProductResult.getInsValue(), Map.class);
                                                map1.put(maps.size(), insProductResult);
                                            }
                                            if (!map1.isEmpty()) {
                                                for (Map.Entry<Integer, InsProductResult> entry : map1.entrySet()) {
                                                    if (entry.getKey() > maxKey) {
                                                        maxKey = entry.getKey();
                                                    }
                                                }
                                            }
                                        }
                                        if (maxKey != Integer.MIN_VALUE) {
                                            InsProductResult insProductResult = map1.get(maxKey);
                                            List<Map> maps = com.alibaba.fastjson2.JSON.parseArray(insProductResult.getInsValue(), Map.class);
                                            maps.get(maps.size() - 1).put("v", "");//最后一个值为空
                                            if (maps.get(maps.size() - 1).containsKey("w")) {
                                                maps.get(maps.size() - 1).put("w", "");
                                            }
                                            for (InsProduct product1 : thermalCycleCollect) {
                                                InsProductResult insProductResult1 = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery()
                                                        .eq(InsProductResult::getInsProductId, product1.getId()));
                                                if (!Objects.isNull(insProductResult1)) {
                                                    if (!insProductResult1.getInsProductId().equals(insProductResult.getInsProductId())) {
                                                        List<Map> maps1 = com.alibaba.fastjson2.JSON.parseArray(insProductResult1.getInsValue(), Map.class);
                                                        if (maps1.size() < maxKey) {
                                                            int number = maxKey - maps1.size();
                                                            for (int i = 0; i < number; i++) {
                                                                maps1.add(maps.get(maps.size() - 1));
                                                            }
                                                            insProductResult1.setInsValue(com.alibaba.fastjson2.JSON.toJSONString(maps1));
                                                            insProductResultMapper.updateById(insProductResult1);
                                                        }
                                                    }
                                                } else {
                                                    if (maxKey != Integer.MIN_VALUE) {
                                                        InsProductResult insProductResult2 = map1.get(maxKey);
                                                        List<Map> maps1 = com.alibaba.fastjson2.JSON.parseArray(insProductResult2.getInsValue(), Map.class);
                                                        for (Map map : maps1) {
                                                            map.put("v", "");
                                                            if (map.containsKey("w")) {
                                                                map.put("w", "");
                                                            }
                                                        }
                                                        insProductResult2.setInsValue(com.alibaba.fastjson2.JSON.toJSONString(maps1));
                                                        insProductResult2.setId(null);
                                                        insProductResult2.setInsProductId(product1.getId());
                                                        insProductResultMapper.insert(insProductResult2);
                                                    }
                                                }
                                            }
                                            maxKey = Integer.MIN_VALUE;
                                            map1.clear();
                                        }
                                    }
                                }
                                // å¦‚果是导线温度的值更新,那么就要判断耐张和接续是否合格
                                InsProduct insProduct1 = insProductMapper.selectById(Integer.parseInt(k));
                                if (insProduct1.getInspectionItemSubclass().equals("导线温度")) {
                                    // æ ¹æ®çˆ¶id以及检验项来查找同一循环下的耐张和接续
                                    List<InsProduct> insProducts2 = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
                                            .eq(InsProduct::getSpecialItemParentId, parentInsProduct.getId())
                                            .eq(InsProduct::getInspectionItem, insProduct1.getInspectionItem()));
                                    List<Double> wire = new ArrayList<>(); // å¯¼çº¿æ¸©åº¦çš„值
                                    List<Double> strain = new ArrayList<>(); // è€å¼ çš„值
                                    List<Double> joint = new ArrayList<>(); // æŽ¥ç»­çš„值
                                    boolean strainFlag = true; // è€å¼ æ˜¯å¦åˆæ ¼
                                    boolean jointFlag = true; // æŽ¥ç»­æ˜¯å¦åˆæ ¼
                                    boolean strainPending = false; // æ˜¯å¦æœ‰å¾…定
                                    boolean jointPending = false; // æ˜¯å¦æœ‰å¾…定
                                    for (InsProduct insProduct2 : insProducts2) {
                                        if (insProduct2.getInspectionItemSubclass().equals("导线温度")) {
                                            String insValue = "";
                                            InsProductResult insProductResult = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>()
                                                    .eq(InsProductResult::getInsProductId, insProduct2.getId()));
                                            if (!Objects.isNull(insProductResult)) {
                                                insValue = insProductResult.getInsValue();
                                                List<Map> maps = com.alibaba.fastjson2.JSON.parseArray(insValue, Map.class);
                                                if (maps.size() > 0) {
                                                    for (Map map : maps) {
                                                        if (Strings.isNotEmpty(map.get("v").toString())) {
                                                            wire.add(Double.parseDouble(map.get("v").toString()));
                                                        } else {
                                                            wire.add(-1.0);
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                        if (insProduct2.getInspectionItemSubclass().equals("耐张温度")) {
                                            String insValue = "";
                                            InsProductResult insProductResult = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>()
                                                    .eq(InsProductResult::getInsProductId, insProduct2.getId()));
                                            if (!Objects.isNull(insProductResult)) {
                                                insValue = insProductResult.getInsValue();
                                                List<Map> maps = com.alibaba.fastjson2.JSON.parseArray(insValue, Map.class);
                                                if (maps.size() > 0) {
                                                    for (Map map : maps) {
                                                        if (Strings.isNotEmpty(map.get("v").toString())) {
                                                            strain.add(Double.parseDouble(map.get("v").toString()));
                                                        } else {
                                                            strain.add(-1.0);
                                                        }
                                                    }
                                                }
                                            } else {
                                                strain.add(-1.0);
                                            }
                                        }
                                        if (insProduct2.getInspectionItemSubclass().equals("接续温度")) {
                                            String insValue = "";
                                            InsProductResult insProductResult = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>()
                                                    .eq(InsProductResult::getInsProductId, insProduct2.getId()));
                                            if (!Objects.isNull(insProductResult)) {
                                                insValue = insProductResult.getInsValue();
                                                List<Map> maps = com.alibaba.fastjson2.JSON.parseArray(insValue, Map.class);
                                                if (maps.size() > 0) {
                                                    for (Map map : maps) {
                                                        if (Strings.isNotEmpty(map.get("v").toString())) {
                                                            joint.add(Double.parseDouble(map.get("v").toString()));
                                                        } else {
                                                            joint.add(-1.0);
                                                        }
                                                    }
                                                }
                                            } else {
                                                joint.add(-1.0);
                                            }
                                        }
                                    }
                                    // å¦‚果导线温度的值大于耐张和接续的值,那么就是合格
                                    if (!strain.isEmpty() && !wire.isEmpty() && (strain.size() == wire.size())) {
                                        if (wire.contains(-1.0) || strain.contains(-1.0)) {
                                            insProductMapper.update(null, new LambdaUpdateWrapper<InsProduct>()
                                                    .set(InsProduct::getInsResult, 2)
                                                    .eq(InsProduct::getSpecialItemParentId, parentInsProduct.getId())
                                                    .eq(InsProduct::getInspectionItem, insProduct1.getInspectionItem())
                                                    .eq(InsProduct::getInspectionItemSubclass, "耐张温度"));
                                            strainPending = true;
                                        } else {
                                            for (int i = 0; i < wire.size(); i++) {
                                                if (wire.get(i) <= strain.get(i)) {
                                                    strainFlag = false;
                                                    break;
                                                }
                                            }
                                        }
                                    }
                                    if (joint.size() > 0 && wire.size() > 0 && (joint.size() == wire.size())) {
                                        if (wire.contains(-1.0) || joint.contains(-1.0)) {
                                            insProductMapper.update(null, new LambdaUpdateWrapper<InsProduct>()
                                                    .set(InsProduct::getInsResult, 2)
                                                    .eq(InsProduct::getSpecialItemParentId, parentInsProduct.getId())
                                                    .eq(InsProduct::getInspectionItem, insProduct1.getInspectionItem())
                                                    .eq(InsProduct::getInspectionItemSubclass, "接续温度"));
                                            jointPending = true;
                                        } else {
                                            for (int i = 0; i < wire.size(); i++) {
                                                if (wire.get(i) <= joint.get(i)) {
                                                    jointFlag = false;
                                                    break;
                                                }
                                            }
                                        }
                                    }
                                    if (!strainPending) {
                                        if (strainFlag) {
                                            insProductMapper.update(null, new LambdaUpdateWrapper<InsProduct>()
                                                    .set(InsProduct::getInsResult, 1)
                                                    .eq(InsProduct::getSpecialItemParentId, parentInsProduct.getId())
                                                    .eq(InsProduct::getInspectionItem, insProduct1.getInspectionItem())
                                                    .eq(InsProduct::getInspectionItemSubclass, "耐张温度"));
                                        } else {
                                            insProductMapper.update(null, new LambdaUpdateWrapper<InsProduct>()
                                                    .set(InsProduct::getInsResult, 0)
                                                    .eq(InsProduct::getSpecialItemParentId, parentInsProduct.getId())
                                                    .eq(InsProduct::getInspectionItem, insProduct1.getInspectionItem())
                                                    .eq(InsProduct::getInspectionItemSubclass, "耐张温度"));
                                        }
                                    }
                                    if (!jointPending) {
                                        if (jointFlag) {
                                            insProductMapper.update(null, new LambdaUpdateWrapper<InsProduct>()
                                                    .set(InsProduct::getInsResult, 1)
                                                    .eq(InsProduct::getSpecialItemParentId, parentInsProduct.getId())
                                                    .eq(InsProduct::getInspectionItem, insProduct1.getInspectionItem())
                                                    .eq(InsProduct::getInspectionItemSubclass, "接续温度"));
                                        } else {
                                            insProductMapper.update(null, new LambdaUpdateWrapper<InsProduct>()
                                                    .set(InsProduct::getInsResult, 0)
                                                    .eq(InsProduct::getSpecialItemParentId, parentInsProduct.getId())
                                                    .eq(InsProduct::getInspectionItem, insProduct1.getInspectionItem())
                                                    .eq(InsProduct::getInspectionItemSubclass, "接续温度"));
                                        }
                                    }
                                }
                                // æŸ¥æ‰¾æ˜¯å¦æœ‰æœªæ£€æµ‹çš„æ¬¡æ•°
                                List<Integer> insResult = Arrays.asList(0, 1, 3);
                                List<InsProduct> insProducts = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
                                        .eq(InsProduct::getSpecialItemParentId, parentInsProduct.getId())
                                        .and(w -> w.notIn(InsProduct::getInsResult, insResult)
                                                .or()
                                                .isNull(InsProduct::getInsResult)));
                                if (insProducts.isEmpty()) {
                                    List<InsProduct> insProducts1 = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
                                            .eq(InsProduct::getSpecialItemParentId, parentInsProduct.getId())
                                            .eq(InsProduct::getInsResult, 0));
                                    if (!insProducts1.isEmpty()) {
                                        insProductMapper.update(null, new LambdaUpdateWrapper<InsProduct>()
                                                .set(InsProduct::getInsResult, 0)
                                                .eq(InsProduct::getId, parentInsProduct.getId()));
                                    } else {
                                        insProductMapper.update(null, new LambdaUpdateWrapper<InsProduct>()
                                                .set(InsProduct::getInsResult, 1)
                                                .eq(InsProduct::getId, parentInsProduct.getId()));
                                    }
                                }
                            }
                        }
                        //添加工时记录
                        InsProduct finalInsProduct = insProduct;
                        WorkTimeDTO workTimeDTO = new WorkTimeDTO(userId, insOrder, insSample, finalInsProduct, parentInsProduct, currentSampleId, k, oldResults, newResult);
                        String jsonStr;
                        try {
                            jsonStr = JackSonUtil.marshal(workTimeDTO);
                        } catch (Exception e) {
                            throw new RuntimeException(e);
                        }
                        String routerKey;
                        switch (sonLaboratory){
                            case "材料试验室":
                                routerKey = RouterKeyConstants.CL_KEY;
                                break;
                            case "机械性能试验室":
                                routerKey = RouterKeyConstants.JX_KEY;
                                break;
                            case "电力试验室":
                                routerKey = RouterKeyConstants.DL_KEY;
                                break;
                            default:
                                routerKey = RouterKeyConstants.GX_KEY;
                                break;
                        }
                        sendQueueMessage(ExchangeConstants.WORK_TIME_EXCHANGE,routerKey,jsonStr);
                        insSample.setInsState(1);
                        //未检验的检验项数量
                        Long unInsCount = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
                                .eq(InsProduct::getInsSampleId, insSample.getId())
                                .and(wrapper -> wrapper
                                        .isNull(InsProduct::getInsResult)
                                        .or()
                                        .eq(InsProduct::getInsResult, 2)
                                ));
                        if (0 == unInsCount) {
                            insSample.setInsState(2);
                        }
                        insSampleMapper.updateById(insSample);
                        /*校验一下result表*/
                        List<InsProductResult> insProductResults = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery()
                                .eq(InsProductResult::getInsProductId, insProduct.getId()));
                        if (insProductResults.size() > 1) {
                            for (int i = 1; i < insProductResults.size(); i++) {
                                insProductResultMapper.deleteById(insProductResults.get(i));
                            }
                        }
                    }
                });
                String sampleIdStr = insContext.keySet().stream().findFirst().orElse(null);
                if (sampleIdStr != null) {
                    int count = insProductMapper.selectInsProductCountByOrderId(orderId);
                    if (count == 0) {
                        insOrderStateMapper.update(new InsOrderState(), Wrappers.<InsOrderState>lambdaUpdate()
                                .eq(InsOrderState::getInsOrderId, orderId)
                                .eq(InsOrderState::getLaboratory, sonLaboratory)
                                .set(InsOrderState::getInsState, 2));
                        insOrderMapper.update(null, new LambdaUpdateWrapper<InsOrder>()
                                .set(InsOrder::getState, 4)
                                .eq(InsOrder::getId, orderId));
                    } else {
                        insOrderStateMapper.update(new InsOrderState(), Wrappers.<InsOrderState>lambdaUpdate()
                                .eq(InsOrderState::getInsOrderId, orderId)
                                .eq(InsOrderState::getLaboratory, sonLaboratory)
                                .set(InsOrderState::getInsState, 1));
                        insOrderMapper.update(null, new LambdaUpdateWrapper<InsOrder>()
                                .set(InsOrder::getInsState, 1)
                                .eq(InsOrder::getId, orderId));
                    }
                }
            }
        }catch (Exception e){
            log.error("工时计算失败-->当前样品ID:{},检验详情:{}",currentSampleId,insContext);
            throw new RuntimeException(e);
        }finally {
            if(lock.isLocked())lock.unlock();
        }
    }
    /**
     * æŸ¥æ‰¾å°æ•°ä½æ•°æœ€å¤šçš„æ•°å€¼
     */
    public Map<String,Object> maxDecimalNumber(String tells) {
        HashMap<String, Object> map = new HashMap<>();
        Pattern pattern = Pattern.compile("[-+]?\\d*\\.?\\d+");
        Matcher matcher = pattern.matcher(tells);
        String tell = "";
        Integer maxNumber = 0;
        while (matcher.find()) {
            String group = matcher.group();
            Integer length = 0;
            if(group.contains(".")) {
                 length = group.split("\\.")[1].length();
            }else {
                length = 0;
            }
            if(length > maxNumber) {
                maxNumber = length;
                tell = group;
            }
        }
        map.put("tell",tell);
        map.put("maxNumber",maxNumber);
        return map;
    }
    /**
     * å°æ•°ä½æ•°çš„补全
     */
    public String completion(String value, Integer digit) {
        if(NumberUtil.isDouble(value)) {
            int length = 0;
            String[] splits = value.split("\\.");
            if(splits.length>1){
                length = splits[1].length();
            }
            if(digit > length) {
                int difference =  digit - length;
                for (int i = 0; i < difference; i++) {
                    value += "0";
                }
            }
        }
        return value;
    }
    //交接
    @Override
    public int upPlanUser(Integer userId, Integer orderId, String sonLaboratory) {
        InsSampleUser insSampleUser = new InsSampleUser();
        insSampleUser.setUserId(userId);
        insSampleUser.setInsSampleId(orderId);
        insSampleUser.setState(0);
        insSampleUser.setSonLaboratory(sonLaboratory);
        return insSampleUserMapper.insert(insSampleUser);
    }
    //根据单元格的文本内容计算实际行高
    private int estimateCellHeight(CellRenderData cellRenderData) {
        // å‡è®¾é»˜è®¤è¡Œé«˜æ˜¯40
        int defaultHeight = 40;
        // èŽ·å–å•å…ƒæ ¼ä¸­çš„æ‰€æœ‰æ®µè½
        List<ParagraphRenderData> paragraphs = cellRenderData.getParagraphs();
        int estimatedHeight = 0;
        try {
            // éåŽ†æ®µè½ï¼Œä¼°ç®—æ¯ä¸ªæ®µè½çš„é«˜åº¦
            for (ParagraphRenderData paragraph : paragraphs) {
                List<RenderData> contents = paragraph.getContents();
                for (RenderData content : contents) {
                    if (content instanceof TextRenderData) {
                        TextRenderData text = (TextRenderData) content;
                        Style style = text.getStyle();
                        // å‡è®¾æ¯è¡Œæ–‡æœ¬çš„高度为字体大小的1.2倍
                        Double fontSize = Objects.isNull(style.getFontSize()) ? 12.0 : style.getFontSize();
                        int lines = (int) Math.ceil(text.getText().length() / 15.0); // å‡è®¾æ¯è¡Œçº¦15个字符
                        int textHeight = (int) (fontSize * 1.2 * lines);
                        // ç´¯åŠ æ®µè½çš„é«˜åº¦
                        estimatedHeight += textHeight;
                    }
                }
            }
        }catch (Exception ignored){}
        // è¿”回最大值,确保高度不低于默认高度
        return Math.max(estimatedHeight, defaultHeight);
    }
    /**
     * å‘送队列消息
     * @param exchange   äº¤æ¢æœºåç§°
     * @param routerKey è·¯ç”±ä¸»é”®
     * @param jsonStr   æ¶ˆæ¯å†…容
     */
    public void sendQueueMessage(String exchange,String routerKey,String jsonStr){
        rabbitTemplate.convertAndSend(exchange,routerKey,jsonStr);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int verifyPlan(Integer orderId, String laboratory, Integer type, String tell) {
        int num = (type == 1 ? 5 : 4);
        LocalDateTime now = LocalDateTime.now();
        insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate().eq(InsOrderState::getInsOrderId, orderId).eq(InsOrderState::getLaboratory, laboratory).set(InsOrderState::getInsTime, now).set(InsOrderState::getInsState, num).set(InsOrderState::getVerifyTell, tell).set(InsOrderState::getVerifyUser, SecurityUtils.getUserId()));
        Long count = insOrderStateMapper.selectCount(Wrappers.<InsOrderState>lambdaQuery().eq(InsOrderState::getInsOrderId, orderId).ne(InsOrderState::getInsState, 5));
        if (count == 0 && num == 5) {
            List<InsUnPass> insUnPasses = new ArrayList<>();
            /*样品下的项目只要有一个项目不合格则检验结果为0,否则为1*/
            //这里的insSamples是订单下的所有样品包括("/")
            List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId));
            for (InsSample insSample : insSamples) {
                List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getInsSampleId, insSample.getId()).eq(InsProduct::getState, 1));
                List<Integer> results = insProducts.stream().map(InsProduct::getInsResult).filter(Objects::nonNull).collect(Collectors.toList());
                if (results.contains(0)) {
                    insSample.setInsResult(0);
                } else {
                    insSample.setInsResult(1);
                }
                insSampleMapper.updateById(insSample);
                /*复核通过后,将不合格的项目信息添加到ins_un_pass表中*/
                for (InsProduct insProduct : insProducts) {
                    if (insProduct.getInsResult() == 0) {
                        InsUnPass insUnPass = new InsUnPass();
                        insUnPass.setId(null);
                        insUnPass.setModel(insSample.getModel());
                        insUnPass.setSample(insSample.getSample());
                        insUnPass.setInspectionItem(insProduct.getInspectionItem());
                        insUnPass.setInspectionItemSubclass(insProduct.getInspectionItemSubclass());
                        insUnPass.setLastValue(insProduct.getLastValue());
                        insUnPass.setEntrustCode(insOrderMapper.selectById(orderId).getEntrustCode());
                        List<Integer> userIds = insProductUserMapper.selectList(Wrappers.<InsProductUser>lambdaQuery().eq(InsProductUser::getInsProductId, insProduct.getId())).stream().map(InsProductUser::getCreateUser).distinct().collect(Collectors.toList());
                        if(!userIds.isEmpty()){
                            String name = userMapper.selectBatchIds(userIds).stream().map(User::getName).collect(Collectors.joining(","));
                            insUnPass.setName(name);
                            insUnPasses.add(insUnPass);
                        }
                    }
                }
            }
            insUnPassService.saveBatch(insUnPasses);
            InsOrder insOrder = insOrderMapper.selectById(orderId);
            String oldSampleStr = insOrder.getSample();
            //samples是过滤掉没有检验项目的样品
            List<SampleProductDto> samples = insSampleMapper.selectSampleProductListByOrderId(orderId);
            //查询订单下的去重后的样品名称
            List<String> unqeSampleList = samples.stream().map(InsSample::getSample).distinct().collect(Collectors.toList());
            if(unqeSampleList.size()==1){
                insOrder.setSample(unqeSampleList.get(0));
            }
            InsReport insReport = new InsReport();
            insReport.setCode(insOrder.getEntrustCode());
            insReport.setInsOrderId(orderId);
            List<Map<String, Object>> tables = new ArrayList<>();
            Set<String> standardMethod = new HashSet<>();
            Set<String> deviceSet = new HashSet<>();
            Set<String> models = new HashSet<>();
            AtomicReference<Integer> productSize = new AtomicReference<>(0);
            String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
            Set<String> resultCh = new HashSet<>();
            Set<String> resultEn = new HashSet<>();
            //获取检验项目数量
            Set<String> unEqualSet = new HashSet<>();
            //电力试验室:钢材/铝材样品型号
            List<String> modelDl = new ArrayList<>();
            /*基础报告(根据绘制的原始记录模版形成)*/
            BasicReportHandler basicReportHandler = new BasicReportHandler(baseMapper, this,insSampleMapper);
            basicReportHandler.doWrite(samples,insReport,tables,standardMethod,models,unEqualSet,modelDl,deviceSet);
            productSize.getAndSet(unEqualSet.size());
            String sampleStr = insOrder.getSample();
            if(!modelDl.isEmpty()){
                String model = modelDl.stream().distinct().findFirst().orElse("");
                sampleStr += model;
            }
            /*光纤接头损耗的报告样式*/
            //查询订单下所有样品的检验项目,如果有光纤接头损耗则重新构建表格
            List<Map<String, Object>> tables4 = new ArrayList<>();
            //当前订单下的所有检验项
            List<InsProduct> insProducts0 = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                    .eq(InsProduct::getState, 1)
                    .in(InsProduct::getInsSampleId, insSamples.stream().map(InsSample::getId).distinct().collect(Collectors.toList())));
            if (insProducts0.stream().map(InsProduct::getInspectionItem).collect(Collectors.toList()).contains("光纤接头损耗")){
                //处理光纤接头损耗报告
                FiberOpticConnectorLossReportHandler lossReportHandler = new FiberOpticConnectorLossReportHandler(insProductMapper);
                lossReportHandler.doWrite(insProducts0,insSamples,insReport,tables4);
            }
            String url;
            try {
                InputStream inputStream = this.getClass().getResourceAsStream("/static/report-template.docx");
                File file = File.createTempFile("temp", ".tmp");
                OutputStream outputStream = new FileOutputStream(file);
                IOUtils.copy(inputStream, outputStream);
                url = file.getAbsolutePath();
            } catch (FileNotFoundException e) {
                throw new ErrorException("找不到模板文件");
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            StringBuilder standardMethod2 = new StringBuilder();
            for (String s : standardMethod) {
                standardMethod2.append("、").append(s);
            }
            standardMethod2.replace(0, 1, "");
            tables.forEach(table -> {
                table.put("tableSize", tables.size() + 1);
            });
            List<DeviceVO> deviceList = new ArrayList<>();
            if (!deviceSet.isEmpty()) {
                deviceSet.forEach(d->deviceList.add(insOrderMapper.selectDeviceList(d)));
            }
            Map<String, String> codeStr = new HashMap<>();
            codeStr.put("报告编号", insReport.getCode());
            codeStr.put("样品名称", insOrder.getSample());
            codeStr.put("规格型号", samples.get(0).getModel());
            codeStr.put("发放日期", now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
            String codePath;
            try {
                String content = phoneQrCode+ insOrder.getEntrustCode() + "&type=word";
                codePath = new MatrixToImageWriter().code(content, twoCode);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
            String modelStr = "";
            for (String model : models) {
                modelStr += "," + model;
            }
            String finalModelStr = modelStr;
            String sampleEn = insSampleMapper.getSampleEn(insOrder.getSample());
            insOrder.setSample(sampleStr);
            String orderType = insOrderMapper.getEnumLabelByValue(insOrder.getOrderType());
            String formType = insOrderMapper.getEnumLabelByValue(insOrder.getFormType());
            ConfigureBuilder builder = Configure.builder();
            builder.useSpringEL(true);
            List<DeviceVO> finalDeviceList = deviceList;
            Integer userId = insSampleUserMapper.selectOne(Wrappers.<InsSampleUser>lambdaQuery()
                    .eq(InsSampleUser::getInsSampleId, orderId)
                    .eq(InsSampleUser::getState,0)
                    .orderByDesc(InsSampleUser::getCreateTime)
                    .last("limit 1")).getUserId();
            String signatureUrl;
            try {
                signatureUrl = userMapper.selectById(userId).getSignatureUrl();
            } catch (Exception e) {
                throw new ErrorException("找不到检验人的签名");
            }
            if (ObjectUtils.isEmpty(signatureUrl) || signatureUrl.isEmpty()) {
                throw new ErrorException("找不到检验人的签名");
            }
            //如果是中天科技软微缆厂(02),报告展示委托单位为中天科技光缆总厂(01)
            Custom custom = customMapper.selectById(insOrder.getCompanyId());
            if(!Objects.isNull(custom) && Objects.equals("中天科技软微缆厂",custom.getCompany())){
                //中天科技光缆总厂客户信息
                custom = customMapper.selectOne(Wrappers.<Custom>lambdaQuery()
                        .eq(Custom::getCompany,"中天科技光缆总厂")
                        .eq(Custom::getCode2,"01").last("limit 1"));
            }
            //合格数量
            long qualifiedCount = insProducts0.stream().filter(f->f.getInsResult()==1).count();
            //格式化不合格项目
            joinUnqualifiedItemChars(resultCh,resultEn,insProducts0);
            String resultChStr = "依据委托要求,所检项目均符合要求。";
            String resultEnStr = "According to commissioned requirements, all the tested items meet the requirements.";
            if (!resultCh.isEmpty() && qualifiedCount>0) {
                resultChStr = "依据委托要求," + String.join("、",resultCh) + "所检项目不符合要求,其余所检项目均符合要求。";
                resultEnStr = "According to commissioned requirements," + String.join("、",resultEn) + " these inspected items do not meet the requirements, all other inspected items meet the requirements.";
            }else if(!resultCh.isEmpty() && qualifiedCount==0){
                resultChStr = "依据委托要求,所检项目均不符合要求。";
                resultEnStr = "According to commissioned requirements, all the tested items do not meet the requirements.";
            }
            //光纤附件表格数据
            List<Map<String, Object>> tables2 = new ArrayList<>();
            //松套管附件表格数据
            List<Map<String, Object>> tables5 = new ArrayList<>();
            //尺寸参数附件表格数据
            List<Map<String, Object>> tables6 = new ArrayList<>();
            /*光纤配置的检验报告*/
            //先判断是否有光纤配置
            List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                    .eq(InsProduct::getState, 1)
                    .in(InsProduct::getInsSampleId, insSamples.stream().map(InsSample::getId).distinct().collect(Collectors.toList()))
                    .and(i->i.isNull(InsProduct::getInspectionItemClass).or().eq(InsProduct::getInspectionItemClass,""))
                    );//用检验分项字段区别光纤配置与温度循环
            //查询全色谱,过滤色标并排序
            List<String> colorList = DictUtils.getDictCache("色标").stream()
                    .sorted(Comparator.comparing(SysDictData::getDictSort))
                    .map(SysDictData::getDictValue)
                    .collect(Collectors.toList());
            //松套管附件处理
            long piperCount = insProducts.stream().filter(f->!Objects.isNull(f.getInsBushId())).count();
            if(piperCount>0){
                PiperConfigReportHandler piperConfigReportHandler = new PiperConfigReportHandler(insProductMapper);
                piperConfigReportHandler.doWrite(samples,insReport,tables5,colorList);
            }
            //过滤有光纤配置的项目
            long fiberCount = insProducts.stream().filter(f->!Objects.isNull(f.getInsFiberId())).count();
            FiberConfigReportHandler lossReportHandler = new FiberConfigReportHandler(insProductMapper,insSampleMapper);
            if (fiberCount>0) {
                lossReportHandler.doWrite(samples,insReport,tables2,colorList);
            } else{
                //排除光纤接头损耗和尺寸参数
                List<InsProduct> filterLists = insProducts.stream()
                        .filter(f->!Arrays.asList("光纤接头损耗","尺寸参数","温度循环").contains(f.getInspectionItem())&&f.getSonLaboratory().equals("光纤试验室")).collect(Collectors.toList());
                lossReportHandler.writeFiberEnclosureTableRow(filterLists,tables2,insReport);
            }
            //过滤有光纤带配置的项目
            long fibersCount = insProducts.stream().filter(f->!Objects.isNull(f.getInsFibersId())).count();
            FiberOpticRibbonReportHandler fiberOpticRibbonReportHandler = new FiberOpticRibbonReportHandler(insProductMapper,insSampleMapper);
            if (fibersCount>0) {
                fiberOpticRibbonReportHandler.doWrite(samples,insReport,tables6,colorList);
            } else{
                //过滤尺寸参数项目
                List<InsProductFiberVO> productList = new ArrayList<>();
                insSamples.stream()
                        .map(InsSample::getId).distinct()
                        .forEach(id->productList.addAll(insProductMapper.selectProductBySampleId(id)));
                List<InsProductFiberVO> vos = productList.stream().filter(f->f.getInspectionItem().equals("尺寸参数")).collect(Collectors.toList());
                if(!vos.isEmpty()){
                    fiberOpticRibbonReportHandler.writeFiberOpticRibbonEnclosureTableRow(vos,tables6,insReport);
                }
            }
            tables2.forEach(table2 -> table2.put("tableSize2", tables2.size()));
            tables5.forEach(table5 -> table5.put("tableSize5", tables5.size()));
            tables6.forEach(table6 -> table6.put("tableSize6", tables6.size()));
            /*温度循环的检验报告*/
            //先判断是否有温度循环
            List<InsProduct> insProducts3 = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                    .eq(InsProduct::getState, 1)
                    .in(InsProduct::getInsSampleId, insSamples.stream().map(InsSample::getId).distinct().collect(Collectors.toList()))
                    .isNotNull(InsProduct::getSpecialItemParentId)  //区分常规项目
                    .isNotNull(InsProduct::getInspectionItemClass)//用检验分项字段区别光纤配置与温度循环
                    .isNotNull(InsProduct::getInsFiberId)); //用光纤区别热循环和温度循环
            List<Map<String, Object>> tables3 = new ArrayList<>();
            if (!insProducts3.isEmpty()) {
                //处理温度循环报告
                TemperatureCyclingReportHandler1 cyclingReportHandler = new TemperatureCyclingReportHandler1(insProductMapper, insFiberMapper, insProductResultMapper);
                cyclingReportHandler.doWrite(samples,insReport,tables3);
            }
            /*温升试验的检验报告*/
            List<InsProduct> insProducts1 = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                    .eq(InsProduct::getState, 1)
                    .in(InsProduct::getInsSampleId, insSamples.stream().map(InsSample::getId).distinct().collect(Collectors.toList()))
                    .isNotNull(InsProduct::getSpecialItemParentId)  //区分常规项目
                    .isNull(InsProduct::getInspectionItemClass)//用检验分项字段区别温升试验与热循环
                    .isNull(InsProduct::getInsFiberId) //用光纤区别温升试验和温度循环
                    .eq(InsProduct::getInspectionItem, "1")); //温升试验的循环只有1次
            if (!insProducts1.isEmpty()) {
                //处理温升试验报告
                TemperatureTestReportHandler testReportHandler = new TemperatureTestReportHandler(insProductMapper, insProductResultMapper);
                testReportHandler.doWrite(samples,insReport,tables3);
            }
            /*热循环的检验报告*/
            List<InsProduct> insProducts2 = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                    .eq(InsProduct::getState, 1)
                    .in(InsProduct::getInsSampleId, insSamples.stream().map(InsSample::getId).distinct().collect(Collectors.toList()))
                    .isNotNull(InsProduct::getSpecialItemParentId)  //区分常规项目
                    .isNotNull(InsProduct::getInspectionItemClass)//用检验分项字段区别温升试验与热循环
                    .isNull(InsProduct::getInsFiberId)); //用光纤区别热循环和温度循环
            if (!insProducts2.isEmpty()) {
                //处理热循环报告
                ThermalCycleReportHandler cycleReportHandler = new ThermalCycleReportHandler(insProductMapper, insProductResultMapper);
                cycleReportHandler.doWrite(samples,insReport,tables3);
            }
            //单根垂直燃烧的检验报告
            tables3.forEach(table3 -> {
                table3.put("tableSize3", tables3.size());
            });
            /*获取附件图片类型*/
            List<Map<String, Object>> images = new ArrayList<>();
            List<InsOrderFile> insOrderFiles = insOrderFileMapper.selectList(Wrappers.<InsOrderFile>lambdaQuery().eq(InsOrderFile::getType, 1).eq(InsOrderFile::getInsOrderId, orderId));
            if (CollectionUtils.isNotEmpty(insOrderFiles)) {
                insOrderFiles.forEach(insOrderFile -> {
                    Map<String, Object> image = new HashMap<>();
                    PictureRenderData pictureRenderData = Pictures.ofLocal(imgUrl + "/" + insOrderFile.getFileUrl()).sizeInCm(17, 20).create();
                    image.put("url", pictureRenderData);
                    image.put("report", insReport);
                    images.add(image);
                });
            }
            //委托人和电话字段判断
            if (ObjectUtils.isEmpty(insOrder.getPrepareUser())) {
                insOrder.setPrepareUser("/");
            }
            if (ObjectUtils.isEmpty(insOrder.getPhone())) {
                insOrder.setPhone("/");
            }
            //查询审批签名配置
            Map<String,Object> urlMap = insReportApproveConfigMapper.selectApprovalConfigByLaboratory(insOrder.getLaboratory());
            String writeUrl = imgUrl + "/" + (Objects.isNull(urlMap.get("writeUrl"))?"":urlMap.get("writeUrl").toString());//编制人签名url
            String examineUrl = imgUrl + "/" +  (Objects.isNull(urlMap.get("examineUrl"))?"":urlMap.get("examineUrl").toString());//审核人签名url
            String ratifyUrl = imgUrl + "/" +  (Objects.isNull(urlMap.get("ratifyUrl"))?"":urlMap.get("ratifyUrl").toString());//批准人签名url
            //获取场所的报告专用章
            String sealUrl;
            try {
                sealUrl = insReportMapper.getLaboratoryByName(insOrder.getLaboratory());
            } catch (Exception e) {
                throw new ErrorException("找不到报告专用章");
            }
            //检验项目的环境
            InsProduct insProduct = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getState, 1).eq(InsProduct::getInsSampleId, samples.get(0).getId())).get(0);
            String environment = "";
            environment = (ObjectUtils.isNotEmpty(insProduct.getTemperature()) ? insProduct.getTemperature() + "℃ " : "") + (ObjectUtils.isNotEmpty(insProduct.getHumidity()) ? insProduct.getHumidity() + "%" : "");
            String finalEnvironment = environment;
            Custom finalCustom = custom;
            String finalSealUrl = imgUrl + "/" +sealUrl;
            String finalResultChStr = resultChStr;
            String finalResultEnStr = resultEnStr;
            ZipSecureFile.setMinInflateRatio(0.001);
            XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render(
                    new HashMap<String, Object>() {{
                        put("order", insOrder);
                        put("report", insReport);
                        put("environment", finalEnvironment);
                        put("custom", finalCustom);
                        put("sampleSize", samples.size());
                        put("tables", tables);
                        put("tableSize", tables.size() + 1);
                        put("tables2", tables2.isEmpty()?null:tables2);
                        put("tableSize2", tables2.size());
                        put("tables3", tables3.isEmpty()?null:tables3);
                        put("tableSize3", tables3.size());
                        put("tables4", tables4.isEmpty()?null:tables4);
                        put("tableSize4", tables4.size());
                        put("tables5", tables5.isEmpty()?null:tables5);
                        put("tableSize5", tables5.size());
                        put("tables6", tables6.isEmpty()?null:tables6);
                        put("tableSize6", tables6.size());
                        put("standardMethod", (standardMethod2.toString().equals("null") ? "" : standardMethod2));
                        put("deviceList", finalDeviceList);
                        put("twoCode", Pictures.ofLocal(codePath).create());
                        put("models", finalModelStr.replace(",", ""));
                        put("productSize", productSize);
                        put("createTime", now.format(DateTimeFormatter.ofPattern("yyyyå¹´MM月dd日")));
                        put("createTimeEn", monthNames[now.getMonthValue() - 1] + " " + now.getDayOfMonth() + ", " + now.getYear());
                        put("insTime", insOrder.getInsTime().format(DateTimeFormatter.ofPattern("yyyyå¹´MM月dd日")));
                        put("insTimeEn", monthNames[insOrder.getInsTime().getMonthValue() - 1] + " " + insOrder.getInsTime().getDayOfMonth() + ", " + insOrder.getInsTime().getYear());
                        put("writeUrl", new FilePictureRenderData(100,50, writeUrl));
                        put("insUrl", new FilePictureRenderData(100,50,imgUrl + "/" + signatureUrl));
                        put("images", images.isEmpty()?null:images);
                        put("examineUrl", new FilePictureRenderData(100,50,examineUrl));
                        put("ratifyUrl", new FilePictureRenderData(100,50,ratifyUrl));
                        put("sampleEn", sampleEn);
                        put("orderType", orderType);
                        put("getTime", insOrder.getExamineTime().format(DateTimeFormatter.ofPattern("yyyyå¹´MM月dd日")));
                        put("getTimeEn", monthNames[insOrder.getExamineTime().getMonthValue() - 1] + " " + insOrder.getExamineTime().getDayOfMonth() + ", " + insOrder.getExamineTime().getYear());
                        put("seal1", new FilePictureRenderData(600,600, finalSealUrl));
                        put("seal2", new FilePictureRenderData(600,600, finalSealUrl));
                        put("formTypeCh", formType);
                        put("formTypeEn", insOrder.getFormType());
                        put("resultCh", finalResultChStr);
                        put("resultEn", finalResultEnStr);
                    }});
            // æ›´æ–°æ•°æ®åº“中的签发日期
            insOrderService.update(Wrappers.<InsOrder>lambdaUpdate()
                    .eq(InsOrder::getId, insOrder.getId())
                    .set(InsOrder::getIssuingDate, now));
            try {
                String name = insReport.getCode().replace("/", "") + ".docx";
                template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
                insReport.setUrl("/word/" + name);
                insReport.setIsExamine(-9);//未审核状态为-9
                insReport.setIsRatify(-9);//未批准状态为-9
                insReportMapper.insert(insReport);
                insOrder.setInsState(5);
                insOrder.setSample(oldSampleStr);
                insOrderMapper.updateById(insOrder);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            // å¤„理合并单元格的问题
            String path = wordUrl + "/" + insReport.getCode().replace("/", "") + ".docx";
            // word è½¬ pdf
            String tempUrlPdf = insReportService.wordToPdfTemp((StrUtil.isBlank(insReport.getUrlS()) ? insReport.getUrl() : insReport.getUrlS()).replace("/word", wordUrl));
            insReportMapper.update(null,new LambdaUpdateWrapper<InsReport>()
                    .set(InsReport::getTempUrlPdf,tempUrlPdf)
                    .eq(InsReport::getId,insReport.getId()));
            try {
                ZipSecureFile.setMinInflateRatio(0.0001);//解决附件文件过大引发的ZipBom异常
                FileInputStream stream = new FileInputStream(path);
                XWPFDocument document = new XWPFDocument(stream);
                List<XWPFTable> xwpfTables = document.getTables();
                for (int i = 0; i < xwpfTables.size(); i++) {
                    Set<String> set1 = new HashSet<>();
                    Map<String, Map<String, Integer>> maps = new HashMap<>();
                    for (int j = 0; j < xwpfTables.get(i).getRows().size(); j++) {
                        for (int k = 0; k < xwpfTables.get(i).getRows().get(j).getTableCells().size(); k++) {
                            if (xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().indexOf("∑") > -1) {
                                String[] split = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("∑");
                                if (set1.add(split[1])) {
                                    Map<String, Integer> map = new HashMap<>();
                                    map.put("sr", j);
                                    map.put("sc", k);
                                    map.put("er", j + 0);
                                    map.put("ec", k + 0);
                                    maps.put(split[1], map);
                                } else {
                                    Map<String, Integer> map1 = maps.get(split[1]);
                                    if (j == map1.get("sr")) {
                                        map1.put("ec", map1.get("ec") + 1);
                                    } else if (k == map1.get("sc")) {
                                        map1.put("er", map1.get("er") + 1);
                                    }
                                }
                                String str = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("∑")[0];
                                xwpfTables.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
                                xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setText(str);
                                xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
                                xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getParagraphArray(0).setAlignment(ParagraphAlignment.CENTER);
                            }
                        }
                    }
                    // å•元格排序, é¿å…æ ¼å¼é”™ä¹±
                    List<Map.Entry<String, Map<String, Integer>>> entries = new ArrayList<>(maps.entrySet());
                    entries.sort((o1, o2) -> o1.getValue().get("sc") - o2.getValue().get("sc"));
                    // æŒ‰ç…§é¡ºåºæ·»åŠ è¿›é›†åˆ
                    List<String> list = new ArrayList<>();
                    for (Map.Entry<String, Map<String, Integer>> entry : entries) {
                        list.add(entry.getKey());
                    }
                /*List<String> list = new ArrayList<>();
                for (String s : maps.keySet()) {
                    list.add(s);
                }*/
                    for (int a = list.size() - 1; a >= 0; a--) {
                        Map<String, Integer> v = maps.get(list.get(a));
                        for (int j = 0; j < v.get("er") - v.get("sr") + 1; j++) {
                            if (v.get("ec") > v.get("sc")) {
                                try {
                                    TableTools.mergeCellsHorizonal(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec"));
                                } catch (Exception e) {
                                }
                            }
                        }
                        if (v.get("er") > v.get("sr")) {
                            try {
                                TableTools.mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er"));
                            } catch (Exception e) {
                            }
                        }
                    }
                }
                FileOutputStream fileOutputStream = new FileOutputStream(path);
                document.write(fileOutputStream);
                fileOutputStream.close();
            } catch (FileNotFoundException e) {
                throw new RuntimeException(e);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            //处理中英文换行的问题
            try {
                FileInputStream stream1 = new FileInputStream(path);
                XWPFDocument document1 = new XWPFDocument(stream1);
                List<XWPFTable> xwpfTables1 = document1.getTables();
                for (int i = 1; i < xwpfTables1.size() - (deviceList == null ? 1 : 2); i++) {
                    for (int j = 0; j < xwpfTables1.get(i).getRows().size(); j++) {
                        for (int k = 0; k < xwpfTables1.get(i).getRows().get(j).getTableCells().size(); k++) {
                            if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("@")) {
                                String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText();
                                String[] split = text.split("@");
                                xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
                                XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph();
                                XWPFRun run = xwpfParagraph.createRun();
                                run.setText(split.length>0?split[0]:"");
                                if (split.length>1 && ObjectUtils.isNotNull(split[1])) {
                                    run.addBreak();
                                    run.setText(split[1]);
                                }
                                xwpfParagraph.setAlignment(ParagraphAlignment.CENTER);
                            }
                        }
                    }
                }
                FileOutputStream fileOutputStream1 = new FileOutputStream(path);
                document1.write(fileOutputStream1);
                fileOutputStream1.close();
            } catch (FileNotFoundException e) {
                throw new RuntimeException(e);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        } else if(num != 5) {
            //复核不通过将把复核的负责人去掉
            Integer id = insSampleUserMapper.selectOne(Wrappers.<InsSampleUser>lambdaQuery().eq(InsSampleUser::getInsSampleId, orderId).orderByDesc(InsSampleUser::getId).last("limit 1")).getId();
            insSampleUserMapper.deleteById(id);
        }
        return 1;
    }
    /**
     * æ ¼å¼åŒ–不合格项目字符串
     * @param resultCh ä¸åˆæ ¼é¡¹ç›®ä¸­æ–‡åˆ—表
     * @param resultEn ä¸åˆæ ¼é¡¹ç›®è‹±æ–‡åˆ—表
     * @param insProducts0 æ£€éªŒé¡¹åˆ—表
     */
    private void joinUnqualifiedItemChars(Set<String> resultCh, Set<String> resultEn, List<InsProduct> insProducts0) {
        if(!insProducts0.isEmpty()){
            insProducts0.stream().filter(f->f.getInsResult()==0).forEach(e->{
                String chinaStr = String.join("-",e.getInspectionItem(),e.getInspectionItemSubclass());
                String englishStr = String.join("-",e.getInspectionItemEn(),e.getInspectionItemSubclassEn());
                resultCh.add(chinaStr);
                resultEn.add(englishStr);
            });
        }
    }
    public void getTemplateThing
            (Set<Integer> set, Map<Integer, String> map2, List<InsProduct> insProducts) {
        for (InsProduct product : insProducts) {
            if (product.getSpecialItemParentId()!=null) {
                product.setTemplate(new ArrayList<>());
                continue;
            }
            String thing = null;
            if (product.getSpecialItemParentId() == null && set.add(product.getTemplateId())) {
                map2.put(product.getTemplateId(), standardTemplateService.getStandTempThingById(product.getTemplateId()) + "");
                thing = map2.get(product.getTemplateId());
            }
            if (StrUtil.isNotEmpty(thing)) {
                JSONObject sheet = JSON.parseObject(JSON.toJSONString(JSON.parseArray(JSON.toJSONString(JSON.parseObject(thing).get("data"))).get(0)));
                JSONObject config = JSON.parseObject(JSON.toJSONString(sheet.get("config")));
                List<JSONObject> cellData = JSON.parseArray(JSON.toJSONString(sheet.get("celldata")), JSONObject.class);
                Map<String, Object> style = new HashMap<>();
                style.put("rowlen", config.get("rowlen"));
                style.put("columnlen", config.get("columnlen"));
                product.setTemplate(cellData);
                product.setStyle(style);
                product.setTemplateName(standardTemplateService.getStandTempNameById(product.getTemplateId()));
            }
        }
    }
    @Override
    public int submitPlan(Integer orderId, String laboratory, Integer verifyUser, String entrustCode) {
        List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId).select(InsSample::getId));
        List<Integer> ids = insSamples.stream().map(a -> a.getId()).collect(Collectors.toList());
        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                .in(InsProduct::getInsSampleId, ids)
                .eq(InsProduct::getSonLaboratory, laboratory)
                .eq(InsProduct::getState, 1)
                .and(wrapper -> wrapper
                        .isNull(InsProduct::getInsResult)
                        .or()
                        .eq(InsProduct::getInsResult, 2)
                )
                .isNull(InsProduct::getInsFiberId)
                .isNull(InsProduct::getInsFibersId));
        insProducts.addAll(insProductMapper.selectFiberInsProduct(ids, laboratory));
        if (insProducts.size() > 0) {
            String str = "";
            HashSet<String> set = new HashSet<>();
            int count = 0;
            for (InsProduct product : insProducts) {
                //如果是光缆的温度循环
                if (product.getInspectionItem().equals("温度循环") && insOrderMapper.selectById(orderId).getSampleType().equals("光缆")) {
                    //查询那些循环温度的检验项目的结论是否全部检验
                    List<InsProduct> insProductList = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getInsSampleId, product.getInsSampleId())
                            .isNotNull(InsProduct::getInsFiberId).like(InsProduct::getInspectionItemSubclass, "℃"));
                    List<Integer> collect = insProductList.stream().filter(insProduct -> insProduct.getInsResult() != null).map(InsProduct::getInsResult).collect(Collectors.toList());
                    List<Integer> tt = new ArrayList<>();
                    tt.add(1);
                    if (collect.contains(0)) {
                        product.setLastValue("不合格");
                        product.setInsResult(0);
                    } else if (collect.size() == insProductList.size() && collect.stream().distinct().collect(Collectors.toList()).containsAll(tt)) {
                        product.setLastValue("合格");
                        product.setInsResult(1);
                    }
                    insProductMapper.updateById(product);
                }
                //如果是热循环或者是温升试验
                else if (product.getInspectionItem().equals("热循环") || product.getInspectionItem().equals("温升试验")) {
                    //查询这些项目下的其他检验项目是否全部检验
                    List<InsProduct> insProductList = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                            .eq(InsProduct::getInsSampleId, product.getInsSampleId())
                            .like(InsProduct::getInspectionItemSubclass, "温度"));
                    List<Integer> collect = insProductList.stream().filter(insProduct -> insProduct.getInsResult() != null).map(InsProduct::getInsResult).collect(Collectors.toList());
                    List<Integer> tt = new ArrayList<>();
                    tt.add(1);
                    if (collect.contains(0)) {
                        product.setLastValue("不合格");
                        product.setInsResult(0);
                    } else if (collect.size() == insProductList.size() && collect.stream().distinct().collect(Collectors.toList()).containsAll(tt)) {
                        product.setLastValue("合格");
                        product.setInsResult(1);
                    }
                    insProductMapper.updateById(product);
                }
                //如果是电力的应力应变检验项目或者是疲劳试验,结论改成不判定
                else if (product.getInspectionItem().equals("应力应变") || product.getInspectionItem().contains("疲劳试验")){
                    product.setInsResult(3);
                    insProductMapper.updateById(product);
                }
                //如果是防振锤功率特性试验
                else if (product.getInspectionItem().equals("防振锤功率特性试验")){
                    product.setInsResult(1);//默认合格
                    //需要去判断填写的检验数据是否有不合格
                    InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, product.getId()));
                    cn.hutool.json.JSONObject jsonObject = new cn.hutool.json.JSONObject(insProductResult.getComValue());
                    // æ£€æŸ¥ arr2
                    cn.hutool.json.JSONArray arr2 = jsonObject.getJSONArray("arr2");
                    for (int i = 0; i < arr2.size(); i++) {
                        cn.hutool.json.JSONObject obj = arr2.getJSONObject(i);
                            if (obj.getInt("state") == 2) {
                                product.setInsResult(0);
                                break;
                            }
                    }
                    // æ£€æŸ¥ arr3
                    cn.hutool.json.JSONArray arr3 = jsonObject.getJSONArray("arr3");
                    for (int i = 0; i < arr3.size(); i++) {
                        cn.hutool.json.JSONObject obj = arr3.getJSONObject(i);
                            if (obj.getInt("state") == 2) {
                                product.setInsResult(0);
                                break;
                            }
                    }
                    insProductMapper.updateById(product);
                }
                else {
                    String  notDetected = product.getInspectionItem() + " " + product.getInspectionItemSubclass();
                    if(!set.contains(notDetected)) {
                        count++;
                        str += "<br/>" + count + ":" + product.getInspectionItem() + " " + product.getInspectionItemSubclass() + "<br/>";
                        set.add(notDetected);
                    }
                }
            }
            if (ObjectUtils.isNotEmpty(str)) {
                throw new ErrorException("<strong>存在待检验的项目:</strong><br/>" + str);
            }
        }
        insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate().eq(InsOrderState::getInsOrderId, orderId).eq(InsOrderState::getLaboratory, laboratory).set(InsOrderState::getInsTime, LocalDateTime.now()).set(InsOrderState::getInsState, 3).set(InsOrderState::getVerifyUser, verifyUser));
        Integer userId = SecurityUtils.getUserId().intValue();
        InformationNotification info = new InformationNotification();
        info.setCreateUser(insProductMapper.selectUserById(userId).get("name"));
        info.setMessageType("2");
        info.setTheme("复核通知");
        info.setContent("您有一条检验任务待复核消息");
        info.setSenderId(userId);
        info.setConsigneeId(verifyUser);
        info.setViewStatus(false);
        info.setJumpPath("b1-inspect-order-plan");
        informationNotificationService.addInformationNotification(info);
        //复核人--检验单相关负责人
        InsSampleUser insSampleUser = new InsSampleUser();
        insSampleUser.setUserId(verifyUser);
        insSampleUser.setInsSampleId(orderId);
        insSampleUser.setState(1);
        insSampleUser.setSonLaboratory(laboratory);
        insSampleUserMapper.insert(insSampleUser);
        /*校验一下result表*/
        CompletableFuture.supplyAsync(() -> {
            List<Integer> ips = insProducts.stream().map(InsProduct::getId).distinct().collect(Collectors.toList());
            for (Integer ip : ips) {
                List<InsProductResult> insProductResults = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery()
                        .eq(InsProductResult::getInsProductId, ip));
                if (insProductResults.size() > 1) {
                    for (int i = 1; i < insProductResults.size(); i++) {
                        insProductResultMapper.deleteById(insProductResults.get(i));
                    }
                }
            }
            return null;
        });
        // åˆ é™¤æ•°é‡‡é‡‡é›†æ¬¡æ•°
        String key = "frequency" + ":" + entrustCode + ":*";
        RedisUtil.delsLike(key);
        return 1;
    }
    @Override
    public List<String> getEquipName(Integer orderId,String sonLaboratory) {
        List<Integer> ids = insSampleMapper.selectList(new LambdaQueryWrapper<InsSample>()
                        .eq(InsSample::getInsOrderId, orderId))
                .stream()
                .map(InsSample::getId)
                .collect(Collectors.toList());
        // æŸ¥çœ‹å•子是否选择了设备
        List<String> strList = new ArrayList<>();
        HashSet<String> set = new HashSet<>();
        List<InsProduct> productList = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
                .in(InsProduct::getInsSampleId, ids)
                .eq(InsProduct::getSonLaboratory, sonLaboratory)
                .eq(InsProduct::getState, 1));
        if (CollectionUtils.isNotEmpty(productList)) {
            List<InsProduct> collect = productList.stream()
                    .filter(item -> Objects.isNull(item.getSpecialItemParentId()) || StringUtils.isEmpty(item.getSpecialItemParentId()+""))
                    .collect(Collectors.toList());
            for (InsProduct product : collect) {
                InsProductResult insProductResult = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>()
                        .eq(InsProductResult::getInsProductId, product.getId()));
                if(Objects.nonNull(insProductResult)){
                    if(Objects.isNull(insProductResult.getEquipName()) || StringUtils.isEmpty(insProductResult.getEquipName())) {
                        strList.add(product.getInspectionItem() + " " + product.getInspectionItemSubclass());
                    }else {
                        List<Map> maps = JSONArray.parseArray(insProductResult.getEquipName(), Map.class);
                        if(CollectionUtils.isNotEmpty(maps)) {
                            List<Map> mapList = maps.stream().filter(item -> StringUtils.isEmpty(item.get("v") + "")).collect(Collectors.toList());
                            if(mapList.size() == maps.size()) {
                                strList.add(product.getInspectionItem() + " " + product.getInspectionItemSubclass());
                            }
//                            for (Map map : maps) {
//                                if(StringUtils.isEmpty(map.get("v")+"")){
//                                    strList.add(product.getInspectionItem() + " " + product.getInspectionItemSubclass());
//                                }
//                            }
                        }else {
                            strList.add(product.getInspectionItem() + " " + product.getInspectionItemSubclass());
                        }
                    }
                }
            }
        }
        return strList.stream().distinct().collect(Collectors.toList());
    }
    @Override
    @Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED)
    public int saveInsContext2(InsProductResultDTO insProductResult) {
        Integer userId = SecurityUtils.getUserId().intValue();
        try {
            //检验结果
            Map<String,Object> insValueMap = JackSonUtil.unmarshal(insProductResult.getInsValue(), Map.class);
            //saveInsContext2方法有多个模板调用,需根据模板名称分开处理
            switch (insProductResult.getTemplateName()){
                case "架空地线应力应变":
                    //保存弹性模量和检验结论
                    if(Objects.nonNull(insValueMap.get("elasticityModulus"))){
                        String elasticityModulus = insValueMap.get("elasticityModulus").toString();
                        insProductMapper.update(null,Wrappers.<InsProduct>lambdaUpdate()
                                .set(InsProduct::getInsResult,3)//结论设为不判定
                                .set(InsProduct::getElasticityModulus,elasticityModulus)
                                .eq(InsProduct::getId,insProductResult.getInsProductId())
                        );
                    }
                    //删除弹性模量key
                    insValueMap.remove("elasticityModulus");
                    insProductResult.setInsValue(JackSonUtil.marshal(insValueMap));
                    break;
                case "疲劳试验":
                    //保存检验结果
                    if(Objects.nonNull(insValueMap.get("damage"))){
                        String damage = insValueMap.get("damage").toString();
                        Integer insResult = "符合".equals(damage)?1:0;
                        insProductMapper.update(null,Wrappers.<InsProduct>lambdaUpdate()
                                .set(InsProduct::getInsResult,insResult)
                                .set(InsProduct::getLastValue,damage)
                                .eq(InsProduct::getId,insProductResult.getInsProductId())
                        );
                    }
                    break;
            }
            List<InsProductResult> oldResults = new ArrayList<>();
            InsProductResult insProductResult1 = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>().eq(InsProductResult::getInsProductId, insProductResult.getInsProductId()));
            //新增或更新检验记录
            if (ObjectUtils.isNull(insProductResult1)){
                insProductResultMapper.insert(insProductResult);
            }else {
                insProductResult.setId(insProductResult1.getId());
                oldResults.add(insProductResult1);
                insProductResultMapper.updateById(insProductResult);
            }
            //添加工时记录
            InsOrder insOrder = insOrderMapper.selectById(insProductResult.getOrderId());
            InsSample insSample = insSampleMapper.selectById(insProductResult.getSampleId());
            InsProduct insProduct = insProductMapper.selectById(insProductResult.getInsProductId());
            InsProductResult newInsResult = new InsProductResult();
            BeanUtil.copyProperties(insProductResult,newInsResult);
            WorkTimeDTO workTimeDTO = new WorkTimeDTO(userId,insOrder,insSample,insProduct,null,insProductResult.getSampleId(), String.valueOf(insProductResult.getInsProductId()),oldResults ,newInsResult);
            String jsonStr = JackSonUtil.marshal(workTimeDTO);
            //计算工时
            //TODO:该方法目前只有电力用,默认路由使用电力的
            sendQueueMessage(ExchangeConstants.WORK_TIME_EXCHANGE,RouterKeyConstants.DL_KEY,jsonStr);
        }catch (Exception e){
            throw new RuntimeException(e);
        }
        return 0;
    }
    // èŽ·å–ä¸¤ä¸ªlocalDateTime的每一天
    public static List<LocalDateTime> getLocalDateTimesBetween(LocalDateTime start, LocalDateTime end) {
        List<LocalDateTime> localDateTimes = new ArrayList<>();
        LocalDate currentDate = start.toLocalDate();
        LocalDateTime currentLocalDateTime = start;
        while (!currentDate.isAfter(end.toLocalDate())) {
            localDateTimes.add(currentLocalDateTime);
            currentLocalDateTime = currentLocalDateTime.plusDays(1);
            currentDate = currentDate.plusDays(1);
        }
        return localDateTimes;
    }
    /**
     * æŸ¥è¯¢æ£€éªŒé¡¹å¯¹åº”标准库配置的工时信息
     * @param insProduct
     * @return
     */
    public StandardProductVO getInspectWorkHourAndGroup(InsProduct insProduct){
        StandardProductVO standardProductVO = new StandardProductVO();
        if(!Objects.isNull(insProduct)){
            //查询对应标准库
            List<StandardProductVO> productVO = standardProductListMapper.getStandardProductByInsProduct(
                    insProduct.getLaboratory(),
                    insProduct.getSampleType(),
                    insProduct.getSample(),
                    insProduct.getModel(),
                    insProduct.getInspectionItem(),
                    insProduct.getInspectionItemSubclass(),
                    insProduct.getSonLaboratory(),
                    insProduct.getStandardMethodListId());
            if(!productVO.isEmpty()){
                standardProductVO = productVO.get(0);
            }
            //有区间的检验项,取检验项存的工时信息
            if(StringUtils.isNotBlank(insProduct.getSection()) && StringUtils.isNotBlank(standardProductVO.getSection())){
                try {
                    ObjectMapper objectMapper = new ObjectMapper();
                    //区间设置
                    List<String> sectionList = (List<String>)objectMapper.readValue(standardProductVO.getSection(), List.class);
                    //选中区间的下标
                    int i = sectionList.indexOf(insProduct.getSection());
                    //获取对应下标的工时和工时分组
                    List<Double> hourList = (List<Double>)objectMapper.readValue(standardProductVO.getManHour(), List.class);
                    standardProductVO.setManHour(String.valueOf(hourList.get(i)));
                } catch (JsonProcessingException e) {
                    throw new RuntimeException(e);
                }
            }
        }
        return standardProductVO;
    }
    public static String getWeek(String dayStr) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            Date date = sdf.parse(dayStr);
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
            int day = calendar.get(Calendar.DAY_OF_MONTH);
            return getWeekDay(dayOfWeek);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    public static String getWeekDay(int dayOfWeek) {
        switch (dayOfWeek) {
            case Calendar.MONDAY:
                return "周一";
            case Calendar.TUESDAY:
                return "周二";
            case Calendar.WEDNESDAY:
                return "周三";
            case Calendar.THURSDAY:
                return "周四";
            case Calendar.FRIDAY:
                return "周五";
            case Calendar.SATURDAY:
                return "周六";
            case Calendar.SUNDAY:
                return "周日";
            default:
                return "未知";
        }
    }
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/InsReportServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,942 @@
package com.ruoyi.require.service.impl;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.aspose.words.Document;
import com.aspose.words.License;
import com.aspose.words.SaveFormat;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.data.FilePictureRenderData;
import com.itextpdf.text.BadElementException;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.dto.ReportPageDto;
import com.ruoyi.inspect.mapper.InsOrderMapper;
import com.ruoyi.inspect.mapper.InsOrderStateMapper;
import com.ruoyi.inspect.mapper.InsReportApproveConfigMapper;
import com.ruoyi.inspect.mapper.InsReportMapper;
import com.ruoyi.inspect.pojo.InsOrder;
import com.ruoyi.inspect.pojo.InsOrderState;
import com.ruoyi.inspect.pojo.InsReport;
import com.ruoyi.process.mapper.ProcessReportMapper;
import com.ruoyi.process.pojo.ProcessReport;
import com.ruoyi.require.service.InsReportService;
import com.ruoyi.system.mapper.UserMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.*;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicLong;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
/**
 * @author Administrator
 * @description é’ˆå¯¹è¡¨ã€ins_report(检验报告)】的数据库操作Service实现
 * @createDate 2024-03-17 22:10:02
 */
@Service
@Slf4j
public class InsReportServiceImpl extends ServiceImpl<InsReportMapper, InsReport>
        implements InsReportService {
    @Resource
    private UserMapper userMapper;
    @Resource
    private InsReportMapper insReportMapper;
    @Resource
    ProcessReportMapper processReportMapper;
    @Value("${wordUrl}")
    private String wordUrl;
    @Value("${file.licenseUrl}")
    private String licenseUrl;
    @Value("${file.path}")
    private String imgUrl;
    @Resource
    private InsOrderMapper insOrderMapper;
    @Resource
    private RedisTemplate<String, Object> redisTemplate;
    @Resource
    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
    @Resource
    private InsOrderStateMapper insOrderStateMapper;
    private static final String SYNC_REPORT_KEY_PREFIX = "syncApprovalReport_lock_";
    @Resource
    private InsReportApproveConfigMapper insReportApproveConfigMapper;
    @Override
    public IPage<ReportPageDto> pageInsReport(Page page, ReportPageDto reportPageDto) {
        Map<String, Object> map = new HashMap<>();
        User user = userMapper.selectById(SecurityUtils.getUserId());//当前登录的人
        //获取当前人所属实验室id
        String departLimsId = user.getDepartLimsId();
        String laboratory = null;
        if (ObjectUtils.isNotEmpty(departLimsId) && !departLimsId.isEmpty()) {
            String[] split = departLimsId.split(",");
            //查询对应架构名称(通信实验室,电力实验室,检测办)
            String departLims = insOrderMapper.seldepLimsId(Integer.parseInt(split[split.length - 1]));
            if (departLims.contains("实验室")) {
                laboratory = departLims;
            }
        }
        QueryWrapper<ReportPageDto> wrapper = QueryWrappers.queryWrappers(reportPageDto);
        if(Objects.nonNull(reportPageDto.getCreateTimeRange())){
            wrapper.gt(reportPageDto.getCreateTimeRange().size()>1,"create_time",reportPageDto.getCreateTimeRange().get(0))
                    .lt(reportPageDto.getCreateTimeRange().size()>1,"create_time",reportPageDto.getCreateTimeRange().get(1));
        }
        return insReportMapper.pageInsReport(page, wrapper ,laboratory);
    }
    @Override
    public int inReport(String url, Integer id) {
        InsReport insReport = new InsReport();
        insReport.setId(id);
        insReport.setUrlS(url);
        return insReportMapper.updateById(insReport);
    }
    // è¿˜åŽŸ
    @Override
    public int upReportUrl(Integer id) {
        InsReport insReport = insReportMapper.selectById(id);
        String fileName = insReport.getUrlS().replace("/word/", "");
        if(Strings.isNotEmpty(fileName)) {
            String path = wordUrl + File.separator + fileName;
            File file = new File(path);
            if (file.exists()) {
                file.delete();
            }
        }
        return insReportMapper.update(null, Wrappers.<InsReport>lambdaUpdate().eq(InsReport::getId, id).set(InsReport::getUrlS, null));
    }
    @Override
    public void downReport(Integer id,Integer type, HttpServletResponse response) {
        InsReport insReport = insReportMapper.selectById(id);
        String url = "";
        // 0 ä¸‹è½½docx 1 ä¸‹è½½pdf
        if(type == 0) {
          url  = Strings.isNotEmpty(insReport.getUrlS()) ? insReport.getUrlS() : insReport.getUrl();
        }else {
            url = insReport.getTempUrlPdf();
        }
        if(Strings.isEmpty(url)){
            throw new ErrorException("报告地址为空");
        }
        File file = new File(wordUrl + File.separator + url.replace("/word/", ""));
        try {
            String fileName = file.getName();
            if(fileName.indexOf("_") != -1) {
                fileName = fileName.split("_")[1];
            }
            fileName = URLEncoder.encode(fileName, "UTF-8");
            response.setContentType("application/octet-stream");
            response.setHeader("Content-disposition","attachment;filename=" + fileName);
            ServletOutputStream stream = response.getOutputStream();
            FileInputStream fileInputStream = new FileInputStream(file);
            byte[] bytes = new byte[1024];
            int byteRead;
            while((byteRead = fileInputStream.read(bytes)) != -1){
                stream.write(bytes, 0, byteRead);
                stream.flush();
            }
            fileInputStream.close();
            stream.close();
        }catch (Exception e){
            throw new ErrorException("下载失败");
        }
    }
    //提交
    @Override
    public int writeReport(Integer id) {
        InsReport insReport = insReportMapper.selectById(id);
        insReport.setId(id);
        insReport.setState(1);
        insReport.setWriteTime(LocalDateTime.now());//提交时间
        insReport.setWriteUserId(SecurityUtils.getUserId().intValue());//提交人
        //获取提交人的签名地址
        String signatureUrl;
        try {
            signatureUrl = userMapper.selectById(SecurityUtils.getUserId().intValue()).getSignatureUrl();
        } catch (Exception e) {
            throw new ErrorException("找不到编制人的签名");
        }
        //系统生成报告地址
        String url = insReport.getUrl();
        //手动上传报告地址
        String urlS = insReport.getUrlS();
        wordInsertUrl(new HashMap<String, Object>() {{
            put("writeUrl", new FilePictureRenderData(100,50,imgUrl + "/" + signatureUrl));
        }}, (urlS == null ? url : urlS).replace("/word", wordUrl));
        // ä¿®æ”¹ä¸´æ—¶pdf
        String tempUrlPdf = wordToPdfTemp((StrUtil.isBlank(urlS) ? url : urlS).replace("/word", wordUrl));
        insReport.setTempUrlPdf("/word/" + tempUrlPdf);
        return insReportMapper.updateById(insReport);
    }
    //审核
    @Override
    public int examineReport(Integer id, Integer isExamine, String examineTell) {
        InsReport insReport = insReportMapper.selectById(id);
        insReport.setIsExamine(isExamine);
        if (ObjectUtils.isNotEmpty(examineTell)) {
            insReport.setExamineTell(examineTell);
        }
        insReport.setExamineUserId(SecurityUtils.getUserId().intValue());//审核人
        insReport.setExamineTime(LocalDateTime.now());//审核时间
        if (isExamine == 0) {
            //如果审核不通过
            insReport.setState(0);//提交状态改为待提交
            return insReportMapper.updateById(insReport);
        }
        //获取审核人的签名地址
        String signatureUrl;
        try {
            signatureUrl = userMapper.selectById(insReport.getExamineUserId()).getSignatureUrl();
        } catch (Exception e) {
            throw new ErrorException("找不到审核人的签名");
        }
        //系统生成报告地址
        String url = insReport.getUrl();
        //手动上传报告地址
        String urlS = insReport.getUrlS();
        wordInsertUrl(new HashMap<String, Object>() {{
            put("examineUrl", new FilePictureRenderData(100,50,imgUrl + "/" + signatureUrl));
        }}, (urlS == null ? url : urlS).replace("/word", wordUrl));
        // ä¿®æ”¹ä¸´æ—¶pdf
        String tempUrlPdf = wordToPdfTemp((StrUtil.isBlank(urlS) ? url : urlS).replace("/word", wordUrl));
        insReport.setTempUrlPdf("/word/" + tempUrlPdf);
        return insReportMapper.updateById(insReport);
    }
    //批准
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int ratifyReport(Integer id, Integer isRatify, String ratifyTell) {
        InsReport insReport = insReportMapper.selectById(id);
        insReport.setIsRatify(isRatify);
        if (ObjectUtils.isNotEmpty(ratifyTell)) {
            insReport.setRatifyTell(ratifyTell);
        }
        insReport.setRatifyUserId(SecurityUtils.getUserId().intValue());//批准人
        insReport.setRatifyTime(LocalDateTime.now());//批准时间
        if (isRatify == 0) {
            //如果批准不通过
            insReport.setState(0);//提交状态改为待提交
            return insReportMapper.updateById(insReport);
        }
        //获取批准人的签名地址
        String signatureUrl;
        try {
            signatureUrl = userMapper.selectById(insReport.getRatifyUserId()).getSignatureUrl();
        } catch (Exception e) {
            throw new ErrorException("找不到批准人的签名");
        }
        //获取场所的报告专用章
        String sealUrl;
        try {
            String laboratory = insOrderMapper.selectById(insReport.getInsOrderId()).getLaboratory();
            sealUrl = insReportMapper.getLaboratoryByName(laboratory);
        } catch (Exception e) {
            throw new ErrorException("找不到报告专用章");
        }
        if (sealUrl == null) throw new ErrorException("找不到报告专用章");
        //系统生成报告地址
        String url = insReport.getUrl();
        //手动上传报告地址
        String urlS = insReport.getUrlS();
        String finalUrl = (urlS == null ? url : urlS).replace("/word", wordUrl);
        wordInsertUrl(new HashMap<String, Object>() {{
            put("ratifyUrl", new FilePictureRenderData(100,50,imgUrl + "/" + signatureUrl));
            put("seal1", new FilePictureRenderData(600,600,imgUrl + "/" + sealUrl));
            put("seal2", new FilePictureRenderData(600,600,imgUrl + "/" + sealUrl));
        }}, finalUrl);
        wordToPdf(finalUrl, sealUrl);
        InsOrder insOrder = new InsOrder();
        insOrder.setId(insReportMapper.selectById(id).getInsOrderId());
        insOrder.setState(4);
        insOrderMapper.updateById(insOrder);
        // ä¿®æ”¹ä¸´æ—¶pdf
        String tempUrlPdf = wordToPdfTemp((StrUtil.isBlank(urlS) ? url : urlS).replace("/word", wordUrl));
        insReport.setTempUrlPdf("/word/" + tempUrlPdf);
        /*新增cnas7.8报告结果*/
        ProcessReport processReport = new ProcessReport();
        processReport.setInsReportCode(insReport.getCode());
        processReportMapper.insert(processReport);
        return insReportMapper.updateById(insReport);
    }
    @Override
    public int wordInsertUrl(Map<String, Object> map, String url) {
        XWPFTemplate template = XWPFTemplate.compile(url).render(map);
        try {
            template.writeAndClose(Files.newOutputStream(Paths.get(url)));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return 1;
    }
    //报告批量下载
    @Override
    @Transactional(rollbackFor = Exception.class)
    public String downAll(String ids) {
        List<Long> list = Arrays.stream(ids.split(",")).map(Long::parseLong).collect(Collectors.toList());
        List<InsReport> insReports = insReportMapper.selectBatchIds(list);
        String zipFilePath = null;
        // ä¸´æ—¶æ–‡ä»¶å¤¹è·¯å¾„
        try {
            String tempFolderPath = wordUrl + "/tempFolder";
            File tempFolder = new File(tempFolderPath);
            if (tempFolder.exists()) {
                deleteDirectory(tempFolder); // åˆ é™¤æ—§çš„临时文件夹
            }
            tempFolder.mkdirs(); // åˆ›å»ºæ–°çš„临时文件夹
            for (InsReport insReport : insReports) {
                File sourceFile = new File((ObjectUtils.isNotEmpty(insReport.getUrlS()) ? insReport.getUrlS() : insReport.getUrl()).replace("/word", wordUrl));
                // ä¸‹è½½æ–‡ä»¶åç§°åŽ»é™¤æ—¶é—´
                String destinationFileName = sourceFile.getName();
                if(destinationFileName.indexOf("_") != -1) {
                    destinationFileName = destinationFileName.split("_")[1];
                }
                File destinationFile = new File(tempFolder, destinationFileName);
                Files.copy(sourceFile.toPath(), destinationFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
            }
            // åŽ‹ç¼©ä¸´æ—¶æ–‡ä»¶å¤¹
            zipFilePath = wordUrl + "/zip/output.zip";
            zipDirectory(tempFolderPath, zipFilePath);
            // æ¸…理临时文件夹
            deleteDirectory(tempFolder);
            System.out.println("ZIP文件创建完成!");
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "/word/zip/output.zip";
    }
    //批量上传
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int upAll(MultipartFile file) {
        if (file != null) {
            // æ ¹æ®æ–‡ä»¶åæŸ¥è¯¢id
            String fileName = file.getOriginalFilename();
            String code = fileName.replace(".docx", "").replace("JCZX", "JCZX/");
            if(fileName.lastIndexOf("_") != -1) {
                code = code.substring(file.getOriginalFilename().lastIndexOf("_") + 1);
            }
            //查询未审核的报告数据
            InsReport insReport = insReportMapper.selectOne(Wrappers.<InsReport>lambdaQuery().eq(InsReport::getCode, code).eq(InsReport::getIsExamine,-9));
            if (ObjectUtils.isEmpty(insReport)) {
                throw new ErrorException("没有编号为" + code + "的报告或该报告已审核通过");
            }
            // å¦‚æžœUrlS有值 å…ˆå°†è¯¥æ–‡ä»¶åˆ é™¤
            if(Strings.isNotEmpty(insReport.getUrlS())) {
                String url = wordUrl + File.separator + insReport.getUrlS().replace("/word/", "");
                File file1 = new File(url);
                if(file1.exists()) {
                    file1.delete();
                }
            }
            String urlString;
            String pathName;
            String path = wordUrl;
            File realpath = new File(path);
            if (!realpath.exists()) {
                realpath.mkdirs();
            }
            pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + insReport.getCode().replace("/", "") + ".docx";
            urlString = realpath + "/" + pathName;
            // å¤åˆ¶æ–‡ä»¶åˆ°æŒ‡å®šè·¯å¾„
            try {
                Files.copy(file.getInputStream(), new File(urlString).toPath(), StandardCopyOption.REPLACE_EXISTING);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            inReport("/word/" + pathName, insReport.getId());
        }
//        File tempFile = null;
//        File unzipDir = null;
//        try {
//            tempFile = File.createTempFile(wordUrl, ".zip");
//            file.transferTo(tempFile);
//
//            unzipDir = new File("uploaded_files");
//            if (!unzipDir.exists()) {
//                unzipDir.mkdir();
//            }
//            unzip(tempFile, unzipDir);
//            // å¤„理解压后的文件
//            File[] files = unzipDir.listFiles();
//            if (files != null) {
//                for (File f : files) {
//                    // æ ¹æ®æ–‡ä»¶åæŸ¥è¯¢id
//                    String name = f.getName();
//                    String code = f.getName().replace(".docx", "").replace("JCZX", "JCZX/");
//                    if(f.getName().lastIndexOf("_") != -1) {
//                        code = code.substring(f.getName().lastIndexOf("_") + 1);
//                    }
//                    //InsReport insReport = insReportMapper.selectOne(Wrappers.<InsReport>lambdaQuery().eq(InsReport::getCode, f.getName().replace(".docx", "").replace("JCZX", "JCZX/")));
//                    InsReport insReport = insReportMapper.selectOne(Wrappers.<InsReport>lambdaQuery().eq(InsReport::getCode, code));
//                    if (ObjectUtils.isEmpty(insReport)) {
//                        throw new ErrorException("没有找到 " + f.getName() + " è¿™ä¸ªæ–‡ä»¶å¯¹åº”的报告数据");
//                    }
//                    // å¦‚æžœUrlS有值 å…ˆå°†è¯¥æ–‡ä»¶åˆ é™¤
//                    if(Strings.isNotEmpty(insReport.getUrlS())) {
//                        String url = wordUrl + File.separator + insReport.getUrlS().replace("/word/", "");
//                        File file1 = new File(url);
//                        if(file1.exists()) {
//                            file1.delete();
//                        }
//                    }
//                    String urlString;
//                    String pathName;
//                    try {
//                        String path = wordUrl;
//                        File realpath = new File(path);
//                        if (!realpath.exists()) {
//                            realpath.mkdirs();
//                        }
//                        pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + insReport.getCode().replace("/", "") + ".docx";
//                        urlString = realpath + "/" + pathName;
//                        // å¤åˆ¶æ–‡ä»¶åˆ°æŒ‡å®šè·¯å¾„
//                        Files.copy(f.toPath(), new File(urlString).toPath(), StandardCopyOption.REPLACE_EXISTING);
//                        inReport("/word/" + pathName, insReport.getId());
//                    }
//                    catch (IOException e) {
//                        throw new ErrorException("文件上传失败");
//                    }
//                }
//            }
//        } catch (IOException e) {
//            throw new ErrorException("文件处理失败");
//        } finally {
//            if (tempFile != null && tempFile.exists()) {
//                tempFile.delete();
//            }
//            // é€’归删除解压目录及其中的文件
//            if (unzipDir.exists()) {
//                deleteDirectory(unzipDir); // åˆ é™¤æ—§çš„临时文件夹
//            }
//        }
        return 0;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void withdraw(Map<String,Object> map) {
        Integer id = Integer.parseInt(map.get("id").toString());
        List<String> list = JSONArray.parseArray(map.get("laboratory").toString(), String.class);
        Integer insOrderId = insReportMapper.selectById(id).getInsOrderId();
        List<InsOrderState> insOrderStateS = insOrderStateMapper.selectList(new LambdaQueryWrapper<InsOrderState>()
                .eq(InsOrderState::getInsOrderId, insOrderId)
                .in(CollectionUtils.isNotEmpty(list),InsOrderState::getLaboratory, list));
        if(CollectionUtils.isNotEmpty(insOrderStateS)) {
            List<Integer> collect = insOrderStateS.stream().map(InsOrderState::getId).collect(Collectors.toList());
            // ä¿®æ”¹è¯¥å•子试验室的状态为待复核,删除报告信息
            insOrderStateMapper.update(null,new LambdaUpdateWrapper<InsOrderState>()
                    .set(InsOrderState::getInsState,3) // å¾…复核
                    .in(InsOrderState::getId,collect));
            insReportMapper.delete(new LambdaQueryWrapper<InsReport>().eq(InsReport::getId,id));
        }
    }
    @Override
    public List<Map<String, Object>> getLaboratoryByReportId(Integer id) {
        List<Map<String, Object>> list = new ArrayList<>();
        Integer insOrderId = insReportMapper.selectById(id).getInsOrderId();
        insOrderStateMapper.selectList(new LambdaQueryWrapper<InsOrderState>()
                .eq(InsOrderState::getInsOrderId,insOrderId))
                .forEach(insOrderState -> {
                    Map<String, Object> map = new HashMap<>();
                    map.put("label",insOrderState.getLaboratory());
                    map.put("value",insOrderState.getLaboratory());
                    list.add(map);
                });
        return list;
    }
    @Override
    public Map<String, Object> getReportCountInfo(ReportPageDto reportPageDto) {
        HashMap<String, Object> map = new HashMap<>();
        User user = userMapper.selectById(SecurityUtils.getUserId());//当前登录的人
        //获取当前人所属实验室id
        String departLimsId = user.getDepartLimsId();
        String laboratory = null;
        if (ObjectUtils.isNotEmpty(departLimsId) && !departLimsId.isEmpty()) {
            String[] split = departLimsId.split(",");
            //查询对应架构名称(通信实验室,电力实验室,检测办)
            String departLims = insOrderMapper.seldepLimsId(Integer.parseInt(split[split.length - 1]));
            if (departLims.contains("实验室")) {
                laboratory = departLims;
            }
        }
        QueryWrapper<ReportPageDto> wrapper = QueryWrappers.queryWrappers(reportPageDto);
        if(Objects.nonNull(reportPageDto.getCreateTimeRange())){
            wrapper.gt(reportPageDto.getCreateTimeRange().size()>1,"create_time",reportPageDto.getCreateTimeRange().get(0))
                    .lt(reportPageDto.getCreateTimeRange().size()>1,"create_time",reportPageDto.getCreateTimeRange().get(1));
        }
        map.put("unSubmitCount",insReportMapper.findReportCountInfo(wrapper,laboratory,"ir.write_user_id").size());
        map.put("unExamineCount",insReportMapper.findReportCountInfo(wrapper,laboratory,"ir.is_examine").size());
        map.put("unRatifyCount",insReportMapper.findReportCountInfo(wrapper,laboratory,"ir.is_ratify").size());
        return map;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void batchApprovalReport(List<Integer> ids) {
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        Integer userId = SecurityUtils.getUserId().intValue();
        String key = SYNC_REPORT_KEY_PREFIX+userId;
        //执行前删除之前的keys
        deleteRedisKeys(key);
        synchronized (key) {
            redisTemplate.opsForValue().set(key,1);
            RequestContextHolder.setRequestAttributes(RequestContextHolder.getRequestAttributes(),true);
            //异步执行审批操作
            CompletableFuture.runAsync(() -> {
                try {
                    runBatchApproval(ids,key);
                }catch (Exception e){
                    //删除key
                    deleteRedisKeys(key);
                    redisTemplate.opsForValue().set(key+"_exception",e.getMessage());
                }
            },threadPoolTaskExecutor);
        }
    }
    /**
     * åˆ é™¤redis key
     * @param key
     */
    private void deleteRedisKeys(String key){
        redisTemplate.delete(key);
        redisTemplate.delete(key+"_num");
        redisTemplate.delete(key+"_count");
        redisTemplate.delete(key+"_surplus");
        redisTemplate.delete(key+"_exception");
    }
    /**
     * æ‰§è¡Œå®¡æ‰¹æ“ä½œ
     * @param ids æŠ¥å‘Šid列表
     */
    private void runBatchApproval(List<Integer> ids,String keyPrefix) {
        if(ids.isEmpty()){
            return;
        }
        long start = System.currentTimeMillis();
        String surplusKey = keyPrefix + "_surplus";//剩余条数
        String numKey = keyPrefix + "_num";//总进度
        String countKey = keyPrefix + "_count";//总条数
        redisTemplate.opsForValue().set(countKey, ids.size());
        redisTemplate.opsForValue().set(surplusKey, ids.size());
        Object countObj = redisTemplate.opsForValue().get(countKey);
        long parsed2 = Long.parseLong(String.valueOf(countObj));
        AtomicLong count = new AtomicLong(parsed2);
        for (Integer id : ids) {
            //业务代码
            InsReport insReport = insReportMapper.selectById(id);
            String laboratory = insOrderMapper.selectById(insReport.getInsOrderId()).getLaboratory();
            //获取签名和印章
            String sealUrl;
            String writeUrl;
            String examineUrl;
            String ratifyUrl;
            int writeId;
            int examineId;
            int ratifyId;
            try {
                sealUrl = insReportMapper.getLaboratoryByName(laboratory);//印章
                Map<String,Object> urlMap = insReportApproveConfigMapper.selectApprovalConfigByLaboratory(laboratory);//签名
                writeUrl = imgUrl + "/" + (Objects.isNull(urlMap.get("writeUrl"))?"":urlMap.get("writeUrl").toString());//编制人签名url
                examineUrl = imgUrl + "/" +  (Objects.isNull(urlMap.get("examineUrl"))?"":urlMap.get("examineUrl").toString());//审核人签名url
                ratifyUrl = imgUrl + "/" +  (Objects.isNull(urlMap.get("ratifyUrl"))?"":urlMap.get("ratifyUrl").toString());//批准人签名url
                writeId = Integer.parseInt(urlMap.get("writeId").toString());//编制人
                examineId = Integer.parseInt(urlMap.get("examineId").toString());//审核人签
                ratifyId =Integer.parseInt(urlMap.get("ratifyId").toString());//批准人
            } catch (Exception e) {
                throw new ErrorException("找不到签名和印章");
            }
            //设置报告信息
            insReport.setIsExamine(1);
            insReport.setIsRatify(1);
            insReport.setState(1);
            insReport.setWriteUserId(writeId);
            insReport.setExamineUserId(examineId);
            insReport.setRatifyUserId(ratifyId);
            if(Objects.isNull(insReport.getWriteTime())){
                insReport.setWriteTime(LocalDateTime.now());
            }
            if(Objects.isNull(insReport.getExamineTime())){
                insReport.setExamineTime(LocalDateTime.now());
            }
            if(Objects.isNull(insReport.getRatifyTime())){
                insReport.setRatifyTime(LocalDateTime.now());
            }
            //更新订单状态
            InsOrder insOrder = new InsOrder();
            insOrder.setId(insReport.getInsOrderId());
            insOrder.setState(4);
            insOrderMapper.updateById(insOrder);
            //系统生成报告地址
            String url = insReport.getUrl();
            //手动上传报告地址
            String urlS = insReport.getUrlS();
            String finalUrl = (StringUtils.isBlank(urlS) ? url : urlS).replace("/word", wordUrl);
            wordInsertUrl(new HashMap<String, Object>() {{
                put("writeUrl", new FilePictureRenderData(100,50,writeUrl));
                put("examineUrl", new FilePictureRenderData(100,50,examineUrl));
                put("ratifyUrl", new FilePictureRenderData(100,50,ratifyUrl));
                put("seal1", new FilePictureRenderData(600,600,imgUrl + "/" +sealUrl));
                put("seal2", new FilePictureRenderData(600,600,imgUrl + "/" +sealUrl));
            }}, finalUrl);
            wordToPdf(finalUrl, sealUrl);
            // ä¿®æ”¹ä¸´æ—¶pdf
            String tempUrlPdf = wordToPdfTemp((StrUtil.isBlank(urlS) ? url : urlS).replace("/word", wordUrl));
            insReport.setTempUrlPdf("/word/" + tempUrlPdf);
            //更新报告状态
            insReportMapper.updateById(insReport);
            //更新redis的key
            Object o = redisTemplate.opsForValue().get(numKey);
            if (Objects.isNull(o)) {
                redisTemplate.opsForValue().set(numKey, 1);
            } else {
                long parsed = Long.parseLong(String.valueOf(o));
                redisTemplate.opsForValue().set(numKey, parsed + 1);
            }
            redisTemplate.opsForValue().set(surplusKey, count.decrementAndGet());
        }
        long end = System.currentTimeMillis();
        long useTime = (end-start)/1000;
        log.info("线程{}报告审批结束,耗时:{}s",keyPrefix,useTime);
    }
    @Override
    public Map<String, Object> getBatchApprovalProgress() {
        Integer userId = SecurityUtils.getUserId().intValue();
        String key = SYNC_REPORT_KEY_PREFIX + userId;
        Map<String, Object> map = new HashMap<>();
        map.put("hasProgress",false);
        map.put("hasNum",0);
        map.put("hasCount",0);
        map.put("surplus",0);
        Object o = redisTemplate.opsForValue().get(key);
        if(Objects.nonNull(o)){
            map.put("hasProgress",true);
        }
        Object o1 = redisTemplate.opsForValue().get(key+"_num");
        Object o2 = redisTemplate.opsForValue().get(key+"_count");
        Object surplus = redisTemplate.opsForValue().get(key+"_surplus");
        Object exception = redisTemplate.opsForValue().get(key+"_exception");
        if(Objects.nonNull(surplus)){
            map.put("surplus",surplus);
        }
        if (Objects.nonNull(o1)&&Objects.nonNull(o2)){
            //得到进度
            BigDecimal multiply = new BigDecimal(String.valueOf(o1)).divide(new BigDecimal(String.valueOf(o2)), 2,BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100));
            map.put("hasNum",multiply);
            map.put("hasCount",Long.parseLong(String.valueOf(o2)));
        }
        map.put("hasException",exception);
        return map;
    }
    //解压文件夹
    private void unzip(File zipFile, File destDir) throws IOException {
        try (ZipFile zip = new ZipFile(zipFile)) {
            Enumeration<? extends ZipEntry> entries = zip.entries();
            while (entries.hasMoreElements()) {
                ZipEntry entry = entries.nextElement();
                File file = new File(destDir, entry.getName());
                if (entry.isDirectory()) {
                    file.mkdirs();
                } else {
                    file.getParentFile().mkdirs();
                    try (InputStream in = zip.getInputStream(entry);
                         OutputStream out = new FileOutputStream(file)) {
                        byte[] buffer = new byte[1024];
                        int len;
                        while ((len = in.read(buffer)) > 0) {
                            out.write(buffer, 0, len);
                        }
                    }
                }
            }
        }
    }
    // åŽ‹ç¼©æ–‡ä»¶å¤¹
    public static void zipDirectory(String sourceDirPath, String zipFilePath) throws IOException {
        try (ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFilePath))) {
            Path sourceDir = Paths.get(sourceDirPath);
            Files.walk(sourceDir)
                    .filter(path -> !Files.isDirectory(path))
                    .forEach(path -> {
                        ZipEntry zipEntry = new ZipEntry(sourceDir.relativize(path).toString());
                        try {
                            zipOut.putNextEntry(zipEntry);
                            Files.copy(path, zipOut);
                            zipOut.closeEntry();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    });
        }
    }
    // åˆ é™¤æ–‡ä»¶å¤¹åŠå…¶å†…容
    public static void deleteDirectory(File directory) throws IOException {
        if (directory.isDirectory()) {
            File[] files = directory.listFiles();
            if (files != null) {
                for (File file : files) {
                    deleteDirectory(file);
                }
            }
        }
        Files.delete(directory.toPath());
    }
    /**
     * word转换pdf
     * @param path
     * @return
     */
    public String wordToPdfTemp(String path) {
        try {
            return wordToPdf(path, path.replace(".docx", ".pdf"));
        } catch (Exception e) {
            throw new ErrorException("转换失败");
        }
    }
    public String wordToPdf(String wordPath, String pdfPath) {
        FileOutputStream os = null;
        try {
            //凭证 ä¸ç„¶åˆ‡æ¢åŽæœ‰æ°´å°
            InputStream is = Files.newInputStream(new File(licenseUrl).toPath());
            License license = new License();
            license.setLicense(is);
            if (!license.getIsLicensed()) {
                System.out.println("License验证不通过...");
                return null;
            }
            //生成一个空的PDF文件
            File file;
            //判断是否是进厂报告
            file = new File(pdfPath);
            os = new FileOutputStream(file);
            //要转换的word文件
            Document doc = new Document(wordPath);
            doc.save(os, SaveFormat.PDF);
            String name = file.getName();
            return file.getName();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }
//    @Override
//    public void wordToPdf(String path, String sealUrl) {
//        CompletableFuture.supplyAsync(() -> {
//            try {
//                wordToPdf(path, path.replace(".docx", ".pdf"), sealUrl);
//                return null;
//            } catch (Exception e) {
//                throw new ErrorException("转换失败");
//            }
//        }).thenAccept(res -> {
//        }).exceptionally(e -> {
//            e.printStackTrace();
//            return null;
//        });
//    }
//    public String wordToPdf(String wordPath, String pdfPath, String sealUrl) {
//        FileOutputStream os = null;
//        try {
//            //凭证 ä¸ç„¶åˆ‡æ¢åŽæœ‰æ°´å°
////            InputStream inputStream = this.getClass().getResourceAsStream("/lib/license.xml");
//            /*String url;
//            try {
//                InputStream inputStream = this.getClass().getResourceAsStream("/lib/license.xml");
//                File file = File.createTempFile("temp", ".tmp");
//                OutputStream outputStream = new FileOutputStream(file);
//                IOUtils.copy(inputStream, outputStream);
//                url = file.getAbsolutePath();
//            } catch (FileNotFoundException e) {
//                throw new ErrorException("找不到模板文件");
//            } catch (IOException e) {
//                throw new RuntimeException(e);
//            }*/
//            InputStream is = new ClassPathResource("/lib/license.xml").getInputStream();
//            License license = new License();
//            license.setLicense(is);
//            if (!license.getIsLicensed()) {
//                System.out.println("License验证不通过...");
//                return null;
//            }
//            //生成一个空的PDF文件
//            File file = new File(pdfPath.replace(".pdf", "-1.pdf"));
//            os = new FileOutputStream(file);
//            //要转换的word文件
//            com.aspose.words.Document doc = new com.aspose.words.Document(wordPath);
//            doc.save(os, SaveFormat.PDF);
//
//            //添加骑缝章
//            stamperCheckMarkPDF(pdfPath.replace(".pdf", "-1.pdf"), pdfPath, imgUrl + "/" + sealUrl);
//
//
//        } catch (Exception e) {
//            e.printStackTrace();
//        } finally {
//            if (os != null) {
//                try {
//                    os.close();
//                } catch (IOException e) {
//                    e.printStackTrace();
//                }
//            }
//        }
//        return null;
//    }
    /**
     * åˆ‡å‰²å›¾ç‰‡
     *
     * @param Path å›¾ç‰‡è·¯å¾„
     * @param n    åˆ‡å‰²ä»½æ•°
     */
    public static com.itextpdf.text.Image[] slicingImages(String Path, int n) throws IOException, BadElementException {
        com.itextpdf.text.Image[] nImage = new com.itextpdf.text.Image[n];
        BufferedImage img = ImageIO.read(new File(Path));
        int h = img.getHeight();
        int w = img.getWidth();
        int sw = w / n;
        for (int i = 0; i < n; i++) {
            BufferedImage subImg;
            if (i == n - 1) {//最后剩余部分
                subImg = img.getSubimage(i * sw, 0, w - i * sw, h);
            } else {//前n-1块均匀切
                subImg = img.getSubimage(i * sw, 0, sw, h);
            }
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            ImageIO.write(subImg, Path.substring(Path.lastIndexOf('.') + 1), out);
            nImage[i] = com.itextpdf.text.Image.getInstance(out.toByteArray());
        }
        return nImage;
    }
    /**
     * ç›–骑缝章
     *
     * @param infilePath  åŽŸPDF路径
     * @param outFilePath è¾“出PDF路径
     */
    public static void stamperCheckMarkPDF(String infilePath, String outFilePath, String picPath) throws IOException, DocumentException {
        PdfReader reader = new PdfReader(infilePath);//选择需要印章的pdf
        PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(outFilePath));//加完印章后的pdf
        com.itextpdf.text.Rectangle pageSize = reader.getPageSize(1);//获得第一页
        float height = pageSize.getHeight();
        float width = pageSize.getWidth();
        int nums = reader.getNumberOfPages();
        com.itextpdf.text.Image[] nImage = slicingImages(picPath, nums);//生成骑缝章切割图片
        for (int n = 1; n <= nums; n++) {
            PdfContentByte over = stamp.getOverContent(n);//设置在第几页打印印章
            com.itextpdf.text.Image img = nImage[n - 1];//选择图片
            float newHeight = 100f;
            float newWidth = img.getWidth() / (img.getHeight() / 100);
            img.scaleAbsolute(newWidth, newHeight);//控制图片大小
            img.setAbsolutePosition(width - newWidth, height / 2 - newHeight / 2);//控制图片位置
            over.addImage(img);
        }
        stamp.close();
    }
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/InstructionServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.numgen.NumberGenerator;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.require.dto.InstructionDto;
import com.ruoyi.require.mapper.InstructionMapper;
import com.ruoyi.require.pojo.Instruction;
import com.ruoyi.require.service.InstructionService;
import com.ruoyi.require.service.OperationInstructionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.Locale;
/**
 * <p>
 * ä½œä¸šæŒ‡å¯¼ä¹¦æ·»åŠ å—æŽ§æ–‡ä»¶è¡¨ æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-12-04 10:29:18
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class InstructionServiceImpl extends ServiceImpl<InstructionMapper, Instruction> implements InstructionService {
    @Autowired
    private OperationInstructionService operationInstructionService;
    @Autowired
    private NumberGenerator<Instruction> numberGenerator;
    @Override
    public IPage<Instruction> pageByPageQueryOfHomeworkInstructions(Page page) {
        return baseMapper.pageByPageQueryOfHomeworkInstructions(page);
    }
    @Override
    public void newHomeworkGuidebookAdded(InstructionDto instructionDto) {
        if (ObjectUtils.isEmpty(instructionDto.getApplicationNumber())) {
            String year = new SimpleDateFormat("yy", Locale.CHINESE).format(new Date());
            String month = new SimpleDateFormat("MM", Locale.CHINESE).format(new Date());
            String day = new SimpleDateFormat("dd", Locale.CHINESE).format(new Date());
            String processNumber = numberGenerator.generateNumberWithPrefix(3, "WJSK" + year + month + day, Instruction::getApplicationNumber);
            instructionDto.setApplicationNumber(processNumber);
        }
        saveOrUpdate(instructionDto);
        if (ObjectUtils.isNotEmpty(instructionDto.getFeTempHumRecordList())) {
            instructionDto.getFeTempHumRecordList().forEach(i -> {
                i.setInstructionId(instructionDto.getId());
                i.setUploader(SecurityUtils.getUserId().intValue());
                i.setUpdateTime(LocalDateTime.now());
            });
            operationInstructionService.saveOrUpdateBatch(instructionDto.getFeTempHumRecordList());
        }
    }
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/InternalWastesDetailServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.require.mapper.InternalWastesDetailMapper;
import com.ruoyi.require.pojo.InternalWastesDetail;
import com.ruoyi.require.service.InternalWastesDetailService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * å®‰å…¨å†…务三废登记详情 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-19 06:39:54
 */
@Service
public class InternalWastesDetailServiceImpl extends ServiceImpl<InternalWastesDetailMapper, InternalWastesDetail> implements InternalWastesDetailService {
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/InternalWastesServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,170 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.framework.util.HackLoopTableRenderPolicy;
import com.ruoyi.require.dto.InternalWastesDto;
import com.ruoyi.require.mapper.InternalWastesMapper;
import com.ruoyi.require.pojo.InternalWastes;
import com.ruoyi.require.pojo.InternalWastesDetail;
import com.ruoyi.require.service.InternalWastesDetailService;
import com.ruoyi.require.service.InternalWastesService;
import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
/**
 * <p>
 * å®‰å…¨å†…务三废登记 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-19 06:39:27
 */
@Service
@AllArgsConstructor
@Transactional(rollbackFor = Exception.class)
public class InternalWastesServiceImpl extends ServiceImpl<InternalWastesMapper, InternalWastes> implements InternalWastesService {
    private InternalWastesDetailService internalWastesDetailService;
    /**
     * å®‰å…¨å†…务三废登记分页查询
     * @param page
     * @param internalWastes
     * @return
     */
    @Override
    public IPage<InternalWastesDto> pageInternalWastes(Page page, InternalWastes internalWastes) {
        return baseMapper.pageInternalWastes(page, QueryWrappers.queryWrappers(internalWastes));
    }
    /**
     * å®‰å…¨å†…务三废登记新增
     * @param internalWastes
     * @return
     */
    @Override
    public boolean addInternalWastes(InternalWastesDto internalWastes) {
        baseMapper.insert(internalWastes);
        // æ–°å¢žè¯¦æƒ…
        for (InternalWastesDetail internalWastesDetail : internalWastes.getWastesDetailList()) {
            internalWastesDetail.setWastesId(internalWastes.getWastesId());
        }
        internalWastesDetailService.saveBatch(internalWastes.getWastesDetailList());
        return true;
    }
    /**
     * å®‰å…¨å†…务三废登记修改
     * @param internalWastes
     * @return
     */
    @Override
    public boolean updateInternalWastes(InternalWastesDto internalWastes) {
        baseMapper.updateById(internalWastes);
        // åˆ é™¤ä¹‹å‰çš„详情
        internalWastesDetailService.remove(Wrappers.<InternalWastesDetail>lambdaQuery()
                .eq(InternalWastesDetail::getWastesId, internalWastes.getWastesId()));
        // æ–°å¢žè¯¦æƒ…
        for (InternalWastesDetail internalWastesDetail : internalWastes.getWastesDetailList()) {
            internalWastesDetail.setWastesId(internalWastes.getWastesId());
        }
        internalWastesDetailService.saveBatch(internalWastes.getWastesDetailList());
        return true;
    }
    /**
     * å®‰å…¨å†…务三废登记删除
     * @param WastesId
     * @return
     */
    @Override
    public boolean delInternalWastes(Integer WastesId) {
        internalWastesDetailService.remove(Wrappers.<InternalWastesDetail>lambdaQuery()
                .eq(InternalWastesDetail::getWastesId, WastesId));
        baseMapper.deleteById(WastesId);
        return true;
    }
    /**
     * å®‰å…¨å†…务三废登记查看详情
     * @param WastesId
     * @return
     */
    @Override
    public InternalWastesDto getInternalWastesOne(Integer WastesId) {
        InternalWastes internalWastes = baseMapper.selectById(WastesId);
        InternalWastesDto internalWastesDto = new InternalWastesDto();
        BeanUtils.copyProperties(internalWastes, internalWastesDto);
        // æŸ¥è¯¢è¯¦ç»†ä¿¡æ¯
        internalWastesDto.setWastesDetailList(internalWastesDetailService.list(Wrappers.<InternalWastesDetail>lambdaQuery()
                .eq(InternalWastesDetail::getWastesId, WastesId)));
        return internalWastesDto;
    }
    /**
     * å¯¼å‡ºä¸‰åºŸå¤„理
     * @param wastesId
     * @param response
     */
    @Override
    public void exportInternalWastes(Integer wastesId, HttpServletResponse response) {
        InternalWastes internalWastes = baseMapper.selectById(wastesId);
        List<InternalWastesDetail> wastesDetailList = internalWastesDetailService.list(Wrappers.<InternalWastesDetail>lambdaQuery()
                .eq(InternalWastesDetail::getWastesId, wastesId));
        int index = 1;
        for (InternalWastesDetail detail : wastesDetailList) {
            detail.setIndex(index);
            index++;
        }
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/internal-wastes.docx");
        Configure configure = Configure.builder()
                .bind("wastesDetailList", new HackLoopTableRenderPolicy())
                .build();
        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
                new HashMap<String, Object>() {{
                    put("remark", internalWastes.getRemark());
                    put("wastesDetailList", wastesDetailList);
                }});
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    "安全内务三废处理", "UTF-8");
            response.setHeader("Content-disposition",
                    "attachment;filename=" + fileName + ".docx");
            OutputStream os = response.getOutputStream();
            template.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        }
    }
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/OperationInstructionServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.require.mapper.OperationInstructionMapper;
import com.ruoyi.require.pojo.OperationInstruction;
import com.ruoyi.require.service.OperationInstructionService;
import com.ruoyi.require.vo.OperationInstructionVo;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * <p>
 * è®¾å¤‡ - ä½œä¸šæŒ‡å¯¼ä¹¦ æ·»åŠ å—æŽ§æ–‡ä»¶ å­ æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-12-04 10:43:32
 */
@Service
public class OperationInstructionServiceImpl extends ServiceImpl<OperationInstructionMapper, OperationInstruction> implements OperationInstructionService {
    @Override
    public List<OperationInstructionVo> homeworkGuidebookEditor(Integer instructionId) {
        return baseMapper.homeworkGuidebookEditor(instructionId);
    }
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/PkMasterServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,809 @@
package com.ruoyi.require.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.basic.vo.StandardProductVO;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.mapper.*;
import com.ruoyi.inspect.pojo.*;
import com.ruoyi.inspect.vo.ProductVo;
import com.ruoyi.performance.mapper.AuxiliaryOutputWorkingHoursMapper;
import com.ruoyi.performance.mapper.PerformanceShiftMapper;
import com.ruoyi.performance.mapper.ShiftTimeMapper;
import com.ruoyi.performance.pojo.AuxiliaryOutputWorkingHours;
import com.ruoyi.performance.pojo.PerformanceShift;
import com.ruoyi.performance.pojo.ShiftTime;
import com.ruoyi.require.mapper.PkMasterMapper;
import com.ruoyi.require.mapper.PkSlaveMapper;
import com.ruoyi.require.pojo.PkMaster;
import com.ruoyi.require.pojo.PkSlave;
import com.ruoyi.require.service.InsOrderPlanService;
import com.ruoyi.require.service.PkMasterService;
import com.ruoyi.system.mapper.UserMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.util.Strings;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
/**
 * <p>
 * æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-07-29 01:16:26
 */
@Service
@Slf4j
public class PkMasterServiceImpl extends ServiceImpl<PkMasterMapper, PkMaster> implements PkMasterService {
    @Resource
    private PkMasterMapper pkMasterMapper;
    @Resource
    private PkSlaveMapper pkSlaveMapper;
    @Resource
    private InsOrderMapper insOrderMapper;
    @Resource
    private InsSampleMapper insSampleMapper;
    @Resource
    private InsProductMapper insProductMapper;
    @Resource
    private InsProductResultMapper insProductResultMapper;
    @Resource
    private InsProductUserMapper insProductUserMapper;
    @Resource
    private UserMapper userMapper;
    @Resource
    private InsOrderPlanService insOrderPlanService;
    @Resource
    private InsOrderPlanServiceImpl insOrderPlanServiceImpl;
    @Resource
    private ShiftTimeMapper shiftTimeMapper;
    @Resource
    private PerformanceShiftMapper performanceShiftMapper;
    @Resource
    private AuxiliaryOutputWorkingHoursMapper auxiliaryOutputWorkingHoursMapper;
    //温度循环数采
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int temDataAcquisition(PkMaster pkMaster) {
        Integer userId = SecurityUtils.getUserId().intValue();
        //查询数采关联的子表信息
        PkMaster master = new PkMaster();
        List<PkMaster> pkMasters = pkMasterMapper.selectList(Wrappers.<PkMaster>lambdaQuery()
                .eq(PkMaster::getEntrustCode, pkMaster.getEntrustCode())
                .eq(PkMaster::getSampleCode, pkMaster.getSampleCode())
                .eq(PkMaster::getModel, pkMaster.getModel())
                .eq(PkMaster::getCycles, pkMaster.getCycles())
                .eq(PkMaster::getTemperature, pkMaster.getTemperature()).orderByDesc(PkMaster::getId));
        if(!pkMasters.isEmpty()){
            master = pkMasters.get(0);
        }
        //查询对应的检验单表
        InsOrder insOrder = insOrderMapper.selectOne(Wrappers.<InsOrder>lambdaQuery().eq(InsOrder::getState, 1).eq(InsOrder::getEntrustCode, pkMaster.getEntrustCode()));
        if (ObjectUtils.isEmpty(insOrder)) {
            throw new ErrorException("没有找到对应委托单" + pkMaster.getEntrustCode());
        }
        //查询对应检验样品id
        InsSample insSample = insSampleMapper.selectOne(Wrappers.<InsSample>lambdaQuery()
                .eq(InsSample::getInsOrderId, insOrder.getId())
                .eq(InsSample::getSampleCode, pkMaster.getSampleCode())
                .eq(InsSample::getModel, pkMaster.getModel()));
        if (ObjectUtils.isEmpty(insSample)) {
            throw new ErrorException("没有找到对应委托单下的该样品" + pkMaster.getSampleCode());
        }        if (ObjectUtils.isNotEmpty(master)) {
            //throw new ErrorException("没有找到对应委托单" + pkMaster.getEntrustCode() + "的数采数据");
            List<PkSlave> pkSlaves = pkSlaveMapper.selectList1(master.getIsid());
            if (CollectionUtils.isEmpty(pkSlaves)) {
                throw new ErrorException("没有找到对应委托单" + pkMaster.getEntrustCode() + "的数采子数据");
            }
            //查询对应检验项目
            Map<String, Object> map = insOrderPlanService.temCycle(insSample.getId(), pkMaster.getCycles(), pkMaster.getTemperature());
            List<ProductVo> productVos = (List<ProductVo>) map.get("productVos");
            if (CollectionUtils.isNotEmpty(productVos)) {
                //todo å¦‚果温度循环的项目nm有改动这里需要改动 @zss
                for (PkSlave pkSlave : pkSlaves) {
                    for (ProductVo productVo : productVos) {
                        if (pkSlave.getInsBushingId().equals(productVo.getBushColor()) &&
                                pkSlave.getInsFibersId().equals(productVo.getCode()) &&
                                pkSlave.getInsFiberId().equals(productVo.getColor())) {
                            //找到对应的数据(对应套管光纤的数据)
                            List<InsProductResult> results = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, productVo.getInsProduct().getId()));
                            InsProductResult result;
                            if (CollectionUtils.isEmpty(results)) {
                                result = new InsProductResult();
                            } else {
                                result = results.get(0);
                            }
                            result.setInsProductId(productVo.getInsProduct().getId());//检验项目id
                            List<Map<String, Object>> iv = new ArrayList<>();
                            List<Map<String, Object>> cv = new ArrayList<>();
                            if (productVo.getInsProduct().getInspectionItemClass().equals("1310nm")) {
                                //1310nm外端
                                Map<String, Object> map1 = new HashMap<>();
                                map1.put("u", userId + "");
                                map1.put("v", ObjectUtils.isNotEmpty(pkSlave.getWeaken1310A()) ? pkSlave.getWeaken1310A().toString() : null);
                                iv.add(map1);
                                //1310nm内端
                                Map<String, Object> map2 = new HashMap<>();
                                map2.put("u", userId + "");
                                map2.put("v", ObjectUtils.isNotEmpty(pkSlave.getWeaken1310B()) ? pkSlave.getWeaken1310B().toString() : null);
                                iv.add(map2);
                                //1310nm衰减系数
                                Map<String, Object> map3 = new HashMap<>();
                                double v = 0.0;
                                if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1310A()) && ObjectUtils.isNotEmpty(pkSlave.getWeaken1310B())) {
                                    v = (pkSlave.getWeaken1310A() + pkSlave.getWeaken1310B()) / 2;
                                } else if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1310A()) && ObjectUtils.isEmpty(pkSlave.getWeaken1310B())) {
                                    v = pkSlave.getWeaken1310A();
                                } else if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1310B()) && ObjectUtils.isEmpty(pkSlave.getWeaken1310A())) {
                                    v = pkSlave.getWeaken1310B();
                                } else {
                                    log.info("数采id:{}", pkSlave.getId());
                                    throw new ErrorException("1310的两端都没有数据!!!");
                                }
                                BigDecimal decimal = BigDecimal.valueOf(v).setScale(3, RoundingMode.HALF_UP);
                                map3.put("v", String.valueOf(decimal));
                                cv.add(map3);
                            } else if (productVo.getInsProduct().getInspectionItemClass().equals("1550nm")) {
                                //1550nm外端
                                Map<String, Object> map1 = new HashMap<>();
                                map1.put("u", userId + "");
                                map1.put("v", ObjectUtils.isNotEmpty(pkSlave.getWeaken1550A()) ? pkSlave.getWeaken1550A().toString() : null);
                                iv.add(map1);
                                //1550nm内端
                                Map<String, Object> map2 = new HashMap<>();
                                map2.put("u", userId + "");
                                map2.put("v", ObjectUtils.isNotEmpty(pkSlave.getWeaken1550B()) ? pkSlave.getWeaken1550B().toString() : null);
                                iv.add(map2);
                                //1550nm衰减系数
                                Map<String, Object> map3 = new HashMap<>();
                                double v = 0.0;
                                if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1550A()) && ObjectUtils.isNotEmpty(pkSlave.getWeaken1550B())) {
                                    v = (pkSlave.getWeaken1550A() + pkSlave.getWeaken1550B()) / 2;
                                } else if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1550A()) && ObjectUtils.isEmpty(pkSlave.getWeaken1550B())) {
                                    v = pkSlave.getWeaken1550A();
                                } else if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1550B()) && ObjectUtils.isEmpty(pkSlave.getWeaken1550A())) {
                                    v = pkSlave.getWeaken1550B();
                                } else {
                                    throw new ErrorException("1550的两端都没有数据!!!");
                                }
                                BigDecimal decimal = BigDecimal.valueOf(v).setScale(3, RoundingMode.HALF_UP);
                                map3.put("v", String.valueOf(decimal));
                                cv.add(map3);
                            } else if (productVo.getInsProduct().getInspectionItemClass().equals("1625nm")) {
                                //1625nm外端
                                Map<String, Object> map1 = new HashMap<>();
                                map1.put("u", userId + "");
                                map1.put("v", ObjectUtils.isNotEmpty(pkSlave.getWeaken1625A()) ? pkSlave.getWeaken1625A().toString() : null);
                                iv.add(map1);
                                //1625nm内端
                                Map<String, Object> map2 = new HashMap<>();
                                map2.put("u", userId + "");
                                map2.put("v", ObjectUtils.isNotEmpty(pkSlave.getWeaken1625B()) ? pkSlave.getWeaken1625B().toString() : null);
                                iv.add(map2);
                                //1625nm衰减系数
                                Map<String, Object> map3 = new HashMap<>();
                                double v = 0.0;
                                if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1625A()) && ObjectUtils.isNotEmpty(pkSlave.getWeaken1625B())) {
                                    v = (pkSlave.getWeaken1625A() + pkSlave.getWeaken1625B()) / 2;
                                } else if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1625A()) && ObjectUtils.isEmpty(pkSlave.getWeaken1625B())) {
                                    v = pkSlave.getWeaken1625A();
                                } else if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1625B()) && ObjectUtils.isEmpty(pkSlave.getWeaken1625A())) {
                                    v = pkSlave.getWeaken1625B();
                                } else {
                                    throw new ErrorException("1625的两端都没有数据!!!");
                                }
                                BigDecimal decimal = BigDecimal.valueOf(v).setScale(3, RoundingMode.HALF_UP);
                                map3.put("v", String.valueOf(decimal));
                                cv.add(map3);
                            } else if (productVo.getInsProduct().getInspectionItemClass().equals("1383nm")) {
                                //1383nm外端
                                Map<String, Object> map1 = new HashMap<>();
                                map1.put("u", userId + "");
                                map1.put("v", ObjectUtils.isNotEmpty(pkSlave.getWeaken1383A()) ? pkSlave.getWeaken1383A().toString() : null);
                                iv.add(map1);
                                //1383nm内端
                                Map<String, Object> map2 = new HashMap<>();
                                map2.put("u", userId + "");
                                map2.put("v", ObjectUtils.isNotEmpty(pkSlave.getWeaken1383B()) ? pkSlave.getWeaken1383B().toString() : null);
                                iv.add(map2);
                                //1383nm衰减系数
                                Map<String, Object> map3 = new HashMap<>();
                                double v = 0.0;
                                if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1383A()) && ObjectUtils.isNotEmpty(pkSlave.getWeaken1383B())) {
                                    v = (pkSlave.getWeaken1383A() + pkSlave.getWeaken1310B()) / 2;
                                } else if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1383A()) && ObjectUtils.isEmpty(pkSlave.getWeaken1383B())) {
                                    v = pkSlave.getWeaken1383A();
                                } else if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1383B()) && ObjectUtils.isEmpty(pkSlave.getWeaken1383A())) {
                                    v = pkSlave.getWeaken1383B();
                                } else {
                                    throw new ErrorException("1383的两端都没有数据!!!");
                                }
                                BigDecimal decimal = BigDecimal.valueOf(v).setScale(3, RoundingMode.HALF_UP);
                                map3.put("v", String.valueOf(decimal));
                                cv.add(map3);
                            } else if (productVo.getInsProduct().getInspectionItemClass().equals("1490nm")) {
                                //1490nm外端
                                Map<String, Object> map1 = new HashMap<>();
                                map1.put("u", userId + "");
                                map1.put("v", ObjectUtils.isNotEmpty(pkSlave.getWeaken1490A()) ? pkSlave.getWeaken1490A().toString() : null);
                                iv.add(map1);
                                //1490nm内端
                                Map<String, Object> map2 = new HashMap<>();
                                map2.put("u", userId + "");
                                map2.put("v", ObjectUtils.isNotEmpty(pkSlave.getWeaken1490B()) ? pkSlave.getWeaken1490B().toString() : null);
                                iv.add(map2);
                                //1490nm衰减系数
                                Map<String, Object> map3 = new HashMap<>();
                                double v = 0.0;
                                if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1490A()) && ObjectUtils.isNotEmpty(pkSlave.getWeaken1490B())) {
                                    v = (pkSlave.getWeaken1490A() + pkSlave.getWeaken1310B()) / 2;
                                } else if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1490A()) && ObjectUtils.isEmpty(pkSlave.getWeaken1490B())) {
                                    v = pkSlave.getWeaken1490A();
                                } else if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1490B()) && ObjectUtils.isEmpty(pkSlave.getWeaken1490A())) {
                                    v = pkSlave.getWeaken1490B();
                                } else {
                                    throw new ErrorException("1490的两端都没有数据!!!");
                                }
                                BigDecimal decimal = BigDecimal.valueOf(v).setScale(3, RoundingMode.HALF_UP);
                                map3.put("v", String.valueOf(decimal));
                                cv.add(map3);
                            } else {
                                throw new ErrorException("没有找到该温度的检验项目" + productVo.getInsProduct().getInspectionItemClass());
                            }
                            result.setInsValue(JSON.toJSONString(iv));//检验值
                            result.setComValue(JSON.toJSONString(cv));//计算值
                            if (BeanUtil.isEmpty(result.getId())) {
                                result.setCreateUser(userId);
                                result.setUpdateUser(userId);
                                insProductResultMapper.insert(result);
                            } else {
                                result.setUpdateUser(userId);
                                result.setUpdateTime(LocalDateTime.now());
                                insProductResultMapper.updateById(result);
                            }
                            InsProduct insProduct = productVo.getInsProduct();
                            InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insProduct.getId()));
                            String[] comValue = insProductResult.getComValue().split(":");
                            String comple = comValue[comValue.length-1].split("\"")[1];
                            //首先查看温度是否是20度常温
                            if (!pkMaster.getTemperature().equals("20℃(常温)")) {
                                //如果不是先查询是否有值
                                int a = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                                        .eq(InsProduct::getInsSampleId, insSample.getId())
                                        .eq(InsProduct::getInspectionItem, "1")
                                        .eq(InsProduct::getInspectionItemSubclass, "20℃(常温)")).stream().map(InsProduct::getInsResult).anyMatch(ObjectUtils::isEmpty) ? 1 : 0;
                                if (a == 1) {
                                    throw new ErrorException("先获取20℃(常温)的检验值,再获取其他温度" + pkMaster.getSampleCode());
                                } else {
                                    //计算衰减差
                                    InsProduct insPro = null;
                                    switch (insProduct.getInspectionItemClass()) {
                                        case "1310nm":
                                            //查询20℃(常温)1310nm的衰减系数
                                            try {
                                                insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                                        .eq(InsProduct::getInsSampleId, insSample.getId())
                                                        .eq(InsProduct::getInspectionItem, "1")
                                                        .eq(InsProduct::getInspectionItemSubclass, "20℃(常温)")
                                                        .eq(InsProduct::getInspectionItemClass, "1310nm")
                                                        .eq(InsProduct::getInsFiberId, productVo.getInsProduct().getInsFiberId()));
                                            } catch (Exception e) {
                                                throw new ErrorException("没有查到20℃(常温),1310nm项目" + productVo.getInsProduct().getInsFiberId() + "光纤的检验项目");
                                            }
                                            break;
                                        case "1550nm":
                                            //查询20℃(常温)1550nm的衰减系数
                                            try {
                                                insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                                        .eq(InsProduct::getInsSampleId, insSample.getId())
                                                        .eq(InsProduct::getInspectionItem, "1")
                                                        .eq(InsProduct::getInspectionItemSubclass, "20℃(常温)")
                                                        .eq(InsProduct::getInspectionItemClass, "1550nm")
                                                        .eq(InsProduct::getInsFiberId, productVo.getInsProduct().getInsFiberId()));
                                            } catch (Exception e) {
                                                throw new ErrorException("没有查到20℃(常温),1625nm项目" + productVo.getInsProduct().getInsFiberId() + "光纤的检验项目");
                                            }
                                            break;
                                        case "1625nm":
                                            //查询20℃(常温)1625nm的衰减系数
                                            try {
                                                insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                                        .eq(InsProduct::getInsSampleId, insSample.getId())
                                                        .eq(InsProduct::getInspectionItem, "1")
                                                        .eq(InsProduct::getInspectionItemSubclass, "20℃(常温)")
                                                        .eq(InsProduct::getInspectionItemClass, "1625nm")
                                                        .eq(InsProduct::getInsFiberId, productVo.getInsProduct().getInsFiberId()));
                                            } catch (Exception e) {
                                                throw new ErrorException("没有查到20℃(常温),1625nm项目" + productVo.getInsProduct().getInsFiberId() + "光纤的检验项目");
                                            }
                                            break;
                                        case "1383nm":
                                            //查询20℃(常温)1383nm的衰减系数
                                            try {
                                                insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                                        .eq(InsProduct::getInsSampleId, insSample.getId())
                                                        .eq(InsProduct::getInspectionItem, "1")
                                                        .eq(InsProduct::getInspectionItemSubclass, "20℃(常温)")
                                                        .eq(InsProduct::getInspectionItemClass, "1383nm")
                                                        .eq(InsProduct::getInsFiberId, productVo.getInsProduct().getInsFiberId()));
                                            } catch (Exception e) {
                                                throw new ErrorException("没有查到20℃(常温),1383nm项目" + productVo.getInsProduct().getInsFiberId() + "光纤的检验项目");
                                            }
                                            break;
                                        case "1490nm":
                                            //查询20℃(常温)1490nm的衰减系数
                                            try {
                                                insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                                                        .eq(InsProduct::getInsSampleId, insSample.getId())
                                                        .eq(InsProduct::getInspectionItem, "1")
                                                        .eq(InsProduct::getInspectionItemSubclass, "20℃(常温)")
                                                        .eq(InsProduct::getInspectionItemClass, "1490nm")
                                                        .eq(InsProduct::getInsFiberId, productVo.getInsProduct().getInsFiberId()));
                                            } catch (Exception e) {
                                                throw new ErrorException("没有查到20℃(常温),1490nm项目" + productVo.getInsProduct().getInsFiberId() + "光纤的检验项目");
                                            }
                                            break;
                                    }
                                    InsProductResult insProductRes = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId()));
                                    String[] split = insProductRes.getComValue().split(":");
                                    double abs = Math.abs(Double.parseDouble(split[split.length-1].split("\"")[1]) - Double.parseDouble(comple));
                                    BigDecimal scale = BigDecimal.valueOf(abs).setScale(3, RoundingMode.HALF_UP);
                                    insProduct.setLastValue(String.valueOf(scale));
                                    String ask = insProduct.getAsk();
                                    int insResult = 1;
                                    switch (ask.charAt(0)) {
                                        case '<':
                                            insResult = Double.parseDouble(insProduct.getLastValue()) < Double.parseDouble(ask.substring(1)) ? 1 : 0;
                                            break;
                                        case '>':
                                            insResult = Double.parseDouble(insProduct.getLastValue()) > Double.parseDouble(ask.substring(1)) ? 1 : 0;
                                            break;
                                        case '=':
                                            insResult = Double.parseDouble(insProduct.getLastValue()) == Double.parseDouble(ask.substring(1)) ? 1 : 0;
                                            break;
                                        case '≤':
                                            insResult = Double.parseDouble(insProduct.getLastValue()) <= Double.parseDouble(ask.substring(1)) ? 1 : 0;
                                            break;
                                        case '≥':
                                            insResult = Double.parseDouble(insProduct.getLastValue()) >= Double.parseDouble(ask.substring(1)) ? 1 : 0;
                                            break;
                                    }
                                    insProduct.setInsResult(insResult);
                                }
                            } else {
                                //如果是20度常温,需要给出合格的结论
                                insProduct.setInsResult(1);//20度常温的检验项默认为合格
                            }
                            insProduct.setUpdateUser(userId);
                            insProductMapper.updateById(insProduct);
                            User user = userMapper.selectOne(Wrappers.<User>lambdaQuery().eq(User::getAccount, master.getDetectionPeople()));
                            if (ObjectUtils.isEmpty(user)) {
                                throw new ErrorException("lims系统没有找到该用户" + master.getDetectionPeople());
                            }
                            insProductUserMapper.insert(new InsProductUser(null, user.getId(), master.getDetectionDate(), insProduct.getId()));
                        }
                    }
                }
            }
            //给温度循环的检验项目绑定设备
            InsProduct product = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
                    .eq(InsProduct::getState, 1)
                    .eq(InsProduct::getInsSampleId, insSample.getId())
                    .eq(InsProduct::getInspectionItem, "温度循环"));
            if (ObjectUtils.isEmpty(product)) {
                throw new ErrorException("没有找到对应委托单下该样品的相关温度循环检验项目");
            }
            InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, product.getId()));
            if (ObjectUtils.isEmpty(insProductResult)) {
                insProductResult = new InsProductResult();
                insProductResult.setInsProductId(product.getId());
            }
            if (ObjectUtils.isEmpty(insProductResult.getEquipValue())) {
                List<Map<String, Object>> dv = new ArrayList<>();
                Map<String, Object> map4 = new HashMap<>();
                map4.put("v", "JCZX-TX-TT02006");
                dv.add(map4);
                Map<String, Object> map5 = new HashMap<>();
                map5.put("v", "JCZX-TX-TT02001");
                dv.add(map5);
                insProductResult.setEquipValue(JSON.toJSONString(dv));
                List<Map<String, Object>> dn = new ArrayList<>();
                Map<String, Object> map6 = new HashMap<>();
                map6.put("v", "步入式高低温湿热试验箱");
                dn.add(map6);
                Map<String, Object> map7 = new HashMap<>();
                map7.put("v", "步入式高低温试验箱");
                dn.add(map7);
                insProductResult.setEquipName(JSON.toJSONString(dn));
                if (BeanUtil.isEmpty(insProductResult.getId())) {
                    insProductResult.setCreateUser(userId);
                    insProductResult.setUpdateUser(userId);
                    insProductResultMapper.insert(insProductResult);
                } else {
                    insProductResult.setUpdateUser(userId);
                    insProductResult.setUpdateTime(LocalDateTime.now());
                    insProductResultMapper.updateById(insProductResult);
                }
            }
        }
        //查找样品下该次数的温度的项目
        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                .eq(InsProduct::getInsSampleId, insSample.getId())
                .eq(InsProduct::getState, 1)
                .isNotNull(InsProduct::getSpecialItemParentId)
                .isNotNull(InsProduct::getInspectionItemClass));
        // è¿‡æ»¤å‡ºå½“前循环次数 å’Œ æ¸©åº¦çš„æ£€éªŒé¡¹ç›®
        List<InsProduct> productList = insProducts.stream()
                .filter(item -> item.getInspectionItem().equals(pkMaster.getCycles()) &&
                        item.getInspectionItemSubclass().equals(pkMaster.getTemperature()))
                .collect(Collectors.toList());
        // å·¥æ—¶æ·»åŠ 
        int count = 0;
        for(InsProduct insProduct1 : productList) {
            // æŸ¥è¯¢insProductResult拿到insValue的有值的个数
            InsProductResult insProductResult = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>()
                    .eq(InsProductResult::getInsProductId, insProduct1.getId()));
            if(!Objects.isNull(insProductResult)) {
                // insProductResult不为空,获取有值的个数
                insProductResult.getInsValue();
                List<Map> maps = JSONArray.parseArray(insProductResult.getInsValue(), Map.class);
                for (Map map : maps) {
                    if (Strings.isNotEmpty(map.get("v").toString())) {
                        count++;
                        break;
                    }
                }
            }
        }
        // è¯¥å•子下除了当前次数以及温度有值的记录
        List<InsProduct> productList1 = insProducts.stream()
                .filter(item -> !(item.getInspectionItem().equals(pkMaster.getCycles()) && item.getInspectionItemSubclass().equals(pkMaster.getTemperature())))
                .collect(Collectors.toList());
        int allValue = 0;
        for(InsProduct insProduct1 : productList1) {
            // æŸ¥è¯¢insProductResult拿到insValue的有值的个数
            InsProductResult insProductResult = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>()
                    .eq(InsProductResult::getInsProductId, insProduct1.getId()));
            if(!Objects.isNull(insProductResult)) {
                // insProductResult不为空,获取有值的个数
                insProductResult.getInsValue();
                List<Map> maps = JSONArray.parseArray(insProductResult.getInsValue(), Map.class);
                for (Map map : maps) {
                    if (Strings.isNotEmpty(map.get("v").toString())) {
                        allValue++;
                        break;
                    }
                }
            }
        }
        Map<String, Boolean> map = isOvertimeAndCrossDay(userId);
        Boolean isWithinRange = map.get("isWithinRange"); // æ˜¯å¦æ­£å¸¸ä¸Šç­
        Boolean isCross = map.get("isCross"); // æ˜¯å¦è·¨å¤©
        BigDecimal manHour = BigDecimal.ZERO; // å·¥æ—¶
        InsProduct insProduct = insProductMapper.selectOne(new LambdaQueryWrapper<InsProduct>().eq(InsProduct::getInsSampleId, insSample.getId())
                .eq(InsProduct::getInspectionItem, "温度循环"));
        StandardProductVO workHourMap = insOrderPlanServiceImpl.getInspectWorkHourAndGroup(insProduct);
        if(ObjectUtil.isNotNull(workHourMap)){
            manHour = new BigDecimal(workHourMap.getManHour());
        }
        DateTimeFormatter formatters = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        DateTime parse = DateUtil.parse(LocalDateTime.now().format(formatter));
        AuxiliaryOutputWorkingHours auxiliaryOutputWorkingHours = new AuxiliaryOutputWorkingHours();
        auxiliaryOutputWorkingHours.setInspectionItem("温度循环"); // æ£€éªŒé¡¹ç›®
        auxiliaryOutputWorkingHours.setInspectionItemSubclass(""); // æ£€éªŒé¡¹ç›®å­ç±»
        if(isWithinRange) {
            // æ­£å¸¸ä¸Šç­
            auxiliaryOutputWorkingHours.setOrderNo(insOrder.getEntrustCode()); // éžåŠ ç­å§”æ‰˜å•å·
            auxiliaryOutputWorkingHours.setWorkTime(new BigDecimal(accuracy(manHour,count))); // å·¥æ—¶
            auxiliaryOutputWorkingHours.setAmount(count); // éžåŠ ç­æ•°é‡
        }else{
            // åŠ ç­
            auxiliaryOutputWorkingHours.setOvertimeOrderNo(insOrder.getEntrustCode()); // éžåŠ ç­å§”æ‰˜å•å·
            auxiliaryOutputWorkingHours.setOvertimeWorkTime(new BigDecimal(accuracy(manHour,count))); // å·¥æ—¶
            auxiliaryOutputWorkingHours.setOvertimeAmount(count); // éžåŠ ç­æ•°é‡
        }
        if(isCross) {
            String date = LocalDateTime.now().minusDays(1).toLocalDate().atStartOfDay().format(formatters);// å‰ä¸€å¤©
            auxiliaryOutputWorkingHours.setDateTime(date); // æ—¥æœŸ
        }else {
            String date = LocalDateTime.now().toLocalDate().atStartOfDay().format(formatters);// å½“天
            auxiliaryOutputWorkingHours.setDateTime(date); // æ—¥æœŸ
        }
        auxiliaryOutputWorkingHours.setOutputWorkTime(new BigDecimal(accuracy(manHour,count))); // äº§å‡ºå·¥æ—¶
        auxiliaryOutputWorkingHours.setWeekDay(insOrderPlanServiceImpl.getWeek(LocalDateTime.now().format(formatters)));//星期
        auxiliaryOutputWorkingHours.setWeek(String.valueOf(DateUtil.weekOfYear(DateUtil.offsetDay(parse, 1))));//周次
        auxiliaryOutputWorkingHours.setCheck(userId);//检测人
        auxiliaryOutputWorkingHours.setSample(insSample.getSampleCode());//样品编号
        auxiliaryOutputWorkingHours.setManHourGroup(workHourMap.getManHourGroup());//工时分组
        // æŸ¥è¯¢éœ€è¦æ“ä½œçš„æ—¥æœŸæ˜¯å¦æœ‰è®°å½•
        List<AuxiliaryOutputWorkingHours> oldRecords = auxiliaryOutputWorkingHoursMapper.selectList(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
                .eq(AuxiliaryOutputWorkingHours::getCheck,userId)
                .eq(AuxiliaryOutputWorkingHours::getInspectionItem, "温度循环")
                .eq(AuxiliaryOutputWorkingHours::getInspectionItemSubclass, "")
                .eq(AuxiliaryOutputWorkingHours::getSample, insSample.getSampleCode())
                .and(i->i.eq(AuxiliaryOutputWorkingHours::getOrderNo, insOrder.getEntrustCode())
                        .or()
                        .eq(AuxiliaryOutputWorkingHours::getOvertimeOrderNo, insOrder.getEntrustCode()))
                .eq(AuxiliaryOutputWorkingHours::getDateTime, auxiliaryOutputWorkingHours.getDateTime())
        );
        // æ‰€æœ‰çš„记录(其他天 + å½“前天)
        List<AuxiliaryOutputWorkingHours> addOldRecords = auxiliaryOutputWorkingHoursMapper.selectList(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
                .eq(AuxiliaryOutputWorkingHours::getCheck,userId)
                .eq(AuxiliaryOutputWorkingHours::getInspectionItem, "温度循环")
                .eq(AuxiliaryOutputWorkingHours::getInspectionItemSubclass, "")
                .eq(AuxiliaryOutputWorkingHours::getSample, insSample.getSampleCode())
                .and(i->i.eq(AuxiliaryOutputWorkingHours::getOrderNo, insOrder.getEntrustCode())
                        .or()
                        .eq(AuxiliaryOutputWorkingHours::getOvertimeOrderNo, insOrder.getEntrustCode()))
        );
        if(CollectionUtils.isEmpty(oldRecords)){
            // æ–°å¢žä¹Ÿè¦æŸ¥çœ‹æ˜¯å¦æœ‰æ‰€æœ‰çš„记录
            if(Objects.isNull(addOldRecords)) {
                // å…¶ä»–天也没有记录
                auxiliaryOutputWorkingHoursMapper.insert(auxiliaryOutputWorkingHours);
            }else{
                // æ‰€æœ‰çš„记录
                int otherDayAmount = 0; // æ‰€æœ‰çš„æ•°é‡
                for(AuxiliaryOutputWorkingHours a : addOldRecords) {
                    otherDayAmount += (Objects.isNull(a.getAmount()) ? 0 : a.getAmount()) + (Objects.isNull(a.getOvertimeAmount()) ? 0 : a.getOvertimeAmount());
                }
                if(isWithinRange) {
                    // æ­£å¸¸ä¸Šç­
                    auxiliaryOutputWorkingHours.setWorkTime(new BigDecimal(accuracy(manHour,(count - otherDayAmount + allValue)))); // å·¥æ—¶
                    auxiliaryOutputWorkingHours.setAmount((count - otherDayAmount + allValue)); // éžåŠ ç­æ•°é‡
                }else {
                    // åŠ ç­
                    auxiliaryOutputWorkingHours.setOvertimeWorkTime(new BigDecimal(accuracy(manHour,(count - otherDayAmount + allValue)))); // å·¥æ—¶
                    auxiliaryOutputWorkingHours.setOvertimeAmount((count - otherDayAmount + allValue)); // éžåŠ ç­æ•°é‡
                }
                auxiliaryOutputWorkingHours.setOutputWorkTime(new BigDecimal(accuracy(manHour,(count - otherDayAmount + allValue)))); // äº§å‡ºå·¥æ—¶
                auxiliaryOutputWorkingHoursMapper.insert(auxiliaryOutputWorkingHours);
            }
        }else {
            // ä¸ä¸ºç©º
            Integer oldAmount = 0; // å·¥æ—¶æ·»åŠ çš„ä¸ªæ•°
            for(AuxiliaryOutputWorkingHours a : addOldRecords) {
                oldAmount += (Objects.isNull(a.getAmount()) ? 0 : a.getAmount()) + (Objects.isNull(a.getOvertimeAmount()) ? 0 : a.getOvertimeAmount());
            }
            if(count > (oldAmount - allValue)){
                // æŸ¥æ‰¾å‡ºæ—¥æœŸä¸ºå¾—到日期的记录
                List<AuxiliaryOutputWorkingHours> collect = oldRecords.stream().filter(item -> item.getDateTime().equals(auxiliaryOutputWorkingHours.getDateTime())).collect(Collectors.toList());
                if(CollectionUtils.isNotEmpty(collect)){
                    // æœ‰çš„话就是更新操作
                    AuxiliaryOutputWorkingHours auxiliaryOutputWorkingHours1 = collect.get(0);
                    if(isWithinRange) {
                        // æ­£å¸¸ä¸Šç­
                        // æ‹¿åˆ°åŽŸæœ¬çš„æ•°é‡ ä¸Ž æ–°çš„æ•°é‡ç›¸åŠ 
                        int num =  Objects.isNull(auxiliaryOutputWorkingHours1.getAmount()) ? 0 :auxiliaryOutputWorkingHours1.getAmount(); // åŽŸæœ¬çš„æ•°é‡
                        auxiliaryOutputWorkingHours1.setAmount(count - oldAmount + num + allValue); // éžåŠ ç­æ•°é‡
                        auxiliaryOutputWorkingHours1.setOrderNo(insOrder.getEntrustCode()); // éžåŠ ç­å§”æ‰˜å•å·
                        auxiliaryOutputWorkingHours1.setWorkTime(new BigDecimal(accuracy(manHour,(count - oldAmount + num + allValue)))); // å·¥æ—¶
                        BigDecimal outputWorkTime = new BigDecimal(accuracy(manHour, auxiliaryOutputWorkingHours1.getAmount())).add((Objects.isNull(auxiliaryOutputWorkingHours1.getOvertimeWorkTime()) ? new BigDecimal(0) : auxiliaryOutputWorkingHours1.getOvertimeWorkTime()));
                        auxiliaryOutputWorkingHours1.setOutputWorkTime(outputWorkTime);// äº§å‡ºå·¥æ—¶ é‡‡é›†è‚¯å®šæ˜¯ä¼šé‡‡é›†å®Œ
                    }else{
                        // åŠ ç­
                        // æ‹¿åˆ°åŽŸæœ¬çš„æ•°é‡ ä¸Ž æ–°çš„æ•°é‡ç›¸åŠ 
                        int num =  Objects.isNull(auxiliaryOutputWorkingHours1.getOvertimeAmount()) ? 0 :auxiliaryOutputWorkingHours1.getOvertimeAmount(); // åŽŸæœ¬çš„æ•°é‡
                        auxiliaryOutputWorkingHours1.setOvertimeAmount(count - oldAmount + num + allValue);// åŠ ç­æ•°é‡
                        auxiliaryOutputWorkingHours1.setOvertimeOrderNo(insOrder.getEntrustCode()); // åŠ ç­å§”æ‰˜å•å·
                        auxiliaryOutputWorkingHours1.setOvertimeWorkTime(new BigDecimal(accuracy(manHour,(count - oldAmount + num + allValue)))); // å·¥æ—¶
                        BigDecimal outputWorkTime = new BigDecimal(accuracy(manHour, auxiliaryOutputWorkingHours1.getOvertimeAmount())).add(
                                (Objects.isNull(auxiliaryOutputWorkingHours1.getWorkTime()) ? new BigDecimal(0) : auxiliaryOutputWorkingHours1.getWorkTime()));
                        auxiliaryOutputWorkingHours1.setOutputWorkTime(outputWorkTime); // äº§å‡ºå·¥æ—¶ é‡‡é›†è‚¯å®šæ˜¯ä¼šé‡‡é›†å®Œ
                    }
                    auxiliaryOutputWorkingHoursMapper.updateById(auxiliaryOutputWorkingHours1);
                }
            }
        }
        return 0;
    }
    //温度循环数采总体
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int temDataAcquisition2(PkMaster pkMaster) {
        //查询出所有循环次数和温度,然后循环调用temDataAcquisition接口
        //查询对应的检验单表
        InsOrder insOrder = insOrderMapper.selectOne(Wrappers.<InsOrder>lambdaQuery().eq(InsOrder::getState, 1).eq(InsOrder::getEntrustCode, pkMaster.getEntrustCode()));
        if (ObjectUtils.isEmpty(insOrder)) {
            throw new ErrorException("没有找到对应委托单" + pkMaster.getEntrustCode());
        }
        //查询对应检验样品id
        InsSample insSample = insSampleMapper.selectOne(Wrappers.<InsSample>lambdaQuery()
                .eq(InsSample::getInsOrderId, insOrder.getId())
                .eq(InsSample::getSampleCode, pkMaster.getSampleCode())
                .eq(InsSample::getModel, pkMaster.getModel()));
        if (ObjectUtils.isEmpty(insSample)) {
            throw new ErrorException("没有找到对应委托单下的该样品" + pkMaster.getSampleCode());
        }
        //查找样品下所有温度循环的项目
        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
                .eq(InsProduct::getInsSampleId, insSample.getId())
                .eq(InsProduct::getState, 1)
                .isNotNull(InsProduct::getSpecialItemParentId)
                .isNotNull(InsProduct::getInspectionItemClass));
        //过滤出所有循环次数和温度
        List<String> collect1 = insProducts.stream().map(InsProduct::getInspectionItem).distinct().collect(Collectors.toList());
        List<String> collect2 = insProducts.stream().map(InsProduct::getInspectionItemSubclass).distinct().collect(Collectors.toList());
        for (String s : collect1) {
            for (String s1 : collect2) {
                PkMaster master = new PkMaster();
                master.setEntrustCode(pkMaster.getEntrustCode());
                master.setSampleCode(pkMaster.getSampleCode());
                master.setModel(pkMaster.getModel());
                master.setCycles(s);
                master.setTemperature(s1);
                temDataAcquisition(master);
            }
        }
        return 0;
    }
    /**
     * æ˜¯å¦åŠ ç­ã€è·¨å¤©
     */
    public Map<String,Boolean> isOvertimeAndCrossDay(Integer userId){
        Map<String, Boolean> map = new HashMap<>();
        Boolean isWithinRange = true;
        Boolean isCross = false; // æ˜¯å¦å°†å½“前检验单子的工时计算到班次开始天
        LocalDateTime today = LocalDateTime.of(LocalDate.now(), LocalTime.MIDNIGHT);
        PerformanceShift performanceShift = performanceShiftMapper.selectOne(Wrappers.<PerformanceShift>lambdaQuery()
                .eq(PerformanceShift::getUserId, userId)
                .eq(PerformanceShift::getWorkTime, today));
        if (ObjectUtils.isNotEmpty(performanceShift)) {
            ShiftTime shiftTime = shiftTimeMapper.selectOne(Wrappers.<ShiftTime>lambdaQuery().eq(ShiftTime::getShift, performanceShift.getShift()));
            if (ObjectUtils.isNotEmpty(shiftTime)) {
                DateTimeFormatter forma = DateTimeFormatter.ofPattern("HH:mm");
                LocalTime now = LocalTime.now();
                LocalTime startTime = LocalTime.parse(shiftTime.getStartTime(), forma);
                LocalTime endTime = LocalTime.parse(shiftTime.getEndTime(), forma);
                // æ£€æŸ¥å½“前时间是否在范围内(包括边界)
                // å¦‚果当前时间不在今天的班次内  17:00~5.00  15.00 é¦–先判断是否跨天了
                // è·¨å¤©çš„æƒ…况
                if (startTime.isAfter(endTime)) {
                    // æŸ¥çœ‹å½“前时间是否在班次时间内
                    if (now.isAfter(startTime)) {
                        // å¦‚果是在结束时间之后那么就是正常上班
                        isWithinRange = true;
                        isCross = false;
                    } else {
                        // å½“前时间不在班次内,查看昨天的班次
                        LocalDateTime yesterday = LocalDateTime.of(LocalDate.now().minusDays(1), LocalTime.MIDNIGHT);
                        PerformanceShift yesterdayShift = performanceShiftMapper.selectOne(Wrappers.<PerformanceShift>lambdaQuery()
                                .eq(PerformanceShift::getUserId, userId)
                                .eq(PerformanceShift::getWorkTime, yesterday));
                        ShiftTime yesterdayShiftTime = shiftTimeMapper.selectOne(Wrappers.<ShiftTime>lambdaQuery().eq(ShiftTime::getShift, yesterdayShift.getShift()));
                        // å¦‚果昨天的班次不为空,那么就要看昨天的班次时间
                        if (!Objects.isNull(yesterdayShiftTime)) {
                            LocalTime yesterdayStartTime = LocalTime.parse(yesterdayShiftTime.getStartTime(), forma);
                            LocalTime yesterdayEndTime = LocalTime.parse(yesterdayShiftTime.getEndTime(), forma);
                            // æ˜¨å¤©çš„班次是否跨天
                            if (yesterdayStartTime.isAfter(yesterdayEndTime)) {
                                // å¦‚果昨天的班次跨天了,那么就要看今天是否在昨天的班次内,并且只能是在结束时间之前,已经实现了跨天
                                if (now.isBefore(yesterdayEndTime)) {
                                    // åœ¨æ˜¨å¤©ç­æ¬¡æ—¶é—´å†…正常上班,工时计算到昨天
                                    isWithinRange = true;
                                    isCross = true;
                                } else {
                                    // ä¸åœ¨æ˜¨å¤©ç­æ¬¡æ—¶é—´å†…就是加班,工时计算到昨天
                                    isWithinRange = false;
                                    isCross = true;
                                }
                            } else {
                                // æ˜¨å¤©çš„班次没有跨天 å¦‚果当前时间在今天班次开始时间之前就是昨天的加班,否则就是今天的加班
                                if (now.isBefore(startTime)) {
                                    isWithinRange = false;
                                    isCross = true;
                                } else {
                                    isWithinRange = false;
                                    isCross = false;
                                }
                            }
                        } else {
                            isWithinRange = false;
                            // å¦‚果是在开始时间之前那么就要算到昨天
                            if (now.isBefore(startTime)) {
                                isCross = true;
                            } else {
                                isCross = false;
                            }
                        }
                    }
                } else {
                    // å½“前班次不跨天的情况下
                    // å¦‚果当前时间在开始时间之前,查昨天的班次看当前时间是否在昨天的班次内
                    if (now.isBefore(startTime)) {
                        // æŸ¥çœ‹æ˜¨å¤©æ˜¯å¦è·¨å¤©
                        LocalDateTime yesterday = LocalDateTime.of(LocalDate.now().minusDays(1), LocalTime.MIDNIGHT);
                        PerformanceShift yesterdayShift = performanceShiftMapper.selectOne(Wrappers.<PerformanceShift>lambdaQuery()
                                .eq(PerformanceShift::getUserId, userId)
                                .eq(PerformanceShift::getWorkTime, yesterday));
                        ShiftTime yesterdayShiftTime = shiftTimeMapper.selectOne(Wrappers.<ShiftTime>lambdaQuery().eq(ShiftTime::getShift, yesterdayShift.getShift()));
                        LocalTime yesterdayStartTime = LocalTime.parse(yesterdayShiftTime.getStartTime(), forma);
                        LocalTime yesterdayEndTime = LocalTime.parse(yesterdayShiftTime.getEndTime(), forma);
                        if (yesterdayStartTime.isAfter(yesterdayEndTime)) {
                            // å¦‚果昨天跨天
                            if (now.isBefore(yesterdayEndTime)) {
                                // åœ¨æ˜¨å¤©çš„班次时间内正常上班,工时计算到昨天
                                isWithinRange = true;
                                isCross = true;
                            } else {
                                // ä¸åœ¨æ˜¨å¤©ç­æ¬¡æ—¶é—´å†…就是加班,工时计算到昨天
                                isWithinRange = false;
                                isCross = true;
                            }
                        } else {
                            // æ˜¨å¤©ä¸è·¨å¤©
                            isWithinRange = false;
                            isCross = true;
                        }
                    } else if (now.isAfter(endTime)) {
                        // å¦‚果当前时间在结束时间之后,那么就是今天的加班
                        isWithinRange = false;
                        isCross = false;
                    } else {
                        // æ­£å¸¸ä¸Šç­
                        isWithinRange = true;
                        isCross = false;
                    }
                }
            }
        }
        map.put("isWithinRange",isWithinRange);
        map.put("isCross",isCross);
        return map;
    }
    /**
     * ç²¾åº¦é—®é¢˜
     */
    public double accuracy(BigDecimal manHour, int count){
        return  manHour.multiply(BigDecimal.valueOf(count)).setScale(4, RoundingMode.HALF_UP).doubleValue();
    }
}
在上述文件截断后对比
cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesConsumablesServiceImpl.java cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesContentsServiceImpl.java cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesExpendsServiceImpl.java cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesListServiceImpl.java cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesStoreServiceImpl.java cnas-require/src/main/java/com/ruoyi/require/service/impl/QrShowServiceImpl.java cnas-require/src/main/java/com/ruoyi/require/service/impl/ReservationServiceImpl.java cnas-require/src/main/java/com/ruoyi/require/service/impl/SupplierManagementServiceImpl.java cnas-require/src/main/java/com/ruoyi/require/service/impl/SuppliersDirectoryContentsServiceImpl.java cnas-require/src/main/java/com/ruoyi/require/util/DataAcquisition.java cnas-require/src/main/java/com/ruoyi/require/vo/AcceptanceDetailsVo.java cnas-require/src/main/java/com/ruoyi/require/vo/AcceptanceVo.java cnas-require/src/main/java/com/ruoyi/require/vo/OperationInstructionVo.java cnas-require/src/main/java/com/ruoyi/require/vo/SubstanceRecordVo.java cnas-require/src/main/resources/mapper/DataConfigMapper.xml cnas-require/src/main/resources/mapper/DeviceBorrowMapper.xml cnas-require/src/main/resources/mapper/DeviceFaultOneMapper.xml cnas-require/src/main/resources/mapper/DeviceMaintenanceMapper.xml cnas-require/src/main/resources/mapper/DeviceMapper.xml cnas-require/src/main/resources/mapper/DeviceMetricRecordMapper.xml cnas-require/src/main/resources/mapper/DeviceMetricsCopyMapper.xml cnas-require/src/main/resources/mapper/DeviceRecordMapper.xml cnas-require/src/main/resources/mapper/DeviceStateMapper.xml cnas-require/src/main/resources/mapper/FeCalibrationScheduleMapper.xml cnas-require/src/main/resources/mapper/FeIlluminationDetectionAreaMapper.xml cnas-require/src/main/resources/mapper/FeIlluminationMapper.xml cnas-require/src/main/resources/mapper/FeLightningProtectionMapper.xml cnas-require/src/main/resources/mapper/FeMeasuredQuantityMapper.xml cnas-require/src/main/resources/mapper/FePowerStableMapper.xml cnas-require/src/main/resources/mapper/FeStandardSubstanceAcceptanceInspectionMapper.xml cnas-require/src/main/resources/mapper/FeStandardSubstanceAcceptanceMapper.xml cnas-require/src/main/resources/mapper/FeStandardSubstanceMapper.xml cnas-require/src/main/resources/mapper/FeStandardSubstanceRecordMapper.xml cnas-require/src/main/resources/mapper/FeTempHumDateMapper.xml cnas-require/src/main/resources/mapper/FeTempHumRecordMapper.xml cnas-require/src/main/resources/mapper/ForeignRegisterMapper.xml cnas-require/src/main/resources/mapper/IncidentAcceptanceCheckMapper.xml cnas-require/src/main/resources/mapper/IncidentFileMapper.xml cnas-require/src/main/resources/mapper/IncidentInstallMapper.xml cnas-require/src/main/resources/mapper/IncidentReportMapper.xml cnas-require/src/main/resources/mapper/IncidentSparePartsMapper.xml cnas-require/src/main/resources/mapper/InformationNotificationMapper.xml cnas-require/src/main/resources/mapper/InstructionMapper.xml cnas-require/src/main/resources/mapper/InternalWastesDetailMapper.xml cnas-require/src/main/resources/mapper/InternalWastesMapper.xml cnas-require/src/main/resources/mapper/OperationInstructionMapper.xml cnas-require/src/main/resources/mapper/PkMasterMapper.xml cnas-require/src/main/resources/mapper/PkSlaveMapper.xml cnas-require/src/main/resources/mapper/ProcurementSuppliesExpendsMapper.xml cnas-require/src/main/resources/mapper/ProcurementSuppliesListMapper.xml cnas-require/src/main/resources/mapper/ProcurementSuppliesStoreMapper.xml cnas-require/src/main/resources/mapper/ReservationMapper.xml cnas-require/src/main/resources/mapper/SupplierManagementMapper.xml cnas-require/src/main/resources/mapper/SuppliersDirectoryContentsMapper.xml