zouyu
2025-03-06 32a0e96bf65f7a9759bddd1848f1cd9d7006ce1e
检验下单代码迁移
已修改3个文件
已添加140个文件
11601 ■■■■■ 文件已修改
inspect-server/pom.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/controller/InsOrderController.java 318 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/controller/WarehouseController.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/ApproveConfigDTO.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/BatchApprovalReportDTO.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/BushingDto.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/CommissionFeesDto.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/CostStatisticsDto.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/ExcelChecked.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/ExcelDto.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/ExcelMc.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/ExcelPs.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/ExcelV.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/FactoryDto.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/FiberDto.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/FibersDto.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/HistoryDto.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/InsOderDto.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/InsOrderPlanCountDTO.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/InsOrderPlanDTO.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/InsProductDto.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/InsProductResultDTO.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/InsulatingDto.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/LaboratoryDto.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/ModelDto.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/OrderThingDto.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/ProductDto.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/ProductResultDto2.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/ProductThingDto.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/ReportPageDto.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleDto.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleOrderDto.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleProductDTODL.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleProductDto.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleProductDto2.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleProductDto3.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleTypeDto.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/SheathDto.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/TasksShowDto.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/TemperatureCycling.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/UnInsProductsDTO.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/UnPassPageDto.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/UpInsOrderDTO.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/WarehouseCellAndSampleDto.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/WarehouseDto.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/WarehouseHistoryDto.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/WorkTimeDTO.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/productResultDto.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/excel/FiberRibboGeometricalParameterExcelData.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsBushingMapper.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsFiberMapper.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsFibersMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderFileMapper.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderMapper.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderStateMapper.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderTemplateMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsProductMapper.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsProductResultMapper.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsProductUserMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsReportApproveConfigMapper.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsReportMapper.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsSampleMapper.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsSampleUserMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsUnPassMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/ProcessOrder1Mapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/SampleOrderMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/WarehouseCellMapper.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/WarehouseHistoryMapper.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/WarehouseMapper.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/mapper/WarehouseShelfMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsBushing.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsFiber.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsFibers.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsOrder.java 224 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsOrderFile.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsOrderState.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsOrderTemplate.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsProduct.java 249 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsProductResult.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsProductUser.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsReport.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsReportApproveConfig.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsSample.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsSampleUser.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsUnPass.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/pojo/ProcessOrder.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/pojo/ProcessReport.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/pojo/Schedule.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/pojo/StandardMethodList.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/pojo/StandardProductList.java 191 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/pojo/StandardTemplate.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/pojo/StandardTree.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/pojo/Warehouse.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/pojo/WarehouseCell.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/pojo/WarehouseHistory.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/pojo/WarehouseShelf.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderService.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderTemplateService.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/InsProductService.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/WarehouseCellService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/WarehouseService.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/DetailTablePolicy.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java 2114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderTemplateServiceImpl.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsProductServiceImpl.java 719 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/WarehouseCellServiceImpl.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/WarehouseServiceImpl.java 190 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/util/SheetWriteHandlerUtil.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/vo/DeviceVO.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/vo/ExportInsProductVO.java 158 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/vo/InsFibersVO.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/vo/InsOrderPlanTaskSwitchVo.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/vo/InsOrderPlanVO.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/vo/InsProductFiberVO.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/vo/InsProductVO.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/vo/ProductVo.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/vo/SampleDefectsChildrenVo.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/vo/SampleDefectsFatherVo.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/vo/SampleVo.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/vo/StandardProductVO.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/vo/UnInsProductsVO.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsBushingMapper.xml 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsFiberMapper.xml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsFibersMapper.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsOrderFileMapper.xml 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsOrderMapper.xml 1247 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsOrderStateMapper.xml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsOrderTemplateMapper.xml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsProductMapper.xml 210 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsProductResultMapper.xml 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsProductUserMapper.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsReportApproveConfigMapper.xml 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsReportMapper.xml 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsSampleMapper.xml 892 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsSampleUserMapper.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsUnPassMapper.xml 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/SampleOrderMapper.xml 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/WarehouseCellMapper.xml 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/WarehouseHistoryMapper.xml 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/WarehouseMapper.xml 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/WarehouseShelfMapper.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/utils/EasyExcelUtils.java 181 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/pom.xml
@@ -12,6 +12,10 @@
    <artifactId>inspect-server</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
        <!-- é€šç”¨å·¥å…·-->
        <dependency>
            <groupId>com.ruoyi</groupId>
inspect-server/src/main/java/com/ruoyi/inspect/controller/InsOrderController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,318 @@
package com.ruoyi.inspect.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.utils.JackSonUtil;
import com.ruoyi.inspect.dto.*;
import com.ruoyi.inspect.pojo.InsOrder;
import com.ruoyi.inspect.pojo.InsOrderTemplate;
import com.ruoyi.inspect.pojo.InsProduct;
import com.ruoyi.inspect.service.InsOrderService;
import com.ruoyi.inspect.service.InsOrderTemplateService;
import com.ruoyi.inspect.service.InsProductService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Map;
@RestController
@AllArgsConstructor
@RequestMapping("/insOrder")
@Api(tags="检验单模块")
public class InsOrderController {
    private InsOrderService insOrderService;
    private InsProductService insProductService;
    private InsOrderTemplateService insOrderTemplateService;
    //获取检验下单数据
    @ApiOperation(value = "查看所属单位检验单")
    @GetMapping("/selectInsOrderParameter")
    public Result selectInsOrderParameter(Page page, SampleOrderDto sampleOrderDto) {
        return Result.success(insOrderService.selectInsOrderParameter(page, sampleOrderDto));
    }
    //用于检验下单区别查看所有订单和只查看同一个委托单位的订单
    @ApiOperation(value = "判断当前客户紧急额度是否用完")
    @GetMapping("/hasSendUrgentOrder")
    public Result hasSendUrgentOrder() {
        return Result.success(insOrderService.hasSendUrgentOrder());
    }
    //用于检验下单区别查看所有订单和只查看同一个委托单位的订单
    @ApiOperation(value = "查看所有检验单")
    @PostMapping("/selectAllInsOrderParameter")
    public Result selectAllInsOrderParameter() {
        return Result.success();
    }
    @ApiOperation(value = "分配按钮")
    @PostMapping("/upInsOrder")
    public Result<?> upInsOrder(@RequestBody UpInsOrderDTO upInsOrderDTO) {
        return Result.success(insOrderService.upInsOrder(upInsOrderDTO));
    }
    @ApiOperation(value = "下单按钮")
    @PostMapping("/addInsOrder")
    public Result<?> addInsOrder(String str) {
        Map<String, Object> map = JSON.parseObject(str, Map.class);
        JSONArray jsonArray = JSON.parseArray(map.get("list")+"");
        List<SampleProductDto> list = jsonArray.toJavaList(SampleProductDto.class);
        InsOrder insOrder = JSON.parseObject(JSON.toJSONString(map.get("insOrder")), InsOrder.class);
        List<List<Integer>> pairing = JSON.parseArray(map.get("pairing")+"");
        List<List<Integer>> fiberPairing = JSON.parseArray(map.get("fiberPairing")+"");//光纤配置里的熔接配对
        return Result.success(insOrderService.addInsOrder(list, insOrder, pairing,fiberPairing));
    }
    @ApiOperation(value = "查询订单最长预计时间")
    @PostMapping("/selectOrderManDay")
    public Result<?> selectOrderManDay(Integer id) {
        int day = insProductService.selectOrderManDay(id);
        return Result.success("成功", LocalDateTime.now().plusHours(day).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
    }
    @ApiOperation(value = "查询检验下单内容详情")
    @PostMapping("/getInsOrder")
    public Result<?> getInsOrder(Integer orderId) {
        return Result.success(insOrderService.getInsOrder(orderId));
    }
    @ApiOperation(value = "审核按钮")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id", value = "检验单id", dataTypeClass = Integer.class),
            @ApiImplicitParam(name = "state", value = "审核结果 1:通过 2:不通过", dataTypeClass = Integer.class)
    })
    @PostMapping("/upInsOrderOfState")
    public Result<?> upInsOrderOfState(@RequestBody InsOrder insOrder) {
        return Result.success(insOrderService.upInsOrderOfState(insOrder));
    }
    @ApiOperation(value = "保存检验模板按钮")
    @PostMapping("/addInsOrderTemplate")
    public Result<?> addInsOrderTemplate(@RequestBody InsOrderTemplate insOrderTemplate) {
        return Result.success(insOrderTemplateService.addInsOrderTemplate(insOrderTemplate));
    }
    @ApiOperation(value = "删除检验模板按钮")
    @PostMapping("/delInsOrderTemplate")
    public Result<?> delInsOrderTemplate(Integer id) {
        return Result.success(insOrderTemplateService.delInsOrderTemplate(id));
    }
    @ApiOperation(value = "查询检验单模板")
    @GetMapping("/selectInsOrderTemplate")
    public Result<?> selectInsOrderTemplate(String company) {
        return Result.success(insOrderTemplateService.selectInsOrderTemplate(company));
    }
    @ApiOperation(value = "通过检验单模板id获取检验单模板内容")
    @PostMapping("/selectInsOrderTemplateById")
    public Result<?> selectInsOrderTemplateById(Integer id) {
        return Result.success( insOrderTemplateService.selectInsOrderTemplateById(id),"成功");
    }
    @ApiOperation(value = "通过检验单查询检验数据(数据查看)")
    @PostMapping("/selectSampleAndProductByOrderId")
    public Result<?> selectSampleAndProductByOrderId(@RequestBody Map<String, Object> data) throws Exception {
        SampleProductDto2 sampleProductDto = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), SampleProductDto2.class);
        return Result.success(insOrderService.selectSampleAndProductByOrderId(sampleProductDto));
    }
    //数据查看下的查看详情(单根垂直燃烧和松套管
    @PostMapping("/viewDetails")
    public Result<?> viewDetails(@RequestBody Map<String, Object> data)   {
        return Result.success(insOrderService.viewDetails(data));
    }
    @ApiOperation(value = "导出已检委托单")
    @PostMapping("/exportChecked")
    public void exportChecked(@RequestBody Map<String, Object> data, HttpServletResponse response) {
        insOrderService.exportChecked(data,response);
    }
    @ApiOperation(value = "费用统计获取总价")
    @PostMapping("/costStatistics2")
    public Result<?> costStatistics2(@RequestBody Map<String, Object> data) throws Exception {
        CostStatisticsDto costStatisticsDto = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), CostStatisticsDto.class);
        return Result.success(insOrderService.costStatistics2(costStatisticsDto));
    }
    @ApiOperation(value = "撤销按钮")
    @PutMapping("/updateStatus")
    public Result<?> updateStatus(Integer id) {
        insOrderService.updateStatus(id);
        return Result.success();
    }
    //待检的撤销的查询待检项目
    @PostMapping("/selectNoProducts")
    public Result<?> selectNoProducts(@RequestBody Map<String, Object> data,Integer orderId ,String ids) throws Exception {
        Page page = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("page")), Page.class);
        InsProduct insProduct = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), InsProduct.class);
        return Result.success(insProductService.selectNoProducts(page, insProduct,orderId,ids));
    }
    /**
     * æŸ¥è¯¢éœ€è¦æ’¤é”€çš„æ£€éªŒé¡¹ç›®æ ·å“
     * @param orderId
     * @return Map<String, Object>
     */
    @GetMapping("/selectSampleByOrderId")
    public Result<?> selectSampleByOrderId(Integer orderId)   {
        return Result.success(insProductService.selectSampleByOrderId(orderId));
    }
    /**
     * æŸ¥è¯¢æ£€éªŒé¡¹ç›®
     * @param sampleId
     * @return Map<String, Object>
     */
    @GetMapping("/selectProductsBySampleId")
    public Result<?> selectProductsBySampleId(Integer sampleId,Integer orderId)   {
        return Result.success(insProductService.selectProductsBySampleId(sampleId,orderId));
    }
    /**
     * æŸ¥è¯¢æ£€éªŒé¡¹ç›®ä¸ºæ¸©åº¦å¾ªçŽ¯çš„æ£€éªŒæ¬¡æ•°
     */
    @GetMapping("/selectTemperatureByProductId")
    public Result selectTemperatureByproductId(Integer productId) {
        return Result.success(insProductService.selectTemperatureByProductId(productId));
    }
    /**
     * æŸ¥è¯¢æ¸©åº¦å¾ªçŽ¯çš„æ¬¡æ•°ä¸€è‡´çš„æ¸©åº¦ç‚¹
     */
    @GetMapping("/selectTemperatureNumberByProductId")
    public Result selectTemperatureNumberByproductId(Integer parentId,String inspectionItem) {
        return Result.success(insProductService.selectTemperatureNumberByProductId(parentId,inspectionItem));
    }
    /**
     * æ’¤é”€
     * @param data
     * @return
     */
    @PostMapping("/revoke")
    public Result<?> revoke(@RequestBody Map<String, Object> data)   {
        insProductService.revoke(data);
        return Result.success();
    }
    /**
     * æŸ¥è¯¢æ’¤é”€å®¡æ ¸çš„æ ·å“
     * @param orderId
     * @param
     * @return
     */
    @GetMapping("/revokeReviewSample")
    public Result<?> revokeReviewSample(Integer orderId)   {
        return Result.success(insProductService.revokeReviewSample(orderId));
    }
    /**
     * æ’¤é”€çš„循环次数一致的温度点
     * @return
     */
    @GetMapping("/revokeReviewConsistentByProductId")
    public Result<?> revokeReviewConsistentByProductId(Integer parentId,String inspectionItem){
        return Result.success(insProductService.revokeReviewConsistentByProductId(parentId,inspectionItem));
    }
    /**
     * æ’¤é”€çš„æ¸©åº¦å¾ªçŽ¯çš„å¾ªçŽ¯æ¬¡æ•°
     * @return
     */
    @GetMapping("/revokeReviewTemperatureByProductId")
    public Result<?> revokeReviewTemperatureByProductId(Integer productId){
        return Result.success(insProductService.revokeReviewTemperatureByProductId(productId));
    }
    /**
     * æŸ¥è¯¢æ’¤é”€å®¡æ ¸  æ¸©åº¦å¾ªçޝ
     */
    @GetMapping("/revokeReviewProduct")
    public Result<?> revokeReviewProduct(Integer orderId,Integer sampleId){
        return Result.success(insProductService.revokeReviewProduct(orderId,sampleId));
    }
    /**
     * æ’¤é”€å®¡æ ¸é€šè¿‡
     * @param orderId
     * @return
     */
    @GetMapping("/revocationPassed")
    public Result<?> revocationPassed(Integer orderId){
        insProductService.revocationPassed(orderId);
        return Result.success();
    }
    /**
     * æ’¤é”€å®¡æ ¸å–消
     * @param orderId
     * @return
     */
    @GetMapping("/revocationCancel")
    public Result<?> revocationCancel(Integer orderId){
        insProductService.revocationCancel(orderId);
        return Result.success();
    }
    @ApiOperation(value = "待检的撤销")
    @PutMapping("/updateInspected")
    public Result<?> updateInspected(Integer orderId,String ids){
        insProductService.updateInspected(orderId,ids);
        return Result.success();
    }
    @ApiOperation(value = "撤销审核按钮")
    @PostMapping("/checkUpdate")
    public Result<?> checkUpdate(Integer orderId,Integer state){
        insProductService.checkUpdate(orderId,state);
        return Result.success();
    }
    @ApiOperation(value = "标签打印按钮")
    @PostMapping("/labelPrinting")
    public Result<?> labelPrinting(String ids) {
        return Result.success(insOrderService.labelPrinting(ids));
    }
    @ApiOperation(value = "查看费用统计列表")
    @PostMapping("/costStatistics")
    public Result<?> costStatistics(@RequestBody Map<String, Object> data) throws Exception {
        Page page = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("page")), Page.class);
        CostStatisticsDto costStatisticsDto = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), CostStatisticsDto.class);
        return Result.success(insOrderService.costStatistics(page, costStatisticsDto));
    }
    @ApiOperation(value = "查看结果按钮(温度循环)")
    @PostMapping("/getInsOrderTemList")
    public Result getInsOrderTemList(@RequestBody Map<String, Object> data) {
        return Result.success(insOrderService.getInsOrderTemList(data));
    }
    /**
     * èŽ·å–ç†”æŽ¥æ•°é‡
     */
    @GetMapping("/permute")
    public Result permute(Integer num, Boolean isValue) {
        return Result.success(insOrderService.permute(num,isValue));
    }
}
inspect-server/src/main/java/com/ruoyi/inspect/controller/WarehouseController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,102 @@
package com.ruoyi.inspect.controller;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.inspect.pojo.Warehouse;
import com.ruoyi.inspect.pojo.WarehouseShelf;
import com.ruoyi.inspect.service.WarehouseService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
@RequestMapping("/warehouse")
@RestController
@AllArgsConstructor
@Api(tags = "样品管理")
public class WarehouseController {
    private WarehouseService warehouseService;
    @PostMapping("/addWarehouse")
    @ApiOperation("添加仓库")
    public Result addWarehouse(String name) {
        return Result.success(warehouseService.addWarehouse(name));
    }
    @GetMapping("/selectWarehouse")
    @ApiOperation("查询仓库")
    public Result selectWarehouse() {
        return Result.success(warehouseService.selectWarehouse());
    }
    @PostMapping("/addShelf")
    @ApiOperation("添加货架")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "name", name = "名称", dataTypeClass = String.class),
            @ApiImplicitParam(value = "row", name = "行", dataTypeClass = Integer.class),
            @ApiImplicitParam(value = "col", name = "列", dataTypeClass = Integer.class),
            @ApiImplicitParam(value = "warehouseId", name = "仓库id", dataTypeClass = Integer.class)
    })
    public Result addShelf(@RequestBody WarehouseShelf warehouseShelf) {
        return Result.success(warehouseService.addShelf(warehouseShelf));
    }
    @PostMapping("/delWarehouse")
    @ApiOperation("删除仓库")
    public Result delWarehouse(Integer id) {
        return Result.success(warehouseService.delWarehouse(id));
    }
    @PostMapping("/upWarehouse")
    @ApiOperation("修改仓库")
    public Result upWarehouse(@RequestBody Warehouse warehouse) {
        return Result.success(warehouseService.upWarehouse(warehouse));
    }
    @PostMapping("/delShelf")
    @ApiOperation("删除货架")
    public Result delShelf(Integer id) {
        return Result.success(warehouseService.delShelf(id));
    }
    @PostMapping("/upShelf")
    @ApiOperation("修改货架")
    public Result upShelf(@RequestBody WarehouseShelf warehouseShelf) {
        return Result.success(warehouseService.upShelf(warehouseShelf));
    }
    @GetMapping("/getWarehouse")
    @ApiOperation("查询货架下的存放信息")
    public Result getWarehouse(Integer shelfId) {
        return Result.success(warehouseService.getWarehouse(shelfId));
    }
    @PostMapping("/inWarehouse")
    @ApiOperation("样品入库")
    public Result inWarehouse(String trees, String sampleCode) {
        return Result.success(warehouseService.inWarehouse(trees, sampleCode));
    }
    @PostMapping("/outWarehouse")
    @ApiOperation("样品出库")
    public Result outWarehouse(String sampleCode) {
        return Result.success(warehouseService.outWarehouse(sampleCode));
    }
    @PostMapping("/getSampleRecord")
    @ApiOperation("查询样品详细记录")
    public Result getSampleRecord(Integer id) {
        return Result.success(warehouseService.getSampleRecord(id));
    }
    @PostMapping("/searchSampleId")
    @ApiOperation("通过样品编号进行检索")
    public Result searchSampleId(String sampleCode) {
        return Result.success(warehouseService.searchSampleId(sampleCode));
    }
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/ApproveConfigDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.ruoyi.inspect.dto;
import com.ruoyi.inspect.pojo.InsReportApproveConfig;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class ApproveConfigDTO implements Serializable {
    /**
     * é…ç½®åˆ—表
     */
    List<InsReportApproveConfig> configList;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/BatchApprovalReportDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.ruoyi.inspect.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
 * ä¸€é”®å®¡æ‰¹dto
 */
@Data
public class BatchApprovalReportDTO implements Serializable {
    /**
     * é€‰ä¸­çš„æŠ¥å‘Šid列表
     */
    List<Integer> ids;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/BushingDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.ruoyi.inspect.dto;
import com.ruoyi.inspect.pojo.InsBushing;
import lombok.Data;
import java.util.List;
@Data
public class BushingDto extends InsBushing {
    private List<FiberDto> fiber;
    private List<FibersDto> fibers;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/CommissionFeesDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
package com.ruoyi.inspect.dto;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import lombok.Data;
@Data
@ColumnWidth(30)
public class CommissionFeesDto {
    @ExcelProperty("日期")
    private String createTime;
    @ExcelProperty("检验编号")
    private String entrustCode;
    @ExcelProperty("样品名称")
    private String sampleName;
    @ExcelProperty("规格型号")
    private String sampleModel;
    @ExcelProperty("样品数量")
    private String sampleNum;
    @ExcelProperty("总价")
    private String totalPrice;
    @ExcelProperty("试验项目")
    private String insItem;
    @ExcelProperty("生产单位")
    private String production;
    @ExcelProperty("委托单位")
    private String company;
    @ExcelProperty("委托人")
    private String custom;
    @ExcelProperty("工程名称")
    private String engineering;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/CostStatisticsDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
package com.ruoyi.inspect.dto;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
public class CostStatisticsDto {
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ExcelProperty(value ={"中天科技检测中心样品登记表","ZTT/QR-30-01-01","日期"})
    private LocalDateTime createTime;
    @ExcelProperty(value ={"中天科技检测中心样品登记表","ZTT/QR-30-01-01","检验编号"})
    private String entrustCode;
    @ExcelProperty(value ={"中天科技检测中心样品登记表","样品名称"})
    private String sample;
    @ExcelProperty(value ={"中天科技检测中心样品登记表","规格型号"})
    private String model;
    @ExcelProperty(value ={"中天科技检测中心样品登记表","样品数量"})
    private Integer num;
    @ExcelProperty(value ={"中天科技检测中心样品登记表","总价"})
    private BigDecimal price;
    @ExcelProperty(value ={"中天科技检测中心样品登记表","试验项目"})
    private String inspectionItem;
    @ExcelProperty(value ={"中天科技检测中心样品登记表","委托单位"})
    private String company;
    @ExcelProperty(value ={"中天科技检测中心样品登记表","委托人"})
    private String name;
    @ExcelProperty(value ={"中天科技检测中心样品登记表","生产单位"})
    private String production;
    @ExcelProperty(value ={"中天科技检测中心样品登记表","工程名称"})
    private String engineering;
    @ExcelIgnore
    private Integer createUser;
    @ExcelIgnore
    private Integer insSampleId;
    @ExcelIgnore
    private Double cost;//工时
    @TableField(exist = false,select = false)
    @ExcelIgnore
    private String dates;
    @ExcelIgnore
    private String laboratory;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/ExcelChecked.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
package com.ruoyi.inspect.dto;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.converters.localdate.LocalDateStringConverter;
import lombok.Data;
import java.time.LocalDate;
@Data
public class ExcelChecked {
    @ExcelProperty("委托编号")
    private String entrustCode;
    @ExcelProperty("样品编号")
    private String sampleCode;
    @ExcelProperty("套管色标")
    private String bushColor;
    @ExcelProperty("光纤带编号")
    private String code;
    @ExcelProperty("光纤色标")
    private String color;
    @ExcelProperty("检验项")
    private String inspectionItem;
    @ExcelProperty("检验子项")
    private String inspectionItemSubclass;
    @ExcelProperty("试验要求")
    private String tell;
    @ExcelProperty("检验值")
    private String lastValue;
    @ExcelProperty("结果判定")
    private String insResult;
    @ExcelProperty("单位")
    private String unit;
    @ExcelProperty("检验人")
    private String checkName;
    @ExcelProperty("样品名称")
    private String sample;
    @ExcelProperty("样品型号")
    private String model;
    @ExcelProperty("下单人")
    private String customName;
    @ExcelProperty(value = "下单时间",converter = LocalDateStringConverter.class)
    private LocalDate createTime;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/ExcelDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.ruoyi.inspect.dto;
import lombok.Data;
import java.io.Serializable;
@Data
public class ExcelDto implements Serializable {
    Integer r;
    Integer c;
    Integer mc;
    ExcelV v;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/ExcelMc.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.inspect.dto;
import lombok.Data;
@Data
public class ExcelMc {
    Integer r;
    Integer c;
    Integer rs;
    Integer cs;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/ExcelPs.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
package com.ruoyi.inspect.dto;
import lombok.Data;
@Data
public class ExcelPs {
    String value;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/ExcelV.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.ruoyi.inspect.dto;
import lombok.Data;
@Data
public class ExcelV {
    String v;
    String ff;
    String fc;
    String fs;
    String ht;
    ExcelMc mc;
    ExcelPs ps;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/FactoryDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.ruoyi.inspect.dto;
import lombok.Data;
import java.util.List;
@Data
public class FactoryDto {
    private String code = "[1]";
    private String label;
    private String value;
    private List<LaboratoryDto> children;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/FiberDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package com.ruoyi.inspect.dto;
import com.ruoyi.inspect.pojo.InsFiber;
import com.ruoyi.inspect.pojo.InsProduct;
import lombok.Data;
import java.util.List;
@Data
public class FiberDto extends InsFiber {
    private List<InsProduct> productList;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/FibersDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.inspect.dto;
import com.ruoyi.inspect.pojo.InsFibers;
import com.ruoyi.inspect.pojo.InsProduct;
import lombok.Data;
import java.util.List;
@Data
public class FibersDto extends InsFibers {
    private List<FiberDto> fiber;
    private List<InsProduct> productList;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/HistoryDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.ruoyi.inspect.dto;
import com.ruoyi.inspect.pojo.WarehouseHistory;
import lombok.Data;
@Data
public class HistoryDto extends WarehouseHistory {
    private String createUserName;
    private String warehouseCode;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/InsOderDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.inspect.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.time.LocalDateTime;
/**
 * @author gaoaoy
 * @version 1.0.0
 * @create 2024/3/14 16:44
 **/
@Data
public class InsOderDto {
    private Integer id;
    private Integer orderName;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime date;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/InsOrderPlanCountDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
package com.ruoyi.inspect.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * æŸ¥è¯¢æ—¶é—´èŒƒå›´å†…检验任务计划数量DTO
 */
@Data
public class InsOrderPlanCountDTO implements Serializable {
    /**
     * å­å®žéªŒå®¤
     */
    @ApiModelProperty(value = "子实验室")
    private String sonLaboratory;
    /**
     * å¼€å§‹ä¸‹å‘æ—¶é—´
     */
    @ApiModelProperty(value = "开始下发时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime startTime;
    /**
     * ç»“束下发时间
     */
    @ApiModelProperty(value = "结束下发时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime endTime;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/InsOrderPlanDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
package com.ruoyi.inspect.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
@Data
public class InsOrderPlanDTO implements Serializable {
    @ApiModelProperty("检验任务主键id")
    private Long insSampleId;
    @ApiModelProperty("用户id")
    private Long userId;
    @ApiModelProperty("状态(检验处理)")
    private Integer state;
    @ApiModelProperty("子实验室")
    private String sonLaboratory;
    @ApiModelProperty("检验状态")
    private String insState;
    @ApiModelProperty("委托编号")
    private String entrustCode;
    @ApiModelProperty("样品编号")
    private String sampleCode;
    @ApiModelProperty("样品名称")
    private String sample;
    @ApiModelProperty("样品大类")
    private String sampleType;
    @ApiModelProperty("下发时间范围")
    private List<LocalDateTime> sendTimeRange;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/InsProductDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.ruoyi.inspect.dto;
import lombok.Data;
import java.util.List;
@Data
public class InsProductDto {
    private List<Integer> ids;
    private String temperature;
    private String humidity;
    private Integer insOrderId;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/InsProductResultDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
package com.ruoyi.inspect.dto;
import com.ruoyi.inspect.pojo.InsProductResult;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
public class InsProductResultDTO extends InsProductResult implements Serializable {
    /**
     * è®¢å•id
     */
    @ApiModelProperty("订单id")
    private Integer orderId;
    /**
     *样品id
     */
    @ApiModelProperty("样品id")
    private Integer sampleId;
    /**
     *原始记录模板名称
     */
    @ApiModelProperty("原始记录模板名称")
    private String templateName;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/InsulatingDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.ruoyi.inspect.dto;
import com.ruoyi.inspect.pojo.InsProduct;
import lombok.Data;
import java.util.List;
@Data
public class InsulatingDto {
    private Integer standardMethodListId;
    private Integer num;
    private List<InsProduct> insProduct;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/LaboratoryDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.ruoyi.inspect.dto;
import lombok.Data;
import java.util.List;
@Data
public class LaboratoryDto {
    private String code = "[2]";
    private String label;
    private String value;
    private List<SampleTypeDto> children;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/ModelDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.ruoyi.inspect.dto;
import lombok.Data;
@Data
public class ModelDto {
    private String code = "[5]";
    private String label;
    private String value;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/OrderThingDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
package com.ruoyi.inspect.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
@Data
public class OrderThingDto {
    @ApiModelProperty("主键id")
    private Integer id;
    @ApiModelProperty("委托编号")
    private String entrustCode;
    @ApiModelProperty("样品编号")
    private String sampleCode;
    @ApiModelProperty("委托人名称")
    private String custom;
    @ApiModelProperty("委托单位")
    private String company;
    @ApiModelProperty("样品名称")
    private String sample;
    @ApiModelProperty("样品型号")
    private String model;
    @ApiModelProperty("样品数量")
    private Double sampleNum;
    @ApiModelProperty("备注")
    private String remark;
    @ApiModelProperty("检验单结论")
    private String insResult;
    @ApiModelProperty("下单时间")
    private LocalDateTime createTime;
    @ApiModelProperty("检验项目")
    private List<ProductThingDto> products;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/ProductDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
package com.ruoyi.inspect.dto;
import lombok.Data;
@Data
public class ProductDto {
    private String name;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/ProductResultDto2.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.ruoyi.inspect.dto;
import com.ruoyi.inspect.pojo.InsProduct;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class ProductResultDto2 extends InsProduct {
    @ApiModelProperty("检验设备")
    private String equipValue;
    @ApiModelProperty("检验人")
    private String updateUserName;
    @ApiModelProperty("委托编号")
    private String entrustCode;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/ProductThingDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.inspect.dto;
import lombok.Data;
import java.util.List;
@Data
public class ProductThingDto {
    private Integer productId;
    private String inspectionItem;
    private String lastValue;
    private Integer insResult;
    private List<productResultDto> productResults;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/ReportPageDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.ruoyi.inspect.dto;
import com.ruoyi.inspect.pojo.InsReport;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
@Data
public class ReportPageDto extends InsReport implements Serializable {
    @ApiModelProperty(value = "是否已上传(0:未上传,1:已上传)")
    private Integer isUpload;
    @ApiModelProperty(value = "委托编号")
    private String entrustCode;
    private String writeUserName;
    private String ratifyUser;
    private String examineUser;
    @ApiModelProperty(value = "创建时间范围")
    private List<LocalDateTime> createTimeRange;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.ruoyi.inspect.dto;
import lombok.Data;
import java.util.List;
@Data
public class SampleDto {
    private String code = "[4]";
    private String label;
    private String value;
    private List<ModelDto> children;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleOrderDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,66 @@
package com.ruoyi.inspect.dto;
import com.baomidou.mybatisplus.annotation.TableField;
import com.ruoyi.inspect.pojo.InsOrder;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * @author gaoaoy
 * @version 1.0.0
 * @create 2024/3/14 18:46
 **/
@Data
public class SampleOrderDto extends InsOrder {
    @ApiModelProperty("检验对象")
    private String sampleType;
    @ApiModelProperty("样品名称")
    private String sampleName;
    @ApiModelProperty("样品型号")
    private String sampleModel;
    private String assign;
    @ApiModelProperty("样品数量")
    private Integer sampleNum;
    @ApiModelProperty("样品编号")
    private String sampleCode;
    @ApiModelProperty("检验进度%")
    private String insProgress;
    @ApiModelProperty("报告id")
    private String reportId;
    @ApiModelProperty("是否批准")
    private Integer isRatify;
    @TableField("`url`")
    private String url;
    private String urlS;
    private String name;
    /**
     * ç”¨äºŽåˆ¤æ–­å•子是否认领
     */
    private Integer inspectId;
    /**
     * ä¸‹è½½pdf地址
     */
    private String tempUrlPdf;
    /**
     * æ—¶é—´èŒƒå›´
     */
    private List<String> startAndEndTime;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleProductDTODL.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,70 @@
package com.ruoyi.inspect.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * æ•°æ®æŸ¥çœ‹å¯¹è±¡ï¼ˆç”µåŠ›è¯•éªŒå®¤ï¼‰
 */
@Data
public class SampleProductDTODL implements Serializable {
    private Integer id;
    private Integer insProductId;
    @ApiModelProperty(name = "委托单号")
    private String entrustCode;
    @ApiModelProperty(name = "样品编号")
    private String sampleCode;
    @ApiModelProperty(name = "样品名称")
    private String sample;
    @ApiModelProperty(name = "样品型号")
    private String model;
    @ApiModelProperty(name = "检验项")
    private String inspectionItem;
    @ApiModelProperty(name = "检验子项")
    private String inspectionItemSubclass;
    @ApiModelProperty(name = "检验结果")
    private String lastValue;
    @ApiModelProperty(name = "结果判定")
    private Integer insResult;
    @ApiModelProperty(name = "单位")
    private String unit;
    @ApiModelProperty(name = "试验要求")
    private String tell;
    @ApiModelProperty(name = "检验人")
    private String checkName;
    @ApiModelProperty(name = "检验日期")
    private String checkTime;
    @ApiModelProperty(name = "试验室名称")
    private String sonLaboratory;
//    @ApiModelProperty(value = 5, name = "样品状态")
    private Integer insState;
    private String inspectionItemType;
//    @ApiModelProperty(value = 11, name = "检验值类型")
    private String inspectionValueType;
    private String equipValue;
    @ApiModelProperty(value = "检验过程值")
    private String insValue;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleProductDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.ruoyi.inspect.dto;
import com.ruoyi.inspect.pojo.InsProduct;
import com.ruoyi.inspect.pojo.InsSample;
import lombok.Data;
import java.util.List;
@Data
public class SampleProductDto extends InsSample {
    private List<InsProduct> insProduct;
    private List<BushingDto> bushing;
    private List<SampleProductDto> childSampleList;
    private InsulatingDto insulating;
    private SheathDto sheath;
    //检验人
    private String checkName;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleProductDto2.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,77 @@
package com.ruoyi.inspect.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
public class SampleProductDto2 implements Serializable {
    private Integer id;
    private Integer insProductId;
    @ApiModelProperty("委托单号")
    private String entrustCode;
    @ApiModelProperty("样品编号")
    private String sampleCode;
    @ApiModelProperty("管套色标")
    private String bushColor;
    @ApiModelProperty("光纤带编号")
    private String code;
    @ApiModelProperty("光纤色标")
    private String color;
    @ApiModelProperty("检验项")
    private String inspectionItem;
    @ApiModelProperty("检验子项")
    private String inspectionItemSubclass;
    @ApiModelProperty("检验结果")
    private String lastValue;
    @ApiModelProperty("结果判定")
    private Integer insResult;
    @ApiModelProperty("单位")
    private String unit;
    @ApiModelProperty("试验要求")
    private String tell;
    @ApiModelProperty("检验人")
    private String checkName;
    @ApiModelProperty("检验日期")
    private String checkTime;
    @ApiModelProperty("样品名称")
    private String sample;
    @ApiModelProperty("样品型号")
    private String model;
    @ApiModelProperty("试验室名称")
    private String sonLaboratory;
//    @ApiModelProperty(value = 5, "样品状态")
    private Integer insState;
    private String inspectionItemType;
//    @ApiModelProperty(value = 11, "检验值类型")
    private String inspectionValueType;
    private String equipValue;
    @ApiModelProperty(value = "检验过程值")
    private String insValue;
    private Integer insSampleId;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleProductDto3.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.ruoyi.inspect.dto;
import com.ruoyi.inspect.pojo.InsProduct;
import com.ruoyi.inspect.pojo.InsSample;
import lombok.Data;
import java.util.List;
@Data
public class SampleProductDto3 extends InsSample {
    private List<InsProduct> insProduct;
    private List<BushingDto> bushing;
    private List<SampleProductDto3> childSampleList;
    private InsulatingDto insulating;
    private SheathDto sheath;
    private String code;
    private String ioSampleType;
    private Integer isLeave;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleTypeDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.ruoyi.inspect.dto;
import lombok.Data;
import java.util.List;
@Data
public class SampleTypeDto {
    private String code = "[3]";
    private String label;
    private String value;
    private List<SampleDto> children;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/SheathDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.ruoyi.inspect.dto;
import com.ruoyi.inspect.pojo.InsProduct;
import lombok.Data;
import java.util.List;
@Data
public class SheathDto {
    private Integer standardMethodListId;
    private List<InsProduct> insProduct;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/TasksShowDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,66 @@
package com.ruoyi.inspect.dto;
import lombok.Data;
@Data
public class TasksShowDto {
    /**
     * å§”托单号
     */
    private String entrustCode;
    /**
     * æ ·å“åç§°
     */
    private String sample;
    /**
     * å§”托单位
     */
    private String company;
    /**
     * å§”托时间
     */
    private String createTime;
    /**
     * æµ‹è¯•
     */
    private String state;
    /**
     * å¤æ ¸
     */
    private String insState;
    /**
     * æŠ¥å‘Š
     */
    private String code;
    /**
     * å®¡æ ¸
     */
    private String isExamine;
    /**
     * æ‰¹å‡†
     */
    private String isRatify;
    /**
     * æ£€æµ‹äºº
     */
    private String name;
    /**
     * ç´§æ€¥ç¨‹åº¦
     */
    private String type;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/TemperatureCycling.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,84 @@
package com.ruoyi.inspect.dto;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import java.time.LocalDate;
@Data
public class TemperatureCycling {
    @ExcelProperty("委托编号")
    private String entrustCode;
    @ExcelProperty("样品编号")
    private String sampleCode;
    @ExcelProperty("套管色标")
    private String bushColor;
    @ExcelProperty("光纤带编号")
    private String code;
    @ExcelProperty("光纤编号")
    private String color;
    @ExcelProperty("循环次数")
    private String inspectionItem;
    @ExcelProperty("温度点")
    private String inspectionItemSubclass;
    @ExcelProperty("衰减系数1310")
    private String attenuationCoefficient1310;
    @ExcelProperty("衰减差1")
    private String attenuationDifference1;
    @ExcelProperty("衰减系数1550")
    private String attenuationCoefficient1550;
    @ExcelProperty("衰减差2")
    private String attenuationDifference2;
    @ExcelProperty("衰减系数1625")
    private String attenuationCoefficient1625;
    @ExcelProperty("衰减差3")
    private String attenuationDifference3;
    @ExcelProperty("衰减1383")
    private String attenuationCoefficient1383;
    @ExcelProperty("衰减差4")
    private String attenuationDifference4;
    @ExcelProperty("衰减1490")
    private String attenuationCoefficient1490;
    @ExcelProperty("衰减差5")
    private String attenuationDifference5;
    @ExcelProperty("衰减差Max")
    private String attenuationDifferenceMax;
    @ExcelProperty("是否合格")
    private String insResult;
    @ExcelProperty("检验人")
    private String checkName;
    @ExcelProperty(value = "检测时间")
    private LocalDate insTime;
    @TableField(exist = false)
    @ExcelIgnore
    private LocalDate sendTime;
    @TableField(exist = false)
    @ExcelIgnore
    private String sample;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/UnInsProductsDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,51 @@
package com.ruoyi.inspect.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class UnInsProductsDTO {
    /**
     * å¼€å§‹æ—¶é—´
     */
    @ApiModelProperty(value = "开始时间")
    private String startDate;
    /**
     * ç»“束时间
     */
    @ApiModelProperty(value = "结束时间")
    private String endDate;
    /**
     * å§”托编号
     */
    @ApiModelProperty(value = "委托编号")
    private String entrustCode;
    /**
     * æ£€éªŒçŠ¶æ€
     */
    @ApiModelProperty(value = "检验状态")
    private String insState;
    /**
     * æ ·å“ç¼–号
     */
    @ApiModelProperty(value = "样品编号")
    private String sampleCode;
    /**
     * æ ·å“å¤§ç±»/样品名称
     */
    @ApiModelProperty(value = "样品大类/样品名称")
    private String sample;
    /**
     * å­å®žéªŒå®¤
     */
    @ApiModelProperty(value = "子实验室")
    private String sonLaboratory;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/UnPassPageDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.ruoyi.inspect.dto;
import com.ruoyi.inspect.pojo.InsUnPass;
import lombok.Data;
import java.io.Serializable;
/**
 * @author æœ±ä½³å‰
 * @date 2024/5/8 12:38
 */
@Data
public class UnPassPageDto extends InsUnPass implements Serializable {
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/UpInsOrderDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.ruoyi.inspect.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class UpInsOrderDTO implements Serializable {
    @ApiModelProperty(value = "订单id")
    private Integer orderId;
    @ApiModelProperty(value = "样品id")
    private Integer sampleId;
    @ApiModelProperty(value = "约定时间")
    private String appointed;
    @ApiModelProperty(value = "指派人员")
    private List<Integer> userIdList;
    @ApiModelProperty(value = "子试验室")
    private String sonLaboratory;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/WarehouseCellAndSampleDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package com.ruoyi.inspect.dto;
import com.ruoyi.inspect.pojo.InsSample;
import com.ruoyi.inspect.pojo.WarehouseCell;
import lombok.Data;
import java.util.List;
@Data
public class WarehouseCellAndSampleDto extends WarehouseCell {
    private List<InsSample> samples;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/WarehouseDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package com.ruoyi.inspect.dto;
import com.ruoyi.inspect.pojo.Warehouse;
import com.ruoyi.inspect.pojo.WarehouseShelf;
import lombok.Data;
import java.util.List;
@Data
public class WarehouseDto extends Warehouse {
    List<WarehouseShelf> warehouseShelfList;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/WarehouseHistoryDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package com.ruoyi.inspect.dto;
import com.ruoyi.inspect.pojo.InsSample;
import com.ruoyi.inspect.pojo.WarehouseHistory;
import lombok.Data;
import java.util.List;
@Data
public class WarehouseHistoryDto extends WarehouseHistory {
    List<InsSample> insSamples;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/WorkTimeDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,79 @@
package com.ruoyi.inspect.dto;
import com.ruoyi.inspect.pojo.InsOrder;
import com.ruoyi.inspect.pojo.InsProduct;
import com.ruoyi.inspect.pojo.InsProductResult;
import com.ruoyi.inspect.pojo.InsSample;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import java.io.Serializable;
import java.util.List;
/**
 * å·¥æ—¶è®¡ç®—数据传输对象
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class WorkTimeDTO implements Serializable {
    /**
     *用户id
     */
    @ApiModelProperty("用户id")
    Integer userId;
    /**
     *订单主体
     */
    @ApiModelProperty("订单主体")
    InsOrder insOrder;
    /**
     *样品信息
     */
    @ApiModelProperty("样品信息")
    InsSample insSample;
    /**
     *检验项信息
     */
    @ApiModelProperty("检验项信息")
    InsProduct insProduct;
    /**
     *父检验项信息
     */
    @ApiModelProperty("父检验项信息")
    InsProduct parentInsProduct;
    /**
     *当前样品id
     */
    @ApiModelProperty("当前样品id")
    Integer currentSampleId;
    /**
     *循环key,当前检验项id
     */
    @ApiModelProperty("循环key,当前检验项id")
    String insProductId;
    /**
     *旧的检验结果列表
     */
    @ApiModelProperty("旧的检验结果列表")
    List<InsProductResult> oldResults;
    /**
     *新的检验结果
     */
    @ApiModelProperty("新的检验结果")
    InsProductResult newResult;
}
inspect-server/src/main/java/com/ruoyi/inspect/dto/productResultDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.inspect.dto;
import lombok.Data;
@Data
public class productResultDto {
    private Integer id;
    private String insValue;
    private Integer insResult;
    private String remark;
}
inspect-server/src/main/java/com/ruoyi/inspect/excel/FiberRibboGeometricalParameterExcelData.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,69 @@
package com.ruoyi.inspect.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.converters.localdate.LocalDateStringConverter;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDate;
/**
 * å…‰çº¤å¸¦çŠ¶å‡ ä½•å‚æ•°
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class FiberRibboGeometricalParameterExcelData implements Serializable {
    @ExcelProperty("委托编号")
    private String entrustCode;
    @ExcelProperty("样品编号")
    private String sampleCode;
    @ExcelProperty("套管色标")
    private String bushColor;
    @ExcelProperty("光纤带编号")
    private String code;
    @ExcelProperty("检验项目分类")
    private String inspectionItemType;
    @ExcelProperty("检验人")
    private String inspector;
    @ExcelProperty(value = "检验时间",converter = LocalDateStringConverter.class)
    private LocalDate insTime;
    @ExcelProperty("光纤带厚度A端")
    private String thicknessA;
    @ExcelProperty("光纤带厚度B端")
    private String thicknessB;
    @ExcelProperty("光纤带宽度A端")
    private String widthA;
    @ExcelProperty("光纤带宽度B端")
    private String widthB;
    @ExcelProperty("两侧光纤水平间距A端")
    private String sideSpacingA;
    @ExcelProperty("两侧光纤水平间距B端")
    private String sideSpacingB;
    @ExcelProperty("平整度A端")
    private String evennessA;
    @ExcelProperty("平整度B端")
    private String evennessB;
    @ExcelProperty("相邻光纤水平间距A端")
    private String adjacentSpacingA;
    @ExcelProperty("相邻光纤水平间距B端")
    private String adjacentSpacingB;
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsBushingMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.ruoyi.inspect.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.inspect.dto.FiberDto;
import com.ruoyi.inspect.dto.FibersDto;
import com.ruoyi.inspect.pojo.InsBushing;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
 * <p>
 * å…‰çº¤é…ç½®çš„套管表 Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-05-30 05:58:16
 */
@Mapper
public interface InsBushingMapper extends BaseMapper<InsBushing> {
    List<FibersDto> selectFibersByBushingId(Integer bushingId);
    List<FiberDto> selectFiberByBushingId(Integer bushingId);
    List<FiberDto> selectFiberByFibersId(Integer fibersId);
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsFiberMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.ruoyi.inspect.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.inspect.pojo.InsFiber;
import com.ruoyi.inspect.pojo.InsFibers;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
 * <p>
 * å…‰çº¤é…ç½®çš„光纤表 Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-05-30 05:59:01
 */
@Mapper
public interface InsFiberMapper extends BaseMapper<InsFiber> {
    List<InsFibers> selectInsFibersByInsFiberId(Integer id);
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsFibersMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.ruoyi.inspect.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.inspect.pojo.InsFibers;
import org.apache.ibatis.annotations.Mapper;
/**
 * <p>
 * å…‰çº¤é…ç½®çš„光纤带表 Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-05-30 05:59:13
 */
@Mapper
public interface InsFibersMapper extends BaseMapper<InsFibers> {
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderFileMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.ruoyi.inspect.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.inspect.pojo.InsOrderFile;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
 * æ£€éªŒå•下的附件列表 Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-06-06 10:08:21
 */
@Mapper
public interface InsOrderFileMapper extends BaseMapper<InsOrderFile> {
    IPage<InsOrderFile> getFileList(Page page, @Param("ew") QueryWrapper<InsOrderFile> ew, @Param("insOrderId") Integer insOrderId);
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,107 @@
package com.ruoyi.inspect.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.inspect.dto.*;
import com.ruoyi.inspect.pojo.InsOrder;
import com.ruoyi.inspect.vo.DeviceVO;
import com.ruoyi.inspect.vo.ExportInsProductVO;
import com.ruoyi.inspect.vo.SampleDefectsFatherVo;
import com.ruoyi.inspect.vo.UnInsProductsVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
/**
 * @author gaoaoy
 * @description é’ˆå¯¹è¡¨ã€ins_order(检验下单)】的数据库操作Mapper
 * @createDate 2024-03-12 16:17:55
 * @Entity com.ruoyi.inspect.pojo.InsOrder
 */
@Mapper
public interface InsOrderMapper extends BaseMapper<InsOrder> {
    // èŽ·å–æ£€éªŒä»»åŠ¡æŸ¥çœ‹ç»“æžœè¡¨æ ¼æ•°æ®
    List<Map<String,Object>> getInsOrderPlanList(@Param("sonLaboratory") String sonLaboratory,
                                                 @Param("entrustCode") String entrustCode,
                                                 @Param("sampleCode") String sampleCode,
                                                 @Param("createUser") Integer createUser,
                                                 @Param("startTime") String startTime,
                                                 @Param("endTime") String endTime,
                                                 @Param("sampleType")String sampleType);
    //动态获取tab表头
    List<Map<String,Object>> getTabHeader(@Param("sonLaboratory") String sonLaboratory,@Param("sample") String sample);
    //获取检验下单数据
    IPage<SampleOrderDto> selectInsOrderPage(IPage<InsOrder> page, QueryWrapper<SampleOrderDto> ew, @Param("laboratory") String laboratory,
                                             @Param("startTime") String startTime,
                                             @Param("endTime") String endTime,
                                             @Param("eqState") String eqState,
                                             @Param("neState") String neState
    );
    // èŽ·å–å¯¼å‡ºå·²æ£€éªŒæ•°æ®
    List<ExportInsProductVO> exportChecked(@Param("names") List<String> names, @Param("startTime") String startTime, @Param("endTime") String endTime);
    //修改检验下单数据
    int upInsOrderParameter(InsOrder itemParameter);
    String getLaboratoryCode(String name);
    List<SampleProductDto2> selectSampleAndProductByOrderId(@Param("ew") QueryWrapper<SampleProductDto2> ew, @Param("id") Integer id);
    IPage<CostStatisticsDto> selectCostStatistics(IPage<CostStatisticsDto> page, QueryWrapper<CostStatisticsDto> ew, @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("laboratory") String laboratory);
    List<CostStatisticsDto> selectCostStatistics2(@Param("ew") QueryWrapper<CostStatisticsDto> ew,@Param("startTime") String startTime, @Param("endTime") String endTime,@Param("laboratory") String laboratory);
    DeviceVO selectDeviceList(String name);
    List<SampleDefectsFatherVo> selectSampleDefects(Page page, @Param("inspectionItems") String inspectionItems, @Param("orderNumber") String orderNumber);
    Long getCount(@Param("inspectionItems") String inspectionItems, @Param("orderNumber") String orderNumber);
    String getEnumLabelByValue(String value);
    String getStandardMethodCode(Integer id);
    int updateStatus( Integer id);
    String selLaboratoryCode(String laboratory);
    List<Map<Integer, Object>> selectReportModelByOrderId(@Param("id") Integer id, @Param("laboratory") String laboratory);
    String seldepLimsId(int depLimsId);
    // èŽ·å–éƒ¨é—¨
    String getDepartment(Integer id);
    /**
     * å§”托费用
     */
    List<CommissionFeesDto> selectCommissionFees(@Param("laboratory") String laboratory, @Param("company") String company, @Param("startTime") String startTime, @Param("endTime") String endTime);
    List<UnInsProductsVO> selectUnInsProducts(@Param("laboratory")String laboratory,
                                              @Param("startDateTime")LocalDateTime startDateTime,
                                              @Param("endDateTime")LocalDateTime endDateTime,
                                              @Param("dto") UnInsProductsDTO unInsProductsDTO);
    IPage<TasksShowDto> getTasksShow(Page page, @Param("sonLaboratory") String sonLaboratory);
    Map<String,Object> selectCurrentCompanyUrgentQuota(Integer userId);
    int selectPlanCountBySonLaboratory(
            @Param("sonLaboratory") String sonLaboratory,
            @Param("startOfMonth")LocalDateTime startOfMonth,
            @Param("endOfMonth")LocalDateTime endOfMonth);
    List<ExportInsProductVO> getInsOrderTemList(@Param("entrustCode") String entrustCode,
                                                @Param("sampleCode") String sampleCode,
                                                @Param("startTime") String startTime,
                                                @Param("endTime") String endTime,
                                                @Param("checkName") String checkName
    );
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderStateMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.ruoyi.inspect.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.inspect.pojo.InsOrderState;
import org.apache.ibatis.annotations.Mapper;
/**
* @author admin
* @description é’ˆå¯¹è¡¨ã€ins_order_state】的数据库操作Mapper
* @createDate 2024-04-01 11:44:50
* @Entity com.ruoyi.inspect.pojo.InsOrderState
*/
@Mapper
public interface InsOrderStateMapper extends BaseMapper<InsOrderState> {
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderTemplateMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.inspect.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.inspect.pojo.InsOrderTemplate;
import org.apache.ibatis.annotations.Mapper;
/**
* @author Administrator
* @description é’ˆå¯¹è¡¨ã€ins_order_template】的数据库操作Mapper
* @createDate 2024-03-18 14:14:54
* @Entity com.ruoyi.inspect.pojo.InsOrderTemplate
*/
@Mapper
public interface InsOrderTemplateMapper extends BaseMapper<InsOrderTemplate> {
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsProductMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,54 @@
package com.ruoyi.inspect.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.inspect.dto.ProductResultDto2;
import com.ruoyi.inspect.pojo.InsProduct;
import com.ruoyi.inspect.vo.InsProductFiberVO;
import com.ruoyi.inspect.vo.InsProductVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* @author Administrator
* @description é’ˆå¯¹è¡¨ã€ins_product(检验项目)】的数据库操作Mapper
* @createDate 2024-03-08 09:45:03
* @Entity com.ruoyi.inspect.pojo.InsProduct
*/
@Mapper
public interface InsProductMapper extends BaseMapper<InsProduct> {
    int selectOrderManDay(Integer orderId);
    Map<String, String> selectUserById(Integer userId);
    List<ProductResultDto2> getProductAndResult(Integer sampleId);
    int updateInspected(@Param("id") Integer id);
    List<InsProduct> selectFiberInsProduct(List<Integer> ids, String laboratory);
    IPage<InsProduct> selectNoProducts(Page page, Integer orderId);
    int selectInsProductCountByOrderId(Integer orderId);
    List<InsProduct> findSagTemperatureProducts(Integer sampleId, String inspectionItem);
    List<InsProductVO> selectProductByOrderId(Integer orderId,String sonLaboratory);
    List<InsProductFiberVO> selectInsProductInsFiberList(Integer sampleId);
    List<InsProductFiberVO> selectInsProductInsBushList(Integer sampleId);
    List<InsProductFiberVO> selectInsProductInsFibersList(Integer sampleId);
    List<InsProductFiberVO> selectProductBySampleId(Integer sampleId);
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsProductResultMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.ruoyi.inspect.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.inspect.pojo.InsProductResult;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author Administrator
* @description é’ˆå¯¹è¡¨ã€ins_product_result(检验项目的结果)】的数据库操作Mapper
* @createDate 2024-03-28 10:29:37
* @Entity com.ruoyi.inspect.pojo.InsProductResult
*/
@Mapper
public interface InsProductResultMapper extends BaseMapper<InsProductResult> {
    List<InsProductResult> selDetail(@Param("ips") List<Integer> ips);
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsProductUserMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.inspect.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.inspect.pojo.InsProductUser;
import org.apache.ibatis.annotations.Mapper;
/**
* @author z1292
* @description é’ˆå¯¹è¡¨ã€ins_product_user(检验项目的人员检验记录)】的数据库操作Mapper
* @createDate 2024-04-17 13:42:44
* @Entity com.ruoyi.inspect.pojo.InsProductUser
*/
@Mapper
public interface InsProductUserMapper extends BaseMapper<InsProductUser> {
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsReportApproveConfigMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.ruoyi.inspect.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.inspect.pojo.InsReportApproveConfig;
import org.apache.ibatis.annotations.Mapper;
import java.util.Map;
/**
* @author 27233
* @description é’ˆå¯¹è¡¨ã€ins_report_approve_config(报告审批签名配置)】的数据库操作Mapper
* @createDate 2024-12-10 09:36:10
* @Entity com.ruoyi.inspect.pojo.InsReportApproveConfig
*/
@Mapper
public interface InsReportApproveConfigMapper extends BaseMapper<InsReportApproveConfig> {
    Map<String,Object> selectApprovalConfigByLaboratory(String laboratory);
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsReportMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.ruoyi.inspect.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.ruoyi.inspect.dto.ReportPageDto;
import com.ruoyi.inspect.pojo.InsReport;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author Administrator
* @description é’ˆå¯¹è¡¨ã€ins_report(检验报告)】的数据库操作Mapper
* @createDate 2024-03-17 22:10:02
* @Entity com.ruoyi.inspect.pojo.InsReport
*/
@Mapper
public interface InsReportMapper extends BaseMapper<InsReport> {
    IPage<ReportPageDto> pageInsReport(IPage<ReportPageDto> page,
                                       @Param("ew") QueryWrapper<ReportPageDto> ew,
                                       @Param("laboratory") String laboratory);
    String getLaboratoryByName(String name);
    List<ReportPageDto> findReportCountInfo(@Param("ew") QueryWrapper<ReportPageDto> reportPageDtoQueryWrapper,
                            @Param("laboratory") String laboratory,
                            @Param("queryField") String queryField);
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsSampleMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,76 @@
package com.ruoyi.inspect.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.inspect.dto.InsOrderPlanDTO;
import com.ruoyi.inspect.dto.SampleProductDto;
import com.ruoyi.inspect.dto.SampleProductDto3;
import com.ruoyi.inspect.pojo.InsProduct;
import com.ruoyi.inspect.pojo.InsSample;
import com.ruoyi.inspect.vo.InsOrderPlanTaskSwitchVo;
import com.ruoyi.inspect.vo.InsOrderPlanVO;
import com.ruoyi.inspect.vo.SampleVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
/**
* @author Administrator
* @description é’ˆå¯¹è¡¨ã€ins_sample(检验样品)】的数据库操作Mapper
* @createDate 2024-03-14 17:14:57
* @Entity com.ruoyi.inspect.pojo.InsSample
*/
@Mapper
public interface InsSampleMapper extends BaseMapper<InsSample> {
    IPage<InsOrderPlanVO> findInsSampleAndOrder(Page page,
                                                @Param("userName") String userName,
                                                @Param("checkName") String checkName,
                                                @Param("sonLaboratory") String sonLaboratory,
                                                @Param("sample") String sample,
                                                @Param("sampleCode") String sampleCode,
                                                @Param("laboratory") String laboratory,
                                                @Param("entrustCode") String entrustCode,
                                                @Param("insState") String insState,
                                                @Param("ew") QueryWrapper<InsOrderPlanDTO> ew,
                                                @Param("sendTimeRange") List<LocalDateTime> sendTimeRange);
    IPage<InsOrderPlanTaskSwitchVo> inspectionOrderDetailsTaskSwitching(Page page, @Param("ew") QueryWrapper<InsOrderPlanDTO> ew, @Param("userId") Integer userId, @Param("sonLaboratory") String sonLaboratory, @Param("laboratory") String laboratory);
    List<SampleProductDto> selectSampleProductListByOrderId(Integer id);
    List<SampleProductDto> selectSampleProductListByOrderId2(Integer id);
    List<SampleProductDto3> selectSampleProductListByOrderId3(List<Integer> ids);
    List<SampleProductDto> getInsOrderAndSample(Integer id, String laboratory);
    String getSampleEn(String sample);
    List<InsProduct> getInsProduct1(Integer id, String laboratory);
    List<InsProduct> getInsProduct5(Integer id, String laboratory);
    List<InsProduct> getInsProduct2(@Param("id") Integer id, @Param("sonLaboratory") String sonLaboratory);
    List<InsProduct> getInsProduct3(@Param("id") Integer id, @Param("sonLaboratory") String sonLaboratory);
    List<InsProduct> getInsProduct6(@Param("id") Integer id, @Param("sonLaboratory") String sonLaboratory);
    List<InsProduct> getInsProduct4(@Param("id") Integer id, @Param("sonLaboratory") String sonLaboratory);
    List<Map<String, Object>> getReportModel(@Param("orderId") Integer orderId, @Param("id") Integer id, @Param("laboratory") String laboratory);
    SampleVo getDetailById(Integer sampleId);
    String selMethodById(Integer sampleId);
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsSampleUserMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.inspect.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.inspect.pojo.InsSampleUser;
import org.apache.ibatis.annotations.Mapper;
/**
* @author Administrator
* @description é’ˆå¯¹è¡¨ã€ins_sample_user(样品负责人记录)】的数据库操作Mapper
* @createDate 2024-03-14 17:12:02
* @Entity com.ruoyi.inspect.pojo.InsSampleUser
*/
@Mapper
public interface InsSampleUserMapper extends BaseMapper<InsSampleUser> {
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsUnPassMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.ruoyi.inspect.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.ruoyi.inspect.dto.UnPassPageDto;
import com.ruoyi.inspect.pojo.InsUnPass;
import org.apache.ibatis.annotations.Mapper;
/**
 * @author æœ±ä½³å‰
 * @date 2024/5/8 13:05
 */
@Mapper
public interface InsUnPassMapper extends BaseMapper<InsUnPass> {
    IPage<UnPassPageDto> pageInsUnPass(IPage<UnPassPageDto> page, QueryWrapper<UnPassPageDto> ew);
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/ProcessOrder1Mapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.ruoyi.inspect.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.inspect.pojo.ProcessOrder;
import org.apache.ibatis.annotations.Mapper;
/**
 * <p>
 * è¦æ±‚、标书和合同评审 Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-05 03:06:20
 */
@Mapper
public interface ProcessOrder1Mapper extends BaseMapper<ProcessOrder> {
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/SampleOrderMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.ruoyi.inspect.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.inspect.dto.SampleOrderDto;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
 * @author gaoaoy
 * @version 1.0.0
 * @create 2024/3/14 18:54
 **/
@Mapper
public interface SampleOrderMapper extends BaseMapper<SampleOrderDto> {
    List<SampleOrderDto> selectSampleOrderList();
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/WarehouseCellMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.ruoyi.inspect.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.inspect.dto.WarehouseCellAndSampleDto;
import com.ruoyi.inspect.pojo.WarehouseCell;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* @author z1292
* @description é’ˆå¯¹è¡¨ã€warehouse_cell(货架单元格)】的数据库操作Mapper
* @createDate 2024-04-06 12:12:12
* @Entity com.ruoyi.inspect.pojo.WarehouseCell
*/
@Mapper
public interface WarehouseCellMapper extends BaseMapper<WarehouseCell> {
    List<WarehouseCellAndSampleDto> getWarehouse(Integer shelfId);
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/WarehouseHistoryMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.ruoyi.inspect.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.inspect.dto.HistoryDto;
import com.ruoyi.inspect.pojo.WarehouseHistory;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* @author z1292
* @description é’ˆå¯¹è¡¨ã€warehouse_history(出入库记录)】的数据库操作Mapper
* @createDate 2024-04-06 12:12:12
* @Entity com.ruoyi.inspect.pojo.WarehouseHistory
*/
@Mapper
public interface WarehouseHistoryMapper extends BaseMapper<WarehouseHistory> {
    String getUserNameById(Integer userId);
    List<HistoryDto> getHistoryListBySampleId(Integer sampleId);
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/WarehouseMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.ruoyi.inspect.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.inspect.dto.WarehouseDto;
import com.ruoyi.inspect.pojo.Warehouse;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* @author z1292
* @description é’ˆå¯¹è¡¨ã€warehouse(仓库)】的数据库操作Mapper
* @createDate 2024-04-06 12:12:12
* @Entity com.ruoyi.inspect.pojo.Warehouse
*/
@Mapper
public interface WarehouseMapper extends BaseMapper<Warehouse> {
    List<WarehouseDto> selectWarehouseList();
}
inspect-server/src/main/java/com/ruoyi/inspect/mapper/WarehouseShelfMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.inspect.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.inspect.pojo.WarehouseShelf;
import org.apache.ibatis.annotations.Mapper;
/**
* @author z1292
* @description é’ˆå¯¹è¡¨ã€warehouse_shelf(货架)】的数据库操作Mapper
* @createDate 2024-04-06 12:12:12
* @Entity com.ruoyi.inspect.pojo.WarehouseShelf
*/
@Mapper
public interface WarehouseShelfMapper extends BaseMapper<WarehouseShelf> {
}
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsBushing.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,55 @@
package com.ruoyi.inspect.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-05-30 05:58:16
 */
@Getter
@Setter
@TableName("ins_bushing")
@ApiModel(value = "InsBushing对象", description = "光纤配置的套管表")
public class InsBushing implements Serializable {
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("管色标")
    private String color;
    @ApiModelProperty("标量")
    private Integer standNum;
    @ApiModelProperty("测试量")
    private Integer testNum;
    @ApiModelProperty("关联 æ ·å“id")
    private Integer insSampleId;
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @TableField(exist = false,select = false)
    private Integer state;
}
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsFiber.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
package com.ruoyi.inspect.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-05-30 05:59:01
 */
@Getter
@Setter
@TableName("ins_fiber")
@ApiModel(value = "InsFiber对象", description = "光纤配置的光纤表")
public class InsFiber implements Serializable {
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("管套色标")
    private String bushColor;
    @ApiModelProperty("光纤色标")
    private String color;
    @ApiModelProperty("光纤规格")
    private String model;
    @ApiModelProperty("参考标准")
    private String standard;
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty("关联 å¥—管表id")
    private Integer insBushingId;
    @ApiModelProperty("关联 å…‰çº¤å¸¦è¡¨id")
    private Integer insFibersId;
    @TableField(exist = false,select = false)
    private Integer state;
}
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsFibers.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
package com.ruoyi.inspect.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-05-30 05:59:13
 */
@Getter
@Setter
@TableName("ins_fibers")
@ApiModel(value = "InsFibers对象", description = "光纤配置的光纤带表")
public class InsFibers implements Serializable {
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("光纤带编号")
    private String code;
    @ApiModelProperty("光纤带规格")
    private String model;
    @ApiModelProperty("参考标准")
    private String standard;
    @ApiModelProperty("光纤检测量")
    private String num;
    @ApiModelProperty("关联  å¥—管表id")
    private Integer insBushingId;
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @TableField(exist = false,select = false)
    private Integer state;
}
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsOrder.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,224 @@
package com.ruoyi.inspect.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* æ£€éªŒä¸‹å•
* @TableName ins_order
*/
@Data
@TableName("ins_order")
@AllArgsConstructor
@NoArgsConstructor
public class InsOrder implements Serializable {
    @ApiModelProperty(value = "主键")
    @TableId(type = IdType.AUTO)
    private Integer id;
    /**
    * å§”托编号
    */
    @Size(max= 255,message="编码长度不能超过255")
    @ApiModelProperty(value = "委托编号")
    @Length(max= 255,message="编码长度不能超过255")
    private String entrustCode;
    /**
     * å¤–部委托编号
     */
    @Size(max= 255,message="编码长度不能超过255")
    @ApiModelProperty(value = "外部委托编号")
    @Length(max= 255,message="编码长度不能超过255")
    private String outEntrustCode;
    @Size(max= 255,message="编码长度不能超过255")
    @ApiModelProperty(value = "检验类别")
    @Length(max= 255,message="编码长度不能超过255")
    private String orderType;
    /**
    * ä¸‹å•客户
    */
    @Size(max= 255,message="编码长度不能超过255")
    @ApiModelProperty("制单人")
    @Length(max= 255,message="编码长度不能超过255")
    private String custom;
    /**
    * ä¸‹å•单位
    */
    @Size(max= 255,message="编码长度不能超过255")
    @ApiModelProperty("委托单位")
    @Length(max= 255,message="编码长度不能超过255")
    private String company;
    @Size(max= 255,message="编码长度不能超过255")
    @ApiModelProperty("联系方式")
    @Length(max= 255,message="编码长度不能超过255")
    private String phone;
    /**
    * å·¥åŽ‚åŸŸ
    */
    @Size(max= 255,message="编码长度不能超过255")
    @ApiModelProperty("工厂域")
    @Length(max= 255,message="编码长度不能超过255")
    private String code;
    /**
    * ç´§æ€¥ç¨‹åº¦ ï¼ˆ0普通 1优先 2紧急)
    */
    @ApiModelProperty("紧急程度 ï¼ˆ0普通 1优先 2紧急)")
    private Integer type;
    /**
    * çº¦å®šæ—¶é—´
    */
    @ApiModelProperty("约定时间")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate appointed;
    @ApiModelProperty("检验结果")
    private Integer insResult;
    @ApiModelProperty("样品处理方式")
    private Integer processing;
    @ApiModelProperty("是否留样")
    private Integer isLeave;
    /**
    * 1:检验处理 0:待审核 2:退回 3:撤销
    */
    @ApiModelProperty("状态")
    private Integer state;
    /**
    * å¤‡æ³¨
    */
    @Size(max= 255,message="编码长度不能超过255")
    @ApiModelProperty("备注")
    @Length(max= 255,message="编码长度不能超过255")
    private String remark;
    /**
    * OTC订单号
    */
    @Size(max= 255,message="编码长度不能超过255")
    @ApiModelProperty("OTC订单号")
    @Length(max= 255,message="编码长度不能超过255")
    private String otcCode;
//    @ValueTableShow(11)
    @ApiModelProperty("下单人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    /**
     *
     */
    @ApiModelProperty("下单时间")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    @ApiModelProperty("下发时间")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime sendTime;
    /**
     *更新人
     */
    @ApiModelProperty("更新人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    /**
     *
     */
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    private Integer userId;
    private Integer mating;
    @ApiModelProperty("检验状态(0:待检验 1:检验中 2:已检验 3:待复核 4:复核未通过 5:复核通过)")
    private Integer insState;
    /**
     * æ£€éªŒå·¥åŽ‚
     */
    private String factory;
    /**
     * å®žéªŒå®¤åç§°
     */
    private String laboratory;
    /**
     * æ ·å“ç±»åž‹
     */
    private String sampleType;
    /**
     * æ ·å“åç§°
     */
    private String sample;
    @ApiModelProperty("检验时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime insTime;
    private String tell;
    private Integer send;
    private String formType;
    @ApiModelProperty("审核时间")
    private LocalDateTime examineTime;
    private String engineering;
    private String engineeringEn;
    private String production;
    private String productionEn;
    private Long companyId;
    private String prepareUser;
    @ApiModelProperty("是否审核撤销")
    private Integer isRevocation;
    @ApiModelProperty("审核撤销的项目id")
    private String revocationInsProductIds;
    @ApiModelProperty("签发日期")
    private LocalDateTime issuingDate;
    @ApiModelProperty("撤销日期")
    private LocalDateTime revocationTime;
}
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsOrderFile.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,57 @@
package com.ruoyi.inspect.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-06-06 10:08:21
 */
@Getter
@Setter
@TableName("ins_order_file")
@ApiModel(value = "InsOrderFile对象", description = "检验单下的附件列表")
public class InsOrderFile implements Serializable {
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("关联 æ£€éªŒå•外键id")
    private Integer insOrderId;
    @ApiModelProperty("类型")
    private Integer type;
    @ApiModelProperty("附件路径")
    private String fileUrl;
    @ApiModelProperty("附件名称")
    private String fileName;
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("上传人")
    @TableField(exist = false, select = false)
    private String name;
    @TableField(fill = FieldFill.INSERT)
    @ApiModelProperty("上传时间")
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsOrderState.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,67 @@
package com.ruoyi.inspect.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;
/**
 *
 * @TableName ins_order_state
 */
@TableName(value ="ins_order_state")
@Data
public class InsOrderState implements Serializable {
    /**
     *
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * å¤–键:ins_order表id
     */
    @TableField(value = "ins_order_id")
    private Integer insOrderId;
    /**
     * å®žéªŒå®¤
     */
    @TableField(value = "laboratory")
    private String laboratory;
    /**
     * æ£€éªŒçŠ¶æ€(0:待检验1:检验中 2:已检验3:待复核4:复核未通过 5:复核通过)
     */
    @TableField(value = "ins_state")
    private Integer insState;
    @ApiModelProperty("检验时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime insTime;
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    @ApiModelProperty("复核人")
    private Integer verifyUser;
    @ApiModelProperty("复核理由")
    private String verifyTell;
}
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsOrderTemplate.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
package com.ruoyi.inspect.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;
/**
 *
 * @TableName ins_order_template
 */
@TableName(value ="ins_order_template")
@Data
public class InsOrderTemplate implements Serializable {
    /**
     *
     */
    @TableId(type = IdType.AUTO)
    private Integer id;
    /**
     * æ¨¡æ¿åç§°
     */
    @ApiModelProperty("模板名称")
    private String name;
    /**
     * æ¨¡æ¿å†…容
     */
    @ApiModelProperty("模板内容")
    private String thing;
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
}
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsProduct.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,249 @@
package com.ruoyi.inspect.pojo;
import com.alibaba.fastjson.JSONObject;
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;
import java.util.List;
import java.util.Map;
/**
 * æ£€éªŒé¡¹ç›®
 *
 * @TableName ins_product
 */
@TableName(value = "ins_product")
@Data
public class InsProduct implements Serializable {
    /**
     * ä¸»é”®id
     */
    @TableId(type = IdType.AUTO)
    private Integer id;
    @TableField(exist = false,select = false)
    private String sampleCode;
    /**
     * æ£€éªŒé¡¹
     */
    private String inspectionItem;
    private String inspectionItemEn;
    /**
     * æ£€éªŒé¡¹åˆ†ç±»
     */
    @ApiModelProperty(value = "检验项分类")
    private String inspectionItemClass;
    @ApiModelProperty(value = "检验项分类EN")
    private String inspectionItemClassEn;
    /**
     * æ£€éªŒé¡¹å­ç±»
     */
    private String inspectionItemSubclass;
    private String inspectionItemSubclassEn;
    /**
     * å·¥åŽ‚
     */
    private String factory;
    /**
     * å®žéªŒå®¤
     */
    private String laboratory;
    /**
     * æ ·å“åˆ†ç±»
     */
    private String sampleType;
    /**
     * æ ·å“
     */
    private String sample;
    /**
     * åž‹å·
     */
    private String model;
    private String methodS;
    /**
     * å­å®žéªŒå®¤
     */
    private String sonLaboratory;
    /**
     * è®¡é‡å•位
     */
    private String unit;
    /**
     * å•ä»·(元)
     */
    private BigDecimal price;
    /**
     * å·¥æ—¶(H)
     */
    private Double manHour;
    /**
     * å·¥æ—¶åˆ†ç»„
     */
    private String manHourGroup;
    /**
     * æ£€éªŒé¡¹ç±»åž‹
     */
    private String inspectionItemType;
    /**
     * æ£€éªŒå€¼ç±»åž‹
     */
    private String inspectionValueType;
    /**
     * è®¾å¤‡ç»„
     */
    private String deviceGroup;
    /**
     * æ£€éªŒæ¬¡æ•°
     */
    private Integer checkoutNumber;
    /**
     * åŒºé—´
     */
    private String section;
    /**
     * å–值类型
     */
    private String valueType;
    /**
     * æ–¹æ³•
     */
    private String method;
    /**
     * é¢„计时间(h)
     */
    private Integer manDay;
    /**
     * ç‰¹æ®Šæ ‡è¯†
     */
    private String bsm;
    /**
     * è¦æ±‚值
     */
    private String ask;
    /**
     * è¦æ±‚描述
     */
    private String tell;
    /**
     * æœ€ç»ˆå€¼
     */
    @TableField("`last_value`")
    private String lastValue;
    /**
     * 1:合格 0:不合格 2:待定 3:不判定
     */
    private Integer insResult;
    /**
     * 1:有效 0:无效
     */
    private Integer state;
    /**
     * å¤–键:ins_sample表id
     */
    private Integer insSampleId;
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    /**
     * å¤–键:standard_template表id
     */
    private Integer templateId;
    @TableField(exist = false)
    private List<JSONObject> template;
    @TableField(exist = false)
    private Map<String, Object> style;
    @TableField(exist = false)
    private InsProductResult insProductResult;
    @TableField(exist = false)
    private String templateName;
    private String dic;
    //温度
    private String temperature;
    //湿度
    private String humidity;
    private Integer insFiberId;
    private Integer insFibersId;
    private Integer insBushId;
    private Integer standardMethodListId;
    /**
     * ç‰¹æ®Šç¬¦å·æ›¿æ¢å€¼
     */
    private String specialValue;
    /**
     * ç‰¹æ®Šé¡¹ç›®çˆ¶id
     */
    private Integer specialItemParentId;
    //返回的20度常温的计算值(温度循环)
    @TableField(exist = false ,select = false)
    private String complue;
    /**
     * å¼¹æ€§æ¨¡é‡
     */
    private String elasticityModulus;
}
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsProductResult.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
package com.ruoyi.inspect.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;
/**
 * æ£€éªŒé¡¹ç›®çš„结果
 * @TableName ins_product_result
 */
@TableName(value ="ins_product_result")
@Data
public class InsProductResult implements Serializable {
    /**
     *
     */
    @TableId(type = IdType.AUTO)
    private Integer id;
    /**
     * å¤–键:检验项目id
     */
    private Integer insProductId;
    /**
     * æ£€éªŒå€¼
     */
    private String insValue;
    /**
     * è®¡ç®—值
     */
    private String comValue;
    /**
     * è®¾å¤‡å€¼
     */
    private String equipValue;
    private String equipName;
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
}
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsProductUser.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
package com.ruoyi.inspect.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * æ£€éªŒé¡¹ç›®çš„人员检验记录
 * @TableName ins_product_user
 */
@TableName(value ="ins_product_user")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class InsProductUser implements Serializable {
    /**
     *
     */
    @TableId(type = IdType.AUTO)
    private Integer id;
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    /**
     * å¤–键:ins_product表id
     */
    private Integer insProductId;
}
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsReport.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,107 @@
package com.ruoyi.inspect.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;
/**
 * æ£€éªŒæŠ¥å‘Š
 * @TableName ins_report
 */
@TableName(value ="ins_report")
@Data
public class InsReport implements Serializable {
    /**
     *
     */
    @TableId(type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("报告编号")
    private String code;
    /**
     * å¤–键:检验单id
     */
    private Integer insOrderId;
    /**
     * ç³»ç»Ÿç”ŸæˆæŠ¥å‘Šåœ°å€
     */
    private String url;
    /**
     * æ‰‹åŠ¨ä¸Šä¼ æŠ¥å‘Šåœ°å€
     */
    private String urlS;
    /**
     * 1:批准 0:不批准
     */
    private Integer isRatify;
    private String ratifyTell;
    /**
     * 1:审核通过 0:审核不通过
     */
    private Integer isExamine;
    private String examineTell;
    /**
     * å¤–键:用户id(提交人)
     */
    private Integer writeUserId;
    /**
     * å¤–键:用户id(批准人)
     */
    private Integer ratifyUserId;
    /**
     * å¤–键:用户id(审核人)
     */
    private Integer examineUserId;
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    /**
     * 1:已提交 0:待提交
     */
    private Integer state;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime writeTime;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime examineTime;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime ratifyTime;
    /**
     * ä¸´æ—¶æŠ¥å‘Šåœ°å€
     */
    private String tempUrlPdf;
}
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsReportApproveConfig.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
package com.ruoyi.inspect.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 lombok.Data;
import java.io.Serializable;
/**
 * æŠ¥å‘Šå®¡æ‰¹ç­¾åé…ç½®
 * @TableName ins_report_approve_config
 */
@TableName(value ="ins_report_approve_config")
@Data
public class InsReportApproveConfig implements Serializable {
    /**
     * ä¸»é”®
     */
    @TableId(type = IdType.AUTO)
    private Integer id;
    /**
     * ç¼–制人
     */
    private Integer editor;
    /**
     * å®¡æ ¸äºº
     */
    private Integer examiner;
    /**
     * æ‰¹å‡†äºº
     */
    private Integer approver;
    /**
     * å®žéªŒå®¤
     */
    private String laboratory;
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsSample.java
@@ -120,4 +120,10 @@
    @TableField(select = false,exist = false)
    private Integer num=1;
    /**
     * æ˜¯å¦ä¸ºç†”接损耗特殊项生成的样品组合(0:否 1:是)
     */
    @ApiModelProperty("是否为熔接损耗特殊项生成的样品组合(0:否 1:是)")
    private String isPairing;
}
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsSampleUser.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,72 @@
package com.ruoyi.inspect.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * æ ·å“è´Ÿè´£äººè®°å½•
 * @TableName ins_sample_user
 */
@TableName(value ="ins_sample_user")
@Data
@NoArgsConstructor
public class InsSampleUser implements Serializable {
    /**
     *
     */
    @TableId(type = IdType.AUTO)
    private Integer id;
    /**
     * å¤–键:检验样品ins_sample表id
     */
    private Integer insSampleId;
    /**
     * å¤–键:用户id è´Ÿè´£äºº
     */
    private Integer userId;
    /**
     * 1:确认 0:未确认
     */
    //1是复核人 0是检验人
    private Integer state;
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    /**
     * å­è¯•验室
     * @param insSampleId
     * @param userId
     * @param state
     */
    private String sonLaboratory;
    public InsSampleUser(Integer insSampleId, Integer userId, Integer state,String sonLaboratory) {
        this.insSampleId = insSampleId;
        this.userId = userId;
        this.state = state;
        this.sonLaboratory = sonLaboratory;
    }
}
inspect-server/src/main/java/com/ruoyi/inspect/pojo/InsUnPass.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,75 @@
package com.ruoyi.inspect.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;
/**
 * @author æœ±ä½³å‰
 * @date 2024/5/8 14:11
 */
@Data
@TableName("ins_un_pass")
public class InsUnPass implements Serializable {
    /**
     * ä¸åˆæ ¼id
     */
    @ApiModelProperty(value = "主键")
    @TableId(type = IdType.AUTO)
    private Integer id;
    /**
     * è§„格型号
     */
    private String model;
    /**
     * æ ·å“åç§°
     */
    private String sample;
    /**
     * æ£€æµ‹é¡¹
     */
    private String inspectionItem;
    /**
     * æ£€æµ‹å­é¡¹
     */
    private String inspectionItemSubclass;
    /**
     * æ£€æµ‹ç»“æžœ
     */
    @TableField("`last_value`")
    private String lastValue;
    /**
     * å¤„理意见
     */
    private String handleSuggestion;
    /**
     * å§”托编号
     */
    private String entrustCode;
    /**
     * ç”¨æˆ·å
     */
    private String name;
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
}
inspect-server/src/main/java/com/ruoyi/inspect/pojo/ProcessOrder.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,56 @@
package com.ruoyi.inspect.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;
import java.time.LocalDate;
/**
 * <p>
 * è¦æ±‚、标书和合同评审
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-05 03:06:20
 */
@Getter
@Setter
@TableName("cnas_process_order")
@ApiModel(value = "ProcessOrder对象", description = "要求、标书和合同评审")
public class ProcessOrder implements Serializable {
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("关联外键(检验单id)")
    private Integer insOrderId;
    @ApiModelProperty("判定规则:不考虑不确定度/考虑不确定度(%)")
    private String rule;
    @ApiModelProperty("综合室签名人")
    private Integer comprehensiveUser;
    @TableField(select = false,exist = false)
    private String comprehensiveUserUrl;
    @ApiModelProperty("接收日期")
    private LocalDate comprehensiveTime;
    @ApiModelProperty("领样员")
    private Integer issueUser;
    @TableField(select = false,exist = false)
    private String issueUserUrl;
    @ApiModelProperty("领样日期")
    private LocalDate issueTime;
}
inspect-server/src/main/java/com/ruoyi/inspect/pojo/ProcessReport.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,82 @@
package com.ruoyi.inspect.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.LocalDate;
import java.time.LocalDateTime;
/**
 * <p>
 * æ£€éªŒæŠ¥å‘Šå‘放登记表
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-05 08:58:39
 */
@Getter
@Setter
@TableName("cnas_process_report")
@ApiModel(value = "ProcessReport对象", description = "检验报告发放登记表")
public class ProcessReport implements Serializable {
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("检验报告编号")
    private String insReportCode;
    @ApiModelProperty("页数")
    private String pages;
    @ApiModelProperty("发送份数")
    private String number;
    @ApiModelProperty("发往何处")
    private String send;
    @ApiModelProperty("发送方式")
    private String method;
    @ApiModelProperty("发送日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate sendTime;
    @ApiModelProperty("发送人")
    private Integer sendUser;
    @ApiModelProperty("发送人名称")
    @TableField(select = false,exist = false)
    private String sendUserName;
    @ApiModelProperty("签收人")
    private String signatory;
    @TableField(select = false,exist = false)
    private String signatoryUrl;
    @ApiModelProperty("签收人名称")
    @TableField(select = false,exist = false)
    private String signatoryName;
    @ApiModelProperty("备注")
    private String remark;
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
inspect-server/src/main/java/com/ruoyi/inspect/pojo/Schedule.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,54 @@
package com.ruoyi.inspect.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName("schedule")
public class Schedule implements Serializable {
    @ApiModelProperty(value = "主键")
    @TableId(type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty(value = "关联用户id")
    private Integer userId;
    @ApiModelProperty(value = "日程内容")
    private String text;
    @ApiModelProperty(value = "日程时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime scheduleTime;
    @ApiModelProperty(value = "创建日期")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    @ApiModelProperty(value = "更新日期")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    @ApiModelProperty(value = "创建用户")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty(value = "更新用户")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
}
inspect-server/src/main/java/com/ruoyi/inspect/pojo/StandardMethodList.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,83 @@
package com.ruoyi.inspect.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;
/**
 * æ ‡å‡†æ ‘下的标准列表
 * @TableName standard_method_list
 */
@TableName(value ="standard_method_list")
@Data
public class StandardMethodList implements Serializable {
    /**
     *
     */
    @TableId(type = IdType.AUTO)
    private Integer id;
    /**
     * æ ‡å‡†ç¼–号
     */
    @ApiModelProperty("标准编号")
    private String code;
    /**
     * æ ‡å‡†åç§°
     */
    @ApiModelProperty("标准称号")
    private String name;
    /**
     * å¤‡æ³¨
     */
    @ApiModelProperty("备注")
    private String remark;
    @ApiModelProperty("工厂")
    private String factory;
    @ApiModelProperty("实验室")
    private String laboratory;
    @ApiModelProperty("样品分类")
    private String sampleType;
    @ApiModelProperty("样品")
    private String sample;
    @ApiModelProperty("型号")
    private String model;
    @ApiModelProperty("")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @TableField(exist = false)
    private String createUserName;
    /**
     *
     */
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    /**
     *
     */
    @ApiModelProperty("")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    /**
     *
     */
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
}
inspect-server/src/main/java/com/ruoyi/inspect/pojo/StandardProductList.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,191 @@
package com.ruoyi.inspect.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * æ ‡å‡†æ ‘下的检验项目
 * @TableName standard_product_list
 */
@TableName(value ="standard_product_list")
@Data
public class StandardProductList implements Serializable {
    /**
     * ä¸»é”®id
     */
    @TableId(value = "id",type = IdType.ASSIGN_ID)
    @JsonSerialize(using = ToStringSerializer.class)
    private Long id;
    /**
     * æ£€éªŒé¡¹
     */
    @ApiModelProperty("检验项")
    private String inspectionItem;
    @ApiModelProperty("检验项EN")
    private String inspectionItemEn;
    /**
     * æ£€éªŒé¡¹å°ç±»
     */
    @ApiModelProperty("检验项小类")
    private String inspectionItemSubclass;
    @ApiModelProperty("检验项小类EN")
    private String inspectionItemSubclassEn;
    /**
     * å®žéªŒå®¤
     */
    @ApiModelProperty("实验室")
    private String laboratory;
    @ApiModelProperty("子实验室")
    private String sonLaboratory;
    /**
     * è®¡é‡å•位
     */
    @ApiModelProperty("计量单位")
    private String unit;
    /**
     * å•ä»·(元)
     */
    @ApiModelProperty("单价")
    private String price;
    /**
     * å·¥æ—¶(H)
     */
    @ApiModelProperty("工时")
    private String manHour;
    /**
     * å·¥æ—¶åˆ†ç»„
     */
    @ApiModelProperty("工时分组")
    private String manHourGroup;
    /**
     * æ£€éªŒé¡¹ç±»åž‹
     */
    @ApiModelProperty("检验项类型")
    private String inspectionItemType;
    /**
     * æ£€éªŒå€¼ç±»åž‹
     */
    @ApiModelProperty("检验值类型")
    private String inspectionValueType;
    /**
     * æ£€éªŒæ¬¡æ•°
     */
    @ApiModelProperty("检验次数")
    private Integer checkoutNumber;
    /**
     * åŒºé—´
     */
    @ApiModelProperty("区间")
    private String section;
    /**
     * æ–¹æ³•
     */
    @ApiModelProperty("方法列表")
    private String method;
    @ApiModelProperty("方法")
    private String methodS;
    /**
     * é¢„计时间(天)
     */
    @ApiModelProperty("预计时间")
    private Integer manDay;
    /**
     * ç‰¹æ®Šæ ‡è¯†
     */
    @ApiModelProperty("特殊标识")
    private String bsm;
    /**
     * è¦æ±‚值
     */
    @ApiModelProperty("要求值")
    private String ask;
    @ApiModelProperty("要求描述")
    private String tell;
    /**
     * å¤–键:标准方法id
     */
    @ApiModelProperty("标准方法id")
    private Integer standardMethodListId;
    @ApiModelProperty("工厂")
    private String factory;
    @ApiModelProperty("样品分类")
    private String sampleType;
    @ApiModelProperty("样品")
    private String sample;
    @ApiModelProperty("型号")
    private String model;
    @ApiModelProperty("型号")
    private Integer templateId;
    @ApiModelProperty("")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    /**
     *
     */
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    /**
     *
     */
    @ApiModelProperty("")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    /**
     *
     */
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    @ApiModelProperty("1:有效 0:无效")
    private Integer state;
    private String dic;
    private String tree;
    private Integer structureItemParameterId;
    @ApiModelProperty(value = "检验项分类")
    private String inspectionItemClass;
    @ApiModelProperty(value = "检验项分类EN")
    private String inspectionItemClassEn;
}
inspect-server/src/main/java/com/ruoyi/inspect/pojo/StandardTemplate.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,76 @@
package com.ruoyi.inspect.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;
/**
 * æ ‡å‡†æ¨¡æ¿
 * @TableName standard_template
 */
@TableName(value ="standard_template")
@Data
public class StandardTemplate implements Serializable {
    /**
     *
     */
    @TableId(type = IdType.AUTO)
    private Integer id;
    /**
     * æ¨¡æ¿åç§°
     */
    @ApiModelProperty("模板名称")
    private String name;
    /**
     * å¤‡æ³¨
     */
    @ApiModelProperty("备注")
    private String remark;
    /**
     * æ¨¡æ¿ç»“æž„
     */
    private String thing;
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    /**
     *
     */
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    /**
     *
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    /**
     *
     */
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    @ApiModelProperty("创建用户")
    @TableField(exist = false)
    private String createUserName;
    @ApiModelProperty("更新用户")
    @TableField(exist = false)
    private String updateUserName;
    /**
     * æ¨¡æ¿ç¼–号
     */
    @ApiModelProperty("模板编号")
    private String number;
}
inspect-server/src/main/java/com/ruoyi/inspect/pojo/StandardTree.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,91 @@
package com.ruoyi.inspect.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* æ ‡å‡†æ ‘
* @TableName standard_tree
*/
@TableName(value ="standard_tree")
@Data
public class StandardTree implements Serializable {
    /**
    *
    */
    @NotNull(message="[]不能为空")
    @ApiModelProperty("")
    @TableId(type = IdType.AUTO)
    private Integer id;
    /**
    * å·¥åŽ‚
    */
    @Size(max= 255,message="编码长度不能超过255")
    @ApiModelProperty("工厂")
    @Length(max= 255,message="编码长度不能超过255")
    private String factory;
    /**
    * å®žéªŒå®¤
    */
    @Size(max= 255,message="编码长度不能超过255")
    @ApiModelProperty("实验室")
    @Length(max= 255,message="编码长度不能超过255")
    private String laboratory;
    /**
    * æ ·å“å¤§ç±»
    */
    @Size(max= 255,message="编码长度不能超过255")
    @ApiModelProperty("样品大类")
    @Length(max= 255,message="编码长度不能超过255")
    private String sampleType;
    /**
    * æ ·å“
    */
    @Size(max= 255,message="编码长度不能超过255")
    @ApiModelProperty("样品")
    @Length(max= 255,message="编码长度不能超过255")
    private String sample;
    /**
    * åž‹å·
    */
    @Size(max= 255,message="编码长度不能超过255")
    @ApiModelProperty("型号")
    @Length(max= 255,message="编码长度不能超过255")
    private String model;
    /**
    *
    */
    @ApiModelProperty("")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    /**
    *
    */
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    /**
    *
    */
    @ApiModelProperty("")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    /**
    *
    */
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
}
inspect-server/src/main/java/com/ruoyi/inspect/pojo/Warehouse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
package com.ruoyi.inspect.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * ä»“库
 * @TableName warehouse
 */
@TableName(value ="warehouse")
@Data
public class Warehouse implements Serializable {
    /**
     *
     */
    @TableId(type = IdType.AUTO)
    private Integer id;
    /**
     * ä»“库名称
     */
    private String name;
    /**
     *
     */
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
}
inspect-server/src/main/java/com/ruoyi/inspect/pojo/WarehouseCell.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
package com.ruoyi.inspect.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * è´§æž¶å•元格
 * @TableName warehouse_cell
 */
@TableName(value ="warehouse_cell")
@Data
public class WarehouseCell implements Serializable {
    /**
     *
     */
    @TableId(type = IdType.AUTO)
    private Integer id;
    /**
     * è¡Œ
     */
    @TableField("`row`")
    private Integer row;
    /**
     * åˆ—
     */
    @TableField("`col`")
    private Integer col;
    /**
     *
     */
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    /**
     * æ˜¯å¦æœ‰æ•ˆ 1:有效 0:无效
     */
    private Integer state;
    /**
     * å¤–检:货架id
     */
    private Integer shelfId;
}
inspect-server/src/main/java/com/ruoyi/inspect/pojo/WarehouseHistory.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,56 @@
package com.ruoyi.inspect.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * å‡ºå…¥åº“记录
 * @TableName warehouse_history
 */
@TableName(value ="warehouse_history")
@Data
public class WarehouseHistory implements Serializable {
    /**
     *
     */
    @TableId(type = IdType.AUTO)
    private Integer id;
    private String warehouseCode;
    /**
     * å¤–键:样品id
     */
    private Integer insSampleId;
    /**
     * çŠ¶æ€ï¼š1:入库 2:出库
     */
    private Integer state;
    /**
     *
     */
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    /**
     * å¤–键:单元格id
     */
    private Integer cellId;
}
inspect-server/src/main/java/com/ruoyi/inspect/pojo/WarehouseShelf.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
package com.ruoyi.inspect.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * è´§æž¶
 * @TableName warehouse_shelf
 */
@TableName(value ="warehouse_shelf")
@Data
public class WarehouseShelf implements Serializable {
    /**
     *
     */
    @TableId(type = IdType.AUTO)
    private Integer id;
    /**
     * è´§æž¶åç§°
     */
    private String name;
    /**
     * è¡Œ
     */
    @TableField("`row`")
    private Integer row;
    /**
     * åˆ—
     */
    @TableField("`col`")
    private Integer col;
    /**
     *
     */
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    /**
     * å¤–键:仓库id
     */
    private Integer warehouseId;
}
inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,58 @@
package com.ruoyi.inspect.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.*;
import com.ruoyi.inspect.pojo.InsOrder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;
/**
 * @author gaoaoy
 * @description é’ˆå¯¹è¡¨ã€ins_order(检验下单)】的数据库操作Service
 * @createDate 2024-03-12 16:17:55
 */
public interface InsOrderService extends IService<InsOrder> {
    //获取单位检验下单数据
    Map<String, Object> selectInsOrderParameter(Page<InsOrder> page, SampleOrderDto sampleOrderDto);
    //修改检验下单数据
    int upInsOrder(UpInsOrderDTO upInsOrderDTO);
    int addInsOrder(List<SampleProductDto> list, InsOrder insOrder, List<List<Integer>> pairing,List<List<Integer>> fiberPairing);
    Map<String, Object> getInsOrder(Integer id);
    int upInsOrderOfState(InsOrder insOrder);
    Map<String, Object> getInsOrderAndSample(Integer id, String laboratory);
    Map<String, Object> selectSampleAndProductByOrderId(SampleProductDto2 sampleProductDto);
    List<Map<String, Object>> viewDetails(Map<String,Object> map);
    void exportChecked(Map<String,Object> data, HttpServletResponse response);
    Map<String, Object> costStatistics(IPage<CostStatisticsDto> page, CostStatisticsDto costStatisticsDto);
    Map<String, Object> costStatistics2(CostStatisticsDto costStatisticsDto);
    Map<String, Object> selectSampleDefects(Page page, String inspectionItems, String orderNumber);
    int updateStatus(Integer id);
    List<SampleProductDto3> labelPrinting(String ids);
    void export(CostStatisticsDto costStatisticsDto,HttpServletResponse response)throws IOException, ServletException;
    Boolean hasSendUrgentOrder();
    List<Map<String,Object>> getInsOrderTemList(Map<String,Object> data);
    Map<String,Object> permute(Integer num,Boolean isValue);
}
inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderTemplateService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.ruoyi.inspect.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.inspect.pojo.InsOrderTemplate;
import java.util.List;
import java.util.Map;
/**
* @author Administrator
* @description é’ˆå¯¹è¡¨ã€ins_order_template】的数据库操作Service
* @createDate 2024-03-18 14:14:54
*/
public interface InsOrderTemplateService extends IService<InsOrderTemplate> {
    int addInsOrderTemplate(InsOrderTemplate insOrderTemplate);
    List<InsOrderTemplate> selectInsOrderTemplate(String company);
    Map<String,Object> selectInsOrderTemplateById(Integer id);
    int delInsOrderTemplate(Integer id);
}
inspect-server/src/main/java/com/ruoyi/inspect/service/InsProductService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,54 @@
package com.ruoyi.inspect.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.inspect.dto.InsProductDto;
import com.ruoyi.inspect.pojo.InsProduct;
import java.util.List;
import java.util.Map;
/**
* @author Administrator
* @description é’ˆå¯¹è¡¨ã€ins_product(检验项目)】的数据库操作Service
* @createDate 2024-03-17 23:57:39
*/
public interface InsProductService extends IService<InsProduct> {
    int selectOrderManDay(Integer orderId);
    int updateInspected(Integer id,String ids);
    boolean write(InsProductDto insProductDto);
    Map<String,Object> selectNoProducts(Page page, InsProduct insProduct,Integer orderId,String ids);
    List<Map<String,Object>> selectSampleByOrderId(Integer orderId);
    List<Map<String,Object>> selectProductsBySampleId(Integer sampleId,Integer orderId);
    List<Map<String,Object>> selectTemperatureByProductId(Integer productId);
    List<Map<String,Object>> selectTemperatureNumberByProductId(Integer parentId,String inspectionItem);
    void revoke(Map<String,Object> data);
    List<Map<String,Object>> revokeReviewSample(Integer orderId);
    List<Map<String,Object>> revokeReviewTemperatureByProductId(Integer productId);
    List<Map<String,Object>> revokeReviewProduct(Integer orderId,Integer sampleId);
    List<Map<String,Object>> revokeReviewConsistentByProductId(Integer parentId,String inspectionItem);
    void revocationPassed(Integer id);
    void revocationCancel(Integer orderId);
    void checkUpdate(Integer orderId,Integer state);
    int write2(Integer id, String elasticityModulus);
}
inspect-server/src/main/java/com/ruoyi/inspect/service/WarehouseCellService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.ruoyi.inspect.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.inspect.pojo.WarehouseCell;
/**
* @author z1292
* @description é’ˆå¯¹è¡¨ã€warehouse(仓库)】的数据库操作Service
* @createDate 2024-04-06 12:13:57
*/
public interface WarehouseCellService extends IService<WarehouseCell> {
}
inspect-server/src/main/java/com/ruoyi/inspect/service/WarehouseService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
package com.ruoyi.inspect.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.inspect.dto.WarehouseCellAndSampleDto;
import com.ruoyi.inspect.dto.WarehouseDto;
import com.ruoyi.inspect.pojo.Warehouse;
import com.ruoyi.inspect.pojo.WarehouseShelf;
import java.util.List;
import java.util.Map;
/**
* @author z1292
* @description é’ˆå¯¹è¡¨ã€warehouse(仓库)】的数据库操作Service
* @createDate 2024-04-06 12:13:57
*/
public interface WarehouseService extends IService<Warehouse> {
    int addWarehouse(String name);
    List<WarehouseDto> selectWarehouse();
    int addShelf(WarehouseShelf warehouseShelf);
    int delWarehouse(Integer id);
    int upWarehouse(Warehouse warehouse);
    int delShelf(Integer id);
    int upShelf(WarehouseShelf warehouseShelf);
    List<WarehouseCellAndSampleDto> getWarehouse(Integer shelfId);
    int inWarehouse(String trees, String sampleCode);
    int outWarehouse(String sampleCode);
    Map<String, Object> getSampleRecord(Integer id);
    int searchSampleId(String sampleCode);
}
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/DetailTablePolicy.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
package com.ruoyi.inspect.service.impl;
import com.deepoove.poi.policy.DynamicTableRenderPolicy;
import org.apache.poi.xwpf.usermodel.XWPFTable;
public class DetailTablePolicy extends DynamicTableRenderPolicy {
    @Override
    public void render(XWPFTable xwpfTable, Object data) throws Exception {
        if (null == data) return;
    }
}
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,2114 @@
package com.ruoyi.inspect.service.impl;
import cn.hutool.core.bean.BeanUtil;
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.style.HorizontalCellStyleStrategy;
import com.alibaba.excel.write.style.column.SimpleColumnWidthStyleStrategy;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
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.numgen.NumberGenerator;
import com.ruoyi.common.utils.EasyExcelUtils;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.dto.*;
import com.ruoyi.inspect.excel.FiberRibboGeometricalParameterExcelData;
import com.ruoyi.inspect.mapper.*;
import com.ruoyi.inspect.pojo.*;
import com.ruoyi.inspect.service.InsOrderService;
import com.ruoyi.inspect.service.InsProductService;
import com.ruoyi.inspect.vo.ExportInsProductVO;
import com.ruoyi.inspect.vo.SampleDefectsFatherVo;
import com.ruoyi.system.mapper.CustomMapper;
import com.ruoyi.system.mapper.UserMapper;
import com.ruoyi.system.service.ISysDictTypeService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.URLEncoder;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
/**
 * @author gaoaoy
 * @description é’ˆå¯¹è¡¨ã€ins_order(检验下单)】的数据库操作Service实现
 * @createDate 2024-03-12 16:17:55
 */
@Service
@Slf4j
@AllArgsConstructor
public class InsOrderServiceImpl extends ServiceImpl<InsOrderMapper, InsOrder>
        implements InsOrderService {
    private InsOrderMapper insOrderMapper;
    private InsSampleMapper insSampleMapper;
    private InsProductMapper insProductMapper;
    private InsProductService insProductService;
    private InsProductUserMapper insProductUserMapper;
    private NumberGenerator<InsOrder> numberGenerator;
    private InsSampleUserMapper insSampleUserMapper;
    private InsOrderStateMapper insOrderStateMapper;
    UserMapper userMapper;
    private InsBushingMapper insBushingMapper;
    private InsFibersMapper insFibersMapper;
    private InsFiberMapper insFiberMapper;
    private InsProductResultMapper insProductResultMapper;
    CustomMapper customMapper;
    private ISysDictTypeService dictTypeService;
    private ProcessOrder1Mapper processOrderMapper;
    //获取检验下单数据
    @Override
    public Map<String, Object> selectInsOrderParameter(Page<InsOrder> page, SampleOrderDto sampleOrderDto) {
        page.setOptimizeCountSql(false);
        List<String> startAndEndTime = sampleOrderDto.getStartAndEndTime();
        String startTime = "";
        String endTime = "";
        if (CollectionUtils.isNotEmpty(startAndEndTime)) {
            startTime = startAndEndTime.get(0) + " 00:00:00";
            endTime = startAndEndTime.get(1) + " 23:59:59";
        }
        Map<String, Object> map = new HashMap<>();
////        map.put("head", PrintChina.printChina(SampleOrderDto.class));
//        //判断全部,个人,组织的权限
//        Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("selectInsOrderParameter");
//        User user = userMapper.selectById(map1.get("userId"));//当前登录的人
//        Integer roleId = user.getRoleId();
//        //获取当前人所属实验室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;
//            }
//        }
//        //判断是否是全部权限
//        Power power = powerMapper.selectOne(Wrappers.<Power>lambdaQuery().eq(Power::getRoleId, roleId).eq(Power::getMenuMethod, "selectAllInsOrderParameter"));
//        if (ObjectUtils.isEmpty(power)) {
//            if (map1.get("look") == 1) {
//                //个人
//                sampleOrderDto.setCreateUser(map1.get("userId"));
//            } else {
//                //组织
//                try {
//                    sampleOrderDto.setCompany(customMapper.selectById(user.getCompany()).getCompany());
//                } catch (NullPointerException e) {
//                    throw new ErrorException("找不到所属单位");
//                }
//            }
//        }
        Integer state = sampleOrderDto.getState();
        sampleOrderDto.setState(null);
        IPage<SampleOrderDto> sampleOrderDtoIPage = insOrderMapper.selectInsOrderPage(page, QueryWrappers.queryWrappers(sampleOrderDto), laboratory, startTime, endTime, String.valueOf(state), null);
        if (sampleOrderDtoIPage.getRecords().isEmpty() && (StringUtils.isNotBlank(sampleOrderDto.getEntrustCode()) || StringUtils.isNotBlank(sampleOrderDto.getOutEntrustCode()))) {
            QueryWrapper<SampleOrderDto> wrapper = QueryWrappers.queryWrappers(sampleOrderDto);
            IPage<InsOrder> orderPage = new Page<>();
            BeanUtil.copyProperties(page, orderPage);
            IPage<SampleOrderDto> otherPage = insOrderMapper.selectInsOrderPage(orderPage, wrapper, laboratory, startTime, endTime, null, String.valueOf(state));
            if (1 == otherPage.getRecords().size()) {
                sampleOrderDtoIPage = otherPage;
            }
        }
        sampleOrderDtoIPage.getRecords().parallelStream().forEach(i -> {
            if (ObjectUtils.isNotEmpty(i.getSampleCode()) && i.getSampleCode().contains(",")) {
                String[] split = i.getSampleCode().split(",");
                i.setSampleCode(split[0]);
            }
        });
        map.put("body", sampleOrderDtoIPage);
        return map;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int upInsOrder(UpInsOrderDTO upInsOrderDTO) {
        InsOrder insOrder = new InsOrder();
        insOrder.setId(upInsOrderDTO.getOrderId());
        insOrder.setAppointed(LocalDate.parse(upInsOrderDTO.getAppointed()));
        insOrder.setSendTime(LocalDateTime.now());
        insOrderMapper.updateById(insOrder);
        List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, upInsOrderDTO.getOrderId()).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::getState, 1)
//                .isNull(InsProduct::getInsFibersId)
//                .isNull(InsProduct::getInsFiberId)
                .select(InsProduct::getSonLaboratory).groupBy(InsProduct::getSonLaboratory));
        //查询ins_order_state,没有才新增
        long count = insOrderStateMapper.selectCount(Wrappers.<InsOrderState>lambdaQuery().eq(InsOrderState::getInsOrderId, upInsOrderDTO.getOrderId()));
        if (count == 0) {
            for (InsProduct insProduct : insProducts) {
                InsOrderState insOrderState = new InsOrderState();
                insOrderState.setInsOrderId(upInsOrderDTO.getOrderId());
                try {
                    insOrderState.setLaboratory(insProduct.getSonLaboratory());
                } catch (NullPointerException e) {
                    throw new ErrorException("该检验单有未维护实验室的检验项目");
                }
                insOrderState.setInsState(0);
                insOrderStateMapper.insert(insOrderState);
            }
        }
        //添加样品检验人员
        if (CollectionUtils.isNotEmpty(upInsOrderDTO.getUserIdList())) {
            upInsOrderDTO.getUserIdList().forEach(userId -> {
                InsSampleUser insSampleUser = new InsSampleUser();
                insSampleUser.setState(0);
                insSampleUser.setUserId(userId);
                insSampleUser.setInsSampleId(upInsOrderDTO.getOrderId());
                insSampleUser.setSonLaboratory(upInsOrderDTO.getSonLaboratory());
                insSampleUserMapper.insert(insSampleUser);
            });
        }
        return 1;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int addInsOrder(List<SampleProductDto> list, InsOrder insOrder, List<List<Integer>> pairing, List<List<Integer>> fiberPairing) {
        insOrder.setState(0);
        //判断选择的委托单位与制单人的委托单位是否一致
        Integer userId = 1;
        String company = userMapper.selectById(userId).getCompany();
        if (!company.equals(insOrder.getCompanyId() + "")) {
            //如果不一致那么委托人字段必填
            if (ObjectUtils.isEmpty(insOrder.getPrepareUser())) {
                throw new ErrorException("委托人不能为空");
            }
        } else {
            //如果一致,那么制单人就是委托人
            insOrder.setPrepareUser(insOrder.getCustom());
        }
        //客户代号
        Custom custom = customMapper.selectById(insOrder.getCompanyId());
        String customCode = custom.getCode2();
        if (!custom.getCompany().equals(insOrder.getCompany())) {
            Custom one = customMapper.selectOne(Wrappers.<Custom>lambdaQuery().eq(Custom::getCompany, insOrder.getCompany()));
            insOrder.setCompanyId(one.getId());
            customCode = one.getCode2();
        }
        //实验室编号
        String laboratoryCode = baseMapper.selLaboratoryCode(insOrder.getLaboratory());
        if (StringUtils.isEmpty(laboratoryCode)) {
            laboratoryCode = "";
        }
        //外部委托编号
        String outEntrustCodePrefix = getOutEntrustCodePrefix(customCode, laboratoryCode);
        String outEntrustCode = numberGenerator.generateNumberWithPrefix(5, outEntrustCodePrefix, InsOrder::getOutEntrustCode);
        insOrder.setOutEntrustCode(outEntrustCode);
//        String giveCode = this.giveCode.giveCode("JCZX-" + customCode + "-", "ins_sample", "", "yyMMdd");
        String giveCode = "";
//        insOrder.setOutEntrustCode(giveCode.giveCode3("ZT/" + code2 + "-" + code + "-", insOrder.getCompanyId(), insOrder.getLaboratory(), "ins_order", "", "yyMM"));
//        String giveCode = this.giveCode.giveCode("JCZX-" + code + "-", "ins_sample", "", "yyMMdd");
        insOrderMapper.insert(insOrder);
        AtomicInteger count = new AtomicInteger();
        List<FiberDto> fiberList = new ArrayList<>();
        list.forEach(a -> {
            count.getAndIncrement();
            a.setId(null);
            a.setInsOrderId(insOrder.getId());
            if (StrUtil.isEmpty(a.getSampleCode())) {
                a.setSampleCode(giveCode.split("-")[2] + "-" + count.get());
            } else {
                //去除手输的样品编号中首尾可能包含的空格
                a.setSampleCode(a.getSampleCode().trim());
            }
            insSampleMapper.insert(a);
            if (ObjectUtil.isNotEmpty(a.getInsProduct())) {
                addInsProductMethod(a.getId(), a.getInsProduct(), null, 0, false);
                if (ObjectUtil.isNotEmpty(a.getBushing())) {
                    for (BushingDto bushingDto : a.getBushing()) {
                        bushingDto.setInsSampleId(a.getId());
                        insBushingMapper.insert(bushingDto);
                        //光纤不为空
                        if (!bushingDto.getFiber().isEmpty()) {
                            fiberList.addAll(bushingDto.getFiber());
                            for (FiberDto fiberDto : bushingDto.getFiber()) {
                                fiberDto.setInsBushingId(bushingDto.getId());
                                insFiberMapper.insert(fiberDto);
                                addInsProductMethod(a.getId(), a.getInsProduct(), fiberDto.getId(), 2, true);
                                addInsProductMethod(a.getId(), fiberDto.getProductList(), fiberDto.getId(), 2, false);
                            }
                        }
                        //光纤带不为空
                        if (!bushingDto.getFibers().isEmpty()) {
                            for (FibersDto fibersDto : bushingDto.getFibers()) {
                                fibersDto.setInsBushingId(bushingDto.getId());
                                if (StringUtils.isBlank(fibersDto.getCode())) {
//                                    fibersDto.setCode(this.giveCode.giveCode("", "ins_fibers", "", "yyMMdd"));
                                    fibersDto.setCode("");
                                }
                                insFibersMapper.insert(fibersDto);
                                for (FiberDto fiberDto : fibersDto.getFiber()) {
                                    fiberDto.setInsFibersId(fibersDto.getId());
                                    insFiberMapper.insert(fiberDto);
                                    addInsProductMethod(a.getId(), a.getInsProduct(), fiberDto.getId(), 2, true);
                                    addInsProductMethod(a.getId(), fiberDto.getProductList(), fiberDto.getId(), 2, false);
                                }
                                //addInsProductMethod(a.getId(), a.getInsProduct(), fibersDto.getId(), 1);
                                addInsProductMethod(a.getId(), fibersDto.getProductList(), fibersDto.getId(), 1, false);
                            }
                        }
                        //都为空 åªé…ç½®äº†å¥—管 è¿™ç§æƒ…况只限于项目或子项是含有松套管的
                        if (StringUtils.isNotBlank(bushingDto.getColor())) {
                            //检验项拼接字符
                            String insItem = a.getInsProduct().stream().map(InsProduct::getInspectionItem).distinct().collect(Collectors.joining(","));
                            //检验子项拼接字符
                            String insItemSubclass = a.getInsProduct().stream().map(InsProduct::getInspectionItemSubclass).distinct().collect(Collectors.joining(","));
                            if (insItem.contains("松套管") || insItemSubclass.contains("松套管")) {
                                //获取检验项目合或子项中包含松套管的检验项目
                                List<InsProduct> products = a.getInsProduct().stream()
                                        .filter(insProduct -> insProduct.getInspectionItem().contains("松套管") ||
                                                insProduct.getInspectionItemSubclass().contains("松套管"))
                                        .collect(Collectors.toList());
                                for (InsProduct product : products) {
                                    product.setInsBushId(bushingDto.getId());
                                    product.setId(null);
                                    product.setCreateTime(null);
                                    product.setCreateUser(null);
                                    product.setUpdateTime(null);
                                    product.setUpdateUser(null);
                                    product.setInsSampleId(a.getId());
                                    if (product.getInspectionItemSubclass() == null) {
                                        product.setInspectionItemSubclass("");
                                    }
                                    insProductMapper.insert(product);
                                }
                            }
//                            else {
//                                throw new ErrorException("样品的光纤配置信息里面没有配置光纤带信息也没有光纤信息,请重新配置保存再提交下单!!!");
//                            }
                        }
                    }
                }
            }
            if (ObjectUtil.isNotEmpty(a.getInsulating())) {
                List<InsProduct> ip2 = new ArrayList<>();
                for (Integer i = 0; i < a.getInsulating().getNum(); i++) {
                    ip2.addAll(a.getInsulating().getInsProduct());
                }
                for (InsProduct product : ip2) {
                    product.setStandardMethodListId(a.getInsulating().getStandardMethodListId());
                }
                addInsProductMethod(a.getId(), ip2, null, 0, false);
            }
            if (ObjectUtil.isNotEmpty(a.getSheath())) {
                for (InsProduct product : a.getSheath().getInsProduct()) {
                    product.setStandardMethodListId(a.getSheath().getStandardMethodListId());
                }
                addInsProductMethod(a.getId(), a.getSheath().getInsProduct(), null, 0, false);
            }
            if (ObjectUtil.isNotEmpty(a.getChildSampleList())) {
                for (SampleProductDto b : a.getChildSampleList()) {
                    for (int i = 0; i < b.getNum(); i++) {
                        b.setId(null);
                        b.setInsOrderId(insOrder.getId());
                        b.setParentId(a.getId());
                        if (StrUtil.isEmpty(b.getSampleCode())) {
//                            b.setSampleCode(this.giveCode.giveCode("", "ins_sample", "", "yyMMdd"));
                            b.setSampleCode("");
                        }
                        insSampleMapper.insert(b);
                        if (ObjectUtil.isNotEmpty(b.getInsProduct())) {
                            addInsProductMethod(b.getId(), b.getInsProduct(), null, 0, false);
                        }
                    }
                }
            }
            if (ObjectUtil.isEmpty(a.getInsProduct()) && ObjectUtil.isNotEmpty(a.getBushing())) {
                for (BushingDto bushingDto : a.getBushing()) {
                    bushingDto.setInsSampleId(a.getId());
                    insBushingMapper.insert(bushingDto);
                    if (!bushingDto.getFiber().isEmpty()) {
                        fiberList.addAll(bushingDto.getFiber());
                        for (FiberDto fiberDto : bushingDto.getFiber()) {
                            fiberDto.setInsBushingId(bushingDto.getId());
                            insFiberMapper.insert(fiberDto);
                            addInsProductMethod(a.getId(), fiberDto.getProductList(), fiberDto.getId(), 2, false);
                        }
                    } else {
                        for (FibersDto fibersDto : bushingDto.getFibers()) {
                            fibersDto.setInsBushingId(bushingDto.getId());
                            fibersDto.setCode("");
                            insFibersMapper.insert(fibersDto);
                            for (FiberDto fiberDto : fibersDto.getFiber()) {
                                fiberDto.setInsFibersId(fibersDto.getId());
                                insFiberMapper.insert(fiberDto);
                                addInsProductMethod(a.getId(), fiberDto.getProductList(), fiberDto.getId(), 2, false);
                            }
                            addInsProductMethod(a.getId(), fibersDto.getProductList(), fibersDto.getId(), 1, false);
                        }
                    }
                }
            }
        });
        //有光纤接头损耗特殊项的样品才添加两两组合
        for (List<Integer> i : pairing) {
            SampleProductDto sample = JSON.parseObject(JSON.toJSONString(list.get(i.get(0) - 1)), SampleProductDto.class);
            List<InsProduct> insProducts = sample.getInsProduct().stream().filter(a -> Objects.equals(a.getInspectionItem(), "光纤接头损耗")).collect(Collectors.toList());
            if (!insProducts.isEmpty()) {
                sample.setSampleCode(list.get(i.get(0) - 1).getSampleCode() + "/" + list.get(i.get(1) - 1).getSampleCode());
                sample.setId(null);
                sample.setIsPairing("1");
                insSampleMapper.insert(sample);
                try {
                    for (InsProduct insProduct : insProducts) {
                        insProduct.setId(null);
                        insProduct.setInsSampleId(sample.getId());
                        insProductMapper.insert(insProduct);
                    }
                } catch (Exception e) {
                }
            }
        }
        //光纤配置的熔接配对
        if (!fiberPairing.isEmpty()) {
            for (List<Integer> integers : fiberPairing) {
                StringBuilder code1 = new StringBuilder(list.get(0).getSampleCode() + "-");
                StringBuilder code2 = new StringBuilder(list.get(1).getSampleCode() + "-");
                //配对的两个光纤色标
                FiberDto fiberDto1 = fiberList.get(integers.get(0) - 1);
                code1.append(fiberDto1.getBushColor()).append("-").append(fiberDto1.getColor());
                FiberDto fiberDto2 = fiberList.get(integers.get(1) - 1);
                code2.append(fiberDto2.getBushColor()).append("-").append(fiberDto2.getColor());
                //勾选的光纤接头损耗检验项
                //List<InsProduct> insProducts = fiberDto1.getProductList().stream().filter(a -> Objects.equals(a.getInspectionItem(), "光纤接头损耗")).collect(Collectors.toList());
                //配对后的样品
                InsSample insSample = new InsSample();
                BeanUtil.copyProperties(list.get(0), insSample);
                insSample.setSampleCode(code1 + "/" + code2);
                insSample.setId(null);
                insSample.setIsPairing("1");
                insSampleMapper.insert(insSample);
                // å¦‚果是光纤配置的熔接配对,只需要获取list的bushing就行,生成的样品个数与下单界面样品个数无关
                // ä¸€ä¸ªæ ·å“ä¸‹é¢åªéœ€è¦æ·»åŠ ä¸€æ¬¡product åªæ·»åŠ å…‰çº¤æŽ¥å¤´æŸè€—çš„æ£€éªŒé¡¹
                // æ·»åŠ å¥—ç®¡
                List<BushingDto> bushing = list.get(0).getBushing();
                if (CollectionUtils.isNotEmpty(bushing)) {
                    for (int j = 0; j < bushing.size(); j++) {
                        bushing.get(j).setId(null);
                        bushing.get(j).setInsSampleId(insSample.getId());
                        insBushingMapper.insert(bushing.get(j));
                        Integer bushingId = bushing.get(j).getId();
                        // æ·»åŠ å…‰çº¤å¸¦
                        List<FibersDto> fibers = bushing.get(j).getFibers();
                        if (CollectionUtils.isNotEmpty(fibers)) {
                            fibers.forEach(item -> {
                                item.setId(null);
                                item.setInsBushingId(bushingId); // å¥—管id
                                insFibersMapper.insert(item);
                                // å°†æ£€éªŒé¡¹çš„光纤带id赋值
                                if (CollectionUtils.isNotEmpty(item.getProductList())) {
                                    item.getProductList().forEach(insProduct -> {
                                        if (insProduct.getInspectionItem().equals("光纤接头损耗")) {
                                            insProduct.setInsFibersId(item.getId()); // å…‰çº¤å¸¦id
                                            insProduct.setInsSampleId(insSample.getId()); // æ ·å“id
                                            insProduct.setId(null);
                                            insProductMapper.insert(insProduct);
                                        }
                                    });
                                }
                                // æ˜¯å¦å«æœ‰å…‰çº¤
                                if (CollectionUtils.isNotEmpty(item.getFiber())) {
                                    List<FiberDto> fiber = item.getFiber();
                                    fiber.forEach(f -> {
                                        f.setId(null);
                                        f.setInsBushingId(bushingId); // å¥—管id
                                        insFiberMapper.insert(f);
                                        f.getProductList().forEach(insProduct -> {
                                            if (insProduct.getInspectionItem().equals("光纤接头损耗")) {
                                                insProduct.setInsFiberId(f.getId()); // å…‰çº¤id
                                                insProduct.setInsSampleId(insSample.getId()); // æ ·å“id
                                                insProduct.setId(null);
                                                insProductMapper.insert(insProduct);
                                            }
                                        });
                                    });
                                }
                            });
                        }
                        // åªæœ‰å…‰çº¤çš„æƒ…况下
                        else {
                            bushing.get(j).getFiber().forEach(f -> {
                                f.setInsBushingId(bushingId); // å¥—管id
                                f.setId(null);
                                insFiberMapper.insert(f);
                                f.getProductList().forEach(insProduct -> {
                                    if (insProduct.getInspectionItem().equals("光纤接头损耗")) {
                                        insProduct.setInsFiberId(f.getId()); // å…‰çº¤id
                                        insProduct.setInsSampleId(insSample.getId()); // æ ·å“id
                                        insProduct.setId(null);
                                        insProductMapper.insert(insProduct);
                                    }
                                });
                            });
                        }
                    }
                }
                // æ²¡æœ‰è¿›è¡Œå…‰çº¤é…ç½®çš„熔接配对,直接添加样品
//                try {
//                    for (InsProduct insProduct : insProducts) {
//                        insProduct.setId(null);
//                        insProduct.setInsSampleId(insSample.getId());
//                        insProductMapper.insert(insProduct);
//                    }
//                } catch (Exception e) {
//                }
            }
        }
        return insOrder.getId();
    }
    /**
     * ç”Ÿæˆå¤–部委托编号前缀:ZT/TX-01-2411XXXXX
     *
     * @param customCode å®¢æˆ·ä»£å·
     * @param labCode    è¯•验室代号
     * @return
     */
    private static String getOutEntrustCodePrefix(String customCode, String labCode) {
        String currentMonth = LocalDate.now().format(DateTimeFormatter.ofPattern("yyMM"));
        return "ZT/" + labCode + "-" + customCode + "-" + currentMonth;
    }
    /**
     * ç”Ÿæˆæ£€æµ‹ä¸­å¿ƒå§”托编号前缀:JCZX/TX-01-2411XXXXX
     *
     * @param customCode å®¢æˆ·ä»£å·
     * @param labCode    è¯•验室代号
     * @return
     */
    private static String getEntrustCodePrefix(String customCode, String labCode) {
        String currentMonth = LocalDate.now().format(DateTimeFormatter.ofPattern("yyMM"));
        return "JCZX/" + labCode + "-" + customCode + "-" + currentMonth;
    }
    private void addInsProductMethod(Integer sampleId, List<InsProduct> productList, Integer id, Integer type, Boolean is) {
        InsOrder insOrder = insOrderMapper.selectById(insSampleMapper.selectById(sampleId).getInsOrderId());
        String name = insSampleMapper.selMethodById(sampleId);
        for (InsProduct product : productList) {
            if (product.getInspectionItem().contains("松套管") || (!Objects.isNull(product.getInspectionItemSubclass()) && product.getInspectionItemSubclass().contains("松套管"))) {
                continue;
            }
            if (product.getState() == 1 && !product.getInspectionItem().equals("光纤接头损耗")) {
                //判断光缆的温度循环项目添加
                if (insOrder.getSampleType().equals("光缆") && product.getInspectionItem().equals("温度循环") && type != 0) {
                    //判断选择的标准方法是委托要求还是其他标准方法
                    if (!name.equals("委托要求")) {
                        //判断标准方法的温度循环的要求描述是否有填写
                        if (ObjectUtils.isEmpty(product.getTell()) || product.getTell().isEmpty()) {
                            throw new ErrorException("光缆的温度循环的要求描述为空,需要在标准库配置要求描述!!!");
                        } else {
                            //解析(温度范围:20℃,-40℃,65℃;保温时间:12h; å¾ªçŽ¯æ¬¡æ•°ï¼š2次; å…‰çº¤ï¼ˆ1310nm,1550nm)附加衰减不大于0.03dB/km)
                            String tell = product.getTell().replace(")", ")")
                                    .replace("(", "(")
                                    .replace(")", ")")
                                    .replace(",", ",")
                                    .replace(":", ":")
                                    .replace(";", ";")
                                    .replace("不大于", "≤")
                                    .replace("不小于", "≥")
                                    .replace("大于", ">")
                                    .replace("小于", "<")
                                    .replace("等于", "=");
                            String[] message = null;
                            String[] nm = null;
                            String ask = null;
                            String count = null;
                            try {
                                String[] strings = tell.split(";");
                                //温度
                                String temperature = strings[0];
                                String[] split = temperature.split(":");
                                message = split[1].split(",");
                                //循环次数
                                count = strings[2].split(":")[1].split("次")[0];
                                //光纤项目和要求值
                                String string = strings[3];
                                nm = string.split("(")[1].split(")")[0].split(",");
                                ask = string.split("衰减")[1].split("dB")[0];
                            } catch (Exception e) {
                                throw new ErrorException("温度循环的要求描述格式异常,请参照温度范围:20℃,-40℃,65℃;保温时间:12h; å¾ªçŽ¯æ¬¡æ•°ï¼š2次; å…‰çº¤ï¼ˆ1310nm,1550nm)附加衰减不大于0.03dB/km");
                            }
                            //拼接
                            String s = "";
                            for (int i = 0; i < nm.length; i++) {
                                s += "20℃(常温)," + nm[i] + ",null;";
                                for (int j = 0; j < message.length; j++) {
                                    s += message[j] + "," + nm[i] + "," + ask + ";";
                                }
                            }
                            s += count;
                            product.setAsk(s);
                            insProductMapper.updateById(product);
                            dealWithTemperatureLoop(type, id, sampleId, product);
                        }
                    } else {
                        //20℃(常温),1310nm,null;-40℃,1310nm,≤0.2;75℃,1310nm,<0.3;20℃,1310nm,≤0.1;20℃(常温),1550nm,null;-40℃,1550nm,≤0.2;75℃,1550nm,<0.3;20℃,1550nm,≤0.1;3
                        dealWithTemperatureLoop(type, id, sampleId, product);
                    }
                }
                //判断热循环项目的添加和温升试验项目的添加
                else if (product.getInspectionItem().equals("热循环") || product.getInspectionItem().equals("温升试验")) {
                    List<InsProduct> insProductess = new ArrayList<>();
                    product.setId(null);
                    product.setInsSampleId(sampleId);
                    insProductMapper.insert(product);
//                    insProductess.add(product);
                    List<InsProduct> insProductes = new ArrayList<>();
                    List<InsProduct> insProducts = new ArrayList<>();
                    String[] strings = product.getAsk().split(";");
                    //循环次数
                    int count = Integer.parseInt(strings[strings.length - 1]);
                    for (int i = 0; i < strings.length - 1; i++) {
                        String[] split = strings[i].split(",");
                        InsProduct insProduct = new InsProduct();
                        insProduct.setInspectionItem("1");//检验父项--循环次数
                        insProduct.setInspectionItemSubclass(split[0]);//检验子项--环境温度/导线温度/耐张温度/接续温度
                        insProduct.setInspectionItemSubclassEn(split[1]);//检验子项英文--环境温度/导线温度/耐张温度/接续温度
                        insProduct.setAsk(null);//检验要求
                        insProduct.setTell(null);//检验描述
                        insProduct.setInsSampleId(sampleId);
                        insProduct.setState(1);
                        insProduct.setFactory(product.getFactory());
                        insProduct.setLaboratory(product.getLaboratory());
                        insProduct.setSampleType(product.getSampleType());
                        insProduct.setSample(product.getSample());
                        insProduct.setModel(product.getModel());
                        insProduct.setSonLaboratory(product.getSonLaboratory());
                        insProduct.setUnit("℃");//单位
                        insProduct.setManHour(product.getManHour());//工时
                        insProduct.setManHourGroup(product.getManHourGroup());
                        insProduct.setInspectionItemType("0");
                        insProduct.setInspectionValueType("1");
                        insProduct.setTemplateId(product.getTemplateId());//添加模板id
                        insProduct.setSpecialItemParentId(product.getId());//特殊项父id
                        if (product.getInspectionItem().equals("热循环")) {
                            insProduct.setInspectionItemClass("直流电阻");//检验子子项--直流电阻
                            insProduct.setInspectionItemClassEn("DC resistance");//检验子子项英文--直流电阻
                            insProduct.setUnit("Ω/km");//单位
                        }
                        insProducts.add(insProduct);
                        insProductes.add(insProduct);
                        insProductess.add(insProduct);
                    }
                    //热循环才有多次循环次数
                    if (count > 1) {
                        //循环超过1次
                        for (int j = 2; j <= count; j++) {
                            for (InsProduct insProduct : insProductes) {
                                InsProduct insProduct1 = new InsProduct();
                                BeanUtils.copyProperties(insProduct, insProduct1);
                                insProduct1.setInspectionItem(j + "");//循环次数
                                insProductess.add(insProduct1);
                            }
                        }
                    }
                    insProductService.saveBatch(insProductess);
                }
                //弧垂特殊项
                else if (product.getInspectionItem().contains("弧垂")) {
                    product.setId(null);
                    product.setInsSampleId(sampleId);
                    insProductMapper.insert(product);
                    //需要添加的子项
                    List<Map<String, Object>> childrenMapList = initChildrenList();
                    //子项
                    List<InsProduct> childrenProducts = new ArrayList<>();
                    for (Map<String, Object> map : childrenMapList) {
                        InsProduct insProduct = new InsProduct();
                        insProduct.setInspectionItem(product.getInspectionItem());
                        insProduct.setInspectionItemSubclass(map.get("inspectionItem").toString());
                        insProduct.setUnit(map.get("unit").toString());
                        insProduct.setAsk(null);//检验要求
                        insProduct.setTell(null);//检验描述
                        insProduct.setInsSampleId(sampleId);
                        insProduct.setState(1);
                        insProduct.setFactory(product.getFactory());
                        insProduct.setLaboratory(product.getLaboratory());
                        insProduct.setSampleType(product.getSampleType());
                        insProduct.setSample(product.getSample());
                        insProduct.setModel(product.getModel());
                        insProduct.setSonLaboratory(product.getSonLaboratory());
                        insProduct.setManHour(product.getManHour());//工时
                        insProduct.setManHourGroup(product.getManHourGroup());
                        insProduct.setInspectionItemType("0");
                        insProduct.setInspectionValueType("1");
                        insProduct.setTemplateId(product.getTemplateId());//添加模板id
                        insProduct.setSpecialItemParentId(product.getId());//特殊项父id
                        childrenProducts.add(insProduct);
                    }
                    insProductService.saveBatch(childrenProducts);
                } else {
                    if (!is) {
                        switch (type) {
                            case 1:
                                product.setInsFibersId(id);
                                break;
                            case 2:
                                product.setInsFiberId(id);
                                break;
                        }
                        product.setId(null);
                        product.setCreateTime(null);
                        product.setCreateUser(null);
                        product.setUpdateTime(null);
                        product.setUpdateUser(null);
                        product.setInsSampleId(sampleId);
                        if (product.getInspectionItemSubclass() == null) {
                            product.setInspectionItemSubclass("");
                        }
                        // æ™®é€šé¡¹ç›® å¦‚æžœask包含了 % å°±å޻除
                        if(product.getAsk().contains("%")) {
                            String ask = product.getAsk().replace("%", "").trim();
                            product.setAsk(ask);
                        }
                        insProductMapper.insert(product);
                    }
                }
            }
        }
    }
    /**
     * åˆå§‹åŒ–弧垂特殊项目子项
     * å›ºå®šå­é¡¹ï¼šé¢å®šæ‹‰æ–­åŠ›ï¼Œè·¨è·é•¿åº¦ï¼Œè½½è·ï¼Œé«˜åº¦ï¼Œå¼§åž‚ï¼Œå¯¼çº¿æ¸©åº¦ï¼Œå®¤æ¸©ï¼Œå¼ åŠ›
     *
     * @return
     */
    private List<Map<String, Object>> initChildrenList() {
        List<Map<String, Object>> maps = new ArrayList<>();
        Map<String, Object> map1 = new HashMap<>();
        map1.put("inspectionItem", "额定拉断力");
        map1.put("unit", "kN");
        Map<String, Object> map2 = new HashMap<>();
        map2.put("inspectionItem", "跨距长度");
        map2.put("unit", "m");
        Map<String, Object> map3 = new HashMap<>();
        map3.put("inspectionItem", "载荷");
        map3.put("unit", "kN");
        Map<String, Object> map5 = new HashMap<>();
        map5.put("inspectionItem", "弧垂");
        map5.put("unit", "mm");
        Map<String, Object> map6 = new HashMap<>();
        map6.put("inspectionItem", "导线温度");
        map6.put("unit", "℃");
        Map<String, Object> map7 = new HashMap<>();
        map7.put("inspectionItem", "室温");
        map7.put("unit", "℃");
        Map<String, Object> map8 = new HashMap<>();
        map8.put("inspectionItem", "张力");
        map8.put("unit", "kN");
        maps.add(map1);
        maps.add(map2);
        maps.add(map3);
        maps.add(map5);
        maps.add(map6);
        maps.add(map7);
        maps.add(map8);
        return maps;
    }
    //温度循环的处理
    private void dealWithTemperatureLoop(Integer type, Integer id, Integer sampleId, InsProduct product) {
        List<InsProduct> insProductes = new ArrayList<>();
        List<InsProduct> insProducts = new ArrayList<>();
        String[] strings = product.getAsk().split(";");
        for (int i = 0; i < strings.length; i++) {
            int count = Integer.parseInt(strings[strings.length - 1]);
            if (i != strings.length - 1) {
                InsProduct insProduct = new InsProduct();
                switch (type) {
                    case 1:
                        insProduct.setInsFibersId(id);
                        break;
                    case 2:
                        insProduct.setInsFiberId(id);
                        break;
                }
                String[] split = strings[i].split(",");
                if (split[0].equals("20℃")) {
                    insProduct.setInspectionItem(count + "");//检验项--循环次数
                } else {
                    insProduct.setInspectionItem("1");//检验项--循环次数
                }
                insProduct.setInspectionItemSubclass(split[0]);//检验项--温度
                insProduct.setInspectionItemClass(split[1]);//检验项--光纤项目
                insProduct.setAsk(split[2]);//检验要求
                insProduct.setTell(strings[i]);//检验描述
                insProduct.setInsSampleId(sampleId);
                insProduct.setState(1);
                insProduct.setFactory(product.getFactory());
                insProduct.setLaboratory(product.getLaboratory());
                insProduct.setSampleType(product.getSampleType());
                insProduct.setSample(product.getSample());
                insProduct.setModel(product.getModel());
                insProduct.setSonLaboratory(product.getSonLaboratory());
                insProduct.setUnit(product.getUnit());
                insProduct.setManHourGroup(product.getManHourGroup());
                insProduct.setManHour(product.getManHour());
                insProduct.setInspectionItemType("0");
                insProduct.setInspectionValueType("1");
                insProduct.setTemplateId(product.getTemplateId());//添加模板id
                insProduct.setSpecialItemParentId(product.getId());//特殊项父id
                insProducts.add(insProduct);
                insProductes.add(insProduct);
            } else {
                //最后一个数据是说明会循环多少次
                if (count > 1) {
                    //循环超过1次
                    for (int j = 2; j <= count; j++) {
                        for (InsProduct insProduct : insProducts) {
                            if (!insProduct.getInspectionItemSubclass().equals("20℃") && !insProduct.getInspectionItemSubclass().equals("20℃(常温)")) {
                                InsProduct insProduct1 = new InsProduct();
                                BeanUtils.copyProperties(insProduct, insProduct1);
                                insProduct1.setInspectionItem(j + "");
                                insProductes.add(insProduct1);
                            }
                        }
                    }
                }
            }
        }
        insProductService.saveBatch(insProductes);
    }
    @Override
    public Map<String, Object> getInsOrder(Integer id) {
        Map<String, Object> map = new HashMap<>();
        InsOrder insOrder = insOrderMapper.selectById(id);
        List<SampleProductDto> list = insSampleMapper.selectSampleProductListByOrderId2(id);
        // å¦‚果是光纤配置接头损耗只需展示A端、B端、平均值
        if (CollectionUtils.isNotEmpty(list)) {
            for (SampleProductDto dto : list) {
                // èŽ·å–æ£€éªŒé¡¹ç›®
                List<InsProduct> insProducts = dto.getInsProduct();
                if (CollectionUtils.isNotEmpty(insProducts)) {
                    // è¿‡æ»¤å‡ºå…‰çº¤é…ç½®çš„光纤接头损耗检验项目
                    List<InsProduct> productList = insProducts.stream().filter(item -> item.getInspectionItem().equals("光纤接头损耗")
                            && (!Objects.isNull(item.getInsFiberId()) || !Objects.isNull(item.getInsFibersId()))).collect(Collectors.toList());
                    if (CollectionUtils.isNotEmpty(productList)) {
                        // åªè¿”回光纤街头损耗检验项目 ä¸” åªå±•示一次
                        // æ ¹æ®æ£€éªŒé¡¹è¿›è¡Œåˆ†ç»„
                        Map<String, List<InsProduct>> collect = productList.stream().collect(Collectors.groupingBy(InsProduct::getInspectionItemSubclass));
                        List<InsProduct> productList2 = new ArrayList<>();
                        Iterator<Map.Entry<String, List<InsProduct>>> iterator = collect.entrySet().iterator();
                        while (iterator.hasNext()) {
                            Map.Entry<String, List<InsProduct>> entry = iterator.next();
                            productList2.add(entry.getValue().get(0));
                        }
                        dto.setInsProduct(productList2);
                    }
                }
            }
        }
        map.put("insOrder", insOrder);
        map.put("sampleProduct", list);
        return map;
    }
    @Override
    public int upInsOrderOfState(InsOrder insOrder) {
        InsOrder order = insOrderMapper.selectById(insOrder.getId());
        insOrder.setCompany(order.getCompany());
        insOrder.setExamineTime(LocalDateTime.now());
        if (insOrder.getState() == 1) {
            //审核通过才会生成委托编号
            String laboratoryCode = baseMapper.selLaboratoryCode(insOrder.getLaboratory());
            if (StringUtils.isEmpty(laboratoryCode)) {
                laboratoryCode = "";
            }
            Custom custom = customMapper.selectById(order.getCompanyId());
//            System.out.println("============="+custom.getCompany());
//            System.out.println("-------------"+order.getCompany());
            String customCode = custom.getCode2();
            if (!custom.getCompany().equals(order.getCompany())) {
                Custom one = customMapper.selectOne(Wrappers.<Custom>lambdaQuery().eq(Custom::getCompany, order.getCompany()));
                insOrder.setCompanyId(one.getId());
                customCode = one.getCode2();
            }
            String entrustCodePrefix = getEntrustCodePrefix(customCode, laboratoryCode);
            String entrustCode = numberGenerator.generateNumberWithPrefix(4, entrustCodePrefix, InsOrder::getEntrustCode);
            insOrder.setEntrustCode(entrustCode);
//            insOrder.setEntrustCode(giveCode.giveCode2("JCZX/" + code + "-" + code2 + "-", insOrder.getCompanyId(), insOrder.getLaboratory(), "ins_order", "", "yyMM"));
            /*审核通过还需要新增一条cnas要求、标书和合同评审*/
            ProcessOrder processOrder = new ProcessOrder();
            processOrder.setInsOrderId(insOrder.getId());
            processOrderMapper.insert(processOrder);
        }
        return insOrderMapper.updateById(insOrder);
    }
    @Override
    public Map<String, Object> getInsOrderAndSample(Integer id, String laboratory) {
        Map<String, Object> map = new HashMap<>();
        InsOrder insOrder = insOrderMapper.selectById(id);
        Integer insState = insOrderStateMapper.selectOne(new LambdaQueryWrapper<InsOrderState>().eq(InsOrderState::getLaboratory, laboratory).eq(InsOrderState::getInsOrderId, id)).getInsState();
        List<SampleProductDto> list = insSampleMapper.getInsOrderAndSample(id, laboratory);
        for (SampleProductDto sampleProductDto : list) {
            List<Integer> ids = sampleProductDto.getInsProduct().stream().map(InsProduct::getId).collect(Collectors.toList());
            List<InsProductUser> insProductUsers = insProductUserMapper.selectList(Wrappers.<InsProductUser>lambdaQuery()
                    .in(InsProductUser::getInsProductId, ids));
            if (CollectionUtils.isNotEmpty(insProductUsers)) {
                List<Integer> userIds = insProductUsers.stream().map(InsProductUser::getCreateUser).distinct().collect(Collectors.toList());
                String collect = userMapper.selectBatchIds(userIds).stream().map(User::getName).collect(Collectors.joining(","));
                sampleProductDto.setCheckName(collect);
            }
        }
        map.put("insOrder", insOrder);
        map.put("sampleProduct", list);
        map.put("insState", insState);
        //查询所有记录模版去重
        List<Map<Integer, Object>> list2 = insOrderMapper.selectReportModelByOrderId(id, laboratory);
        map.put("reportModel", list2);
        return map;
    }
    @Override
    public Map<String, Object> selectSampleAndProductByOrderId(SampleProductDto2 sampleProductDto) {
        Map<String, Object> map = new HashMap<>();
        List<Map<String, Object>> headList = new ArrayList<>();
        List<SampleProductDto2> SampleProductDto2S = null;
        if (!Objects.isNull(sampleProductDto.getId())) {
            String laboratory = insOrderMapper.selectById(sampleProductDto.getId()).getLaboratory();
            if (laboratory.equals("电力产品实验室")) {
                //电力试验室的数据查看,删除光纤配置相关字段
//                headList = PrintChina.printChina(SampleProductDTODL.class);
                SampleProductDto2S = insOrderMapper.selectSampleAndProductByOrderId(
                        QueryWrappers.queryWrappers(sampleProductDto).orderByAsc("ins_product_id"),
                        sampleProductDto.getId());
            } else {
//                headList = PrintChina.printChina(SampleProductDto2.class);
                SampleProductDto2S = insOrderMapper.selectSampleAndProductByOrderId(
                        QueryWrappers.queryWrappers(sampleProductDto)
                                .orderByAsc("son_laboratory"),
//                                .orderByAsc("inspection_item")
//                                .orderByAsc("inspection_item_subclass"),
                        sampleProductDto.getId());
                List<SampleProductDto2> collect = SampleProductDto2S
                        .stream()
                        .filter(item -> item.getInspectionItem().contains("松套管") || item.getInspectionItemSubclass()
                                .contains("松套管")).collect(Collectors.toList());
                // æ ·å“ä¸‹çš„æ¾å¥—管
                Map<String, List<SampleProductDto2>> collect1 = collect
                        .stream()
                        .collect(Collectors.groupingBy(item -> item.getSampleCode() + '@' + item.getInspectionItemSubclass() + '@' + item.getInspectionItem()));
                Iterator<Map.Entry<String, List<SampleProductDto2>>> iterator = collect1.entrySet().iterator();
                ArrayList<SampleProductDto2> list = new ArrayList<>();
                while (iterator.hasNext()) {
                    SampleProductDto2 sampleProductDto2 = new SampleProductDto2();
                    double avg = 0.0;
                    double count = 0.0;
                    boolean flag = true;
                    Map.Entry<String, List<SampleProductDto2>> next = iterator.next();
                    for (SampleProductDto2 s : next.getValue()) {
                        if (StringUtils.isNotEmpty(s.getLastValue()) && (NumberUtil.isNumber(s.getLastValue()))) {
                            count += Double.parseDouble(s.getLastValue());
                        } else if (!NumberUtil.isNumber(s.getLastValue()) && StringUtils.isNotEmpty(s.getLastValue())) {
                            flag = false;
                        }
                    }
                    BeanUtil.copyProperties(next.getValue().get(0), sampleProductDto2);
                    sampleProductDto2.setBushColor("");
                    List<SampleProductDto2> collect2 = next.getValue().stream().filter(item -> Objects.nonNull(item.getInsResult()) && item.getInsResult().equals(0)).collect(Collectors.toList()); // ä¸åˆæ ¼
                    List<SampleProductDto2> collect3 = next.getValue().stream().filter(item -> Objects.nonNull(item.getInsResult()) && item.getInsResult().equals(3)).collect(Collectors.toList()); // ä¸åˆ¤å®š
                    List<SampleProductDto2> collect4 = next.getValue().stream().filter(item -> StringUtils.isNotEmpty(item.getLastValue())).collect(Collectors.toList()); // ä¸åˆ¤å®š
                    if (CollectionUtils.isNotEmpty(collect2)) {
                        sampleProductDto2.setInsResult(0);
                        sampleProductDto2.setLastValue(collect2.get(0).getLastValue());
                    } else if (CollectionUtils.isNotEmpty(collect3)) {
                        sampleProductDto2.setInsResult(3);
                    } else if (CollectionUtils.isNotEmpty(collect4)) {
                        sampleProductDto2.setInsResult(1);
                    } else {
                        sampleProductDto2.setInsResult(null);
                    }
                    if (flag) {
                        avg = BigDecimal.valueOf(count).divide(BigDecimal.valueOf(next.getValue().size()), 4, RoundingMode.HALF_UP).doubleValue();
                        if (avg == 0.0) {
                            sampleProductDto2.setLastValue("");
                        } else {
                            sampleProductDto2.setLastValue(String.valueOf(avg));
                        }
                    }
                    sampleProductDto2.setInspectionItem(next.getKey().split("@")[2]);
                    sampleProductDto2.setInspectionItemSubclass(next.getKey().split("@")[1]);
                    list.add(sampleProductDto2);
                }
                // è¿‡æ»¤å‡ºä¸åŒ…含为松套管且不为光纤接头损耗的数据
                List<SampleProductDto2> collect2 = SampleProductDto2S
                        .stream()
                        .filter(item -> !item.getInspectionItem().contains("松套管") && !item.getInspectionItemSubclass()
                                .contains("松套管") && !item.getInspectionItem().equals("光纤接头损耗")).collect(Collectors.toList());
                // å¦‚果是光纤接头损耗 ä¸€ä¸ªæ ·å“åªå–其中一个的A端、B端、平均值
                Map<String, List<SampleProductDto2>> fiberMap = SampleProductDto2S
                        .stream()
                        .filter(item -> item.getInspectionItem().equals("光纤接头损耗"))
                        .collect(Collectors.groupingBy(e -> e.getSampleCode() + e.getInspectionItem() + e.getInspectionItemSubclass()));
                Iterator<Map.Entry<String, List<SampleProductDto2>>> iterator1 = fiberMap.entrySet().iterator();
                while (iterator1.hasNext()) {
                    Map.Entry<String, List<SampleProductDto2>> entry = iterator1.next();
                    list.add(entry.getValue().get(0));
                }
                collect2.addAll(list);
                SampleProductDto2S = collect2;
//                SampleProductDto2S.sort(new CustomComparator(enumService));
            }
        }
        for (SampleProductDto2 record : SampleProductDto2S) {
            List<String> values = new ArrayList<>();
            //光纤带编号不为空&&检验过程值不为空
            if (StringUtils.isNotBlank(record.getCode()) && (StringUtils.isNotBlank(record.getInsValue()) || Objects.equals(record.getInsValue(), "[]"))) {
                JSONArray insValueJsonArray = JSON.parseArray(record.getInsValue());
                for (Object o : insValueJsonArray) {
                    JSONObject insValue = JSON.parseObject(JSON.toJSONString(o));
                    if (StringUtils.isNotBlank(insValue.get("v").toString())) {
                        values.add(insValue.get("v").toString());
                    }
                }
                record.setLastValue(String.join(",", values));
            }
        }
        map.put("head", headList);
        map.put("body", SampleProductDto2S);
        return map;
    }
    @Override
    public List<Map<String, Object>> viewDetails(Map<String, Object> map) {
        List<Map<String, Object>> list = new ArrayList<>();
        String inspectionItem = map.get("inspectionItem").toString(); // æ£€éªŒé¡¹
        if (inspectionItem.equals("单根垂直燃烧")) {
            ArrayList<Integer> numbers = new ArrayList<>();
            InsProduct insProduct = insProductMapper.selectById(Integer.parseInt(map.get("insProductId").toString()));
            String[] split = insProduct.getTell().split(",");
            Pattern pattern = Pattern.compile("-?\\d+");
            Matcher matcher = pattern.matcher(split[1]);
            while (matcher.find()) {
                String numberStr = matcher.group();
                numbers.add(Integer.parseInt(numberStr));
            }
            InsProductResult result = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>()
                    .eq(InsProductResult::getInsProductId, Integer.parseInt(map.get("insProductId").toString())));
            for (int i = 0; i < numbers.get(0); i++) {
                HashMap<String, Object> map1 = new HashMap<>();
                map1.put("entrustCode", map.get("entrustCode")); // å§”托编号
                map1.put("sampleCode", map.get("sampleCode")); // æ ·å“ç¼–号
                map1.put("color", ""); // å¥—管
                map1.put("inspectionItem", inspectionItem); // æ£€éªŒé¡¹
                if (!Objects.isNull(result)) {
                    List<Map> maps = JSONArray.parseArray(result.getInsValue(), Map.class);
                    if (maps.size() - 1 < i) {
                        map1.put("insValue", ""); // æ£€éªŒç»“æžœ
                    } else {
                        map1.put("insValue", maps.get(i).get("v")); // æ£€éªŒç»“æžœ
                    }
                }
                list.add(map1);
            }
        } else if (inspectionItem.equals("抗拉强度")) {
            InsProduct insProduct = insProductMapper.selectById(Integer.parseInt(map.get("insProductId").toString()));
            InsProductResult insProductResult = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>()
                    .eq(InsProductResult::getInsProductId, insProduct.getId()));
            if(Objects.isNull(insProductResult)) {
                return list;
            }
            List<Map<String, Object>> values = JSON.parseObject(insProductResult.getInsValue(), new TypeReference<List<Map<String, Object>>>() {
            });
            // è¿›è¡ŒæŽ’序 æ ¹æ®åæ ‡
            values.sort((o1, o2) -> {
                int i = Integer.parseInt(o1.get("r").toString());
                int i1 = Integer.parseInt(o2.get("r").toString());
                return Integer.compare(i,i1);
            });
            // å°†å¾—到的宽度、厚度、检验值分别进行存储
            Map<Object, List<Map<String, Object>>> group = values.stream().collect(Collectors.groupingBy(item -> item.get("r")));
            Iterator<Map.Entry<Object, List<Map<String, Object>>>> iterator = group.entrySet().iterator();
            List<String> widths = new ArrayList<>();
            List<String> thickness = new ArrayList<>();
            List<String> testValue = new ArrayList<>();
            Integer count = 0;
            while (iterator.hasNext()) {
                Map.Entry<Object, List<Map<String, Object>>> entry = iterator.next();
                List<Map<String, Object>> value = entry.getValue();
                for(Map<String,Object> m : value) {
                    if(count == 0) {
                        widths.add(m.get("v").toString());
                    }else if(count == 1) {
                        thickness.add(m.get("v").toString());
                    }else {
                        testValue.add(m.get("v").toString());
                    }
                }
                count++;
            }
            // è¿›è¡Œå°è£…返回
            // æ‰¾åˆ°æœ€é•¿çš„那个集合
            List<Integer> list1 = Arrays.asList(widths.size(), thickness.size(), testValue.size());
            list1.sort((a1, a2) -> {
                return Integer.compare(a2,a1);
            });
            for (int i = 0; i < list1.get(0); i++) {
                HashMap<String, Object> map1 = new HashMap<>();
                map1.put("inspectionItem",insProduct.getInspectionItem()); // æ£€éªŒé¡¹
                map1.put("inspectionItemSubclass",insProduct.getInspectionItemSubclass()); // æ£€éªŒå­é¡¹
                map1.put("width",""); // å®½åº¦
                map1.put("thickness",""); // åŽšåº¦
                map1.put("testValue",""); // æ£€éªŒå€¼
                if(i < widths.size() ) {
                    map1.put("width",widths.get(i));
                }
                if(i < thickness.size()) {
                    map1.put("thickness",thickness.get(i));
                }
                if(i < testValue.size()) {
                    map1.put("testValue",testValue.get(i));
                }
                list.add(map1);
            }
        } else if(inspectionItem.equals("断裂伸长率")) {
            InsProduct insProduct = insProductMapper.selectById(Integer.parseInt(map.get("insProductId").toString()));
            InsProductResult insProductResult = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>()
                    .eq(InsProductResult::getInsProductId, insProduct.getId()));
            if(Objects.isNull(insProductResult)) {
                return list;
            }
            List<Map<String, Object>> values = JSON.parseObject(insProductResult.getInsValue(), new TypeReference<List<Map<String, Object>>>() {
            });
            HashMap<String, Object> map1 = new HashMap<>();
            map1.put("inspectionItem",insProduct.getInspectionItem()); // æ£€é¡¹é¡¹
            map1.put("inspectionItemSubclass",insProduct.getInspectionItemSubclass()); // æ£€é¡¹å­é¡¹
            ArrayList<Map<String, Object>> tableHeader = new ArrayList<>();
            for (int i = 0; i < values.size(); i++) {
                HashMap<String, Object> map2 = new HashMap<>();
                map2.put("testValue" + i,values.get(i).get("v")); // æ£€é¡¹å€¼  è¡¨å¤´
                tableHeader.add(map2);
                map1.put("testValue" + i,values.get(i).get("v"));
            }
            map1.put("tableHeader",tableHeader);
            list.add(map1);
        } else {
            // æ¾å¥—管 è¿‡æ»¤å‡ºæ£€éªŒé¡¹åç§°ä¸€è‡´çš„æ•°æ®
            List<InsProduct> productList = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
                            .eq(InsProduct::getInsSampleId, Integer.parseInt(map.get("insSampleId").toString())))
                    .stream()
                    .filter(item -> item.getInspectionItem().equals(inspectionItem))
                    .collect(Collectors.toList());
            for (InsProduct product : productList) {
                HashMap<String, Object> map2 = new HashMap<>();
                map2.put("entrustCode", map.get("entrustCode")); // å§”托编号
                map2.put("sampleCode", map.get("sampleCode")); // æ ·å“ç¼–号
                map2.put("inspectionItem", product.getInspectionItem()); // æ£€éªŒé¡¹
                map2.put("insValue", product.getLastValue()); // æ£€éªŒç»“æžœ
                // æ‹¿åˆ°ç›¸åº”的套管
                String color = "";
                if (!Objects.isNull(product.getInsBushId())) {
                    color = insBushingMapper.selectById(product.getInsBushId()).getColor(); // å¥—管
                }
                map2.put("color", color); // å¥—管颜色
//                InsProductResult result = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>()
//                        .eq(InsProductResult::getInsProductId, product.getId()));
//                if(!Objects.isNull(result)) {
//                    List<Map> maps = JSONArray.parseArray(result.getInsValue(), Map.class);
//                    map2.put("insValue",maps.get(0).get("v").toString()); // æ£€éªŒç»“æžœ
//                }
                list.add(map2);
            }
        }
        return list;
    }
    /**
     * å¯¼å‡ºå·²æ£€å§”托单
     *
     * @param data
     * @param response
     */
    @Override
    public void exportChecked(Map<String, Object> data, HttpServletResponse response) {
//        Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
        Integer userId = Integer.valueOf(String.valueOf(SecurityUtils.getLoginUser().getUserId()));
        User user = userMapper.selectById(userId);
        List<String> names = null;
        String startTime = "";
        String endTime = "";
        if (data.containsKey("startTime")) {
            startTime = data.get("startTime").toString() + " 00:00:00";
        }
        if (data.containsKey("endTime")) {
            endTime = data.get("endTime").toString() + " 23:59:59";
        }
        List<ExcelChecked> list = new ArrayList<>();
        // å¦‚果是检测中心人员可以导入所有客户下的单 ï¼Œ å¦‚果是客户,可以导出该单位所有的单
        if (user.getIsCustom().equals(0)) {
            names = new ArrayList<>();
        } else {
            String company = user.getCompany();
            List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>()
                    .eq(User::getCompany, company)
                    .eq(User::getIsCustom, 1)
                    .eq(User::getStatus, 0));
            if (CollectionUtils.isNotEmpty(users)) {
                names = users.stream().map(item -> item.getName()).collect(Collectors.toList());
            }
        }
        //总的检验结果
        List<ExportInsProductVO> exportInsProductVOS = insOrderMapper.exportChecked(names, startTime, endTime);
        //排除光纤带几何参数(尺寸参数),温度循环的检验结果
//        List<ExcelChecked> excelCheckeds = exportInsProductVOS.stream().map(e -> {
//            ExcelChecked excelChecked = new ExcelChecked();
//            BeanUtil.copyProperties(e, excelChecked);
//            return excelChecked;
//        }).collect(Collectors.toList());
        // æŽ’除光纤带几何参数(尺寸参数),温度循环的检验结果
        List<ExportInsProductVO> excelCheckeds = exportInsProductVOS.stream().filter(e -> !e.getInspectionItem().equals("温度循环")
                        && !(NumberUtil.isInteger(e.getInspectionItem()) && Objects.nonNull(e.getSpecialItemParentId()))
                        && !(e.getInspectionItem().equals("尺寸参数")
                        && e.getSampleType().equals("光纤带")))
                .collect(Collectors.toList());
        if (CollectionUtils.isNotEmpty(excelCheckeds)) {
            for (ExportInsProductVO a : excelCheckeds) {
                ExcelChecked excelChecked = new ExcelChecked();
                BeanUtil.copyProperties(a, excelChecked);
                list.add(excelChecked);
            }
        }
        //过滤出光纤带几何参数的检验结果
        List<ExportInsProductVO> sizeParameter = exportInsProductVOS.stream().filter(e ->
                        e.getInspectionItem().equals("尺寸参数")
                                && e.getSampleType().equals("光纤带"))
                .collect(Collectors.toList());
        List<FiberRibboGeometricalParameterExcelData> fiberList = new ArrayList<>();
        if (CollectionUtils.isNotEmpty(sizeParameter)) {
            // æ ¹æ®å§”托单号、样品编号、套管、光纤带编号进行分组
            Map<String, List<ExportInsProductVO>> groupData = sizeParameter.stream().sorted(Comparator.comparing(ExportInsProductVO::getSampleCode))
                    .collect(Collectors.toMap(e ->
                                    e.getEntrustCode() + '@' + e.getSampleCode() + '@' + e.getBushColor() + '@' + e.getCode(),
                            Collections::singletonList,
                            (left, right) -> {
                                ArrayList<ExportInsProductVO> list1 = new ArrayList<>(left);
                                list1.addAll(right);
                                return list1;
                            },
                            TreeMap::new));
            Iterator<Map.Entry<String, List<ExportInsProductVO>>> iterator = groupData.entrySet().iterator();
            while (iterator.hasNext()) {
                Map.Entry<String, List<ExportInsProductVO>> entry = iterator.next();
                FiberRibboGeometricalParameterExcelData fiber = new FiberRibboGeometricalParameterExcelData();
                ExportInsProductVO exportInsProductVO = entry.getValue().get(0);
                fiber.setEntrustCode(exportInsProductVO.getEntrustCode()); // å§”托单号
                fiber.setSampleCode(exportInsProductVO.getSampleCode()); // æ ·å“ç¼–号
                fiber.setBushColor(exportInsProductVO.getBushColor()); // å¥—管色标
                fiber.setCode(exportInsProductVO.getCode()); // å…‰çº¤å¸¦ç¼–号
                fiber.setInspectionItemType("光纤几何参数"); // æ£€éªŒé¡¹
                fiber.setInspector(exportInsProductVO.getCheckName()); // æ£€éªŒäºº
                for (ExportInsProductVO a : entry.getValue()) {
                    if (Objects.isNull(fiber.getInsTime())) {
                        if (Objects.nonNull(a.getCheckTime())) {
                            String format = a.getCheckTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
                            fiber.setInsTime(LocalDate.parse(format)); // æ£€éªŒæ—¶é—´
                        }
                    }
                    switch (a.getInspectionItemSubclass()) {
                        case "宽度":
                            List<Map> maps1 = getInsValueList(a.getInsValue());
                            if (CollectionUtils.isNotEmpty(maps1)) {
                                if (maps1.size() >= 2) {
                                    fiber.setWidthA(maps1.get(0).get("v").toString());
                                    fiber.setWidthB(maps1.get(1).get("v").toString());
                                } else {
                                    fiber.setWidthA(maps1.get(0).get("v").toString());
                                }
                            }
                            break;
                        case "厚度":
                            List<Map> maps2 = getInsValueList(a.getInsValue());
                            if (CollectionUtils.isNotEmpty(maps2)) {
                                if (maps2.size() >= 2) {
                                    fiber.setThicknessA(maps2.get(0).get("v").toString());
                                    fiber.setThicknessB(maps2.get(1).get("v").toString());
                                } else {
                                    fiber.setThicknessA(maps2.get(0).get("v").toString());
                                }
                            }
                            break;
                        case "相邻光纤水平间距":
                            List<Map> maps3 = getInsValueList(a.getInsValue());
                            if (CollectionUtils.isNotEmpty(maps3)) {
                                if (maps3.size() >= 2) {
                                    fiber.setAdjacentSpacingA(maps3.get(0).get("v").toString());
                                    fiber.setAdjacentSpacingB(maps3.get(1).get("v").toString());
                                } else {
                                    fiber.setAdjacentSpacingA(maps3.get(0).get("v").toString());
                                }
                            }
                            break;
                        case "两侧光纤水平间距":
                            List<Map> maps4 = getInsValueList(a.getInsValue());
                            if (CollectionUtils.isNotEmpty(maps4)) {
                                if (maps4.size() >= 2) {
                                    fiber.setSideSpacingA(maps4.get(0).get("v").toString());
                                    fiber.setSideSpacingB(maps4.get(1).get("v").toString());
                                } else {
                                    fiber.setSideSpacingA(maps4.get(0).get("v").toString());
                                }
                            }
                            break;
                        case "平整度":
                            List<Map> maps5 = getInsValueList(a.getInsValue());
                            if (CollectionUtils.isNotEmpty(maps5)) {
                                if (maps5.size() >= 2) {
                                    fiber.setEvennessA(maps5.get(0).get("v").toString());
                                    fiber.setEvennessB(maps5.get(1).get("v").toString());
                                } else {
                                    fiber.setEvennessA(maps5.get(0).get("v").toString());
                                }
                            }
                            break;
                    }
                }
                fiberList.add(fiber);
            }
        }
        //过滤出温度循环
        List<ExportInsProductVO> temperatureCycling = exportInsProductVOS.stream().filter(e ->
                        NumberUtil.isInteger(e.getInspectionItem()) && Objects.nonNull(e.getSpecialItemParentId()) && e.getSonLaboratory().equals("光纤试验室"))
                .collect(Collectors.toList());
        List<TemperatureCycling> temperatureCyclingList = getTemList(temperatureCycling);
        try {
            String fileName = URLEncoder.encode("已检委托单", "UTF-8");
            response.setContentType("application/vnd.ms-excel");
            response.setCharacterEncoding("UTF-8");
            response.setHeader("content-disposition", "attachment;filename=" + fileName + ".xlsx");
            HorizontalCellStyleStrategy arveStyleStrategy = EasyExcelUtils.getStyleStrategy();
            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(arveStyleStrategy).build();
            WriteSheet build = EasyExcel.writerSheet().sheetName("Sheet1").head(ExcelChecked.class).build();
            excelWriter.write(list, build);
            if (CollectionUtils.isNotEmpty(fiberList)) {
                WriteSheet build1 = EasyExcel.writerSheet().sheetName("光纤几何参数").head(FiberRibboGeometricalParameterExcelData.class).build();
                excelWriter.write(fiberList, build1);
            }
            if (CollectionUtils.isNotEmpty(temperatureCycling)) {
                WriteSheet build2 = EasyExcel.writerSheet().sheetName("温度循环").head(TemperatureCycling.class).build();
                excelWriter.write(temperatureCyclingList, build2);
            }
            excelWriter.finish();
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("导出失败" + e.getMessage());
        }
    }
    @Override
    public List<Map<String, Object>> getInsOrderTemList(Map<String, Object> data) {
        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.selectByCreaterUser(createUser);
        }
        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<ExportInsProductVO> insOrderTemList = insOrderMapper.getInsOrderTemList(entrustCode, sampleCode, startTime, endTime,name);
            List<TemperatureCycling> temList = getTemList(insOrderTemList);;
//            if (StringUtils.isEmpty(name)) {
//                temList = getTemList(insOrderTemList);
//            } else {
//                temList = getTemList(insOrderTemList).stream()
//                        .filter(tl -> name.equals(tl.getCheckName()))
//                        .collect(Collectors.toList());
//            }
            maps = new ArrayList<>(temList.size());
            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("attenuationCoefficient1550", map.getAttenuationCoefficient1550());
                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);
            }
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
        return maps;
    }
    @Override
    public Map<String,Object> permute(Integer num,Boolean isValue) {
        HashMap<String, Object> map = new HashMap<>();
        ArrayList<Integer> integers = new ArrayList<>();
        for (int i = 1; i <= num; i++) { // ä½¿ç”¨è¾ƒå°çš„æ•°å­—范围进行测试
            integers.add(i);
        }
        List<List<Integer>> result = permutes(integers);
        if(isValue) {
            map.put("resultData",result);
        }else {
            map.put("resultData",result.size());
        }
        return map;
    }
    private static List<List<Integer>> permutes(List<Integer> nums) {
        List<List<Integer>> result = new ArrayList<>();
        backtrack(new ArrayList<>(), nums, result);
        return result;
    }
    private static void backtrack(List<Integer> temp, List<Integer> nums, List<List<Integer>> result) {
        if (temp.size() == 2) {
            result.add(new ArrayList<>(temp)); // æ·»åŠ å½“å‰ç»„åˆåˆ°ç»“æžœåˆ—è¡¨
            return;
        }
        for (int i = 0; i < nums.size(); i++) {
            // è§„定顺序,避免重复组合
            if (temp.size() > 0 && nums.get(i) < temp.get(temp.size() - 1)) continue;
            temp.add(nums.get(i)); // æ·»åŠ å½“å‰æ•°å­—åˆ°ä¸´æ—¶ç»„åˆ
            backtrack(temp, nums, result); // é€’归调用
            temp.remove(temp.size() - 1); // æ¢å¤çŠ¶æ€
        }
    }
    public List<TemperatureCycling> getTemList(List<ExportInsProductVO> temperatureCycling) {
        List<TemperatureCycling> temperatureCyclingList = new ArrayList<>();
        List<TemperatureCycling> newTemperatureCyclingList = new ArrayList<>(); // è¿”回的温度循环数据
        if (CollectionUtils.isNotEmpty(temperatureCycling)) {
            // æ ¹æ®å§”托单号、样品编号、套管、光线色标、循环的次数进行分组
            List<ExportInsProductVO> collect = temperatureCycling.stream()
                    .sorted(Comparator.comparing(ExportInsProductVO::getInspectionItem)).collect(Collectors.toList());
            Map<String, List<ExportInsProductVO>> temperatureGroup = collect.stream()
                    .sorted(Comparator.comparing(t -> getInspectionItemSubclassOrder(t.getInspectionItemSubclass()))).collect(Collectors.groupingBy(e ->
                                    e.getEntrustCode() + "@" + e.getSampleCode() + "@" + e.getBushColor() + "@" + e.getColor() + "@" + e.getInspectionItem() + "@" + e.getInspectionItemSubclass(),
                            TreeMap::new,
                            Collectors.toList()));
            // èŽ·å–20℃的数据 æ¥è¿›è¡Œå·®å€¼çš„运算 åªèŽ·å–ç¬¬ä¸€æ¬¡çš„20℃常温的数据,根据单号、样品编号好、套管和光纤来(会存在多个单子多个样品)
            Map<String, BigDecimal> map = new HashMap<>();
            for (ExportInsProductVO a : collect) {
                if (a.getInspectionItem().equals("1") && a.getInspectionItemSubclass().equals("20℃(常温)")) {
                    switch (a.getInspectionItemClass()) {
                        case "1310nm":
                            List<Map> insValue = getInsValueList(a.getComValue());
                            BigDecimal decay1310 = BigDecimal.ZERO;
                            if (CollectionUtils.isNotEmpty(insValue)) {
                                decay1310 = new BigDecimal(isNumber(insValue.get(0).get("v").toString()));
                            }
                            map.put(a.getEntrustCode() + a.getSampleCode() + a.getBushColor() + a.getColor() + a.getInspectionItemClass(), decay1310);
                            break;
                        case "1550nm":
                            List<Map> insValue1 = getInsValueList(a.getComValue());
                            BigDecimal decay1550 = BigDecimal.ZERO;
                            if (CollectionUtils.isNotEmpty(insValue1)) {
                                decay1550 = new BigDecimal(isNumber(insValue1.get(0).get("v").toString()));
                            }
                            map.put(a.getEntrustCode() + a.getSampleCode() + a.getBushColor() + a.getColor() + a.getInspectionItemClass(), decay1550);
                            break;
                        case "1625nm":
                            List<Map> insValue2 = getInsValueList(a.getComValue());
                            BigDecimal decay1625 = BigDecimal.ZERO;
                            if (CollectionUtils.isNotEmpty(insValue2)) {
                                decay1625 = new BigDecimal(isNumber(insValue2.get(0).get("v").toString()));
                            }
                            map.put(a.getEntrustCode() + a.getSampleCode() + a.getBushColor() + a.getColor() + a.getInspectionItemClass(), decay1625);
                            break;
                        case "1383nm":
                            List<Map> insValue3 = getInsValueList(a.getComValue());
                            BigDecimal decay1383 = BigDecimal.ZERO;
                            if (CollectionUtils.isNotEmpty(insValue3)) {
                                decay1383 = new BigDecimal(isNumber(insValue3.get(0).get("v").toString()));
                            }
                            map.put(a.getEntrustCode() + a.getSampleCode() + a.getBushColor() + a.getColor() + a.getInspectionItemClass(), decay1383);
                            break;
                        case "1490nm":
                            List<Map> insValue4 = getInsValueList(a.getComValue());
                            BigDecimal decay1490 = BigDecimal.ZERO;
                            if (CollectionUtils.isNotEmpty(insValue4)) {
                                decay1490 = new BigDecimal(isNumber(insValue4.get(0).get("v").toString()));
                            }
                            map.put(a.getEntrustCode() + a.getSampleCode() + a.getBushColor() + a.getColor() + a.getInspectionItemClass(), decay1490);
                            break;
                    }
                }
            }
            // æ ¹æ®å§”托编号、样品编号、循环次数、温度点进行分组
            Map<String, List<ExportInsProductVO>> collect1 = temperatureCycling.stream()
                    .collect(Collectors.groupingBy(e -> e.getEntrustCode() + "@" + e.getSampleCode() + "@" + e.getInspectionItem() + "@" + e.getInspectionItemSubclass()));
            // å°†å·®å€¼ä¿å­˜
            Map<String, List<BigDecimal>> map1 = new HashMap<>();
            Set<String> strings = new HashSet<>();
            Iterator<Map.Entry<String, List<ExportInsProductVO>>> iterator1 = collect1.entrySet().iterator();
            while (iterator1.hasNext()) {
                Map.Entry<String, List<ExportInsProductVO>> entry = iterator1.next();
                for (ExportInsProductVO a : entry.getValue()) {
                    // å°†å¾—到的衰减系数保存 åŽé¢è¦ç”¨åˆ°
                    strings.add(a.getInspectionItemClass());
                    switch (a.getInspectionItemClass()) {
                        case "1310nm":
                        case "1490nm":
                        case "1383nm":
                        case "1550nm":
                        case "1625nm":
                            List<Map> insValue = getInsValueList(a.getComValue());
                            if (CollectionUtils.isNotEmpty(insValue)) {
                                ArrayList<BigDecimal> bigDecimals = new ArrayList<>();
                                BigDecimal bigDecimal = new BigDecimal(isNumber(insValue.get(0).get("v").toString()));// å½“前衰减值
                                BigDecimal bigDecimal1 = map.get(a.getEntrustCode() + a.getSampleCode() + a.getBushColor() + a.getColor() + a.getInspectionItemClass());// 20℃的衰减值
                                BigDecimal v = bigDecimal.subtract(bigDecimal1);
                                bigDecimals.add(v.abs());
                                if (map1.containsKey(a.getEntrustCode() + a.getSampleCode() + a.getInspectionItemSubclass() + a.getInspectionItemClass())) {
                                    map1.get(a.getEntrustCode() + a.getSampleCode() + a.getInspectionItemSubclass() + a.getInspectionItemClass()).addAll(bigDecimals);
                                } else {
                                    map1.put(a.getEntrustCode() + a.getSampleCode() + a.getInspectionItemSubclass() + a.getInspectionItemClass(), bigDecimals);
                                }
                            } else {
                                if (!map1.containsKey(a.getEntrustCode() + a.getSampleCode() + a.getInspectionItemSubclass() + a.getInspectionItemClass())) {
                                    map1.put(a.getEntrustCode() + a.getSampleCode() + a.getInspectionItemSubclass() + a.getInspectionItemClass(), new ArrayList<>());
                                }
                            }
                            break;
                    }
                }
            }
            Iterator<Map.Entry<String, List<ExportInsProductVO>>> iterator = temperatureGroup.entrySet().iterator();
            while (iterator.hasNext()) {
                Map.Entry<String, List<ExportInsProductVO>> entry = iterator.next();
                TemperatureCycling temperature = new TemperatureCycling();
                for (ExportInsProductVO a : entry.getValue()) {
                    BeanUtils.copyProperties(a, temperature);
                    // æ—¶é—´æ ¼å¼åŒ–
                    if (Objects.nonNull(a.getCheckTime())) {
                        String format = a.getCheckTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
                        LocalDate parse = LocalDate.parse(format);
                        temperature.setInsTime(parse);
                    }
                    // è¡°å‡ç³»æ•°èŽ·å–è®¡ç®—å€¼
                    List<Map> insValue = getInsValueList(a.getComValue());
                    if (CollectionUtils.isNotEmpty(insValue)) {
                        switch (a.getInspectionItemClass()) {
                            case "1310nm":
                                temperature.setAttenuationCoefficient1310(isNumber(insValue.get(0).get("v").toString()));
                                // 20℃(常温)的是没有差值的
                                if (!a.getInspectionItemSubclass().contains("20℃(常温)")) {
                                    BigDecimal v = new BigDecimal(isNumber(insValue.get(0).get("v").toString())).subtract(map.get(a.getEntrustCode() + a.getSampleCode() + a.getBushColor() + a.getColor() + a.getInspectionItemClass()));
                                    String attenuationDifference = v.abs().toString();
                                    temperature.setAttenuationDifference1(attenuationDifference);
                                }
                                break;
                            case "1550nm":
                                temperature.setAttenuationCoefficient1550(isNumber(insValue.get(0).get("v").toString()));
                                // 20℃(常温)的是没有差值的
                                if (!a.getInspectionItemSubclass().contains("20℃(常温)")) {
                                    BigDecimal v = new BigDecimal(isNumber(insValue.get(0).get("v").toString())).subtract(map.get(a.getEntrustCode() + a.getSampleCode() + a.getBushColor() + a.getColor() + a.getInspectionItemClass()));
                                    String attenuationDifference = v.abs().toString();
                                    temperature.setAttenuationDifference2(attenuationDifference);
                                }
                                break;
                            case "1625nm":
                                temperature.setAttenuationCoefficient1625(isNumber(insValue.get(0).get("v").toString()));
                                // 20℃(常温)的是没有差值的
                                if (!a.getInspectionItemSubclass().contains("20℃(常温)")) {
                                    BigDecimal v = new BigDecimal(isNumber(insValue.get(0).get("v").toString())).subtract(map.get(a.getEntrustCode() + a.getSampleCode() + a.getBushColor() + a.getColor() + a.getInspectionItemClass()));
                                    String attenuationDifference = v.abs().toString();
                                    temperature.setAttenuationDifference3(attenuationDifference);
                                }
                                break;
                            case "1383nm":
                                temperature.setAttenuationCoefficient1383(isNumber(insValue.get(0).get("v").toString()));
                                // 20℃(常温)的是没有差值的
                                if (!a.getInspectionItemSubclass().contains("20℃(常温)")) {
                                    BigDecimal v = new BigDecimal(isNumber(insValue.get(0).get("v").toString())).subtract(map.get(a.getEntrustCode() + a.getSampleCode() + a.getBushColor() + a.getColor() + a.getInspectionItemClass()));
                                    String attenuationDifference = v.abs().toString();
                                    temperature.setAttenuationDifference4(attenuationDifference);
                                }
                                break;
                            case "1490nm":
                                temperature.setAttenuationCoefficient1490(isNumber(insValue.get(0).get("v").toString()));
                                // 20℃(常温)的是没有差值的
                                if (!a.getInspectionItemSubclass().contains("20℃(常温)")) {
                                    BigDecimal v = new BigDecimal(isNumber(insValue.get(0).get("v").toString())).subtract(map.get(a.getEntrustCode() + a.getSampleCode() + a.getBushColor() + a.getColor() + a.getInspectionItemClass()));
                                    String attenuationDifference = v.abs().toString();
                                    temperature.setAttenuationDifference5(attenuationDifference);
                                }
                                break;
                        }
                        // è¿›è¡Œè¡°å‡å·®å€¼çš„æœ€å¤§å€¼èµ‹å€¼
                        StringBuffer value = new StringBuffer();
                        if (strings.contains("1310nm")) {
                            BigDecimal bigDecimal = BigDecimal.ZERO;
                            if (map1.containsKey(a.getEntrustCode() + a.getSampleCode() + a.getInspectionItemSubclass() + "1310nm")) {
                                bigDecimal = Optional.ofNullable(map1.get(a.getEntrustCode() + a.getSampleCode() + a.getInspectionItemSubclass() + "1310nm"))
                                        .orElse(Collections.emptyList()) // å¦‚果值为 null,返回空列表
                                        .stream()
                                        .sorted(Comparator.reverseOrder()) // é™åºæŽ’序
                                        .findFirst() // èŽ·å–ç¬¬ä¸€ä¸ªå…ƒç´ ï¼ˆæœ€å¤§å€¼ï¼‰
                                        .orElse(BigDecimal.ZERO); // å¦‚果列表为空,返回默认值(例如 BigDecimal.ZERO)
                            }
                            if (bigDecimal.abs().compareTo(BigDecimal.ZERO) > 0) {
                                value.append("|∆ɑ|1310nm max").append(bigDecimal.abs()).append("dB/km");
                            }
                        }
                        if (strings.contains("1550nm")) {
                            BigDecimal bigDecimal = BigDecimal.ZERO;
                            if (map1.containsKey(a.getEntrustCode() + a.getSampleCode() + a.getInspectionItemSubclass() + "1550nm")) {
                                List<BigDecimal> valuesList = map1.get(a.getEntrustCode() + a.getSampleCode() + a.getInspectionItemSubclass() + "1550nm").stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
                                bigDecimal = valuesList.isEmpty() ? BigDecimal.ZERO : valuesList.get(0);
                            }
                            if (bigDecimal.abs().compareTo(BigDecimal.ZERO) > 0) {
                                value.append("|∆ɑ|1550nm max").append(bigDecimal.abs()).append("dB/km");
                            }
                        }
                        if (strings.contains("1625nm")) {
                            BigDecimal bigDecimal = BigDecimal.ZERO;
                            if (map1.containsKey(a.getEntrustCode() + a.getSampleCode() + a.getInspectionItemSubclass() + "1625nm")) {
                                bigDecimal = map1.get(a.getEntrustCode() + a.getSampleCode() + a.getInspectionItemSubclass() + "1625nm").stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList()).get(0);
                            }
                            if (bigDecimal.abs().compareTo(BigDecimal.ZERO) > 0) {
                                value.append("|∆ɑ|1625nm max").append(bigDecimal.abs()).append("dB/km");
                            }
                        }
                        if (strings.contains("1383nm")) {
                            BigDecimal bigDecimal = BigDecimal.ZERO;
                            if (map1.containsKey(a.getEntrustCode() + a.getSampleCode() + a.getInspectionItemSubclass() + "1383nm")) {
                                bigDecimal = map1.get(a.getEntrustCode() + a.getSampleCode() + a.getInspectionItemSubclass() + "1383nm").stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList()).get(0);
                            }
                            if (bigDecimal.abs().compareTo(BigDecimal.ZERO) > 0) {
                                value.append("|∆ɑ|1383nm max").append(bigDecimal.abs()).append("dB/km");
                            }
                        }
                        if (strings.contains("1490nm")) {
                            BigDecimal bigDecimal = BigDecimal.ZERO;
                            if (map1.containsKey(a.getEntrustCode() + a.getSampleCode() + a.getInspectionItemSubclass() + "1490nm")) {
                                bigDecimal = map1.get(a.getEntrustCode() + a.getSampleCode() + a.getInspectionItemSubclass() + "1490nm").stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList()).get(0);
                            }
                            if (bigDecimal.abs().compareTo(BigDecimal.ZERO) > 0) {
                                value.append("|∆ɑ|1490nm max").append(bigDecimal.abs()).append("dB/km");
                            }
                        }
                        if (StringUtils.isNotEmpty(value.toString())) {
                            value.insert(0, a.getInspectionItemSubclass() + " ");
                        }
                        temperature.setAttenuationDifferenceMax(value.toString());
                    }
                    temperatureCyclingList.add(temperature);
                }
            }
        }
        temperatureCyclingList = temperatureCyclingList.stream().distinct().collect(Collectors.toList());
        //查询全色谱,过滤色标并排序
        List<String> colorList = dictTypeService.selectDictDataByType("color_type").stream()
                .sorted(Comparator.comparing(SysDictData::getDictSort))
                .map(SysDictData::getDictLabel)
                .collect(Collectors.toList());
        Map<String, List<TemperatureCycling>> collect = temperatureCyclingList.stream().collect(Collectors.groupingBy(TemperatureCycling::getEntrustCode));
        Iterator<Map.Entry<String, List<TemperatureCycling>>> iterator = collect.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, List<TemperatureCycling>> entry = iterator.next();
            //温度循环根据色标排序
            entry.getValue().sort((o1, o2) -> {
                //根据套管色标以及光纤色标排序
                if (StringUtils.isNotBlank(o1.getBushColor()) && StringUtils.isNotBlank(o2.getBushColor())) {
                    //先按样品编号升序
                    if (!Objects.equals(o1.getSampleCode(), o2.getSampleCode())) {
                        if (containsOnlyDigits(o1.getSampleCode()) && containsOnlyDigits(o2.getSampleCode())) {
                            Long o1Num = Long.parseLong(o1.getSampleCode());
                            Long o2Num = Long.parseLong(o2.getSampleCode());
                            return o1Num.compareTo(o2Num);
                        }
                        return o1.getSampleCode().compareTo(o2.getSampleCode());
                    }
                    //循环次数排序
                    if (StringUtils.isNotBlank(o1.getInspectionItem()) && StringUtils.isNotBlank(o2.getInspectionItem())) {
                        if (!Objects.equals(o1.getInspectionItem(), o2.getInspectionItem())) {
                            Integer o1Index = Integer.parseInt(o1.getInspectionItem());
                            Integer o2Index = Integer.parseInt(o2.getInspectionItem());
                            return o1Index.compareTo(o2Index);
                        }
                    }
                    //套管色标排序
                    if (!Objects.equals(o1.getBushColor(), o2.getBushColor())) {
                        Integer o1Index = colorList.indexOf(o1.getBushColor());
                        Integer o2Index = colorList.indexOf(o2.getBushColor());
                        return o1Index.compareTo(o2Index);
                    }
                    //光纤带排序
                    if (StringUtils.isNotBlank(o1.getCode()) && StringUtils.isNotBlank(o2.getCode())) {
                        if (!Objects.equals(o1.getCode(), o2.getCode())) {
                            return o1.getCode().compareTo(o2.getCode());
                        }
                    }
                    //光纤色标排序
                    if (StringUtils.isNotBlank(o1.getColor()) && StringUtils.isNotBlank(o2.getColor())) {
                        if (!Objects.equals(o1.getColor(), o2.getColor())) {
                            Integer o1Index = colorList.indexOf(o1.getColor());
                            Integer o2Index = colorList.indexOf(o2.getColor());
                            return o1Index.compareTo(o2Index);
                        }
                    }
                }
                return 0;
            });
            newTemperatureCyclingList.addAll(entry.getValue());
        }
        //温度循环根据色标排序
//        temperatureCyclingList.sort((o1, o2) -> {
//            // å¤„理 null å€¼
//            if (o1 == null && o2 == null) return 0;
//            if (o1 == null) return -1;
//            if (o2 == null) return 1;
//
//            // ---------------------- 1. æŒ‰æ ·å“ç¼–号排序 ----------------------
//            int sampleCodeCompare = compareSampleCode(o1.getSampleCode(), o2.getSampleCode());
//            if (sampleCodeCompare != 0) return sampleCodeCompare;
//
//            // ---------------------- 2. æŒ‰å¥—管色标排序 ----------------------
//            int bushColorCompare = compareColor(o1.getBushColor(), o2.getBushColor(), colorList);
//            if (bushColorCompare != 0) return bushColorCompare;
//
//            // ---------------------- 3. æŒ‰å…‰çº¤å¸¦æŽ’序 ----------------------
//            int codeCompare = compareNullableString(o1.getCode(), o2.getCode());
//            if (codeCompare != 0) return codeCompare;
//
//            // ---------------------- 4. æŒ‰å…‰çº¤è‰²æ ‡æŽ’序 ----------------------
//            return compareColor(o1.getColor(), o2.getColor(), colorList);
//        });
        return newTemperatureCyclingList;
    }
    //1: æ ·å“ç¼–号比较(支持数字和字符串混合排序)
    private static int compareSampleCode(String code1, String code2) {
        if (Objects.equals(code1, code2)) return 0;
        boolean isCode1Numeric = containsOnlyDigits(code1);
        boolean isCode2Numeric = containsOnlyDigits(code2);
        // å¦‚果都是数字,转为 Long æ¯”较
        if (isCode1Numeric && isCode2Numeric) {
            return Long.compare(Long.parseLong(code1), Long.parseLong(code2));
        }
        // å¦‚果一个是数字,另一个不是,数字优先
        if (isCode1Numeric != isCode2Numeric) {
            return isCode1Numeric ? -1 : 1;
        }
        // å…¶ä»–情况按字符串比较
        return code1.compareTo(code2);
    }
    //2: è‰²æ ‡æ¯”较(处理不在 colorList ä¸­çš„æƒ…况)
    private static int compareColor(String color1, String color2, List<String> colorList) {
        if (Objects.equals(color1, color2)) return 0;
        // å¤„理 colorList ä¸­çš„索引
        int index1 = colorList.indexOf(color1);
        int index2 = colorList.indexOf(color2);
        // å°†ä¸åœ¨åˆ—表中的色标统一排序到最后(赋予最大值)
        index1 = index1 == -1 ? Integer.MAX_VALUE : index1;
        index2 = index2 == -1 ? Integer.MAX_VALUE : index2;
        return Integer.compare(index1, index2);
    }
    //3: å¤„理可能为空的字符串比较
    private static int compareNullableString(String str1, String str2) {
        if (Objects.equals(str1, str2)) return 0;
        // ç©ºå­—符串视为较小值
        boolean isStr1Blank = StringUtils.isBlank(str1);
        boolean isStr2Blank = StringUtils.isBlank(str2);
        if (isStr1Blank && isStr2Blank) return 0;
        if (isStr1Blank) return -1;
        if (isStr2Blank) return 1;
        // éžç©ºæ—¶æŒ‰è‡ªç„¶é¡ºåºæ¯”较
        return str1.compareTo(str2);
    }
    public List<Map> getInsValueList(String insValue) {
        List<Map> list = new ArrayList<>();
        if (StringUtils.isNotBlank(insValue)) {
            List<Map> maps = JSONArray.parseArray(insValue, Map.class);
            list.addAll(maps);
        }
        return list;
    }
    /**
     * åˆ¤æ–­æ˜¯å¦å¯ä»¥è½¬æ•°å­—
     */
    public String isNumber(String str) {
        if (NumberUtil.isDouble(str)) {
            return str;
        } else {
            return "0";
        }
    }
    /**
     * æŽ’序规格
     *
     * @param t
     * @return
     */
    public Integer getInspectionItemSubclassOrder(String t) {
        switch (t) {
            case "20℃(常温)":
                return 1;
            case "20℃":
                return 2;
            case "-40℃":
                return 3;
            case "65℃":
                return 4;
            default:
                return 5; // æœªçŸ¥æ¸©åº¦ç‚¹
        }
    }
    @Override
    public Map<String, Object> costStatistics(IPage<CostStatisticsDto> page, CostStatisticsDto costStatisticsDto) {
        String dates = costStatisticsDto.getDates();
        String[] split = dates.replaceAll("\\[", "").replaceAll("]", "").replaceAll("\"", "").split(",");
        costStatisticsDto.setDates(null);
        Map<String, Object> map = new HashMap<>();
//        map.put("head", PrintChina.printChina(CostStatisticsDto.class));
        Map<String, Integer> map1 = new HashMap<>();
        if (map1.get("look") == 1) costStatisticsDto.setCreateUser(map1.get("userId"));
        // èŽ·å–å½“å‰äººæ‰€åœ¨å®žéªŒå®¤
        Integer userId = 1;
        String departLimsId = userMapper.selectById(userId).getDepartLimsId();
        String laboratory = "";
        if (StringUtils.isNotBlank(departLimsId)) {
            String[] split1 = departLimsId.split(",");
            for (String s : split1) {
                if (StringUtils.isNotBlank(s) && (!Arrays.asList("1", "22").contains(s))) {
                    laboratory = insOrderMapper.getDepartment(Integer.parseInt(s));
                }
            }
        }
        LocalDate today = LocalDate.parse(split[1]);
        LocalTime end = LocalTime.of(23, 59, 59);
        IPage<CostStatisticsDto> dtoIPage = insOrderMapper.selectCostStatistics(page, QueryWrappers.queryWrappers(costStatisticsDto), split[0], today.atTime(end).toString(), laboratory);
        List<CostStatisticsDto> collect = dtoIPage.getRecords().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());
        dtoIPage.setRecords(collect);
        map.put("body", dtoIPage);
        return map;
    }
    @Override
    public Map<String, Object> costStatistics2(CostStatisticsDto costStatisticsDto) {
        Map<String, Object> map = new HashMap<>();
        String dates = costStatisticsDto.getDates();
        String[] split = dates.replaceAll("\\[", "").replaceAll("]", "").replaceAll("\"", "").split(",");
        costStatisticsDto.setDates(null);
        // èŽ·å–å½“å‰äººæ‰€åœ¨å®žéªŒå®¤
        Integer userId = 1;
        String departLimsId = userMapper.selectById(userId).getDepartLimsId();
        String laboratory = "";
        if (StringUtils.isNotBlank(departLimsId)) {
            String[] split1 = departLimsId.split(",");
            for (String s : split1) {
                if (StringUtils.isNotBlank(s) && (!Arrays.asList("1", "22").contains(s))) {
                    laboratory = insOrderMapper.getDepartment(Integer.parseInt(s));
                }
            }
        }
        LocalDate today = LocalDate.parse(split[1]);
        LocalTime end = LocalTime.of(23, 59, 59);
        List<CostStatisticsDto> costStatisticsDtos = insOrderMapper.selectCostStatistics2(QueryWrappers.queryWrappers(costStatisticsDto), split[0], today.atTime(end).toString(), laboratory);
//        double totalPrice = costStatisticsDtos.stream()
//                .filter(dto -> dto.getPrice() != null) // è¿‡æ»¤æŽ‰ä»·æ ¼ä¸º null çš„对象
//                .mapToDouble(value -> value.getPrice().doubleValue() * value.getNum())
//                .sum();
        BigDecimal total = BigDecimal.ZERO;
        for (CostStatisticsDto dto : costStatisticsDtos) {
            if (Objects.isNull(dto.getPrice()) || dto.getPrice().compareTo(BigDecimal.ZERO) == 0) {
                dto.setPrice(new BigDecimal(0));
            }
            total = total.add(dto.getPrice());
        }
        map.put("total", total);
        return map;
    }
    @Override
    public Map<String, Object> selectSampleDefects(Page page, String inspectionItems, String orderNumber) {
        List<SampleDefectsFatherVo> sampleDefectsFatherVos = insOrderMapper.selectSampleDefects(page, inspectionItems, orderNumber);
        Map<String, Object> map = new HashMap<>();
        map.put("records", sampleDefectsFatherVos);
        Long aLong = insOrderMapper.getCount(inspectionItems, orderNumber);
        map.put("total", aLong);
        return map;
    }
    @Override
    public int updateStatus(Integer id) {
        return insOrderMapper.updateStatus(id);
    }
    //标签打印
    @Override
    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
    public List<SampleProductDto3> labelPrinting(String ids) {
        List<Integer> list = Arrays.stream(ids.split(",")).map(Integer::parseInt).collect(Collectors.toList());
        List<SampleProductDto3> sampleProductDtos = insSampleMapper.selectSampleProductListByOrderId3(list);
        Set<String> processedCodes = new HashSet<>();
        //默认只打印第一个:光纤、光纤带、钢绞线、光纤熔接
        List<SampleProductDto3> sampleProductDto3s = sampleProductDtos.stream().filter(sampleProductDto3 -> {
            if (!"光纤".equals(sampleProductDto3.getIoSampleType()) &&
                    !"光纤带".equals(sampleProductDto3.getIoSampleType()) &&
                    !"钢绞线".equals(sampleProductDto3.getIoSampleType()) &&
                    sampleProductDto3.getInsProduct().stream().noneMatch(i -> StringUtils.equals("光纤接头损耗", i.getInspectionItem()))
            ) {
                return true;
            }
            if (processedCodes.contains(sampleProductDto3.getCode())) {
                return false;
            } else {
                processedCodes.add(sampleProductDto3.getCode());
                return true;
            }
        }).collect(Collectors.toList());
        return sampleProductDto3s;
    }
    @Override
    public void export(CostStatisticsDto costStatisticsDto, HttpServletResponse response) throws IOException {
        // åˆ¤æ–­å½“前人属于电力 è¿˜æ˜¯ é€šä¿¡  è¿‡æ»¤æŽ‰ä¸º1
        List<String> dept = new ArrayList<>();
        Map<String, Integer> map1 = new HashMap<>();
        User user = userMapper.selectById(map1.get("userId"));//当前登录的人
        String departLimsId = user.getDepartLimsId();
        String laboratory = "";
        if (StringUtils.isNotBlank(departLimsId) && Objects.nonNull(departLimsId)) {
            String[] split = departLimsId.split(",");
            for (int i = 0; i < split.length; i++) {
                if (StringUtils.isNotBlank(split[i])) {
                    if (split[i].equals("1") || split[i].equals("22")) {
                        continue;
                    }
                    laboratory = insOrderMapper.getDepartment(Integer.parseInt(split[i]));
                    dept.add(insOrderMapper.getDepartment(Integer.parseInt(split[i])));
                }
            }
        }
        //查询导出的费用统计数据
        String dates = costStatisticsDto.getDates();
        String[] split = dates.replaceAll("\\[", "").replaceAll("]", "").replaceAll("\"", "").split(",");
        costStatisticsDto.setDates(null);
        LocalDate today = LocalDate.parse(split[1]);
        LocalTime end = LocalTime.of(23, 59, 59);
        List<CostStatisticsDto> costStatisticsDtos = insOrderMapper.selectCostStatistics2(QueryWrappers.queryWrappers(costStatisticsDto), split[0], today.atTime(end).toString(), laboratory);
        costStatisticsDtos = costStatisticsDtos.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 =
                costStatisticsDtos.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();
            List<CostStatisticsDto> costStatisticsDtos1 = new ArrayList<>();
            for (Map.Entry<String, List<CostStatisticsDto>> companyDataEntry : groupByCompany.entrySet()) {
                String sheetName = companyDataEntry.getKey();
                List<CostStatisticsDto> dataList = companyDataEntry.getValue();
                // æ ¹æ®è¯¥å•子的实验室 æ¥åˆ¤æ–­æ˜¯å¦å±žäºŽå½“前登录人的部门
                for (CostStatisticsDto costStatisticsDto1 : dataList) {
                    if (StringUtils.isNotBlank(costStatisticsDto1.getLaboratory()) && Objects.nonNull(costStatisticsDto1.getLaboratory())) {
                        if (dept.contains(costStatisticsDto1.getLaboratory())) {
                            costStatisticsDtos1.add(costStatisticsDto1);
                        }
                    }
                }
                WriteSheet mainSheet = EasyExcel.writerSheet(sheetName)
                        .head(CostStatisticsDto.class)
                        .registerWriteHandler(new SimpleColumnWidthStyleStrategy(25))
                        .build();
                excelWriter.write(costStatisticsDtos1, mainSheet);
                costStatisticsDtos1.clear();
            }
            // å…³é—­æµ
            excelWriter.finish();
        } catch (IOException e) {
            throw new RuntimeException("导出失败");
        }
    }
    public static boolean containsOnlyDigits(String str) {
        String regex = "\\d+"; // åŒ¹é…ä¸€ä¸ªæˆ–多个数字
        return Pattern.matches(regex, str);
    }
    @Override
    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
    public Boolean hasSendUrgentOrder() {
        Integer userId = 1;
        //查询当前客户的紧急额度
        Map<String, Object> quotaMap = baseMapper.selectCurrentCompanyUrgentQuota(userId);
        if (quotaMap == null) {
            return false;
        }
        //查询当天客户已创建的紧急订单
        long count = baseMapper.selectCount(Wrappers.<InsOrder>lambdaQuery()
                .eq(InsOrder::getCompany, quotaMap.get("company"))
                .eq(InsOrder::getType, 2)
                .gt(InsOrder::getCreateTime, LocalDateTime.of(LocalDate.now(), LocalTime.MIN))
                .lt(InsOrder::getCreateTime, LocalDateTime.of(LocalDate.now(), LocalTime.MAX)));
        int quota = Integer.parseInt(quotaMap.get("quota").toString());
        return quota > count;
    }
}
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderTemplateServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,70 @@
package com.ruoyi.inspect.service.impl;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ruoyi.inspect.mapper.InsOrderTemplateMapper;
import com.ruoyi.inspect.pojo.InsOrderTemplate;
import com.ruoyi.inspect.service.InsOrderTemplateService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @author Administrator
 * @description é’ˆå¯¹è¡¨ã€ins_order_template】的数据库操作Service实现
 * @createDate 2024-03-18 14:14:54
 */
@Service
@AllArgsConstructor
public class InsOrderTemplateServiceImpl extends ServiceImpl<InsOrderTemplateMapper, InsOrderTemplate>
        implements InsOrderTemplateService {
    private InsOrderTemplateMapper insOrderTemplateMapper;
    @Override
    public int addInsOrderTemplate(InsOrderTemplate insOrderTemplate) {
        return insOrderTemplateMapper.insert(insOrderTemplate);
    }
    @Override
    public List<InsOrderTemplate> selectInsOrderTemplate(String company) {
        if (ObjectUtils.isEmpty(company) || company.equals("")) {
            return insOrderTemplateMapper.selectList(Wrappers.<InsOrderTemplate>lambdaQuery()
                    .select(InsOrderTemplate.class, info -> !info.getColumn().equals("thing")));
        } else {
            //根据委托单位进行筛选
            return insOrderTemplateMapper.selectList(Wrappers.<InsOrderTemplate>lambdaQuery()
                    .like(InsOrderTemplate::getThing,"\"company\":\""+ company+"\"")
                    .select(InsOrderTemplate.class, info -> !info.getColumn().equals("thing")));
        }
    }
    @Override
    public Map<String,Object> selectInsOrderTemplateById(Integer id) {
        Map<String,Object> map = new HashMap<>();
        String thing = insOrderTemplateMapper.selectById(id).getThing();
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            map = objectMapper.readValue(thing, Map.class);
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
        return map;
    }
    @Override
    public int delInsOrderTemplate(Integer id) {
        return insOrderTemplateMapper.deleteById(id);
    }
}
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsProductServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,719 @@
package com.ruoyi.inspect.service.impl;
import cn.hutool.core.util.NumberUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.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.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.dto.InsProductDto;
import com.ruoyi.inspect.mapper.InsOrderMapper;
import com.ruoyi.inspect.mapper.InsOrderStateMapper;
import com.ruoyi.inspect.mapper.InsProductMapper;
import com.ruoyi.inspect.mapper.InsSampleMapper;
import com.ruoyi.inspect.pojo.InsOrder;
import com.ruoyi.inspect.pojo.InsOrderState;
import com.ruoyi.inspect.pojo.InsProduct;
import com.ruoyi.inspect.pojo.InsSample;
import com.ruoyi.inspect.service.InsProductService;
import lombok.AllArgsConstructor;
import org.apache.logging.log4j.util.Strings;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@Service
@AllArgsConstructor
public class InsProductServiceImpl extends ServiceImpl<InsProductMapper, InsProduct>
        implements InsProductService {
    private InsProductMapper insProductMapper;
    private InsOrderMapper insOrderMapper;
    private InsOrderStateMapper insOrderStateMapper;
    private InsSampleMapper insSampleMapper;
    @Override
    public int selectOrderManDay(Integer orderId) {
        return insProductMapper.selectOrderManDay(orderId);
    }
    @Override
    public int updateInspected(Integer id, String ids) {
        InsOrder insOrder = new InsOrder();
        insOrder.setId(id);
        insOrder.setIsRevocation(1);//需要审核
        insOrder.setRevocationInsProductIds(ids);
        return insOrderMapper.updateById(insOrder);
    }
    @Override
    public boolean write(InsProductDto insProductDto) {
//        List<InsProduct> insProducts = baseMapper.selectBatchIds(insProductDto.getIds());
//        for (InsProduct insProduct : insProducts) {
//            insProduct.setTemperature(insProductDto.getTemperature());
//            insProduct.setHumidity(insProductDto.getHumidity());
//        }
        List<Integer> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery()
                .eq(InsSample::getInsOrderId, insProductDto.getInsOrderId())
                .select(InsSample::getId))
                .stream()
                .map(InsSample::getId)
                .collect(Collectors.toList());
//        Integer insSampleId = baseMapper.selectById(insProductDto.getIds().get(0)).getInsSampleId();
        return baseMapper.update(null, new LambdaUpdateWrapper<InsProduct>().in(InsProduct::getInsSampleId, insSamples)
                .set(Strings.isNotBlank(insProductDto.getTemperature()),InsProduct::getTemperature, insProductDto.getTemperature())
                .set(Strings.isNotBlank(insProductDto.getHumidity()),InsProduct::getHumidity, insProductDto.getHumidity()))>0;
    }
    //查询待检项目
    @Override
    public Map<String, Object> selectNoProducts(Page page, InsProduct insProduct, Integer orderId, String ids) {
        Map<String, Object> map = new HashMap<>();
//        map.put("head", PrintChina.printChina(InsProduct.class));
        IPage<InsProduct> insProductIPage = baseMapper.selectNoProducts(page, orderId);
        if (ObjectUtils.isNotEmpty(ids)) {
            List<Integer> collect = Arrays.asList(ids.split(",")).stream()
                    .map(Integer::parseInt)
                    .collect(Collectors.toList());
            List<InsProduct> products = insProductIPage.getRecords().stream().filter(record -> collect.contains(record.getId())).collect(Collectors.toList());
            insProductIPage.setRecords(products);
        }
        map.put("body", insProductIPage);
        return map;
    }
    // æŸ¥è¯¢æ’¤é”€é¡¹ç›®
    public List<List<Integer>> selectRevocation(Integer orderId) {
        // æŸ¥è¯¢æ’¤é”€çŠ¶æ€çš„æ ·å“ ä»¥åŠ æ£€éªŒé¡¹
        String revocationInsProductIds = insOrderMapper.selectById(orderId).getRevocationInsProductIds();
        List<Integer> productIds = new ArrayList<>();
        List<Integer> sampleIds = new ArrayList<>();
        // å¦‚果是新的数据 ä¼šå­˜åœ¨sample的id ä»¥åŠproduct的id ä»¥@分隔
        if(StringUtils.isNotEmpty(revocationInsProductIds)) {
            if(revocationInsProductIds.contains("@")) {
                List<List<Integer>> collect = Arrays.stream(revocationInsProductIds.split("@")).map(item -> {
                    List<Integer> list = JSONArray.parseArray(item, Integer.class);
                    return list;
                }).collect(Collectors.toList());
                sampleIds =  collect.get(0);
                productIds = collect.get(1);
            }else {
                // ä»¥å‰çš„æ•°æ®åˆ™æ˜¯productId,以 ,分隔
                productIds = Arrays.stream(revocationInsProductIds.split(",")).map(Integer::parseInt).collect(Collectors.toList());
            }
        }
        return Arrays.asList(sampleIds,productIds);
    }
    @Override
    public List<Map<String,Object>> selectSampleByOrderId(Integer orderId) {
        List<List<Integer>> collect = selectRevocation(orderId);
        List<Integer> sampleIds = collect.get(0);
        List<Integer> productIds = collect.get(1);
        List<Map<String,Object>> list = new ArrayList<>();
        List<InsSample> insSamples = insSampleMapper.selectList(new LambdaQueryWrapper<InsSample>()
                .eq(InsSample::getInsOrderId, orderId)
                .notIn(CollectionUtils.isNotEmpty(sampleIds), InsSample::getId,sampleIds));
        for(InsSample insSample : insSamples) {
            List<InsProduct> productList = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
                    .eq(InsProduct::getInsSampleId, insSample.getId())
                    .eq(InsProduct::getState, 1)
                    .notIn(CollectionUtils.isNotEmpty(productIds), InsProduct::getId,productIds));
            if(CollectionUtils.isNotEmpty(productList)) {
                HashMap<String, Object> map = new HashMap<>();
                map.put("sampleCode", insSample.getSampleCode()); // æ ·å“ç¼–号
                map.put("sampleId", insSample.getId()); // å‰ç«¯éœ€è¦
                map.put("id", insSample.getId());
                map.put("hasChildren", true); // æ˜¯å¦æœ‰å­é¡¹
                list.add(map);
            }
        }
        return list;
    }
    @Override
    public List<Map<String,Object>> selectProductsBySampleId(Integer sampleId,Integer orderId) {
        List<List<Integer>> collect1 = selectRevocation(orderId);
        List<Integer> sampleIds = collect1.get(0);
        List<Integer> productIds = collect1.get(1);
        List<Map<String, Object>> list = new ArrayList<>();
        if(!sampleIds.contains(sampleId)) {
            InsSample insSample = insSampleMapper.selectById(sampleId);
            List<InsProduct> productList = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
                    .eq(InsProduct::getInsSampleId, insSample.getId())
                    .eq(InsProduct::getState,1)
                    .notIn(CollectionUtils.isNotEmpty(productIds), InsProduct::getId,productIds));
            for (InsProduct insProduct : productList) {
                // åŒºåˆ†æ¸©åº¦å¾ªçޝ å’Œ æ™®é€šé¡¹ç›®
                if(Objects.isNull(insProduct.getSpecialItemParentId()) || !NumberUtil.isInteger(insProduct.getInspectionItem())) {
                    Map<String, Object> map = new HashMap<>();
                    // å¦‚果是温度循环就还得在多嵌套几层
                    if(insProduct.getInspectionItem().equals("温度循环")) {
                        map.put("sampleCode", insSample.getSampleCode()); // æ ·å“ç¼–号
                        map.put("inspectionItem",insProduct.getInspectionItem()); // æ£€éªŒé¡¹ç›®
                        map.put("sampleId", insSample.getId()); // æ ·å“id
                        map.put("hasChildren",true);
                        // æ¸©åº¦å¾ªçŽ¯ç‰¹æ®Šæ ‡è¯†
                        map.put("temperature",true);
                        map.put("id",insProduct.getId());
                    }else {
                        map.put("sampleId", insSample.getId()); // æ ·å“id
                        map.put("sampleCode", insSample.getSampleCode()); // æ ·å“ç¼–号
                        map.put("inspectionItem",insProduct.getInspectionItem()); // æ£€éªŒé¡¹ç›®
                        map.put("inspectionItemSubclass",insProduct.getInspectionItemSubclass()); // æ£€éªŒå­é¡¹
                        map.put("sampleType",insProduct.getSampleType()); // æ ·å“åˆ†ç±»
                        map.put("sample",insProduct.getSample()); // æ ·å“
                        map.put("model",insProduct.getModel()); // åž‹å·
                        map.put("sonLaboratory",insProduct.getSonLaboratory()); // å­å®žéªŒå®¤
                        map.put("tell",insProduct.getTell()); // è¦æ±‚值
                        map.put("id",insProduct.getId());
                    }
                    list.add(map);
                }
            }
        }
        return list;
    }
    @Override
    public List<Map<String, Object>> selectTemperatureByProductId(Integer productId) {
        List<Map<String, Object>> list = new ArrayList<>();
        List<InsProduct> productList = null;
         // å·²ç»åˆ°æ’¤é”€é¡µé¢çš„就不在查出来
        InsProduct insProduct = insProductMapper.selectById(productId);
        InsSample insSample = insSampleMapper.selectById(insProduct.getInsSampleId());
        InsOrder insOrder = insOrderMapper.selectById(insSample.getInsOrderId());
        List<List<Integer>> lists = selectRevocation(insOrder.getId());
        List<Integer> productIds = lists.get(1);
        productList = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
                .eq(InsProduct::getState, 1)
                .eq(InsProduct::getSpecialItemParentId, productId)
                .notIn(CollectionUtils.isNotEmpty(productIds),InsProduct::getId,productIds));
        if(CollectionUtils.isNotEmpty(productList)) {
            Map<String, List<InsProduct>> collect = productList.stream().collect(Collectors.groupingBy(InsProduct::getInspectionItem));
            // æ‹¿åˆ°å¾ªçŽ¯æ¬¡æ•°
            Iterator<Map.Entry<String, List<InsProduct>>> iterator = collect.entrySet().iterator();
            while (iterator.hasNext()) {
                Map.Entry<String, List<InsProduct>> next = iterator.next();
                Map<String, Object> map = new HashMap<>();
                map.put("hasChildren",true);
                // æ¸©åº¦å¾ªçŽ¯ç‰¹æ®Šæ ‡è¯† å¾ªçŽ¯æ¬¡æ•°
                map.put("temperatureNumber",true);
                map.put("sampleId", next.getValue().get(0).getInsSampleId()); // æ ·å“id
                map.put("inspectionItem",next.getKey() + " (循环次数)"); // æ£€éªŒé¡¹ç›®
                map.put("inspectionItemTwo",next.getKey()); // æ–¹ä¾¿æŸ¥çœ‹å…·ä½“次数 ï¼ˆä¼ å€¼éœ€è¦ï¼‰
                map.put("parentId",productId); // çˆ¶id
                map.put("ids",next.getValue().stream().map(InsProduct::getId).collect(Collectors.toList()));
                map.put("sampleCode", next.getValue().get(0).getSampleCode()); // æ ·å“ç¼–号
                map.put("id",productId + Integer.parseInt(next.getKey()));
                list.add(map);
            }
        }
        return list;
    }
    @Override
    public List<Map<String, Object>> selectTemperatureNumberByProductId(Integer parentId, String inspectionItem) {
        List<Map<String, Object>> list = new ArrayList<>();
        // å·²ç»åˆ°æ’¤é”€é¡µé¢çš„就不在查出来
        InsProduct ip = insProductMapper.selectById(parentId);
        InsSample insSample = insSampleMapper.selectById(ip.getInsSampleId());
        InsOrder insOrder = insOrderMapper.selectById(insSample.getInsOrderId());
        List<List<Integer>> lists = selectRevocation(insOrder.getId());
        List<Integer> sampleIds = lists.get(0);
        List<Integer> productIds = lists.get(1);
        List<InsProduct> productList = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
                .eq(InsProduct::getState, 1)
                .eq(InsProduct::getSpecialItemParentId, parentId)
                .eq(InsProduct::getInspectionItem, inspectionItem)
                .notIn(CollectionUtils.isNotEmpty(productIds),InsProduct::getId,productIds));
        // æ ¹æ®æ£€éªŒå­é¡¹å¾—到温度点
        Map<String, List<InsProduct>> collect = productList.stream().collect(Collectors.groupingBy(InsProduct::getInspectionItemSubclass));
        Iterator<Map.Entry<String, List<InsProduct>>> iterator = collect.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, List<InsProduct>> next = iterator.next();
            InsProduct insProduct = next.getValue().get(0);
            Map<String, Object> map = new HashMap<>();
            map.put("sampleId", next.getValue().get(0).getInsSampleId()); // æ ·å“id
            map.put("inspectionItem",""); // æ£€éªŒé¡¹ç›®
            map.put("inspectionItemSubclass",next.getKey()); // æ£€éªŒå­é¡¹
            map.put("sampleType",insProduct.getSampleType()); // æ ·å“åˆ†ç±»
            map.put("sample",insProduct.getSample()); // æ ·å“
            map.put("model",insProduct.getModel()); // åž‹å·
            map.put("sonLaboratory",insProduct.getSonLaboratory()); // å­å®žéªŒå®¤
            map.put("sampleCode", next.getValue().get(0).getSampleCode()); // æ ·å“ç¼–号
            map.put("tell",insProduct.getTell()); // è¦æ±‚值
            map.put("number",inspectionItem); // å¾ªçŽ¯æ¬¡æ•°
            map.put("parentId",parentId); // çˆ¶id
            map.put("ids",next.getValue().stream().map(InsProduct::getId).collect(Collectors.toList())); // è¯¥æ¸©åº¦ç‚¹æ‰€æœ‰çš„id
            map.put("id",Math.random());
            list.add(map);
        }
        return list;
    }
    @Override
    public void revoke(Map<String, Object> data) {
        List<List<Integer>> lists = selectRevocation(Integer.parseInt(data.get("orderId").toString()));
        // æ›´æ–°order的状态 ä»¥åŠæ·»åŠ éœ€è¦æ’¤é”€çš„é¡¹ç›®
        Integer orderId = Integer.parseInt(data.get("orderId").toString());
        InsOrder insOrder = insOrderMapper.selectById(orderId);
        insOrder.setIsRevocation(1);
        List<Integer> sampleIds = new ArrayList<>();
        List<Integer> productIds = new ArrayList<>();
        if(data.containsKey("sampleIds")) {
            sampleIds = JSONArray.parseArray(data.get("sampleIds").toString(), Integer.class);
        }
        if(data.containsKey("productIds")) {
            productIds = JSONArray.parseArray(data.get("productIds").toString(), Integer.class);
        }
        sampleIds.addAll(lists.get(0));
        productIds.addAll(lists.get(1));
        String SampleJsonString = JSON.toJSONString(sampleIds);
        String ProductJsonString = JSON.toJSONString(productIds);
        insOrder.setRevocationInsProductIds(SampleJsonString + "@" + ProductJsonString);
        insOrderMapper.updateById(insOrder);
    }
    @Override
    public List<Map<String, Object>> revokeReviewSample(Integer orderId) {
        List<Map<String,Object>> list = new ArrayList<>();
        List<List<Integer>> lists = selectRevocation(orderId);
        List<Integer> sampleIds = lists.get(0);
        List<Integer> productIds = lists.get(1);
        List<Integer> newSampleIds = new ArrayList<>();
        // æ ¹æ®é¡¹ç›®æ¥èŽ·å–æ ·å“
        if(CollectionUtils.isNotEmpty(productIds)) {
            newSampleIds = insProductMapper.selectBatchIds(productIds).stream().map(InsProduct::getInsSampleId).distinct().collect(Collectors.toList());
        }
        // æŸ¥è¯¢éœ€è¦æ’¤é”€çš„æ ·å“
        if(CollectionUtils.isNotEmpty(newSampleIds)) {
            List<InsSample> insSamples = insSampleMapper.selectList(new LambdaQueryWrapper<InsSample>()
                    .in(InsSample::getId, newSampleIds));
            for (InsSample insSample : insSamples) {
                List<InsProduct> productList = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
                        .eq(InsProduct::getInsSampleId, insSample.getId())
                        .eq(InsProduct::getState, 1)
                        .in(CollectionUtils.isNotEmpty(productIds), InsProduct::getId, productIds));
                if(CollectionUtils.isNotEmpty(productList)) {
                    HashMap<String, Object> map = new HashMap<>();
                    map.put("sampleCode", insSample.getSampleCode()); // æ ·å“ç¼–号
                    map.put("sampleId", insSample.getId()); // å‰ç«¯éœ€è¦
                    map.put("id", insSample.getId());
                    map.put("hasChildren", true); // æ˜¯å¦æœ‰å­é¡¹
                    list.add(map);
                }
            }
        }
        if(CollectionUtils.isNotEmpty(sampleIds)) {
            List<InsSample> insSamples2 = insSampleMapper.selectList(new LambdaQueryWrapper<InsSample>()
                    .in(InsSample::getId, sampleIds));
            for (InsSample insSample : insSamples2) {
                List<InsProduct> productList = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
                        .eq(InsProduct::getInsSampleId, insSample.getId())
                        .eq(InsProduct::getState, 1));
                if(CollectionUtils.isNotEmpty(productList)) {
                    HashMap<String, Object> map = new HashMap<>();
                    map.put("sampleCode", insSample.getSampleCode()); // æ ·å“ç¼–号
                    map.put("sampleId", insSample.getId()); // å‰ç«¯éœ€è¦
                    map.put("id", insSample.getId());
                    map.put("hasChildren", true); // æ˜¯å¦æœ‰å­é¡¹
                    list.add(map);
                }
            }
        }
        list = list.stream().sorted(Comparator.comparing(map -> Integer.parseInt(map.get("id")+""))).collect(Collectors.toList());
        return list;
    }
    @Override
    public List<Map<String, Object>> revokeReviewProduct(Integer orderId, Integer sampleId) {
        String sampleCode = insSampleMapper.selectById(sampleId).getSampleCode();
        List<Map<String,Object>> list = new ArrayList<>();
        List<List<Integer>> lists = selectRevocation(orderId);
        List<Integer> sampleIds = lists.get(0);
        List<Integer> productIds = lists.get(1);
        List<InsProduct> productList = new ArrayList<>();
        // å¦‚果是一整个样品撤销
        if(sampleIds.contains(sampleId)) {
            // è¿‡æ»¤å‡ºæ¸©åº¦å¾ªçŽ¯æ¬¡æ•°çš„æ•°æ®
             productList = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
                    .eq(InsProduct::getInsSampleId, sampleId).eq(InsProduct::getState,1));
             productList = productList.stream().filter(item -> !NumberUtil.isNumber(item.getInspectionItem()) && Objects.isNull(item.getSpecialItemParentId())).collect(Collectors.toList());
        }else {
            // å¦‚果是单个项目撤销
            productList = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
                    .eq(InsProduct::getInsSampleId, sampleId)
                    .eq(InsProduct::getState,1)
                    .in(InsProduct::getId, productIds));
            // åˆ¤æ–­æ˜¯å¦æ˜¯æ¸©åº¦å¾ªçŽ¯ä¸‹é¢çš„æ¸©åº¦ç‚¹
            // 1.过滤出不是温度点的数据
            List<InsProduct> collect = productList.stream().filter(item -> Objects.isNull(item.getSpecialItemParentId())
                    || !NumberUtil.isInteger(item.getInspectionItem())).collect(Collectors.toList());
            if(productList.size() != collect.size()) {
                // 2.返回温度循环数据即可
                List<InsProduct> collect1 = productList.stream().filter(item -> Objects.nonNull(item.getSpecialItemParentId())
                        && NumberUtil.isInteger(item.getInspectionItem())).collect(Collectors.toList());
                InsProduct insProduct = insProductMapper.selectById(collect1.get(0).getSpecialItemParentId());
                collect.add(insProduct);
                productList =collect.stream().distinct().collect(Collectors.toList());
            }
        }
        for (InsProduct insProduct : productList) {
            Map<String, Object> map = new HashMap<>();
            if(insProduct.getInspectionItem().equals("温度循环")) {
                map.put("sampleCode", sampleCode); // æ ·å“ç¼–号
                map.put("inspectionItem",insProduct.getInspectionItem()); // æ£€éªŒé¡¹ç›®
                map.put("sampleId", sampleId); // æ ·å“id
                map.put("hasChildren",true);
                // æ¸©åº¦å¾ªçŽ¯ç‰¹æ®Šæ ‡è¯†
                map.put("temperature",true);
                map.put("id",insProduct.getId());
            }else {
                map.put("sampleId", sampleId); // æ ·å“id
                map.put("sampleCode", sampleCode); // æ ·å“ç¼–号
                map.put("inspectionItem",insProduct.getInspectionItem()); // æ£€éªŒé¡¹ç›®
                map.put("inspectionItemSubclass",insProduct.getInspectionItemSubclass()); // æ£€éªŒå­é¡¹
                map.put("sampleType",insProduct.getSampleType()); // æ ·å“åˆ†ç±»
                map.put("sample",insProduct.getSample()); // æ ·å“
                map.put("model",insProduct.getModel()); // åž‹å·
                map.put("sonLaboratory",insProduct.getSonLaboratory()); // å­å®žéªŒå®¤
                map.put("tell",insProduct.getTell()); // è¦æ±‚值
                map.put("id",insProduct.getId());
            }
            list.add(map);
        }
        return list;
    }
    @Override
    public List<Map<String, Object>> revokeReviewTemperatureByProductId(Integer productId) {
        // æ ¹æ®æ¸©åº¦å¾ªçޝid æŸ¥æ‰¾order ä»¥åŠ sample
        List<Map<String, Object>> list = new ArrayList<>();
        InsProduct insProduct = insProductMapper.selectById(productId);
        InsSample insSample = insSampleMapper.selectById(insProduct.getInsSampleId());
        InsOrder insOrder = insOrderMapper.selectById(insSample.getInsOrderId());
        List<List<Integer>> lists = selectRevocation(insOrder.getId());
        List<Integer> sampleIds = lists.get(0);
        List<Integer> productIds = lists.get(1);
        // å¦‚果当前样品是整个撤销
        if(sampleIds.contains(insSample.getId())) {
            list = selectTemperatureByProductId(productId);
        }else {
            // æ’¤é”€çš„æ˜¯æ£€éªŒé¡¹
            List<InsProduct> productList = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
                    .eq(InsProduct::getState, 1)
                    .eq(InsProduct::getSpecialItemParentId,productId)
                    .in(InsProduct::getId, productIds));
            Map<String, List<InsProduct>> collect = productList.stream().collect(Collectors.groupingBy(InsProduct::getInspectionItem));
            // æ‹¿åˆ°å¾ªçŽ¯æ¬¡æ•°
            Iterator<Map.Entry<String, List<InsProduct>>> iterator = collect.entrySet().iterator();
            while (iterator.hasNext()) {
                Map.Entry<String, List<InsProduct>> next = iterator.next();
                Map<String, Object> map = new HashMap<>();
                map.put("hasChildren",true);
                // æ¸©åº¦å¾ªçŽ¯ç‰¹æ®Šæ ‡è¯† å¾ªçŽ¯æ¬¡æ•°
                map.put("temperatureNumber",true);
                map.put("sampleId", next.getValue().get(0).getInsSampleId()); // æ ·å“id
                map.put("inspectionItem",next.getKey() + " (循环次数)"); // æ£€éªŒé¡¹ç›®
                map.put("inspectionItemTwo",next.getKey()); // æ–¹ä¾¿æŸ¥çœ‹å…·ä½“次数 ï¼ˆä¼ å€¼éœ€è¦ï¼‰
                map.put("parentId",productId); // çˆ¶id
                map.put("ids",next.getValue().stream().map(InsProduct::getId).collect(Collectors.toList()));
                map.put("sampleCode", next.getValue().get(0).getSampleCode()); // æ ·å“ç¼–号
                map.put("id",productId + Integer.parseInt(next.getKey()));
                list.add(map);
            }
        }
        return list;
    }
    @Override
    public List<Map<String, Object>> revokeReviewConsistentByProductId(Integer parentId, String inspectionItem) {
        List<Map<String, Object>> list = new ArrayList<>();
        InsProduct insProduct = insProductMapper.selectById(parentId);
        InsSample insSample = insSampleMapper.selectById(insProduct.getInsSampleId());
        InsOrder insOrder = insOrderMapper.selectById(insSample.getInsOrderId());
        List<List<Integer>> lists = selectRevocation(insOrder.getId());
        List<Integer> sampleIds = lists.get(0);
        List<Integer> productIds = lists.get(1);
        // å¦‚果是当前样品撤销 æŸ¥è¯¢æ‰€æœ‰
        if(sampleIds.contains(insSample.getId())) {
             list = selectTemperatureNumberByProductId(parentId, inspectionItem);
        }else {
            // æŸ¥è¯¢æ’¤é”€çš„æ¸©åº¦ç‚¹
            List<InsProduct> productList = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
                    .eq(InsProduct::getState, 1)
                    .eq(InsProduct::getSpecialItemParentId, parentId)
                    .eq(InsProduct::getInspectionItem, inspectionItem)
                    .in(InsProduct::getId, productIds));
            // æ ¹æ®æ£€éªŒå­é¡¹å¾—到温度点
            Map<String, List<InsProduct>> collect = productList.stream().collect(Collectors.groupingBy(InsProduct::getInspectionItemSubclass));
            Iterator<Map.Entry<String, List<InsProduct>>> iterator = collect.entrySet().iterator();
            while (iterator.hasNext()) {
                Map.Entry<String, List<InsProduct>> next = iterator.next();
                InsProduct ip = next.getValue().get(0);
                Map<String, Object> map = new HashMap<>();
                map.put("sampleId", next.getValue().get(0).getInsSampleId()); // æ ·å“id
                map.put("inspectionItem",""); // æ£€éªŒé¡¹ç›®
                map.put("inspectionItemParent",inspectionItem + " (循环次数)"); // æ£€éªŒçˆ¶é¡¹ç›®
                map.put("inspectionItemSubclass",next.getKey()); // æ£€éªŒå­é¡¹
                map.put("sampleType",ip.getSampleType()); // æ ·å“åˆ†ç±»
                map.put("sample",ip.getSample()); // æ ·å“
                map.put("model",ip.getModel()); // åž‹å·
                map.put("sonLaboratory",ip.getSonLaboratory()); // å­å®žéªŒå®¤
                map.put("sampleCode", next.getValue().get(0).getSampleCode()); // æ ·å“ç¼–号
                map.put("tell",ip.getTell()); // è¦æ±‚值
                map.put("parentId",parentId); // çˆ¶id
                map.put("ids",next.getValue().stream().map(InsProduct::getId).collect(Collectors.toList())); // è¯¥æ¸©åº¦ç‚¹æ‰€æœ‰çš„id
                map.put("id",Math.random());
                list.add(map);
            }
        }
        return list;
    }
    @Override
    public void revocationPassed(Integer id) {
        List<List<Integer>> lists = selectRevocation(id);
        List<Integer> sampleIds = lists.get(0);
        List<Integer> productIds = lists.get(1);
        if(CollectionUtils.isNotEmpty(sampleIds)) {
            insProductMapper.update(null,new LambdaUpdateWrapper<InsProduct>()
                    .set(InsProduct::getState,0)
                    .in(InsProduct::getInsSampleId,sampleIds));
        }
        if(CollectionUtils.isNotEmpty(productIds)) {
            insProductMapper.update(null,new LambdaUpdateWrapper<InsProduct>()
                    .set(InsProduct::getState,0)
                    .in(InsProduct::getId,productIds));
            // æ‹¿åˆ°çš„productId
            List<InsProduct> productList = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
                    .in(InsProduct::getId, productIds));
            if(CollectionUtils.isNotEmpty(productList)) {
                // å¾—判断一下 æ˜¯å¦å«æœ‰æ¸©åº¦å¾ªçŽ¯é¡¹ç›®
                List<InsProduct> collect2 = productList.stream().filter(item -> Objects.nonNull(item.getSpecialItemParentId())
                        && NumberUtil.isInteger(item.getInspectionItem())).collect(Collectors.toList());
                if(CollectionUtils.isNotEmpty(collect2)) {
                    // å°±æ˜¯æœ‰æ¸©åº¦å¾ªçŽ¯çš„
                    Map<Integer, List<InsProduct>> collect = productList.stream().collect(Collectors.groupingBy(InsProduct::getSpecialItemParentId));
                    // èŽ·å–æ¸©åº¦å¾ªçŽ¯çš„id
                    for(Map.Entry<Integer,List<InsProduct>> entry1 : collect.entrySet()) {
                        String number = "";
                        Integer parentId = entry1.getKey();
                        // æŸ¥è¯¢è¯¥æ¸©åº¦å¾ªçޝ å¾—到循环次数
                        List<InsProduct> productList2 = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
                                .eq(InsProduct::getSpecialItemParentId, parentId)
                                .eq(InsProduct::getState, 1));
                        if(CollectionUtils.isNotEmpty(productList2)) {
                            Map<String, List<InsProduct>> group = productList2.stream().collect(Collectors.groupingBy(InsProduct::getInspectionItem));
                            number = group.size() + "";
                        }
                        // æ’¤é”€çš„æ¸©åº¦å¾ªçŽ¯å„ä¸ªæ¸©åº¦ç‚¹
                        List<InsProduct> productList1 = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
                                .eq(InsProduct::getState, 0)
                                .eq(InsProduct::getSpecialItemParentId, parentId)
                                .in(InsProduct::getId, productIds));
                        // æ ¹æ®æ¸©åº¦ç‚¹è¿›è¡Œåˆ†ç»„
                        Map<String, List<InsProduct>> collect1 = productList1.stream().collect(Collectors.groupingBy(InsProduct::getInspectionItemSubclass));
                        Iterator<Map.Entry<String, List<InsProduct>>> iterator = collect1.entrySet().iterator();
                        while (iterator.hasNext()) {
                            Map.Entry<String, List<InsProduct>> entry = iterator.next();
                            String key = entry.getKey();
                            // æ‹¿åˆ°æ¸©åº¦å¾ªçŽ¯çš„ask
                            InsProduct insProduct = insProductMapper.selectById(parentId);
                            String ask = insProduct.getAsk();
                            String newAsk = "";
                            String[] split = ask.split(";");
                            // åªæœ‰å¾ªçŽ¯çš„æ¬¡æ•° éƒ½ä¸åŒ…含该温度点才需要更改
                            List<InsProduct> productList3 = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>()
                                    .eq(InsProduct::getSpecialItemParentId, parentId)
                                    .eq(InsProduct::getInspectionItemSubclass, key)
                                    .eq(InsProduct::getState, 1));
                            if(CollectionUtils.isEmpty(productList3)) {
                                if(key.equals("20℃")) {
                                    newAsk = Arrays.stream(split).filter(item -> (!item.contains(key) || item.contains("20℃(常温)")) && !NumberUtil.isInteger(item.trim())).collect(Collectors.joining(";"))  + ";" + number;
                                }else {
                                    newAsk = Arrays.stream(split).filter(item -> !item.contains(key) && !NumberUtil.isInteger(item)).collect(Collectors.joining(";"))  + ";" + number;
                                }
                            }else {
                                newAsk = Arrays.stream(split).filter(item -> !NumberUtil.isInteger(item)).collect(Collectors.joining(";")) + ";" + number;
                            }
                            insProductMapper.update(null, new LambdaUpdateWrapper<InsProduct>()
                                    .set(InsProduct::getAsk, newAsk)
                                    .eq(InsProduct::getId, parentId));
                        }
                    }
                }
            }
        }
        insOrderMapper.update(null,new LambdaUpdateWrapper<InsOrder>().set(InsOrder::getIsRevocation,0).eq(InsOrder::getId,id));
        // å¦‚果检验项目全部撤销则需要撤销检验单
        InsOrder insOrder = insOrderMapper.selectById(id);
        insOrder.setRevocationTime(LocalDateTime.now());
        //查询该委托单下发的试验室
        List<InsOrderState> insOrderStates = insOrderStateMapper.selectList(Wrappers.<InsOrderState>lambdaQuery().eq(InsOrderState::getInsOrderId, id));
        List<InsSample> insSamples = insSampleMapper.selectList(new LambdaQueryWrapper<InsSample>().eq(InsSample::getInsOrderId, id));
        List<Integer> collect = insSamples.stream().map(InsSample::getId).collect(Collectors.toList());
        List<InsProduct> insProducts = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>().eq(InsProduct::getState, 1).in(InsProduct::getInsSampleId, collect));
        if(CollectionUtils.isEmpty(insProducts)) {
            insOrder.setState(3);
            insOrderMapper.updateById(insOrder);
        }else{
            //遍历各试验室,如果试验室下的项目为空,则删除该试验室下的订单
            insOrderStates.forEach(insOrderState -> {
                //过滤试验室下的项目
                long productCount = insProducts.stream().filter(insProduct -> insProduct.getSonLaboratory().equals(insOrderState.getLaboratory())).count();
                if(productCount == 0){
                    insOrderStateMapper.delete(new LambdaUpdateWrapper<InsOrderState>().eq(InsOrderState::getId, insOrderState.getId()));
                }
            });
        }
    }
    @Override
    public void revocationCancel(Integer orderId) {
        InsOrder insOrder = insOrderMapper.selectById(orderId);
        insOrder.setIsRevocation(0);
        insOrder.setRevocationInsProductIds("");
        insOrderMapper.updateById(insOrder);
    }
//    public List<Map<String,Object>> selectProductsByOrderId(Integer orderId) {
//        List<Map<String,Object>> list = new ArrayList<>();
//        List<InsSample> insSamples = insSampleMapper.selectList(new LambdaQueryWrapper<InsSample>().eq(InsSample::getInsOrderId, orderId));
//        if(CollectionUtils.isNotEmpty(insSamples)) {
//            for (InsSample insSample : insSamples) {
//                List<Map<String, Object>> lists = new ArrayList<>();
//                List<InsProduct> insProducts = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>().eq(InsProduct::getInsSampleId, insSample.getId()));
//                Map<String, Object> map = new HashMap<>();
//                map.put("label", insSample.getSampleCode());
//                map.put("value", insSample.getId());
//                if(CollectionUtils.isNotEmpty(insProducts)) {
//                    Map<String, List<InsProduct>> collect = insProducts.stream().collect(Collectors.groupingBy(InsProduct::getInspectionItem));
//                    Iterator<Map.Entry<String, List<InsProduct>>> iterator = collect.entrySet().iterator();
//                    while (iterator.hasNext()) {
//                        Map.Entry<String, List<InsProduct>> entry = iterator.next();
//                        lists.add(getInspectionItem(entry.getKey(), entry.getValue()));
//                    }
//                    map.put("children", lists);
//                }
//                list.add(map);
//            }
//        }
//        return list;
//    }
    public Map<String, Object> getInspectionItem(String inspectionItem, List<InsProduct> insProducts) {
        List<Integer> ids = new ArrayList<>();
        List<Map<String, Object>> list = new ArrayList<>();
        Map<String, Object> map = new HashMap<>();
        map.put("label", inspectionItem);
        for (InsProduct insProduct : insProducts) {
            ids.add(insProduct.getId());
            list.add(getProductsSubclass(insProduct));
        }
        map.put("value", ids);
        map.put("children", list);
        return map;
    }
    public Map<String, Object> getProductsSubclass(InsProduct insProduct) {
        Map<String, Object> map = new HashMap<>();
        if(StringUtils.isNotEmpty(insProduct.getInspectionItemSubclass())) {
            map.put("label",insProduct.getInspectionItemSubclass());
        }else {
            map.put("label",insProduct.getInspectionItem());
        }
        map.put("value",insProduct.getId());
        return map;
    }
    //审核待检撤销
    @Override
    public void checkUpdate(Integer orderId, Integer state) {
        InsOrder insOrder = insOrderMapper.selectById(orderId);
        if (state == 1) {
            List<String> list = new ArrayList<>();
            try {
                list = Arrays.asList(insOrder.getRevocationInsProductIds().split(","));
            } catch (Exception e) {
                throw new ErrorException("还没有选择应该要撤销的检验项目");
            }
            List<Integer> ids = list.stream()
                    .map(Integer::parseInt)
                    .collect(Collectors.toList());
            List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId));
            List<Integer> collect = insSamples.stream().map(InsSample::getId).collect(Collectors.toList());
            List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getState, 1).in(InsProduct::getInsSampleId, collect));
            if (insProducts.stream().map(InsProduct::getId).collect(Collectors.toList()).equals(ids)) {
                //如果该检验单下的所有项目全部都撤销,那么这个单子也需要撤销
                insOrder.setState(3);
            } else {
                List<InsProduct> products = insProductMapper.selectBatchIds(ids);
                //首先根据选择的项目id进行撤销项目
                updateBatchById(products.stream().map(insProduct -> {
                    insProduct.setState(0);
                    return insProduct;
                }).collect(Collectors.toList()));
            }
            //insProductMapper.updateInspected(id);
        }
        //不通过
        insOrder.setIsRevocation(0);
        insOrderMapper.updateById(insOrder);
    }
    @Override
    public int write2(Integer id, String elasticityModulus) {
        InsProduct insProduct = new InsProduct();
        insProduct.setId(id);
        insProduct.setElasticityModulus(elasticityModulus);
        insProductMapper.updateById(insProduct);
        return 0;
    }
}
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/WarehouseCellServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.ruoyi.inspect.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.inspect.mapper.WarehouseCellMapper;
import com.ruoyi.inspect.pojo.WarehouseCell;
import com.ruoyi.inspect.service.WarehouseCellService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
/**
* @author Administrator
* @description é’ˆå¯¹è¡¨ã€ins_sample_user(样品负责人记录)】的数据库操作Service实现
* @createDate 2024-03-14 17:12:02
*/
@Service
@AllArgsConstructor
public class WarehouseCellServiceImpl extends ServiceImpl<WarehouseCellMapper, WarehouseCell>
    implements WarehouseCellService {
}
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/WarehouseServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,190 @@
package com.ruoyi.inspect.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.dto.HistoryDto;
import com.ruoyi.inspect.dto.WarehouseCellAndSampleDto;
import com.ruoyi.inspect.dto.WarehouseDto;
import com.ruoyi.inspect.mapper.*;
import com.ruoyi.inspect.pojo.*;
import com.ruoyi.inspect.service.WarehouseCellService;
import com.ruoyi.inspect.service.WarehouseService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author Administrator
* @description é’ˆå¯¹è¡¨ã€ins_sample_user(样品负责人记录)】的数据库操作Service实现
* @createDate 2024-03-14 17:12:02
*/
@Service
@AllArgsConstructor
public class WarehouseServiceImpl extends ServiceImpl<WarehouseMapper, Warehouse>
    implements WarehouseService {
    private WarehouseMapper warehouseMapper;
    private WarehouseShelfMapper warehouseShelfMapper;
    private WarehouseCellMapper warehouseCellMapper;
    private WarehouseHistoryMapper warehouseHistoryMapper;
    private WarehouseCellService warehouseCellService;
    private InsSampleMapper insSampleMapper;
    private InsProductMapper insProductMapper;
    @Override
    public int addWarehouse(String name) {
        Warehouse warehouse = new Warehouse();
        warehouse.setName(name);
        return warehouseMapper.insert(warehouse);
    }
    @Override
    public List<WarehouseDto> selectWarehouse() {
        return warehouseMapper.selectWarehouseList();
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int addShelf(WarehouseShelf warehouseShelf) {
        warehouseShelfMapper.insert(warehouseShelf);
        List<WarehouseCell> cells = new ArrayList<>();
        for (int i = 1; i < warehouseShelf.getRow() + 1; i++) {
            for (int a = 1; a < warehouseShelf.getCol() + 1; a++) {
                WarehouseCell cell = new WarehouseCell();
                cell.setRow(i);
                cell.setCol(a);
                cell.setState(1);
                cell.setShelfId(warehouseShelf.getId());
                cells.add(cell);
            }
        }
        warehouseCellService.saveBatch(cells);
        return 1;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int delWarehouse(Integer id) {
        warehouseShelfMapper.delete(Wrappers.<WarehouseShelf>lambdaUpdate().eq(WarehouseShelf::getWarehouseId, id));
        return warehouseMapper.deleteById(id);
    }
    @Override
    public int upWarehouse(Warehouse warehouse) {
        return warehouseMapper.updateById(warehouse);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int delShelf(Integer id) {
        warehouseCellMapper.update(null ,Wrappers.<WarehouseCell>lambdaUpdate().eq(WarehouseCell::getShelfId, id).set(WarehouseCell::getState, 0));
        return warehouseShelfMapper.deleteById(id);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int upShelf(WarehouseShelf warehouseShelf) {
        warehouseCellMapper.update(null, Wrappers.<WarehouseCell>lambdaUpdate()
                .eq(WarehouseCell::getShelfId, warehouseShelf.getWarehouseId())
                .gt(WarehouseCell::getRow, warehouseShelf.getRow())
                .gt(WarehouseCell::getCol, warehouseShelf.getCol())
                .set(WarehouseCell::getState, 0));
        warehouseShelfMapper.updateById(warehouseShelf);
        return 0;
    }
    @Override
    public List<WarehouseCellAndSampleDto> getWarehouse(Integer shelfId) {
        return warehouseCellMapper.getWarehouse(shelfId);
    }
    @Override
    public int inWarehouse(String trees, String sampleCode) {
        String[] tree = trees.split("-");
        if(tree.length < 4){
            throw new ErrorException("库位选择错误");
        }
        List<InsSample> samples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getSampleCode, sampleCode).select(InsSample::getId,InsSample::getCellId));
        if(samples.size()!=1){
            throw new ErrorException("样品编号输入有误");
        }
        if(samples.get(0).getCellId()!=null){
            throw new ErrorException("样品 " + sampleCode + " æœªå‡ºåº“");
        }
        WarehouseCell cell = warehouseCellMapper.selectOne(Wrappers.<WarehouseCell>lambdaQuery().eq(WarehouseCell::getShelfId, tree[1]).eq(WarehouseCell::getRow, tree[2]).eq(WarehouseCell::getCol, tree[3]).eq(WarehouseCell::getState, 1).select(WarehouseCell::getId,WarehouseCell::getRow,WarehouseCell::getCol));
        WarehouseShelf shelf = warehouseShelfMapper.selectById(tree[1]);
        Warehouse warehouse = warehouseMapper.selectById(tree[0]);
        WarehouseHistory history = new WarehouseHistory();
        history.setCellId(cell.getId());
        history.setState(1);
        history.setInsSampleId(samples.get(0).getId());
        history.setWarehouseCode(warehouse.getName()+"-"+shelf.getName()+"-"+cell.getRow()+"-"+cell.getCol());
        samples.get(0).setCellId(cell.getId());
        insSampleMapper.updateById(samples.get(0));
        return warehouseHistoryMapper.insert(history);
    }
    @Override
    public int outWarehouse(String sampleCode) {
        List<InsSample> samples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getSampleCode, sampleCode).select(InsSample::getId,InsSample::getCellId));
        if(samples.size()!=1){
            throw new ErrorException("样品编号输入有误");
        }
        if(samples.get(0).getCellId()==null){
            throw new ErrorException("样品 " + sampleCode + " æœªå…¥åº“");
        }
        WarehouseHistory history = new WarehouseHistory();
        history.setState(2);
        history.setInsSampleId(samples.get(0).getId());
        history.setCellId(samples.get(0).getCellId());
        history.setWarehouseCode(warehouseHistoryMapper.selectOne(Wrappers.<WarehouseHistory>lambdaQuery().eq(WarehouseHistory::getInsSampleId, samples.get(0).getId()).select(WarehouseHistory::getWarehouseCode).orderByDesc(WarehouseHistory::getId).last("limit 1")).getWarehouseCode());
        insSampleMapper.update(null, Wrappers.<InsSample>lambdaUpdate().eq(InsSample::getId, samples.get(0).getId()).set(InsSample::getCellId, null));
        return warehouseHistoryMapper.insert(history);
    }
    @Override
    public Map<String, Object> getSampleRecord(Integer id) {
        InsSample insSample = insSampleMapper.selectById(id);
        List<HistoryDto> histories = warehouseHistoryMapper.getHistoryListBySampleId(id);
        Map<String, Object> map = new HashMap<>();
        Map<String, String> sampleHistory = new HashMap<>();
        WarehouseHistory history = histories.get(histories.size() - 1);
        if(history.getState() == 1){
            sampleHistory.put("date", history.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
            sampleHistory.put("user", warehouseHistoryMapper.getUserNameById(history.getCreateUser()));
            sampleHistory.put("code", history.getWarehouseCode());
        }
        map.put("sampleHistory", sampleHistory);
        map.put("insSample", insSample);
        map.put("histories", histories);
        map.put("products", insProductMapper.getProductAndResult(id));
        return map;
    }
    @Override
    public int searchSampleId(String sampleCode) {
        List<InsSample> samples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getSampleCode, sampleCode).select(InsSample::getId));
        if(samples.size()!=1){
            throw new ErrorException("样品编号输入有误");
        }
        return samples.get(0).getId();
    }
}
inspect-server/src/main/java/com/ruoyi/inspect/util/SheetWriteHandlerUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
package com.ruoyi.inspect.util;
import com.alibaba.excel.write.handler.SheetWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
public class SheetWriteHandlerUtil implements SheetWriteHandler {
    private final String title;
    private final Integer header;
    public SheetWriteHandlerUtil(String title, Integer header) {
        this.title = title;
        this.header = header;
    }
    @Override
    public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
    }
    @Override
    public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
        Workbook workbook = writeWorkbookHolder.getWorkbook();
        Sheet sheet = workbook.getSheetAt(0);
        //设置标题
        Row row1 = sheet.createRow(0);
        row1.setHeight((short) 700);
        Cell cell = row1.createCell(0);
        //设置单元格内容
        cell.setCellValue(title);
        CellStyle cellStyle = workbook.createCellStyle();
        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        cellStyle.setAlignment(HorizontalAlignment.CENTER);
        Font font = workbook.createFont();
        font.setBold(true);
        font.setFontHeight((short) 450);
        cellStyle.setFont(font);
        cell.setCellStyle(cellStyle);
        // ç¬¬ä¸€è¡Œå¤§æ ‡é¢˜å ä½è®¾ç½®
        sheet.addMergedRegionUnsafe(new CellRangeAddress(0, 0, 0, header-1));
    }
}
inspect-server/src/main/java/com/ruoyi/inspect/vo/DeviceVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
package com.ruoyi.inspect.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class DeviceVO implements Serializable {
    /**
     * è®¾å¤‡åç§°
     */
    private String deviceName;
    /**
     * è§„格型号
     */
    private String specificationModel;
    /**
     * è®¾å¤‡ç®¡ç†ç¼–号
     */
    private String managementNumber;
    /**
     * è®¾å¤‡æœ‰æ•ˆæ ¡å‡†æ—¥æœŸ
     */
    private String latestTraceability;
}
inspect-server/src/main/java/com/ruoyi/inspect/vo/ExportInsProductVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,158 @@
package com.ruoyi.inspect.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
@Data
public class ExportInsProductVO implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * ä¸‹å•æ—¶é—´
     */
    @ApiModelProperty("下单时间")
    private LocalDate createTime;
    /**
     *客户名称
     */
    @ApiModelProperty("客户名称")
    private String customName;
    /**
     *委托单号
     */
    @ApiModelProperty("委托单号")
    private String entrustCode;
    /**
     *样品编号
     */
    @ApiModelProperty("样品编号")
    private String sampleCode;
    /**
     *样品大类
     */
    @ApiModelProperty("样品大类")
    private String sampleType;
    /**
     *样品名称
     */
    @ApiModelProperty("样品名称")
    private String sample;
    /**
     *型号
     */
    @ApiModelProperty("型号")
    private String model;
    /**
     *单位
     */
    @ApiModelProperty("单位")
    private String unit;
    /**
     *检验项
     */
    @ApiModelProperty("检验项")
    private String inspectionItem;
    /**
     *检验子项
     */
    @ApiModelProperty("检验子项")
    private String inspectionItemSubclass;
    /**
     *子试验室
     */
    @ApiModelProperty("子试验室")
    private String sonLaboratory;
    /**
     *标准要求
     */
    @ApiModelProperty("标准要求")
    private String tell;
    /**
     *检验结果
     */
    @ApiModelProperty("检验结果")
    private String lastValue;
    /**
     *结果判定
     */
    @ApiModelProperty("结果判定")
    private String insResult;
    /**
     *光纤带编号
     */
    @ApiModelProperty("光纤带编号")
    private String code;
    /**
     *检验过程值
     */
    @ApiModelProperty("检验过程值")
    private String insValue;
    /**
     *检验时间
     */
    @ApiModelProperty("检验时间")
    private LocalDateTime checkTime;
    /**
     *检验人
     */
    @ApiModelProperty("检验人")
    private String checkName;
    /**
     *套管色标
     */
    @ApiModelProperty("套管色标")
    private String bushColor;
    /**
     * å…‰çº¤è‰²æ ‡
     */
    @ApiModelProperty("光纤色标")
    private String color;
    /**
     *特殊项父id
     */
    @ApiModelProperty("特殊项父id")
    private Integer specialItemParentId;
    /**
     * æ¸©åº¦å¾ªçޝ æ£€éªŒé¡¹åˆ†ç±»
     */
    @ApiModelProperty("温度循环 æ£€éªŒé¡¹åˆ†ç±»")
    private String inspectionItemClass;
    /**
     * è®¡ç®—值
     */
    @ApiModelProperty("计算值")
    private String comValue;
    @TableField(exist = false)
    private LocalDate sendTime;
}
inspect-server/src/main/java/com/ruoyi/inspect/vo/InsFibersVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.ruoyi.inspect.vo;
import com.ruoyi.inspect.pojo.InsFibers;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
public class InsFibersVO extends InsFibers implements Serializable {
    /**
     * å¥—管色标
     */
    @ApiModelProperty(value = "套管色标")
    private String bushingColor;
    /**
     * æ˜¯å¦å­˜åœ¨æ£€éªŒé¡¹ç›®
     */
    @ApiModelProperty(value = "是否存在检验项目")
    private Boolean isExistProduct;
}
inspect-server/src/main/java/com/ruoyi/inspect/vo/InsOrderPlanTaskSwitchVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
package com.ruoyi.inspect.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class InsOrderPlanTaskSwitchVo {
    private String id;
    @ApiModelProperty(name = "委托编号")
    private String entrustCode;
    @ApiModelProperty(name = "检验对象")
    private String sampleType;
    @ApiModelProperty(name = "紧急程度")
    private String type;
    @ApiModelProperty(name = "状态")
    private String insState;
    @ApiModelProperty(name = "约定时间")
    private String appointed;
    @ApiModelProperty(name = "下发时间")
    private String sendTime;
    private Integer userId;
    private String sonLaboratory;
    private String laboratory;
    private Integer orderUserId;
    private Integer verifyUser;
}
inspect-server/src/main/java/com/ruoyi/inspect/vo/InsOrderPlanVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,56 @@
package com.ruoyi.inspect.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class InsOrderPlanVO {
    private String id;
    @ApiModelProperty(name = "委托编号")
    private String entrustCode;
    @ApiModelProperty(name = "委托单位")
    private String company;
    @ApiModelProperty(name = "样品名称")
    private String sample;
    @ApiModelProperty(name = "样品型号")
    private String model;
    @ApiModelProperty(name = "紧急程度")
    private String type;
    @ApiModelProperty(name = "状态")
    private String insState;
    @ApiModelProperty(name = "检验人")
    private String userName;
    @ApiModelProperty(name = "复核人")
    private String checkName;
    private Integer userId;
    @ApiModelProperty(name = "检验开始时间")
    private String insTime;
    @ApiModelProperty(name = "约定时间")
    private String appointed;
    @ApiModelProperty(name = "下发时间")
    private String sendTime;
    @ApiModelProperty(name = "理由")
    private String verifyTell;
    private String sonLaboratory;
    private Integer orderUserId;
    private Integer verifyUser;
}
inspect-server/src/main/java/com/ruoyi/inspect/vo/InsProductFiberVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
package com.ruoyi.inspect.vo;
import com.ruoyi.inspect.pojo.InsProduct;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
public class InsProductFiberVO extends InsProduct implements Serializable {
    /**
     * å¥—管色标
     */
    @ApiModelProperty("套管色标")
    private String bushColor;
    /**
     * å…‰çº¤è‰²æ ‡
     */
    @ApiModelProperty("光纤色标")
    private String color;
    /**
     * å…‰çº¤å¸¦ç¼–号
     */
    @ApiModelProperty("光纤带编号")
    private String code;
    /**
     * æ£€éªŒè¿‡ç¨‹å€¼
     */
    @ApiModelProperty("检验过程值")
    private String insValue;
}
inspect-server/src/main/java/com/ruoyi/inspect/vo/InsProductVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
package com.ruoyi.inspect.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
public class InsProductVO implements Serializable {
    @ApiModelProperty(value = "检验项目id")
    private Integer id;
    @ApiModelProperty(value = "样品id")
    private Integer sampleId;
    @ApiModelProperty(value = "样品编号")
    private String sampleCode;
    @ApiModelProperty(value = "样品状态")
    private Integer state;
    @ApiModelProperty(value = "样品型号")
    private String model;
    @ApiModelProperty(value = "检验项")
    private String testItem;
    @ApiModelProperty(value = "检验子项")
    private String testItemChildren;
    @ApiModelProperty(value = "试验方法")
    private String testMethod;
    @ApiModelProperty(value = "标准要求")
    private String requirement;
    @ApiModelProperty(value = "检验人")
    private String inspectName;
}
inspect-server/src/main/java/com/ruoyi/inspect/vo/ProductVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.ruoyi.inspect.vo;
import com.ruoyi.inspect.pojo.InsProduct;
import lombok.Data;
@Data
public class ProductVo  {
    //管色标
    private String bushColor;
    //光纤色标
    private String color;
    //光纤带编号
    private String code;
    //检验项目
    private InsProduct insProduct;
}
inspect-server/src/main/java/com/ruoyi/inspect/vo/SampleDefectsChildrenVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.ruoyi.inspect.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SampleDefectsChildrenVo {
    private String entrust_code;//委托编码
    private String inspection_item;//检验项
    private String name;//检验人
    private LocalDateTime create_time;//检验日期
}
inspect-server/src/main/java/com/ruoyi/inspect/vo/SampleDefectsFatherVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.ruoyi.inspect.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SampleDefectsFatherVo {
    private Integer id;//样品id
    private String sample;//样品名称
    private List<SampleDefectsChildrenVo> children;//子类
}
inspect-server/src/main/java/com/ruoyi/inspect/vo/SampleVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
package com.ruoyi.inspect.vo;
import com.ruoyi.inspect.pojo.InsSample;
import lombok.Data;
@Data
public class SampleVo extends InsSample {
    //试验方法
    private  String methodName;
}
inspect-server/src/main/java/com/ruoyi/inspect/vo/StandardProductVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.ruoyi.inspect.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * æŸ¥è¯¢æ ‡å‡†åº“配置工时返回对象
 */
@Data
public class StandardProductVO implements Serializable {
    @ApiModelProperty(value = "工时(H)")
    private String manHour;
    @ApiModelProperty(value = "工时分组")
    private String manHourGroup;
    @ApiModelProperty(value = "区间设置")
    private String section;
}
inspect-server/src/main/java/com/ruoyi/inspect/vo/UnInsProductsVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
package com.ruoyi.inspect.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ColumnWidth(25)
public class UnInsProductsVO {
    @ExcelProperty("日期")
    @ApiModelProperty(value = "日期")
    private String sendTime;
    @ExcelProperty("委托单号")
    @ApiModelProperty(value = "委托单号")
    private String entrustCode;
    @ExcelProperty("样品名称")
    @ApiModelProperty(value = "样品名称")
    private String sample;
    @ExcelProperty("样品编号")
    @ApiModelProperty(value = "样品编号")
    private String sampleCode;
    @ExcelProperty("待检项目")
    @ApiModelProperty(value = "待检项目")
    private String unInsProduct;
}
inspect-server/src/main/resources/mapper/InsBushingMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,109 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.inspect.mapper.InsBushingMapper">
    <!-- é€šç”¨æŸ¥è¯¢æ˜ å°„结果 -->
    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.InsBushing">
        <id column="id" property="id" />
        <result column="color" property="color" />
        <result column="stand_num" property="standNum" />
        <result column="test_num" property="testNum" />
        <result column="ins_sample_id" property="insSampleId" />
        <result column="create_user" property="createUser" />
        <result column="create_time" property="createTime" />
        <result column="update_user" property="updateUser" />
        <result column="update_time" property="updateTime" />
    </resultMap>
    <select id="selectFibersByBushingId" resultMap="FibersDto">
        select
            fs.id, fs.code, fs.model, fs.standard, fs.num, fs.ins_bushing_id,
            p.id pid, p.inspection_item, p.inspection_item_subclass, p.factory, p.laboratory, p.sample_type, p.sample, p.model pmodel, p.son_laboratory, p.unit, p.price, p.man_hour, p.man_hour_group, p.inspection_item_type, p.inspection_value_type, p.device_group, p.checkout_number, p.section, p.value_type, p.method, p.man_day, p.bsm, p.ask, p.tell, p.`last_value`, p.ins_result, p.state, p.ins_sample_id, p.template_id, p.dic, p.method_s,
            ipr.ins_value,ipr.com_value,ipr.equip_value,ipr.equip_name
        from ins_fibers fs
        left join ins_product p on p.ins_fibers_id = fs.id
        left join ins_product_result ipr on p.id = ipr.ins_product_id
        where fs.ins_bushing_id = #{bushingId}
    </select>
    <select id="selectFiberByBushingId" resultMap="FiberDto">
        select f.id, f.bush_color, f.color, f.model, f.standard, f.ins_bushing_id,
            p.id pid, p.inspection_item, p.inspection_item_subclass, p.factory, p.laboratory, p.sample_type, p.sample, p.model pmodel, p.son_laboratory, p.unit, p.price, p.man_hour, p.man_hour_group, p.inspection_item_type, p.inspection_value_type, p.device_group, p.checkout_number, p.section, p.value_type, p.method, p.man_day, p.bsm, p.ask, p.tell, p.`last_value`, p.ins_result, p.state, p.ins_sample_id, p.template_id, p.dic, p.method_s,
               ipr.ins_value,ipr.com_value,ipr.equip_value,ipr.equip_name
        from ins_fiber f
        left join ins_product p on p.ins_fiber_id = f.id
        left join ins_product_result ipr on p.id = ipr.ins_product_id
        where f.ins_bushing_id = #{bushingId}
    </select>
    <select id="selectFiberByFibersId" resultMap="FiberDto">
        select f.id, f.bush_color, f.color, f.model, f.standard, f.ins_bushing_id,
               p.id pid, p.inspection_item, p.inspection_item_subclass, p.factory, p.laboratory, p.sample_type, p.sample, p.model pmodel, p.son_laboratory, p.unit, p.price, p.man_hour, p.man_hour_group, p.inspection_item_type, p.inspection_value_type, p.device_group, p.checkout_number, p.section, p.value_type, p.method, p.man_day, p.bsm, p.ask, p.tell, p.`last_value`, p.ins_result, p.state, p.ins_sample_id, p.template_id, p.dic, p.method_s,
               ipr.ins_value,ipr.com_value,ipr.equip_value,ipr.equip_name
        from ins_fiber f
        left join ins_product p on p.ins_fiber_id = f.id
        left join ins_product_result ipr on p.id = ipr.ins_product_id
        where f.ins_fibers_id = #{fibersId}
    </select>
    <resultMap id="FibersDto" type="com.ruoyi.inspect.dto.FibersDto">
        <id property="id" column="id"/>
        <result property="code" column="code"/>
        <result property="insBushingId" column="ins_bushing_id"/>
        <result property="model" column="model"/>
        <result property="standard" column="standard"/>
        <result property="num" column="num"/>
        <collection property="productList" resultMap="product"/>
    </resultMap>
    <resultMap id="FiberDto" type="com.ruoyi.inspect.dto.FiberDto">
        <id property="id" column="id"/>
        <result property="bushColor" column="bush_color"/>
        <result property="insBushingId" column="ins_bushing_id"/>
        <result property="model" column="model"/>
        <result property="standard" column="standard"/>
        <result property="color" column="color"/>
        <collection property="productList" resultMap="product"/>
    </resultMap>
    <resultMap id="product" type="com.ruoyi.inspect.pojo.InsProduct">
        <id property="id" column="pid" jdbcType="INTEGER"/>
        <result property="inspectionItem" column="inspection_item" jdbcType="VARCHAR"/>
        <result property="inspectionItemSubclass" column="inspection_item_subclass" jdbcType="VARCHAR"/>
        <result property="factory" column="factory" jdbcType="VARCHAR"/>
        <result property="laboratory" column="laboratory" jdbcType="VARCHAR"/>
        <result property="sampleType" column="sample_type" jdbcType="VARCHAR"/>
        <result property="model" column="pmodel" jdbcType="VARCHAR"/>
        <result property="sonLaboratory" column="son_laboratory" jdbcType="VARCHAR"/>
        <result property="unit" column="unit" jdbcType="VARCHAR"/>
        <result property="price" column="price" jdbcType="DECIMAL"/>
        <result property="manHour" column="man_hour" jdbcType="DOUBLE"/>
        <result property="manHourGroup" column="man_hour_group" jdbcType="VARCHAR"/>
        <result property="inspectionItemType" column="inspection_item_type" jdbcType="VARCHAR"/>
        <result property="inspectionValueType" column="inspection_value_type" jdbcType="VARCHAR"/>
        <result property="deviceGroup" column="device_group" jdbcType="VARCHAR"/>
        <result property="checkoutNumber" column="checkout_number" jdbcType="INTEGER"/>
        <result property="section" column="section" jdbcType="VARCHAR"/>
        <result property="valueType" column="value_type" jdbcType="VARCHAR"/>
        <result property="method" column="method" jdbcType="VARCHAR"/>
        <result property="manDay" column="man_day" jdbcType="INTEGER"/>
        <result property="bsm" column="bsm" jdbcType="VARCHAR"/>
        <result property="ask" column="ask" jdbcType="VARCHAR"/>
        <result property="lastValue" column="last_value" jdbcType="VARCHAR"/>
        <result property="insResult" column="ins_result" jdbcType="INTEGER"/>
        <result property="state" column="state" jdbcType="INTEGER"/>
        <result property="insSampleId" column="ins_sample_id" jdbcType="INTEGER"/>
        <result property="templateId" column="template_id" jdbcType="INTEGER"/>
        <result property="methodS" column="method_s"/>
        <result property="tell" column="tell"/>
        <result property="dic" column="dic"/>
        <collection property="insProductResult" resultMap="insProductResult"/>
    </resultMap>
    <resultMap id="insProductResult" type="com.ruoyi.inspect.pojo.InsProductResult">
        <result property="insValue" column="ins_value" jdbcType="VARCHAR"/>
        <result property="comValue" column="com_value" jdbcType="VARCHAR"/>
        <result property="equipValue" column="equip_value" jdbcType="VARCHAR"/>
        <result property="equipName" column="equip_name" jdbcType="VARBINARY"/>
    </resultMap>
</mapper>
inspect-server/src/main/resources/mapper/InsFiberMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.inspect.mapper.InsFiberMapper">
    <!-- é€šç”¨æŸ¥è¯¢æ˜ å°„结果 -->
    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.InsFiber">
        <id column="id" property="id" />
        <result column="bush_color" property="bushColor" />
        <result column="color" property="color" />
        <result column="model" property="model" />
        <result column="standard" property="standard" />
        <result column="create_user" property="createUser" />
        <result column="create_time" property="createTime" />
        <result column="update_user" property="updateUser" />
        <result column="update_time" property="updateTime" />
        <result column="ins_bushing_id" property="insBushingId" />
        <result column="ins_fibers_id" property="insFibersId" />
    </resultMap>
    <select id="selectInsFibersByInsFiberId" resultType="com.ruoyi.inspect.pojo.InsFibers">
    </select>
</mapper>
inspect-server/src/main/resources/mapper/InsFibersMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.inspect.mapper.InsFibersMapper">
    <!-- é€šç”¨æŸ¥è¯¢æ˜ å°„结果 -->
    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.InsFibers">
        <id column="id" property="id" />
        <result column="code" property="code" />
        <result column="model" property="model" />
        <result column="standard" property="standard" />
        <result column="num" property="num" />
<!--        <result column="ins_product_id" property="insProductId" />-->
        <result column="ins_bushing_id" property="insBushingId" />
        <result column="create_user" property="createUser" />
        <result column="create_time" property="createTime" />
        <result column="update_user" property="updateUser" />
        <result column="update_time" property="updateTime" />
    </resultMap>
</mapper>
inspect-server/src/main/resources/mapper/InsOrderFileMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.inspect.mapper.InsOrderFileMapper">
    <!-- é€šç”¨æŸ¥è¯¢æ˜ å°„结果 -->
    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.InsOrderFile">
        <id column="id" property="id"/>
        <result column="ins_order_id" property="insOrderId"/>
        <result column="type" property="type"/>
        <result column="file_url" property="fileUrl"/>
        <result column="file_name" property="fileName"/>
        <result column="create_user" property="createUser"/>
        <result column="create_time" property="createTime"/>
        <result column="update_user" property="updateUser"/>
        <result column="update_time" property="updateTime"/>
    </resultMap>
    <select id="getFileList" resultType="com.ruoyi.inspect.pojo.InsOrderFile">
        select A.*
        from (select iof.*, name
              from ins_order_file iof
                       left join user u on iof.create_user = u.id
              where iof.ins_order_id = #{insOrderId}) A
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
    </select>
</mapper>
inspect-server/src/main/resources/mapper/InsOrderMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,1247 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.inspect.mapper.InsOrderMapper">
    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.InsOrder">
        <id property="id" column="id" jdbcType="INTEGER"/>
        <result property="entrustCode" column="entrust_code" jdbcType="VARCHAR"/>
        <result property="outEntrustCode" column="out_entrust_code" jdbcType="VARCHAR"/>
        <result property="custom" column="custom" jdbcType="VARCHAR"/>
        <result property="company" column="company" jdbcType="VARCHAR"/>
        <result property="code" column="code" jdbcType="VARCHAR"/>
        <result property="type" column="type" jdbcType="INTEGER"/>
        <result property="appointed" column="appointed" jdbcType="TIMESTAMP"/>
        <result property="state" column="state" jdbcType="INTEGER"/>
        <result property="remark" column="remark" jdbcType="VARCHAR"/>
        <result property="otcCode" column="otc_code" jdbcType="VARCHAR"/>
        <result property="createUser" column="create_user" jdbcType="INTEGER"/>
        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
        <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
        <result property="revocationInsProductIds" column="revocation_ins_product_ids" />
        <result property="isRevocation" column="is_revocation" />
    </resultMap>
    <resultMap id="OrderThingDto" type="com.ruoyi.inspect.dto.OrderThingDto">
        <result property="id" column="id"/>
        <result property="company" column="company"/>
        <result property="entrustCode" column="entrust_code"/>
        <result property="sampleCode" column="sample_code"/>
        <result property="custom" column="custom"/>
        <result property="sample" column="sample"/>
        <result property="model" column="model"/>
        <result property="sampleNum" column="sample_num"/>
        <result property="remark" column="remark"/>
        <result property="insResult" column="ins_result"/>
        <result property="createTime" column="create_time"/>
        <collection property="products" resultMap="ProductThingDto"/>
    </resultMap>
    <resultMap id="ProductThingDto" type="com.ruoyi.inspect.dto.ProductThingDto">
        <result property="productId" column="id"/>
        <result property="inspectionItem" column="inspection_item"/>
        <result property="lastValue" column="last_value"/>
        <result property="insResult" column="ins_result"/>
        <collection property="productResults" resultMap="productResultDto"/>
    </resultMap>
    <resultMap id="productResultDto" type="com.ruoyi.inspect.dto.productResultDto">
        <result property="id" column="id"/>
        <result property="insValue" column="ins_value"/>
        <result property="insResult" column="ins_result"/>
        <result property="remark" column="remark"/>
    </resultMap>
    <resultMap id="selectSampleDefectsMap" type="com.ruoyi.inspect.vo.SampleDefectsFatherVo">
        <id column="id" property="id"/>
        <result column="sample" property="sample"/>
        <association property="children" resultMap="SampleDefectsChildrenMap" javaType="java.util.List"/>
    </resultMap>
    <select id="getInsOrderPlanList" resultType="map">
        SELECT
            io.id,
            io.entrust_code As entrustCode,
            isa.sample_code As sampleCode,
            ip.inspection_item As inspectionItem,
            ip.inspection_item_subclass As inspectionItemSubclass,
            ip.last_value As lastValue,
            ips.create_user As createUser,
            (SELECT `name` FROM `user` u WHERE u.id = ips.create_user) AS userName,
            io.send_time As sendTime,
            ios.ins_time As insTime,
            CASE
                when ifi.bush_color is not null then ifi.bush_color
                when ib.color is not null then ib.color
            else '-'
            END AS bushing,
            CASE
                when ifi.color is not null then ifi.color
            else '-'
            END AS fiber,
            '-' as fibers
        FROM
            ins_order io
                LEFT JOIN ins_sample isa ON io.id = isa.ins_order_id
                LEFT JOIN ins_product ip ON isa.id = ip.ins_sample_id
                LEFT JOIN ins_product_result ips ON ip.id = ips.ins_product_id
                LEFT JOIN ins_order_state ios ON ios.ins_order_id = io.id
                left join ins_fiber ifi on ip.ins_fiber_id = ifi.id
                LEFT JOIN ins_bushing ib ON ip.ins_bush_id = ib.id
        WHERE  ip.ins_result IN (0,1,3)
          AND ip.son_laboratory = #{sonLaboratory}
        AND ios.laboratory = #{sonLaboratory}
          AND ip.sample_type = #{sampleType}
        AND ip.special_item_parent_id IS NULL
        <if test="entrustCode != null and entrustCode != ''">
            AND io.entrust_code like concat('%',#{entrustCode},'%')
        </if>
        <if test="sampleCode != null and sampleCode != ''">
            AND isa.sample_code like concat('%',#{sampleCode},'%')
        </if>
        <if test="createUser != null and createUser != ''">
            AND ips.create_user = #{createUser}
        </if>
        <if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
            AND ios.ins_time between #{startTime} and #{endTime}
        </if>
    </select>
    <select id="getTabHeader" resultType="map">
        SELECT
            *
        FROM
            (
                SELECT
                    A.id,
                    laboratory,
                    sample,
                    son_laboratory AS sonLaboratory,
                    inspection_item AS inspectionItem,
                    inspection_item_subclass AS inspectionItemSubclass
                FROM
                    (
                        SELECT
                            *,
                            CASE
                                WHEN INSTR( sample, ',' ) > 0 THEN
                                    SUBSTRING_INDEX( SUBSTRING_INDEX( sample, '","', 1 ), '"', - 1 )
                                WHEN sample = '[""]' THEN
                                    NULL
                                WHEN sample = '[]' THEN
                                    NULL ELSE TRIM(
                                    BOTH '["]'
                                    FROM
                                    SUBSTRING_INDEX( REPLACE ( sample, '[["', '' ), '"]]', 1 ))
                                END AS samples
                        FROM
                            structure_item_parameter
                    ) A
                        LEFT JOIN structure_test_object sto ON samples = specimen_name
                WHERE son_laboratory = #{sonLaboratory}
                <if test="sample != null and sample != ''">
                    AND sample like concat('%',#{sample},'%')
                </if>
            )B ORDER BY id
    </select>
    <select id="selectInsOrderPage" resultType="com.ruoyi.inspect.dto.SampleOrderDto">
        select
        id,
        entrust_code,
        custom,
        company,
        code,
        type,
        appointed,
        state,
        tell,
        remark,
        otc_code,
        user_id,
        mating,
        create_user,
        create_time,
        update_user,
        update_time,
        send_time,
        ins_state,
        factory,
        laboratory,
        sample_type,
        sample,
        ins_result,
        ins_time,
        processing,
        is_leave,
        order_type,
        send,
        form_type,
        phone,
        examine_time,
        engineering,
        engineering_en,
        production,
        production_en,
        company_id,
        prepare_user,
        out_entrust_code,
        is_revocation,
        revocation_ins_product_ids,
        revocation_time,
        issuing_date,
        assign,
        inspect_id,
        report_id,
        is_ratify,
        url,
        url_s,
        temp_url_pdf,
        sample_num,
        insProgress,
        sample_code,
        sample_name,
        sample_model,
        name
        from (
        SELECT
        io.id,
        io.entrust_code,
        io.custom,
        io.company,
        io.code,
        io.type,
        io.appointed,
        io.state,
        io.tell,
        io.remark,
        io.otc_code,
        io.user_id,
        io.mating,
        io.create_user,
        io.create_time,
        io.update_user,
        io.update_time,
        io.send_time,
        io.ins_state,
        io.factory,
        io.laboratory,
        io.sample_type,
        io.sample,
        io.ins_result,
        io.ins_time,
        io.processing,
        io.is_leave,
        io.order_type,
        io.send,
        io.form_type,
        io.phone,
        io.examine_time,
        io.engineering,
        io.engineering_en,
        io.production,
        io.production_en,
        io.company_id,
        io.prepare_user,
        io.out_entrust_code,
        io.is_revocation,
        io.revocation_ins_product_ids,
        io.revocation_time,
        io.issuing_date,
        COUNT(iot.id) assign,
        isau.id as inspect_id,
        ir.id report_id,
        ir.is_ratify,
        ir.url,
        ir.url_s,
        ir.temp_url_pdf,
        total_product_counts.sample_num,
        CONCAT(ROUND(total_product_counts.approved_count / total_product_counts.total_count * 100, 2), '%') AS insProgress,
--         sample_counts.sample_num,
--         CONCAT(ROUND(approved_product_counts.approved_count / total_product_counts.total_count * 100, 2), '%') AS insProgress,
        GROUP_CONCAT(DISTINCT isa.sample_code SEPARATOR ',') AS sample_code,
        GROUP_CONCAT(DISTINCT isa.sample SEPARATOR ' ') AS sample_name,
        GROUP_CONCAT(DISTINCT isa.model SEPARATOR ' ') AS sample_model,
        u.name
        FROM
        ins_order io
        LEFT JOIN
        ins_sample isa ON io.id = isa.ins_order_id
        LEFT JOIN
        ins_sample_user isau ON isau.ins_sample_id = io.id
        LEFT JOIN
        ins_order_state iot ON iot.ins_order_id = io.id
        LEFT JOIN
        ins_report ir ON io.id = ir.ins_order_id
        LEFT JOIN
        user u ON io.create_user = u.id
        LEFT JOIN (
        SELECT ins_sample.ins_order_id,
        COUNT(DISTINCT ins_sample_id) as sample_num,
        COUNT(ins_product.id) AS total_count,
        COUNT(CASE WHEN ins_product.ins_result is not null and ins_product.ins_result !='2' THEN ins_product.ins_result END) AS approved_count
        FROM ins_product
        JOIN ins_sample ON ins_product.ins_sample_id = ins_sample.id
        WHERE ins_product.state = 1
        GROUP BY ins_sample.ins_order_id
        ) total_product_counts
        ON io.id = total_product_counts.ins_order_id
--         LEFT JOIN
--         (
--         SELECT
--         ins_order_id,
--         COUNT(*) AS sample_num
--         FROM ins_sample
--         WHERE
--         id in(select id1 from (select is2.id id1 ,ip.id from ins_sample is2 left join ins_product ip on is2.id = ip.ins_sample_id where ip.id is not null)s )
--         GROUP BY ins_order_id
--         ) sample_counts ON io.id = sample_counts.ins_order_id
--         LEFT JOIN
--         (SELECT ins_sample.ins_order_id, COUNT(*) AS total_count
--         FROM ins_product
--         JOIN ins_sample ON ins_product.ins_sample_id = ins_sample.id
--         WHERE ins_product.state = 1
--         GROUP BY ins_sample.ins_order_id) total_product_counts ON io.id = total_product_counts.ins_order_id
--         LEFT JOIN
--         (SELECT ins_sample.ins_order_id, COUNT(*) AS approved_count
--         FROM ins_product
--         JOIN ins_sample ON ins_product.ins_sample_id = ins_sample.id
--         WHERE ins_product.state = 1 AND ins_product.ins_result is not null AND ins_product.ins_result != '2'
--         GROUP BY ins_sample.ins_order_id) approved_product_counts ON io.id = approved_product_counts.ins_order_id
          <where>
              <if test="laboratory!=null and laboratory!=''">
                  AND io.laboratory=#{laboratory}
              </if>
              <if test="eqState!=null and eqState!=''">
                  AND io.state=#{eqState}
              </if>
              <if test="neState!=null and neState!=''">
                  AND io.state != #{neState}
              </if>
              <if test="startTime != '' and startTime != null and endTime != null and endTime != ''">
                  AND io.create_time between #{startTime} and #{endTime}
              </if>
          </where>
        GROUP BY io.id,type
        order by type desc,io.id desc
        ) a
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
    </select>
    <select id="exportChecked" resultType="com.ruoyi.inspect.vo.ExportInsProductVO">
        SELECT
            i.create_time,
            i.custom AS custom_name,
            i.id,
            i.entrust_code,
            isa.id ins_sample_id,
            isa.sample_code,
            isa.sample,
            isa.model,
            isa.ins_state,
            ip.id ins_product_id,
            ip.state,
            ip.unit,
            ip.sample_type,
            ip.inspection_item,
            ip.inspection_item_subclass,
            ip.son_laboratory,
            ip.inspection_item_type,
            ip.inspection_value_type,
            ip.special_item_parent_id,
            ip.tell,
            ip.`last_value`,
            case
                WHEN ip.ins_result = 0 THEN '不合格'
                WHEN ip.ins_result = 1 THEN '合格'
                WHEN ip.ins_result = 3 THEN '不判定'
            ELSE ''
            END AS ins_result,
            ipr.equip_value,
        ipr.com_value,
        ip.inspection_item_class,
            ifis.CODE,
            ipr.ins_value,
            ipr.create_time AS check_time,
            u.NAME AS check_name,
            CASE
                WHEN ifi.bush_color IS NOT NULL THEN
                    ifi.bush_color
                WHEN ib1.color IS NOT NULL THEN
                    ib1.color
                WHEN ib2.color IS NOT NULL THEN
                    ib2.color ELSE ''
                END AS bush_color,
            ifi.color
        FROM
            ins_sample isa
                LEFT JOIN ins_order i ON isa.ins_order_id = i.id
                LEFT JOIN ins_product ip ON isa.id = ip.ins_sample_id
                LEFT JOIN ins_product_result ipr ON ip.id = ipr.ins_product_id
                LEFT JOIN ins_fiber ifi ON ip.ins_fiber_id = ifi.id
                LEFT JOIN ins_fibers ifis ON ip.ins_fibers_id = ifis.id
        LEFT JOIN ins_bushing ib1 ON ip.ins_bush_id = ib1.id
        LEFT JOIN ins_bushing ib2 ON ib2.id = ifis.ins_bushing_id
                LEFT JOIN USER u ON u.id = ipr.create_user
        WHERE
            ip.state = 1     AND
            (i.state = 4 or i.state = 1)
          <if test="startTime != '' and startTime != null and endTime != null and endTime != ''">
              AND i.create_time BETWEEN #{startTime} AND #{endTime}
          </if>
        <if test="names != null and names.size > 0">
                AND   i.custom in
        <foreach collection="names" item="item" open="(" close=")" separator=",">
            #{item}
        </foreach>
            </if>
        ORDER BY
            i.create_time,
            ins_product_id ASC
    </select>
    <resultMap id="SampleDefectsChildrenMap" type="com.ruoyi.inspect.vo.SampleDefectsChildrenVo">
        <result column="entrust_code" property="entrust_code"/>
        <result column="inspection_item" property="inspection_item"/>
        <result column="name" property="name"/>
        <result column="create_time" property="create_time"/>
    </resultMap>
    <select id="selectInsOrderParameter" resultType="com.ruoyi.inspect.pojo.InsOrder">
        select *
        from (
        select
        id,
        appointed,
        user_id,
        create_user,
        otc_code,
        code,
        custom,
        update_user,
        update_time,
        type,
        entrust_code,
        company,
        remark,
        create_time,
        state
        from ins_order
        ) a
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
    </select>
    <select id="getLaboratoryCode" resultType="java.lang.String">
        select laboratory_number
        from laboratory
        where laboratory_name = #{name}
    </select>
    <select id="selectSampleAndProductByOrderId" resultType="com.ruoyi.inspect.dto.SampleProductDto2">
        select *
        from (
        select
        i.id,
        i.entrust_code,
        isa.id ins_sample_id,
        isa.sample_code,
        isa.sample,
        isa.model,
        isa.ins_state,
        ip.id ins_product_id,
        ip.state,
        ip.unit,
        ip.inspection_item,
        ip.inspection_item_subclass,
        ip.son_laboratory,
        ip.inspection_item_type,
        ip.inspection_value_type,
        ip.tell,
        ip.`last_value`,
        ip.ins_result,
        ipr.equip_value,
        ifis.code,
        ipr.ins_value,
        ipr.create_time as check_time,
        u.name as check_name,
        CASE
            when ifi.bush_color is not null then ifi.bush_color
            when ib1.color is not null then ib1.color
            when ib2.color is not null then ib2.color
            else ''
        END AS bush_color,
        ifi.color
        from ins_sample isa
        left join ins_order i on isa.ins_order_id = i.id
        left join ins_product ip on isa.id = ip.ins_sample_id
        left join ins_product_result ipr on ip.id = ipr.ins_product_id
        left join ins_fiber ifi on ip.ins_fiber_id = ifi.id
        LEFT JOIN ins_fibers ifis ON ip.ins_fibers_id = ifis.id
--         LEFT JOIN ins_bushing ib ON ip.ins_bush_id = ib.id or ib.id = ifis.ins_bushing_id
            LEFT join ins_bushing ib1 on ip.ins_bush_id = ib1.id
            LEFT JOIN ins_bushing ib2 on  ib2.id = ifis.ins_bushing_id
        LEFT JOIN user u ON u.id = ipr.update_user
        where ip.state = 1
        and i.id=#{id}
        order by case
        when ip.man_hour_group is NULL then 1
        when ip.man_hour_group = '' then 1
        else 0 end,
        CASE
        WHEN ip.man_hour_group REGEXP '^[0-9]' THEN CAST(ip.man_hour_group AS UNSIGNED) -- å¦‚果以数字开头,则按照数字大小排序
        WHEN ip.man_hour_group REGEXP '[0-9]+'
        THEN CAST(SUBSTRING(ip.man_hour_group, 2) AS UNSIGNED) END -- æå–字母后面的数字部分
        , ins_product_id asc
        ) a
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
    </select>
    <select id="selectCostStatistics" resultType="com.ruoyi.inspect.dto.CostStatisticsDto">
        select * from (
        SELECT
        A.id,
        A.entrust_code,
        A.create_time,
        A.sample,
        A.model,
        A.inspection_item,
        A.company,
        A.`name`,
        COUNT( 1 ) num,
        SUM( A.price ) price,
        SUM( A.cost ) cost
        FROM
        (
        SELECT
        i.id,
        i.laboratory,
        i.entrust_code,
        i.create_time,
        isa.sample,
        isa.sample_code,
        isa.model,
        c.price,
        c.cost,
        c.inspection_item,
        i.company,
        u.`name`,
        i.create_user,
        c.ins_sample_id
        FROM
        ins_order i
        LEFT JOIN ins_sample isa ON isa.ins_order_id = i.id
        LEFT JOIN `user` u ON u.id = i.user_id
        LEFT JOIN custom cus ON cus.id = u.company
        LEFT JOIN (
        SELECT
        SUM( b.price ) price,
        sum( b.man_hour ) cost,
        b.ins_sample_id,
        GROUP_CONCAT( b.inspection_item2 SEPARATOR ',' ) inspection_item
        FROM
        (
        SELECT
        ip.ins_sample_id,
        ip.man_hour,
        ip.man_hour_group,
        case
        WHEN LOCATE('[', spl.price)>0 THEN
        REPLACE(JSON_EXTRACT(spl.price, REPLACE(JSON_SEARCH(spl.section, 'one', ip.section), '"', '')),'"','')
        ELSE spl.price
        END AS price ,
        GROUP_CONCAT( CONCAT( ip.inspection_item, '@', ip.inspection_item_subclass ) SEPARATOR ',' ) inspection_item2
        FROM
        ins_product ip
        LEFT JOIN standard_product_list spl ON ip.laboratory = spl.laboratory
        AND ip.sample_type = spl.sample_type
        AND ip.sample = spl.sample
        AND  ip.model = spl.model
        AND ip.inspection_item = spl.inspection_item
        AND ip.inspection_item_subclass = spl.inspection_item_subclass
        AND ip.son_laboratory = spl.son_laboratory
        AND ip.standard_method_list_id = spl.standard_method_list_id
        WHERE
        ip.state = 1
          AND  ip.create_time between #{startTime} and #{endTime}
        AND ip.template_id IS NOT NULL
        GROUP BY
        ip.ins_sample_id,
        ip.man_hour_group
        ) b
        GROUP BY
        b.ins_sample_id
        ) c ON c.ins_sample_id = isa.id
        WHERE
        ( i.state = 1 OR i.state = 3 OR i.state = 4 )
        AND c.ins_sample_id IS NOT NULL
        ) A
        where 1 = 1
        <if test="laboratory != '' and laboratory != null">
           AND A.laboratory = #{laboratory}
        </if>
        GROUP BY
        A.id,
        A.entrust_code,
        A.create_time,
        A.sample,
        A.model,
        A.inspection_item,
        A.company,
        A.`name`
        )B
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
    </select>
    <select id="selectDeviceList" resultType="com.ruoyi.inspect.vo.DeviceVO">
        select
        d.device_name,
        d.specification_model,
        d.management_number,
        date_format(CASE
            WHEN dmr.next_calibration_date is not null THEN dmr.next_calibration_date
            WHEN d.next_calibration_date > CURDATE() THEN d.next_calibration_date
        END,'%Y-%m-%d') AS latest_traceability
        from device d left join
        device_metric_record dmr on d.id = dmr.device_id
        where d.management_number = #{name}
        order by latest_traceability desc
        limit 1
    </select>
    <update id="upInsOrderParameter" parameterType="com.ruoyi.inspect.pojo.InsOrder">
        UPDATE ins_order
        <set>
            <if test="appointed!=null and appointed!='' ">
                appointed=#{appointed},
            </if>
            <if test="userId!=null  ">
                user_id=#{userId},
            </if>
            <if test="createUser!=null  ">
                create_user=#{createUser}
            </if>
            <if test="otcCode!=null  ">
                otc_code=#{otcCode}
            </if>
            <if test="code!=null  ">
                code=#{code}
            </if>
            <if test="custom!=null  ">
                custom=#{custom}
            </if>
            <if test="updateUser!=null  ">
                update_user=#{updateUser}
            </if>
            <if test="updateTime!=null  ">
                update_time=#{updateTime}
            </if>
            <if test="type!=null  ">
                type=#{type}
            </if>
            <if test="entrustCode!=null  ">
                entrust_code=#{entrustCode}
            </if>
            <if test="company!=null  ">
                company=#{company}
            </if>
            <if test="remark!=null  ">
                remark=#{remark}
            </if>
            <if test="createTime!=null  ">
                create_time=#{createTime}
            </if>
            <if test="state!=null  ">
                state=#{state}
            </if>
        </set>
        <where>
            id=#{id}
        </where>
    </update>
    <update id="updateStatus">
        update ins_order
        set state=3
        where id = #{id}
    </update>
    <select id="selectSampleDefects" resultMap="selectSampleDefectsMap">
        SELECT io.entrust_code,sam.sample,ip.inspection_item,u.name,b.create_time, sam.id
        from ins_order io
        left JOIN ins_sample sam on io.id=sam.ins_order_id
        LEFT JOIN ins_product ip on ip.ins_sample_id=sam.id
        LEFT JOIN
        (SELECT create_time,create_user,ins_product_id FROM
        (select * FROM ins_product_user ORDER BY ins_product_user.create_time DESC) a
        GROUP BY a.ins_product_id) b
        on b.ins_product_id=ip.id
        left JOIN `user` u on u.id=b.create_user
        WHERE (ip.ins_result=0 OR ip.state=0)
        <if test="inspectionItems != null and inspectionItems != ''">
            and inspection_item like concat('%', #{inspectionItems}, '%')
        </if>
        <if test="orderNumber != null and orderNumber != ''">
            and io.entrust_code like concat('%', #{orderNumber}, '%')
        </if>
    </select>
    <select id="getCount" resultType="long">
        select count(1)
        from (
        SELECT io.entrust_code,sam.sample,ip.inspection_item,u.name,b.create_time, sam.id
        from ins_order io
        left JOIN ins_sample sam on io.id=sam.ins_order_id
        LEFT JOIN ins_product ip on ip.ins_sample_id=sam.id
        LEFT JOIN
        (SELECT create_time,create_user,ins_product_id FROM (select * FROM ins_product_user ORDER BY
        ins_product_user.create_time DESC) a GROUP BY a.ins_product_id) b
        on b.ins_product_id=ip.id
        left JOIN `user` u on u.id=b.create_user
        where (ip.ins_result=0 OR ip.state=0)
        <if test="inspectionItems != null and inspectionItems != ''">
            and inspection_item like concat('%', #{inspectionItems}, '%')
        </if>
        <if test="orderNumber != null and orderNumber != ''">
            and io.entrust_code like concat('%', #{orderNumber}, '%')
        </if>
        ) temp
    </select>
    <select id="getEnumLabelByValue" resultType="java.lang.String">
        select label
        from enums
        where value = #{value}
    </select>
    <select id="getStandardMethodCode" resultType="java.lang.String">
        select code
        from standard_method
        where id = #{id}
    </select>
    <select id="selLaboratoryCode" resultType="java.lang.String">
        select laboratory_code
        from laboratory
        where laboratory_name = #{laboratory}
    </select>
    <select id="selectReportModelByOrderId" resultType="java.util.Map">
        select distinct id, name
        from standard_template
        where id in (select template_id
                     from ins_product
                     where son_laboratory = #{laboratory}
                       and ins_sample_id in
                           (select id from ins_sample where ins_order_id = #{id}))
    </select>
    <select id="selectCostStatistics2" resultType="com.ruoyi.inspect.dto.CostStatisticsDto">
        select * from (
        SELECT
        A.id,
        A.entrust_code,
        A.create_time,
        A.sample,
        A.model,
        A.inspection_item,
        A.company,
        A.`name`,
        COUNT( 1 ) num,
        SUM( A.price ) price,
        SUM( A.cost ) cost
        FROM
        (
        SELECT
        i.id,
        i.laboratory,
        i.entrust_code,
        i.create_time,
        isa.sample,
        isa.sample_code,
        isa.model,
        c.price,
        c.cost,
        c.inspection_item,
        i.company,
        u.`name`,
        i.create_user,
        c.ins_sample_id
        FROM
        ins_order i
        LEFT JOIN ins_sample isa ON isa.ins_order_id = i.id
        LEFT JOIN `user` u ON u.id = i.user_id
        LEFT JOIN custom cus ON cus.id = u.company
        LEFT JOIN (
        SELECT
        SUM( b.price ) price,
        sum( b.man_hour ) cost,
        b.ins_sample_id,
        GROUP_CONCAT( b.inspection_item2 SEPARATOR ',' ) inspection_item
        FROM
        (
        SELECT
        ip.ins_sample_id,
        ip.man_hour,
        ip.man_hour_group,
        case
        WHEN LOCATE('[', spl.price)>0 THEN
        REPLACE(JSON_EXTRACT(spl.price, REPLACE(JSON_SEARCH(spl.section, 'one', ip.section), '"', '')),'"','')
        ELSE spl.price
        END AS price ,
        GROUP_CONCAT( CONCAT( ip.inspection_item, '@', ip.inspection_item_subclass ) SEPARATOR ',' ) inspection_item2
        FROM
        ins_product ip
        LEFT JOIN standard_product_list spl ON ip.laboratory = spl.laboratory
        AND ip.sample_type = spl.sample_type
        AND ip.sample = spl.sample
        AND  ip.model = spl.model
        AND ip.inspection_item = spl.inspection_item
        AND ip.inspection_item_subclass = spl.inspection_item_subclass
        AND ip.son_laboratory = spl.son_laboratory
        AND ip.standard_method_list_id = spl.standard_method_list_id
        WHERE
        ip.state = 1
        AND  ip.create_time between #{startTime} and #{endTime}
        AND ip.template_id IS NOT NULL
        GROUP BY
        ip.ins_sample_id,
        ip.man_hour_group
        ) b
        GROUP BY
        b.ins_sample_id
        ) c ON c.ins_sample_id = isa.id
        WHERE
        ( i.state = 1 OR i.state = 3 OR i.state = 4 )
        AND c.ins_sample_id IS NOT NULL
        ) A
        where 1 = 1
        <if test="laboratory != '' and laboratory != null">
            AND A.laboratory = #{laboratory}
        </if>
        GROUP BY
        A.id,
        A.entrust_code,
        A.create_time,
        A.sample,
        A.model,
        A.inspection_item,
        A.company,
        A.`name`
        ) B
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
    </select>
    <select id="seldepLimsId" resultType="java.lang.String">
        select name
        from department_lims
        where id = #{depLimsId}
    </select>
    <select id="getDepartment" resultType="string">
        select name from department_lims where id = #{id}
    </select>
    <select id="getLaboratory" resultType="string">
        select distinct laboratory from ins_product where ins_sample_id = #{id}
    </select>
    <select id="selectCommissionFees" resultType="com.ruoyi.inspect.dto.CommissionFeesDto">
<!--        SELECT-->
<!--        date_format(create_time, '%Y-%m-%d') AS create_time,-->
<!--        entrust_code,-->
<!--        sample_name,-->
<!--        sample_model,-->
<!--        sample_num,-->
<!--        ins_item,-->
<!--        production,-->
<!--        company,-->
<!--        custom,-->
<!--        engineering,-->
<!--        total_price-->
<!--        FROM-->
<!--        (-->
<!--        SELECT-->
<!--        io.*,-->
<!--        sample_counts.sample_num,-->
<!--        GROUP_CONCAT( DISTINCT isa.sample SEPARATOR '、' ) AS sample_name,-->
<!--        GROUP_CONCAT( DISTINCT isa.model SEPARATOR '、' ) AS sample_model,-->
<!--        total_product_counts.ins_item,-->
<!--        total_price-->
<!--        FROM-->
<!--        ins_order io-->
<!--        LEFT JOIN ins_sample isa ON io.id = isa.ins_order_id-->
<!--        LEFT JOIN ins_sample_user isau ON isau.ins_sample_id = io.id-->
<!--        LEFT JOIN ins_order_state iot ON iot.ins_order_id = io.id-->
<!--        LEFT JOIN ins_report ir ON io.id = ir.ins_order_id-->
<!--        AND ir.is_ratify = 1-->
<!--        LEFT JOIN USER u ON io.create_user = u.id-->
<!--        LEFT JOIN (-->
<!--        SELECT-->
<!--        ins_order_id,-->
<!--        COUNT(*) AS sample_num-->
<!--        FROM-->
<!--        ins_sample-->
<!--        WHERE-->
<!--        id IN (-->
<!--        SELECT-->
<!--        id1-->
<!--        FROM-->
<!--        (-->
<!--        SELECT-->
<!--        is2.id id1,-->
<!--        ip.id-->
<!--        FROM-->
<!--        ins_sample is2-->
<!--        LEFT JOIN ins_product ip ON is2.id = ip.ins_sample_id-->
<!--        WHERE-->
<!--        ip.id IS NOT NULL-->
<!--        ) s-->
<!--        )-->
<!--        GROUP BY-->
<!--        ins_order_id-->
<!--        ) sample_counts ON io.id = sample_counts.ins_order_id-->
<!--        LEFT JOIN (-->
<!--        SELECT-->
<!--        SUM( price ) AS total_price,-->
<!--        sample_id,-->
<!--        ins_order_id,-->
<!--        man_hour_group,-->
<!--        ins_item-->
<!--        FROM-->
<!--        (-->
<!--        SELECT-->
<!--        ins_sample.id AS sample_id,-->
<!--        ins_sample.ins_order_id,-->
<!--        ins_product.man_hour_group,-->
<!--        GROUP_CONCAT( DISTINCT inspection_item SEPARATOR ',' ) AS ins_item,-->
<!--        price-->
<!--        FROM-->
<!--        ins_product-->
<!--        JOIN ins_sample ON ins_product.ins_sample_id = ins_sample.id-->
<!--        WHERE-->
<!--        ins_product.state = 1-->
<!--        GROUP BY-->
<!--        ins_sample.ins_order_id,-->
<!--        ins_sample.id,-->
<!--        ins_product.man_hour_group-->
<!--        ) b-->
<!--        GROUP BY-->
<!--        ins_order_id-->
<!--        ) total_product_counts ON io.id = total_product_counts.ins_order_id-->
<!--        WHERE-->
<!--        <if test="laboratory!=null and laboratory!=''">-->
<!--            io.laboratory=#{laboratory} AND-->
<!--        </if>-->
<!--        io.create_time between #{startTime} and #{endTime}-->
<!--        AND-->
<!--        io.state NOT IN ( 0, 2, 3 )-->
<!--        GROUP BY-->
<!--        io.id,-->
<!--        type-->
<!--        ORDER BY-->
<!--        type DESC,-->
<!--        io.id DESC-->
<!--        ) a-->
        SELECT
        A.entrust_code,
        A.engineering,
        date_format(A.create_time, '%Y-%m-%d') AS create_time,
        A.sample as sample_name,
        A.model as sample_model,
        A.inspection_item as ins_item,
        A.company,
        A.`name` as custom,
        A.production,
        COUNT( 1 ) sample_num,
        SUM( A.price ) total_price
        FROM
        (
        SELECT
        i.id,
        i.engineering,
        i.production,
        i.laboratory,
        i.entrust_code,
        i.create_time,
        isa.sample,
        isa.sample_code,
        isa.model,
        c.price,
        c.cost,
        c.inspection_item,
        i.company,
        u.`name`,
        i.create_user,
        c.ins_sample_id
        FROM
        ins_order i
        LEFT JOIN ins_sample isa ON isa.ins_order_id = i.id
        LEFT JOIN `user` u ON u.id = i.user_id
        LEFT JOIN custom cus ON cus.id = u.company
        LEFT JOIN (
        SELECT
        SUM( b.price ) price,
        sum( b.man_hour ) cost,
        b.ins_sample_id,
        GROUP_CONCAT( b.inspection_item2 SEPARATOR ',' ) inspection_item
        FROM
        (
        SELECT
        ip.ins_sample_id,
        ip.man_hour,
        ip.man_hour_group,
        case
        WHEN LOCATE('[', spl.price)>0 THEN
        REPLACE(JSON_EXTRACT(spl.price, REPLACE(JSON_SEARCH(spl.section, 'one', ip.section), '"', '')),'"','')
        ELSE spl.price
        END AS price ,
        ip.inspection_item,
        ip.inspection_item_subclass,
        GROUP_CONCAT( CONCAT( ip.inspection_item, '@', ip.inspection_item_subclass ) SEPARATOR ',' ) inspection_item2
        FROM
        ins_product ip
        LEFT JOIN standard_product_list spl ON ip.laboratory = spl.laboratory
        AND ip.sample_type = spl.sample_type
        AND ip.sample = spl.sample
        AND  ip.model = spl.model
        AND ip.inspection_item = spl.inspection_item
        AND ip.inspection_item_subclass = spl.inspection_item_subclass
        AND ip.son_laboratory = spl.son_laboratory
        AND ip.standard_method_list_id = spl.standard_method_list_id
        WHERE
        ip.state = 1
          AND ip.create_time between #{startTime} and #{endTime}
        AND ip.template_id IS NOT NULL
        GROUP BY
        ip.ins_sample_id,
        ip.man_hour_group
        ) b
        GROUP BY
        b.ins_sample_id
        ) c ON c.ins_sample_id = isa.id
        WHERE
        ( i.state = 1 OR i.state = 3 OR i.state = 4 )
        AND c.ins_sample_id IS NOT NULL
        ) A
        where  A.entrust_code != '' AND A.entrust_code is not null
            <if test="laboratory != '' and laboratory != null">
                and   A.laboratory = #{laboratory}
            </if>
        <if test="company != null and company != ''">
            and A.company = #{company}
        </if>
        GROUP BY
        A.entrust_code,
        A.create_time,
        A.sample,
        A.model,
        A.inspection_item,
        A.company,
        A.`name`
    </select>
    <select id="selectUnInsProducts" resultType="com.ruoyi.inspect.vo.UnInsProductsVO">
        select
        date_format(io.send_time,'%Y-%m-%d') as send_time,
        io.entrust_code,
        isa.sample,
        group_concat(distinct isa.sample_code SEPARATOR '、') sample_code,
        group_concat(distinct IF(ip.inspection_item_subclass!='' and ip.inspection_item_subclass is not null,ip.inspection_item_subclass,ip.inspection_item) SEPARATOR '、') un_ins_product
        from ins_order io
        left join ins_sample isa on io.id = isa.ins_order_id
        left join ins_product ip on isa.id = ip.ins_sample_id
        left join ins_order_state ios on io.id=ios.ins_order_id
        <where>
            <if test="laboratory!=null and laboratory!=''">
                AND io.laboratory=#{laboratory}
            </if>
            <if test="dto.insState!=null and dto.insState!=''">
                AND ios.ins_state=#{dto.insState}
            </if>
            <if test="dto.sonLaboratory!=null and dto.sonLaboratory!=''">
                AND ip.son_laboratory=#{dto.sonLaboratory}
            </if>
            <if test="dto.sampleCode!=null and dto.sampleCode!=''">
                AND isa.sample_code like concat('%',#{dto.sampleCode},'%')
            </if>
            <if test="dto.sample!=null and dto.sample!=''">
                AND (isa.sample like concat('%',#{dto.sample},'%') or ip.sample_type like concat('%',#{dto.sample},'%'))
            </if>
            and io.send_time between #{startDateTime} and #{endDateTime}
            AND io.state = 1
            AND ip.state = 1
            AND (ip.ins_result = 2 or ip.ins_result is null)
        </where>
        group by io.entrust_code
        order by send_time desc
    </select>
    <select id="getTasksShow" resultType="com.ruoyi.inspect.dto.TasksShowDto">
        SELECT
            io.entrust_code,
            iss.sample,
            io.company,
            DATE_FORMAT(io.send_time,'%Y/%m/%d') AS create_time,
            CASE
                WHEN ios.ins_state = 0 THEN '待检'
                WHEN ios.ins_state = 1 THEN '在检'
                ELSE '已检'
                END AS state,
            CASE
                WHEN ios.ins_state = 3 THEN '待复核'
                WHEN ios.ins_state = 4 THEN '需复核'
                WHEN ios.ins_state = 5 THEN '已复核'
                ELSE '-'
                END AS ins_state,
            CASE
                --                 WHEN ios.ins_state=5 and (ir.`code` IS NULL OR ir.`code` = '') THEN '待生成'
--                 WHEN ir.`code` is not null THEN '已生成'
--                 ELSE '-'
                WHEN ir.state = 1 THEN '已生成'
                WHEN ir.state = 0 THEN '待生成'
                ELSE '-'
                END `code`,
            CASE
                WHEN ir.is_examine = 1 THEN '通过'
                WHEN ir.is_examine = 0 THEN '未通过'
                WHEN ir.is_examine = -9 THEN '待审核'
                ELSE '-'
                END AS is_examine,
            CASE
                when ir.is_ratify = 1 THEN '已批准'
                when ir.is_ratify = 0 THEN '不批准'
                WHEN ir.is_ratify = -9 THEN '待批准'
                ELSE '-'
                END AS is_ratify,
            GROUP_CONCAT( DISTINCT TRIM( u.`name` ) SEPARATOR '、' ) AS `name`,
                CASE
                    WHEN io.type = 0 THEN '普通'
                    WHEN io.type = 1 THEN '优先'
                    WHEN io.type = 2 THEN '紧急'
                    END AS `type`
        FROM
            ins_order io
                LEFT JOIN ins_order_state ios ON ios.ins_order_id = io.id
                LEFT JOIN ins_sample iss ON io.id = iss.ins_order_id
                LEFT JOIN ins_product ip ON ip.ins_sample_id = iss.id
                LEFT JOIN ins_product_result ips ON ip.id = ips.ins_product_id
                LEFT JOIN ins_report ir ON io.id = ir.ins_order_id
                LEFT JOIN `user` u ON ips.update_user = u.id
        WHERE
            io.entrust_code IS NOT NULL
          AND u.state = 1
          AND io.state in  (1,4)
          AND IFNULL(ir.is_ratify,-1) != 1
          AND ios.laboratory = #{sonLaboratory}
          AND ip.son_laboratory = #{sonLaboratory}
        GROUP BY
            io.id
        ORDER BY
            CASE
                WHEN iss.ins_state = 0 THEN 0  -- å¾…检
                WHEN iss.ins_state = 1 THEN 1  -- åœ¨æ£€
                ELSE 2                        -- å·²æ£€
            END,
            io.type desc,
            io.id desc
    </select>
    <select id="selectCurrentCompanyUrgentQuota" resultType="map">
        select c.num as quota,c.company from user u left join custom c on u.company = c.id where u.id = #{userId}
    </select>
    <select id="selectPlanCountBySonLaboratory" resultType="java.lang.Integer">
        select
            count(io.id)
        from ins_order io
            left join ins_order_state ios on io.id = ios.ins_order_id
        where
            ios.laboratory = #{sonLaboratory}
          and io.state in (1,4)
          AND io.send_time between #{startOfMonth} and #{endOfMonth}
    </select>
    <select id="getInsOrderTemList" resultType="com.ruoyi.inspect.vo.ExportInsProductVO">
        SELECT
        i.create_time,
        i.custom AS custom_name,
        i.id,
        i.entrust_code,
        isa.id ins_sample_id,
        isa.sample_code,
        isa.sample,
        isa.model,
        isa.ins_state,
        ip.id ins_product_id,
        ip.state,
        ip.unit,
        ip.sample_type,
        ip.inspection_item,
        ip.inspection_item_subclass,
        ip.son_laboratory,
        ip.inspection_item_type,
        ip.inspection_value_type,
        ip.special_item_parent_id,
        ip.tell,
        ip.`last_value`,
        case
        WHEN ip.ins_result = 0 THEN '不合格'
        WHEN ip.ins_result = 1 THEN '合格'
        WHEN ip.ins_result = 3 THEN '不判定'
        ELSE ''
        END AS ins_result,
        ipr.equip_value,
        ipr.com_value,
        ip.inspection_item_class,
        ifis.CODE,
        ipr.ins_value,
        ipr.create_time AS check_time,
        u.NAME AS check_name,
        CASE
        WHEN ifi.bush_color IS NOT NULL THEN
        ifi.bush_color
        WHEN ib1.color IS NOT NULL THEN
        ib1.color
        WHEN ib2.color IS NOT NULL THEN
        ib2.color ELSE ''
        END AS bush_color,
        i.send_time As sendTime,
        ifi.color
        FROM
        ins_sample isa
        LEFT JOIN ins_order i ON isa.ins_order_id = i.id
        LEFT JOIN ins_product ip ON isa.id = ip.ins_sample_id
        LEFT JOIN ins_product_result ipr ON ip.id = ipr.ins_product_id
        LEFT JOIN ins_fiber ifi ON ip.ins_fiber_id = ifi.id
        LEFT JOIN ins_fibers ifis ON ip.ins_fibers_id = ifis.id
        LEFT JOIN ins_bushing ib1 ON ip.ins_bush_id = ib1.id
        LEFT JOIN ins_bushing ib2 ON ib2.id = ifis.ins_bushing_id
        LEFT JOIN USER u ON u.id = ipr.create_user
        WHERE
        ip.state = 1     AND
        (i.state = 4 or i.state = 1)
        AND ip.special_item_parent_id IS NOT NULL
        AND ip.son_laboratory = '光纤试验室'
        <if test="entrustCode != null and entrustCode != ''">
            AND i.entrust_code like concat('%',#{entrustCode},'%')
        </if>
        <if test="sampleCode != null and sampleCode != ''">
            AND isa.sample_code like concat('%',#{sampleCode},'%')
        </if>
        <if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
            AND i.ins_time between #{startTime} and #{endTime}
        </if>
        <if test="checkName != '' and checkName != null">
            AND u.name = #{checkName}
        </if>
    </select>
</mapper>
inspect-server/src/main/resources/mapper/InsOrderStateMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.inspect.mapper.InsOrderStateMapper">
    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.InsOrderState">
            <id property="id" column="id" jdbcType="INTEGER"/>
            <result property="insOrderId" column="ins_order_id" jdbcType="INTEGER"/>
            <result property="laboratory" column="laboratory" jdbcType="VARCHAR"/>
            <result property="insState" column="ins_state" jdbcType="INTEGER"/>
            <result property="createUser" column="create_user" jdbcType="INTEGER"/>
            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
            <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
    </resultMap>
    <sql id="Base_Column_List">
        id,ins_order_id,laboratory,
        ins_state,create_user,create_time,
        update_user,update_time
    </sql>
</mapper>
inspect-server/src/main/resources/mapper/InsOrderTemplateMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.inspect.mapper.InsOrderTemplateMapper">
    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.InsOrderTemplate">
            <id property="id" column="id" jdbcType="INTEGER"/>
            <result property="name" column="name" jdbcType="VARCHAR"/>
            <result property="thing" column="thing" jdbcType="VARCHAR"/>
            <result property="createUser" column="create_user" jdbcType="INTEGER"/>
            <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
    </resultMap>
    <sql id="Base_Column_List">
        id,name,thing,
        create_user,update_user,create_time,
        update_time
    </sql>
</mapper>
inspect-server/src/main/resources/mapper/InsProductMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,210 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.inspect.mapper.InsProductMapper">
    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.InsProduct">
        <id property="id" column="id" jdbcType="INTEGER"/>
        <result property="inspectionItem" column="inspection_item" jdbcType="VARCHAR"/>
        <result property="inspectionItemClassify" column="inspection_item_classify" jdbcType="VARCHAR"/>
        <result property="inspectionItemSubclass" column="inspection_item_subclass" jdbcType="VARCHAR"/>
        <result property="factory" column="factory" jdbcType="VARCHAR"/>
        <result property="laboratory" column="laboratory" jdbcType="VARCHAR"/>
        <result property="sampleType" column="sample_type" jdbcType="VARCHAR"/>
        <result property="sample" column="sample" jdbcType="VARCHAR"/>
        <result property="model" column="model" jdbcType="VARCHAR"/>
        <result property="sonLaboratory" column="son_laboratory" jdbcType="VARCHAR"/>
        <result property="unit" column="unit" jdbcType="VARCHAR"/>
        <result property="price" column="price" jdbcType="DECIMAL"/>
        <result property="manHour" column="man_hour" jdbcType="DOUBLE"/>
        <result property="manHourGroup" column="man_hour_group" jdbcType="VARCHAR"/>
        <result property="inspectionItemType" column="inspection_item_type" jdbcType="VARCHAR"/>
        <result property="inspectionValueType" column="inspection_value_type" jdbcType="VARCHAR"/>
        <result property="deviceGroup" column="device_group" jdbcType="VARCHAR"/>
        <result property="checkoutNumber" column="checkout_number" jdbcType="INTEGER"/>
        <result property="section" column="section" jdbcType="VARCHAR"/>
        <result property="valueType" column="value_type" jdbcType="VARCHAR"/>
        <result property="method" column="method" jdbcType="VARCHAR"/>
        <result property="manDay" column="man_day" jdbcType="INTEGER"/>
        <result property="bsm" column="bsm" jdbcType="VARCHAR"/>
        <result property="ask" column="ask" jdbcType="VARCHAR"/>
        <result property="lastValue" column="last_value" jdbcType="VARCHAR"/>
        <result property="insResult" column="ins_result" jdbcType="INTEGER"/>
        <result property="state" column="state" jdbcType="INTEGER"/>
        <result property="insSampleId" column="ins_sample_id" jdbcType="INTEGER"/>
        <result property="createUser" column="create_user" jdbcType="INTEGER"/>
        <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
        <result property="templateId" column="template_id" jdbcType="INTEGER"/>
    </resultMap>
    <update id="updateInspected">
        UPDATE ins_product p
        SET p.state=0
        WHERE EXISTS(
                      SELECT 1
                      FROM ins_sample s
                      WHERE s.ins_order_id IN (
                          SELECT o.id
                          FROM ins_order o
                          WHERE o.id = #{id}
                      )
                        AND p.ins_sample_id = s.id
                        AND p.state = 1
                        AND p.ins_result IS NULL
                  );
    </update>
    <select id="selectOrderManDay" resultType="java.lang.Integer">
        select coalesce(max(ip.man_day), 0)
        from ins_order io
                 left join ins_sample isa on io.id = isa.ins_order_id
                 left join ins_product ip on isa.id = ip.ins_sample_id
        where io.id = #{orderId}
    </select>
    <select id="selectUserById" resultType="java.util.Map">
        select name, company, phone, address, name_en
        from user
        where id = #{userId}
    </select>
    <select id="getProductAndResult" resultType="com.ruoyi.inspect.dto.ProductResultDto2">
        select ip.id,
               ip.inspection_item,
               ip.inspection_item_subclass,
               ip.laboratory,
               ip.unit,
               ipr.equip_name equipValue,
               io.entrust_code,
               ipr.update_time,
               ip.ins_result,
               u.name         updateUserName
        from ins_product ip
                 left join ins_product_result ipr on ip.id = ipr.ins_product_id
                 left join ins_sample isa on isa.id = ip.ins_sample_id
                 left join ins_order io on io.id = isa.ins_order_id
                 left join user u on u.id = ipr.update_user
        where ip.ins_sample_id = #{sampleId}
          and ip.ins_result is not null
          and template_id is not null
    </select>
    <select id="selectFiberInsProduct" resultType="com.ruoyi.inspect.pojo.InsProduct">
        select * from ins_product
        where state = 1
        and (ins_fibers_id is not null or ins_fiber_id is not null)
        and ins_result is null
        and son_laboratory = #{laboratory}
        and ins_sample_id in
        <foreach collection="ids" index="index" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
    </select>
    <select id="selectNoProducts" resultType="com.ruoyi.inspect.pojo.InsProduct">
        select *
        from (select ip.*, sample_code
              from ins_product ip
                       left join ins_sample is2 on ip.ins_sample_id = is2.id
              where ip.ins_result is null
                and state = 1
                and is2.ins_order_id = #{orderId}) A
    </select>
    <select id="selectInsProductCountByOrderId" resultType="java.lang.Integer">
        select COUNT(1)
        from ins_product ip
                 left join ins_sample isa on ip.ins_sample_id = isa.id
                 left join ins_order io on isa.ins_order_id = io.id
        where io.id = #{orderId}
          and (ip.ins_result is null or ip.ins_result = 2)
          and ip.state = 1
    </select>
    <select id="findSagTemperatureProducts" resultType="com.ruoyi.inspect.pojo.InsProduct">
        select
            *
        from ins_product
        where
            ins_sample_id = #{sampleId}
          and
            inspection_item = '弧垂-温度'
          and
            special_item_parent_id is not null
          and
            state = 1
    </select>
    <select id="selectProductByOrderId" resultType="com.ruoyi.inspect.vo.InsProductVO">
        select
            ip.id,
            isa.id as sample_id,
            isa.sample_code,
            isa.model,
            ip.inspection_item as test_item,
            ip.inspection_item_subclass as test_item_children,
            ip.method_s as test_method,
            ip.tell as requirement,
            u.name as inspect_name
        from
            ins_order io
        left join
            ins_sample isa
        on
            io.id = isa.ins_order_id
        left join
            ins_product ip
        on
            isa.id = ip.ins_sample_id
        left join ins_product_result ipr on ip.id = ipr.ins_product_id
        left join user u on ipr.create_user = u.id
        <if test="orderId!=null and orderId!=''">
            <where>
                io.id = #{orderId}
                <if test="sonLaboratory!='' and sonLaboratory!=null">
                    AND ip.son_laboratory=#{sonLaboratory}
                </if>
            </where>
        </if>
    </select>
    <select id="selectInsProductInsFiberList" resultType="com.ruoyi.inspect.vo.InsProductFiberVO">
        select ip.*,ifi.bush_color,ifi.color from ins_product ip
            left join ins_fiber ifi on ip.ins_fiber_id = ifi.id
        where ip.state=1
        AND ip.ins_fiber_id is not null
        AND (ip.inspection_item_class is null or ip.inspection_item_class='')
        AND ip.ins_sample_id=#{sampleId}
    </select>
    <select id="selectInsProductInsBushList" resultType="com.ruoyi.inspect.vo.InsProductFiberVO">
        select ip.*,
               ib.color as bush_color,
               '/' as color
        from ins_product ip
            left join ins_bushing ib on ip.ins_bush_id = ib.id
        where ip.state=1
        AND ip.ins_bush_id is not null
        AND (ip.inspection_item_class is null or ip.inspection_item_class='')
        AND ip.ins_sample_id=#{sampleId}
    </select>
    <select id="selectInsProductInsFibersList" resultType="com.ruoyi.inspect.vo.InsProductFiberVO">
        select ip.*,
               ips.ins_value,
               ib.color as bush_color,
               ifs.code
        from ins_product ip
            inner join ins_product_result ips on ip.id = ips.ins_product_id
            left join ins_fibers ifs on ip.ins_fibers_id = ifs.id
            left join ins_bushing ib on ifs.ins_bushing_id = ib.id
        where ip.state=1
        AND ip.ins_fibers_id is not null
        AND (ip.inspection_item_class is null or ip.inspection_item_class='')
        AND ip.ins_sample_id=#{sampleId}
    </select>
    <select id="selectProductBySampleId" resultType="com.ruoyi.inspect.vo.InsProductFiberVO">
        select ip.*,
               ips.ins_value,
               ib.color as bush_color,
               ifs.code
        from ins_product ip
                 inner join ins_product_result ips on ip.id = ips.ins_product_id
                 left join ins_fibers ifs on ip.ins_fibers_id = ifs.id
                 left join ins_bushing ib on ifs.ins_bushing_id = ib.id
        where ip.state=1
          AND (ip.inspection_item_class is null or ip.inspection_item_class='')
          AND ip.ins_sample_id=#{sampleId}
    </select>
</mapper>
inspect-server/src/main/resources/mapper/InsProductResultMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.inspect.mapper.InsProductResultMapper">
    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.InsProductResult">
        <id property="id" column="id" jdbcType="INTEGER"/>
        <result property="insProductId" column="ins_product_id" jdbcType="INTEGER"/>
        <result property="insValue" column="ins_value" jdbcType="VARCHAR"/>
        <result property="comValue" column="com_value" jdbcType="VARCHAR"/>
        <result property="equipValue" column="equip_value" jdbcType="VARCHAR"/>
        <result property="createUser" column="create_user" jdbcType="INTEGER"/>
        <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
    </resultMap>
    <select id="selDetail" resultMap="BaseResultMap">
        select *
        from ins_product_result
        where 1=1
            <!--and ins_product_id in (#{ips})-->
        <if test="ips != null and ips.size > 0">
            <!-- ä½¿ç”¨foreach元素构建IN子句 -->
            and ins_product_id in
            <foreach item="item" collection="ips" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
    </select>
</mapper>
inspect-server/src/main/resources/mapper/InsProductUserMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.inspect.mapper.InsProductUserMapper">
    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.InsProductUser">
            <id property="id" column="id" jdbcType="INTEGER"/>
            <result property="createUser" column="create_user" jdbcType="INTEGER"/>
            <result property="createTime" column="create_time" jdbcType="VARCHAR"/>
            <result property="insProductId" column="ins_product_id" jdbcType="INTEGER"/>
    </resultMap>
    <sql id="Base_Column_List">
        id,create_user,create_time,
        ins_product_id
    </sql>
</mapper>
inspect-server/src/main/resources/mapper/InsReportApproveConfigMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.inspect.mapper.InsReportApproveConfigMapper">
    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.InsReportApproveConfig">
            <id property="id" column="id" jdbcType="INTEGER"/>
            <result property="editor" column="editor" jdbcType="INTEGER"/>
            <result property="examiner" column="examiner" jdbcType="INTEGER"/>
            <result property="approver" column="approver" jdbcType="INTEGER"/>
            <result property="laboratory" column="laboratory" jdbcType="VARCHAR"/>
    </resultMap>
    <sql id="Base_Column_List">
        id,editor,examiner,
        approver,laboratory
    </sql>
    <select id="selectApprovalConfigByLaboratory" resultType="java.util.Map">
        select
            u1.signature_url as writeUrl,
            u2.signature_url as examineUrl,
            u3.signature_url as ratifyUrl,
            u1.id as writeId,
            u2.id as examineId,
            u3.id as ratifyId
        from
            ins_report_approve_config irac
        left join user u1 on irac.editor=u1.id
        left join user u2 on irac.examiner=u2.id
        left join user u3 on irac.approver=u3.id
        where irac.laboratory = #{laboratory}
    </select>
</mapper>
inspect-server/src/main/resources/mapper/InsReportMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,88 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.inspect.mapper.InsReportMapper">
    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.InsReport">
            <id property="id" column="id" jdbcType="INTEGER"/>
            <result property="insOrderId" column="ins_order_id" jdbcType="INTEGER"/>
            <result property="url" column="url" jdbcType="VARCHAR"/>
            <result property="urlS" column="url_s" jdbcType="VARCHAR"/>
            <result property="isRatify" column="is_ratify" jdbcType="INTEGER"/>
            <result property="isExamine" column="is_examine" jdbcType="INTEGER"/>
            <result property="ratifyUserId" column="ratify_user_id" jdbcType="INTEGER"/>
            <result property="examineUserId" column="examine_user_id" jdbcType="INTEGER"/>
            <result property="createUser" column="create_user" jdbcType="INTEGER"/>
            <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
    </resultMap>
    <select id="pageInsReport" resultType="com.ruoyi.inspect.dto.ReportPageDto">
        select *
        from (
        select
        ir.*,
        io.entrust_code,
        u.name write_user_name,
        u1.name ratify_user,
        u2.name examine_user,
        io.laboratory,
        CASE
            WHEN (ir.url_s is null or ir.url_s='') and ir.is_ratify=-9 THEN 0
            ELSE 1
        END AS is_upload
        from ins_report ir
        left join ins_order io on io.id = ir.ins_order_id
        left join user u on u.id = ir.write_user_id
        left join user u1 on u1.id = ir.ratify_user_id
        left join user u2 on u2.id = ir.examine_user_id
        where 1=1
        <if test="laboratory!=null and laboratory!=''">
           and  laboratory=#{laboratory}
        </if>
        ) a
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
    </select>
    <select id="getLaboratoryByName" resultType="java.lang.String">
        select s.address from seal s
        left join laboratory l on s.lab_id = l.id
        where l.laboratory_name = #{name}
        and s.type = '报告类型'
        order by s.create_time desc
        limit 1
    </select>
    <select id="findReportCountInfo" resultType="com.ruoyi.inspect.dto.ReportPageDto">
        select
            *
        from (
        select
        ir.*,
        io.entrust_code,
        u.name write_user_name,
        u1.name ratify_user,
        u2.name examine_user,
        io.laboratory,
        CASE
        WHEN ir.url_s is null or ir.url_s='' THEN 0
        ELSE 1
        END AS is_upload
        from ins_report ir
        left join ins_order io on io.id = ir.ins_order_id
        left join user u on u.id = ir.write_user_id
        left join user u1 on u1.id = ir.ratify_user_id
        left join user u2 on u2.id = ir.examine_user_id
        where 1=1
            AND (${queryField} = -9 or ${queryField} is null)
        <if test="laboratory!=null and laboratory!=''">
            and  laboratory=#{laboratory}
        </if>
        ) a
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
    </select>
</mapper>
inspect-server/src/main/resources/mapper/InsSampleMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,892 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.inspect.mapper.InsSampleMapper">
    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.InsSample">
        <id property="id" column="id" jdbcType="INTEGER"/>
        <result property="insResult" column="ins_result" jdbcType="INTEGER"/>
        <result property="insOrderId" column="ins_order_id" jdbcType="INTEGER"/>
        <result property="joinModel" column="join_model" jdbcType="VARCHAR"/>
        <result property="joinName" column="join_name" jdbcType="VARCHAR"/>
        <result property="sampleCode" column="sample_code" jdbcType="VARCHAR"/>
        <result property="factory" column="factory" jdbcType="VARCHAR"/>
        <result property="laboratory" column="laboratory" jdbcType="VARCHAR"/>
        <result property="sampleType" column="sample_type" jdbcType="VARCHAR"/>
        <result property="sample" column="sample" jdbcType="VARCHAR"/>
        <result property="model" column="model" jdbcType="VARCHAR"/>
        <result property="insState" column="ins_state" jdbcType="INTEGER"/>
        <result property="joinNum" column="join_num" jdbcType="INTEGER"/>
        <result property="remark" column="remark" jdbcType="VARCHAR"/>
        <result property="createUser" column="create_user" jdbcType="INTEGER"/>
        <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
        <result property="isPairing" column="is_pairing" jdbcType="CHAR"/>
    </resultMap>
    <select id="findInsSampleAndOrder" resultType="com.ruoyi.inspect.vo.InsOrderPlanVO">
                SELECT
                    a.appointed,
                    a.checkName,
                    a.company,
                    a.entrust_code,
                    a.id,
                    a.ins_time,
                    a.model,
                    a.sample,
                    a.send_time,
                    a.son_laboratory,
                    a.type,
                    a.userName,
                    a.ins_state,
                    a.verify_tell,
                    a.verify_user,
                    a.sample_type,
                    a.laboratory,
                    a.sample_code
                FROM
                (
                    SELECT
                        io.id,
                        io.entrust_code,
                        io.company,
                        io.type,
                        io.appointed,
                        io.send_time,
                        group_concat(distinct isa.sample,' ') sample,
                        group_concat(distinct ip.model SEPARATOR ',') model,
                        userName,
                        checkName,
                        ip.son_laboratory,
                        ios.ins_time,
                        ios.ins_state,
                        ios.verify_tell,
                        ios.verify_user,
                        isa.sample_code,
                        io.laboratory,
                        io.sample_type
                    FROM
                        ins_order io
                    LEFT JOIN ins_sample isa ON isa.ins_order_id = io.id
                    LEFT JOIN (
                        SELECT ins_sample_id,
                        GROUP_CONCAT(DISTINCT CASE WHEN u.state = 0 THEN uu.name END SEPARATOR
                        ',')                                                           AS userName,
                        GROUP_CONCAT(DISTINCT CASE WHEN u.state = 1 THEN uu.name END SEPARATOR
                        ',')                                                           AS checkName
                        FROM ins_sample_user u
                        LEFT JOIN user uu ON u.user_id = uu.id
                        WHERE u.son_laboratory=#{sonLaboratory}
                        GROUP BY ins_sample_id
                        ) isu ON isu.ins_sample_id = io.id
            LEFT JOIN ins_product ip ON ip.ins_sample_id = isa.id AND ip.son_laboratory = #{sonLaboratory}
            LEFT JOIN ins_order_state ios ON ios.ins_order_id = io.id AND ios.laboratory = #{sonLaboratory}
            left join  ins_report ir on ir.ins_order_id = io.id
            WHERE
                io.state in  (1,4)
                and send_time is not null
                and COALESCE(ir.is_ratify, 0) != 1
                AND ios.ins_state is not null
                <if test="insState!=null and insState!=''">
                    AND ios.ins_state = #{insState}
                </if>
              <if test="laboratory!=null and laboratory!=''">
                  AND ip.laboratory=#{laboratory}
              </if>
              <if test="entrustCode!=null and entrustCode!=''">
                  AND io.entrust_code LIKE concat('%',#{entrustCode},'%')
              </if>
              <if test="sampleCode!=null and sampleCode!=''">
                  AND isa.sample_code LIKE concat('%',#{sampleCode},'%')
              </if>
              <if test="sample!=null and sample!=''">
                  AND (ip.sample_type LIKE concat('%',#{sample},'%') OR ip.sample LIKE concat('%',#{sample},'%'))
              </if>
            <if test="userName !=null and userName!=''">
                and ( (userName like CONCAT ('%', #{userName},'%') )
                or (checkName like CONCAT ('%', #{userName},'%') ) )
            </if>
            <if test="checkName != null and checkName != ''">
                and checkName like CONCAT ('%', #{checkName},'%')
            </if>
        <if test="sendTimeRange!=null and sendTimeRange.size()>1">
            AND io.send_time BETWEEN #{sendTimeRange[0]} AND #{sendTimeRange[1]}
        </if>
            and ip.son_laboratory=#{sonLaboratory}
            GROUP BY
            ip.son_laboratory,
            io.id
            ORDER BY
            io.type DESC,
            io.id
        ) a
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
    </select>
    <select id="inspectionOrderDetailsTaskSwitching" resultType="com.ruoyi.inspect.vo.InsOrderPlanTaskSwitchVo">
        select * from(
        SELECT
        a.*,ios.ins_state,ios.verify_tell,isu2.order_user_id,verify_user
        FROM
        (
        SELECT
        io.id,
        io.entrust_code,
        io.type,
        io.appointed,
        io.send_time,
        group_concat(distinct isa.sample,' ') sampleType,
        isu.user_id,
        user.name userName,
        ip.son_laboratory,
        io.ins_time,
        io.laboratory
        FROM
        ins_order io
        LEFT JOIN ins_sample isa ON isa.ins_order_id = io.id
        LEFT JOIN (
        SELECT *
        FROM ins_sample_user u
        WHERE son_laboratory=#{sonLaboratory} and (ins_sample_id, id) IN (
        SELECT ins_sample_id, MAX(id)
        FROM ins_sample_user
        WHERE son_laboratory=#{sonLaboratory}
        GROUP BY ins_sample_id
        )
        ORDER BY ins_sample_id, id
        ) isu ON isu.ins_sample_id = io.id
        LEFT JOIN ins_product ip ON ip.ins_sample_id = isa.id
        LEFT JOIN user ON isu.user_id = user.id
        WHERE
        io.state = 1
        and send_time is not null
        <if test="userId !=null and userId!=''">
            and (isu.user_id = #{userId} OR isu.user_id is NULL )
        </if>
        OR isu.user_id is NULL
        GROUP BY
        ip.son_laboratory,
        io.id
        ) a
        LEFT JOIN ins_order_state ios ON ios.ins_order_id = a.id AND ios.laboratory = a.son_laboratory
        left join (SELECT td.user_id order_user_id, td.ins_sample_id FROM ins_sample_user td,(SELECT max(id) id FROM
        ins_sample_user where son_laboratory=#{sonLaboratory} GROUP BY ins_sample_id) md where td.id = md.id
        <if test="userId !=null and userId!=''">
            and user_id = #{userId} OR user_id is NULL
        </if>
        OR user_id is NULL
        ) isu2 on
        isu2.ins_sample_id = a.id
        where ins_state is not null
        <if test="laboratory != null and laboratory != ''">
            and a.laboratory=#{laboratory}
        </if>
        ORDER BY
        <!--a.user_id DESC,-->
        a.type DESC,
        a.id
        ) b
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
    </select>
    <select id="selectSampleProductListByOrderId" resultMap="sampleDto">
        select isa.*,
        ip.id ip_id,
        inspection_item,
        inspection_item_en,
        inspection_item_class,
        inspection_item_class_en,
        inspection_item_subclass,
        inspection_item_subclass_en,
        ip.factory ip_factory,
        ip.laboratory ip_laboratory,
        ip.sample_type ip_sample_type,
        ip.sample ip_sample,
        ip.model ip_model,
        son_laboratory,
        ip.unit ip_unit,
        ip.ins_bush_id,
        ip.ins_fiber_id,
        ip.ins_fibers_id,
        price,
        man_hour,
        man_hour_group,
        inspection_item_type,
        inspection_value_type,
        device_group,
        checkout_number,
        section,
        value_type,
        method,
        man_day,
        bsm,
        ask,
        tell,
        `last_value`,
        ip.ins_result ip_ins_result,
        state,
        ins_sample_id,
        ip.create_user ip_create_user,
        ip.update_user ip_update_user,
        ip.create_time ip_create_time,
        ip.update_time ip_update_time,
        template_id,
        ipr.ins_value,
        ipr.id ipr_id,
        ipr.com_value,
        ipr.equip_value,
        ip.method_s,
        elasticity_modulus
        from ins_sample isa
        left join ins_product ip on isa.id = ip.ins_sample_id
        left join ins_product_result ipr on ip.id = ipr.ins_product_id
        where ins_order_id = #{id}
        and state = 1
        and ip.special_item_parent_id is null
        -- and ins_fiber_id is null
        -- and ins_fibers_id is null
        and <!--isa.sample_code NOT REGEXP '/'-->
        isa.id in(select id1 from (select is2.id id1 ,ip.id from ins_sample is2 left join ins_product ip on is2.id =
        ip.ins_sample_id where ip.id is not null)s )
        order by case when man_hour_group is NULL then 1
        when man_hour_group ='' then 1 else 0 end,
        CASE
        WHEN man_hour_group REGEXP '^[0-9]' THEN CAST(man_hour_group AS UNSIGNED) -- å¦‚果以数字开头,则按照数字大小排序
        WHEN man_hour_group REGEXP '[0-9]+' THEN CAST(SUBSTRING(man_hour_group, 2)AS UNSIGNED) END -- æå–字母后面的数字部分
        ,id asc
    </select>
    <select id="getInsOrderAndSample" resultMap="sampleDto">
        select isa.*,
               ip.id          ip_id,
               inspection_item,
               inspection_item_en,
               inspection_item_class,
               inspection_item_class_en,
               inspection_item_subclass,
               inspection_item_subclass_en,
               ip.factory     ip_factory,
               ip.laboratory  ip_laboratory,
               ip.sample_type ip_sample_type,
               ip.sample      ip_sample,
               ip.model       ip_model,
               son_laboratory,
               ip.unit        ip_unit,
               price,
               man_hour,
               man_hour_group,
               inspection_item_type,
               inspection_value_type,
               device_group,
               checkout_number,
               section,
               value_type,
               method,
               man_day,
               bsm,
               ask,
               `last_value`,
               ip.ins_result  ip_ins_result,
               state,
               ins_sample_id,
               ip.create_user ip_create_user,
               ip.update_user ip_update_user,
               ip.create_time ip_create_time,
               ip.update_time ip_update_time,
               template_id,
               ipr.ins_value,
               ipr.id ipr_id,
               ipr.com_value,
               ipr.equip_value,
               ipr.equip_name,
               ip.method_s,
               ip.tell,
               ip.dic,
               ip.temperature,
               ip.humidity,
               elasticity_modulus
        from ins_sample isa
                 left join ins_product ip on isa.id = ip.ins_sample_id
                 left join ins_product_result ipr on ip.id = ipr.ins_product_id
        where ins_order_id = #{id}
          and state = 1
          and ip.son_laboratory = #{laboratory}
    </select>
    <select id="getSampleEn" resultType="java.lang.String">
        select name_en
        from product
        where name = #{sample}
        limit 1
    </select>
    <select id="selectSampleProductListByOrderId2" resultMap="sampleDto">
        select isa.*,
               ip.id          ip_id,
               inspection_item,
               inspection_item_en,
               inspection_item_subclass,
               inspection_item_subclass_en,
               inspection_item_class,
               inspection_item_class_en,
               ip.factory     ip_factory,
               ip.laboratory  ip_laboratory,
               ip.sample_type ip_sample_type,
               ip.sample      ip_sample,
               ip.model       ip_model,
               son_laboratory,
               ip.unit        ip_unit,
               price,
               man_hour,
               man_hour_group,
               inspection_item_type,
               inspection_value_type,
               device_group,
               checkout_number,
               section,
               value_type,
               method,
               man_day,
               bsm,
               ask,
               tell,
               `last_value`,
               ip.ins_result  ip_ins_result,
               state,
               ins_sample_id,
               ip.create_user ip_create_user,
               ip.update_user ip_update_user,
               ip.create_time ip_create_time,
               ip.update_time ip_update_time,
               template_id,
               ipr.ins_value,
               ipr.id ipr_id,
               ipr.com_value,
               ipr.equip_value,
               ip.method_s,
               elasticity_modulus,
            ip.ins_fiber_id,
            ip.ins_fibers_id
        from ins_sample isa
                 left join ins_product ip on isa.id = ip.ins_sample_id
                 left join ins_product_result ipr on ip.id = ipr.ins_product_id
        where ins_order_id = #{id}
          and ip.standard_method_list_id is not null
          and state = 1
        order by case
                     when man_hour_group is NULL then 1
                     when man_hour_group = '' then 1
                      end,
                 CASE
                     WHEN man_hour_group REGEXP '^[0-9]' THEN CAST(man_hour_group AS UNSIGNED) -- å¦‚果以数字开头,则按照数字大小排序
                     WHEN man_hour_group REGEXP '[0-9]+'
                         THEN CAST(SUBSTRING(man_hour_group, 2) AS UNSIGNED) END -- æå–字母后面的数字部分
                , id asc
    </select>
    <select id="selectSampleProductListByOrderId3" resultMap="sampleDto3">
        select isa.id,
        sample_code,
        isa.sample,
        entrust_code,
        is_leave,
        isa.model,
        isa.ins_state,
        ip.id ip_id,
        inspection_item,
        inspection_item_subclass,
        io.sample_type io_sample_type,
        ip.sample ip_sample,
        ip.model ip_model,
        ip.state,
        ins_sample_id
        from ins_sample isa
        left join ins_product ip on isa.id = ip.ins_sample_id
        left join ins_product_result ipr on ip.id = ipr.ins_product_id
        left join ins_order io on io.id = ins_order_id
        where ip.state = 1
        and ins_order_id in
        <foreach collection="ids" open="(" close=")" item="id" separator=",">
            #{id}
        </foreach>
        order by case when man_hour_group is NULL then 1
        when man_hour_group ='' then 1 else 0 end,
        CASE
        WHEN man_hour_group REGEXP '^[0-9]' THEN CAST(man_hour_group AS UNSIGNED) -- å¦‚果以数字开头,则按照数字大小排序
        WHEN man_hour_group REGEXP '[0-9]+' THEN CAST(SUBSTRING(man_hour_group, 2)AS UNSIGNED) END -- æå–字母后面的数字部分
        ,id asc
    </select>
    <select id="getInsProduct1" resultMap="product">
        select ip.id          ip_id,
               inspection_item,
               inspection_item_en,
               inspection_item_class,
               inspection_item_class_en,
               inspection_item_subclass,
               inspection_item_subclass_en,
               ip.factory     ip_factory,
               ip.laboratory  ip_laboratory,
               ip.sample_type ip_sample_type,
               ip.sample      ip_sample,
               ip.model       ip_model,
               son_laboratory,
               ip.unit        ip_unit,
               elasticity_modulus,
               price,
               man_hour,
               man_hour_group,
               inspection_item_type,
               inspection_value_type,
               device_group,
               checkout_number,
               section,
               value_type,
               method,
               man_day,
               bsm,
               ask,
               `last_value`,
               ip.ins_result  ip_ins_result,
               state,
               ins_sample_id,
               ip.create_user ip_create_user,
               ip.update_user ip_update_user,
               ip.create_time ip_create_time,
               ip.update_time ip_update_time,
               template_id,
               ipr.id ipr_id,
               ipr.ins_value,
               ipr.com_value,
               ipr.equip_value,
               ipr.equip_name,
               ip.method_s,
               ip.tell,
               ip.dic
        from ins_product ip
                 left join ins_product_result ipr on ip.id = ipr.ins_product_id
        where ins_sample_id = #{id}
          and state = 1
          and ip.son_laboratory = #{laboratory}
          <if test="laboratory!='材料试验室'">
              and ins_fiber_id is null
          </if>
          and ins_fibers_id is null
          and standard_method_list_id is not null
    </select>
    <select id="getInsProduct5" resultMap="product">
        select ip.id          ip_id,
               inspection_item,
               inspection_item_en,
               inspection_item_class,
               inspection_item_class_en,
               inspection_item_subclass,
               inspection_item_subclass_en,
               ip.factory     ip_factory,
               ip.laboratory  ip_laboratory,
               ip.sample_type ip_sample_type,
               ip.sample      ip_sample,
               ip.model       ip_model,
               son_laboratory,
               ip.unit        ip_unit,
               elasticity_modulus,
               price,
               man_hour,
               man_hour_group,
               inspection_item_type,
               inspection_value_type,
               device_group,
               checkout_number,
            section,
            value_type,
            method,
            man_day,
            bsm,
            ask,
            `last_value`,
            ip.ins_result  ip_ins_result,
            state,
            ins_sample_id,
            ip.create_user ip_create_user,
            ip.update_user ip_update_user,
            ip.create_time ip_create_time,
            ip.update_time ip_update_time,
            template_id,
            ipr.id ipr_id,
            ipr.ins_value,
            ipr.com_value,
            ipr.equip_value,
            ipr.equip_name,
            ip.method_s,
            ip.tell,
            ip.dic
        from ins_product ip
            left join ins_product_result ipr on ip.id = ipr.ins_product_id
        where ins_sample_id = #{id}
          and state = 1
          and ip.son_laboratory = #{laboratory}
          and standard_method_list_id is not null
    </select>
    <select id="getInsProduct2" resultMap="product">
        select ip.id          ip_id,
               inspection_item,
               inspection_item_en,
               inspection_item_class,
               inspection_item_class_en,
               inspection_item_subclass,
               inspection_item_subclass_en,
               ip.factory     ip_factory,
               ip.laboratory  ip_laboratory,
               ip.sample_type ip_sample_type,
               ip.sample      ip_sample,
               ip.model       ip_model,
               son_laboratory,
               ip.unit        ip_unit,
               price,
               man_hour,
               man_hour_group,
               inspection_item_type,
               inspection_value_type,
               device_group,
               checkout_number,
               section,
               value_type,
               method,
               man_day,
               bsm,
               ask,
               `last_value`,
               ip.ins_result  ip_ins_result,
               state,
               ins_sample_id,
               ip.create_user ip_create_user,
               ip.update_user ip_update_user,
               ip.create_time ip_create_time,
               ip.update_time ip_update_time,
               template_id,
               ipr.ins_value,
               ipr.com_value,
               ipr.equip_value,
               ipr.equip_name,
               ip.method_s,
               ip.tell,
               ip.dic
        from ins_product ip
                 left join ins_product_result ipr on ip.id = ipr.ins_product_id
        where ins_fibers_id = #{id}
          and ip.son_laboratory = #{sonLaboratory}
          and state = 1
          and ins_fiber_id is null
          and standard_method_list_id is not null
    </select>
    <select id="getInsProduct3" resultMap="product">
        select ip.id          ip_id,
               inspection_item,
               inspection_item_en,
               inspection_item_class,
               inspection_item_class_en,
               inspection_item_subclass,
               inspection_item_subclass_en,
               ip.factory     ip_factory,
               ip.laboratory  ip_laboratory,
               ip.sample_type ip_sample_type,
               ip.sample      ip_sample,
               ip.model       ip_model,
               son_laboratory,
               ip.unit        ip_unit,
               price,
               man_hour,
               man_hour_group,
               inspection_item_type,
               inspection_value_type,
               device_group,
               checkout_number,
               section,
               value_type,
               method,
               man_day,
               bsm,
               ask,
               `last_value`,
               ip.ins_result  ip_ins_result,
               state,
               ins_sample_id,
               ip.create_user ip_create_user,
               ip.update_user ip_update_user,
               ip.create_time ip_create_time,
               ip.update_time ip_update_time,
               template_id,
               ipr.ins_value,
               ipr.com_value,
               ipr.equip_value,
               ipr.equip_name,
               ip.method_s,
               ip.tell,
               ip.dic
        from ins_product ip
                 left join ins_product_result ipr on ip.id = ipr.ins_product_id
        where ins_fiber_id = #{id}
          and ip.son_laboratory = #{sonLaboratory}
          and state = 1
          and ins_fibers_id is null
          and standard_method_list_id is not null
    </select>
    <select id="getInsProduct6" resultMap="product">
        select ip.id          ip_id,
               inspection_item,
               inspection_item_en,
               inspection_item_class,
               inspection_item_class_en,
               inspection_item_subclass,
               inspection_item_subclass_en,
               ip.factory     ip_factory,
               ip.laboratory  ip_laboratory,
               ip.sample_type ip_sample_type,
               ip.sample      ip_sample,
               ip.model       ip_model,
               son_laboratory,
               ip.unit        ip_unit,
               price,
               man_hour,
               man_hour_group,
               inspection_item_type,
               inspection_value_type,
               device_group,
               checkout_number,
            section,
            value_type,
            method,
            man_day,
            bsm,
            ask,
            `last_value`,
            ip.ins_result  ip_ins_result,
            state,
            ins_sample_id,
            ip.create_user ip_create_user,
            ip.update_user ip_update_user,
            ip.create_time ip_create_time,
            ip.update_time ip_update_time,
            template_id,
            ipr.ins_value,
            ipr.com_value,
            ipr.equip_value,
            ipr.equip_name,
            ip.method_s,
            ip.tell,
            ip.dic
        from ins_product ip
            left join ins_product_result ipr on ip.id = ipr.ins_product_id
        where ins_fibers_id = #{id}
          and ip.son_laboratory = #{sonLaboratory}
          and state = 1
            and ins_fiber_id is null
          and standard_method_list_id is not null
    </select>
    <select id="getInsProduct4" resultMap="product">
        select ip.id          ip_id,
               inspection_item,
               inspection_item_en,
               inspection_item_class,
               inspection_item_class_en,
               inspection_item_subclass,
               inspection_item_subclass_en,
               ip.factory     ip_factory,
               ip.laboratory  ip_laboratory,
               ip.sample_type ip_sample_type,
               ip.sample      ip_sample,
               ip.model       ip_model,
               ip.ins_bush_id,
               son_laboratory,
               ip.unit        ip_unit,
               price,
               man_hour,
               man_hour_group,
               inspection_item_type,
               inspection_value_type,
               device_group,
               checkout_number,
               section,
               value_type,
               method,
               man_day,
               bsm,
               ask,
               `last_value`,
               ip.ins_result  ip_ins_result,
               state,
               ins_sample_id,
               ip.create_user ip_create_user,
               ip.update_user ip_update_user,
               ip.create_time ip_create_time,
               ip.update_time ip_update_time,
               template_id,
               ipr.ins_value,
               ipr.com_value,
               ipr.equip_value,
               ipr.equip_name,
               ip.method_s,
               ip.tell,
               ip.dic
        from ins_product ip
                 left join ins_product_result ipr on ip.id = ipr.ins_product_id
        where ins_bush_id = #{id}
          and ip.son_laboratory = #{sonLaboratory}
          and state = 1
          and ins_fibers_id is null
          and standard_method_list_id is not null
    </select>
    <select id="getReportModel" resultType="java.util.Map">
    </select>
    <resultMap id="sampleDto" type="com.ruoyi.inspect.dto.SampleProductDto">
        <id property="id" column="id" jdbcType="INTEGER"/>
        <result property="insResult" column="ins_result" jdbcType="INTEGER"/>
        <result property="insOrderId" column="ins_order_id" jdbcType="INTEGER"/>
        <result property="joinModel" column="join_model" jdbcType="VARCHAR"/>
        <result property="joinName" column="join_name" jdbcType="VARCHAR"/>
        <result property="sampleCode" column="sample_code" jdbcType="VARCHAR"/>
        <result property="factory" column="factory" jdbcType="VARCHAR"/>
        <result property="laboratory" column="laboratory" jdbcType="VARCHAR"/>
        <result property="sampleType" column="sample_type" jdbcType="VARCHAR"/>
        <result property="sample" column="sample" jdbcType="VARCHAR"/>
        <result property="model" column="model" jdbcType="VARCHAR"/>
        <result property="insState" column="ins_state" jdbcType="INTEGER"/>
        <result property="joinNum" column="join_num" jdbcType="INTEGER"/>
        <result property="remark" column="remark" jdbcType="VARCHAR"/>
        <result property="createUser" column="create_user" jdbcType="INTEGER"/>
        <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
        <result property="standardMethodListId" column="standard_method_list_id"/>
        <result property="unit" column="unit"/>
        <collection property="insProduct" resultMap="product"/>
    </resultMap>
    <resultMap id="product" type="com.ruoyi.inspect.pojo.InsProduct">
        <id property="id" column="ip_id" jdbcType="INTEGER"/>
        <result property="inspectionItem" column="inspection_item" jdbcType="VARCHAR"/>
        <result property="inspectionItemEn" column="inspection_item_en" jdbcType="VARCHAR"/>
        <result property="inspectionItemSubclass" column="inspection_item_subclass" jdbcType="VARCHAR"/>
        <result property="inspectionItemSubclassEn" column="inspection_item_subclass_en" jdbcType="VARCHAR"/>
        <result property="inspectionItemClass" column="inspection_item_class" jdbcType="VARCHAR"/>
        <result property="inspectionItemClassEn" column="inspection_item_class_en" jdbcType="VARCHAR"/>
        <result property="factory" column="ip_factory" jdbcType="VARCHAR"/>
        <result property="laboratory" column="ip_laboratory" jdbcType="VARCHAR"/>
        <result property="sampleType" column="ip_sample_type" jdbcType="VARCHAR"/>
        <result property="sample" column="ip_sample" jdbcType="VARCHAR"/>
        <result property="model" column="ip_model" jdbcType="VARCHAR"/>
        <result property="sonLaboratory" column="son_laboratory" jdbcType="VARCHAR"/>
        <result property="unit" column="ip_unit" jdbcType="VARCHAR"/>
        <result property="price" column="price" jdbcType="DECIMAL"/>
        <result property="manHour" column="man_hour" jdbcType="DOUBLE"/>
        <result property="manHourGroup" column="man_hour_group" jdbcType="VARCHAR"/>
        <result property="inspectionItemType" column="inspection_item_type" jdbcType="VARCHAR"/>
        <result property="inspectionValueType" column="inspection_value_type" jdbcType="VARCHAR"/>
        <result property="deviceGroup" column="device_group" jdbcType="VARCHAR"/>
        <result property="checkoutNumber" column="checkout_number" jdbcType="INTEGER"/>
        <result property="section" column="section" jdbcType="VARCHAR"/>
        <result property="valueType" column="value_type" jdbcType="VARCHAR"/>
        <result property="method" column="method" jdbcType="VARCHAR"/>
        <result property="manDay" column="man_day" jdbcType="INTEGER"/>
        <result property="bsm" column="bsm" jdbcType="VARCHAR"/>
        <result property="ask" column="ask" jdbcType="VARCHAR"/>
        <result property="tell" column="tell" jdbcType="VARCHAR"/>
        <result property="lastValue" column="last_value" jdbcType="VARCHAR"/>
        <result property="insResult" column="ip_ins_result" jdbcType="INTEGER"/>
        <result property="state" column="state" jdbcType="INTEGER"/>
        <result property="insBushId" column="ins_bush_id" jdbcType="INTEGER"/>
        <result property="insSampleId" column="ins_sample_id" jdbcType="INTEGER"/>
        <result property="createUser" column="ip_create_user" jdbcType="INTEGER"/>
        <result property="updateUser" column="ip_update_user" jdbcType="INTEGER"/>
        <result property="createTime" column="ip_create_time" jdbcType="TIMESTAMP"/>
        <result property="updateTime" column="ip_update_time" jdbcType="TIMESTAMP"/>
        <result property="templateId" column="template_id" jdbcType="INTEGER"/>
        <result property="methodS" column="method_s"/>
        <result property="tell" column="tell"/>
        <result property="dic" column="dic"/>
        <result property="temperature" column="temperature"/>
        <result property="humidity" column="humidity"/>
        <result property="elasticityModulus" column="elasticity_modulus"/>
        <result property="insFiberId" column="ins_fiber_id"/>
        <result property="insFibersId" column="ins_fibers_id"/>
        <collection property="insProductResult" resultMap="insProductResult"/>
    </resultMap>
    <resultMap id="sampleDto3" type="com.ruoyi.inspect.dto.SampleProductDto3">
        <id property="id" column="id" jdbcType="INTEGER"/>
        <result property="insResult" column="ins_result" jdbcType="INTEGER"/>
        <result property="insOrderId" column="ins_order_id" jdbcType="INTEGER"/>
        <result property="joinModel" column="join_model" jdbcType="VARCHAR"/>
        <result property="joinName" column="join_name" jdbcType="VARCHAR"/>
        <result property="ioSampleType" column="io_sample_type" jdbcType="VARCHAR"/>
        <result property="code" column="entrust_code" jdbcType="VARCHAR"/>
        <result property="isLeave" column="is_leave" jdbcType="VARCHAR"/>
        <result property="sampleCode" column="sample_code" jdbcType="VARCHAR"/>
        <result property="factory" column="factory" jdbcType="VARCHAR"/>
        <result property="laboratory" column="laboratory" jdbcType="VARCHAR"/>
        <result property="sampleType" column="sample_type" jdbcType="VARCHAR"/>
        <result property="sample" column="sample" jdbcType="VARCHAR"/>
        <result property="model" column="model" jdbcType="VARCHAR"/>
        <result property="insState" column="ins_state" jdbcType="INTEGER"/>
        <result property="joinNum" column="join_num" jdbcType="INTEGER"/>
        <result property="remark" column="remark" jdbcType="VARCHAR"/>
        <result property="createUser" column="create_user" jdbcType="INTEGER"/>
        <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
        <result property="standardMethodListId" column="standard_method_list_id"/>
        <result property="unit" column="unit"/>
        <collection property="insProduct" resultMap="product"/>
    </resultMap>
    <resultMap id="insProductResult" type="com.ruoyi.inspect.pojo.InsProductResult">
        <id property="id" column="ipr_id" jdbcType="INTEGER"/>
        <result property="insValue" column="ins_value" jdbcType="VARCHAR"/>
        <result property="comValue" column="com_value" jdbcType="VARCHAR"/>
        <result property="equipValue" column="equip_value" jdbcType="VARCHAR"/>
        <result property="equipName" column="equip_name" jdbcType="VARBINARY"/>
    </resultMap>
    <resultMap id="sampleVo" type="com.ruoyi.inspect.vo.SampleVo">
        <id property="id" column="id" jdbcType="INTEGER"/>
        <result property="insResult" column="ins_result" jdbcType="INTEGER"/>
        <result property="insOrderId" column="ins_order_id" jdbcType="INTEGER"/>
        <result property="joinModel" column="join_model" jdbcType="VARCHAR"/>
        <result property="joinName" column="join_name" jdbcType="VARCHAR"/>
        <result property="sampleCode" column="sample_code" jdbcType="VARCHAR"/>
        <result property="factory" column="factory" jdbcType="VARCHAR"/>
        <result property="laboratory" column="laboratory" jdbcType="VARCHAR"/>
        <result property="sampleType" column="sample_type" jdbcType="VARCHAR"/>
        <result property="sample" column="sample" jdbcType="VARCHAR"/>
        <result property="model" column="model" jdbcType="VARCHAR"/>
        <result property="insState" column="ins_state" jdbcType="INTEGER"/>
        <result property="joinNum" column="join_num" jdbcType="INTEGER"/>
        <result property="remark" column="remark" jdbcType="VARCHAR"/>
        <result property="createUser" column="create_user" jdbcType="INTEGER"/>
        <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
        <result property="standardMethodListId" column="standard_method_list_id"/>
        <result property="methodName" column="methodName" jdbcType="VARCHAR"/>
        <result property="unit" column="unit"/>
    </resultMap>
    <select id="getDetailById" resultMap="sampleVo">
        select is2.*,
               code methodName
        from ins_sample is2
                 inner join standard_method sm on standard_method_list_id = sm.id
        where is2.id = #{sampleId}
    </select>
    <select id="selMethodById" resultType="java.lang.String">
        select code
        from standard_method
        where id = (select standard_method_list_id from ins_sample where id = #{sampleId})
    </select>
</mapper>
inspect-server/src/main/resources/mapper/InsSampleUserMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.inspect.mapper.InsSampleUserMapper">
    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.InsSampleUser">
            <id property="id" column="id" jdbcType="INTEGER"/>
            <result property="insSampleId" column="ins_sample_id" jdbcType="INTEGER"/>
            <result property="userId" column="user_id" jdbcType="INTEGER"/>
            <result property="state" column="state" jdbcType="INTEGER"/>
            <result property="createUser" column="create_user" jdbcType="INTEGER"/>
            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
    </resultMap>
    <sql id="Base_Column_List">
        id,ins_sample_id,user_id,
        state,create_user,create_time
    </sql>
</mapper>
inspect-server/src/main/resources/mapper/InsUnPassMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.inspect.mapper.InsUnPassMapper">
    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.InsUnPass">
            <id property="id" column="id" jdbcType="INTEGER"/>
            <result property="sample" column="sample" jdbcType="VARCHAR"/>
            <result property="inspectionItem" column="inspection_item" jdbcType="VARCHAR"/>
            <result property="inspectionItemSubclass" column="inspection_item_subclass" jdbcType="VARCHAR"/>
            <result property="lastValue" column="last_value" jdbcType="VARCHAR"/>
            <result property="model" column="model" jdbcType="VARCHAR"/>
            <result property="handleSuggestion" column="handle_suggestion" jdbcType="VARCHAR"/>
            <result property="entrustCode" column="entrust_code" jdbcType="VARCHAR"/>
            <result property="name" column="name" jdbcType="VARCHAR"/>
            <result property="createUser" column="create_user" jdbcType="INTEGER"/>
            <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
    </resultMap>
    <select id="pageInsUnPass" resultType="com.ruoyi.inspect.dto.UnPassPageDto">
        SELECT * FROM
            ins_un_pass iu
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
    </select>
</mapper>
inspect-server/src/main/resources/mapper/SampleOrderMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.inspect.mapper.SampleOrderMapper">
    <resultMap id="map" type="com.ruoyi.inspect.dto.SampleOrderDto">
        <id property="id" column="id" jdbcType="INTEGER"/>
        <result property="insResult" column="ins_result" jdbcType="INTEGER"/>
        <result property="insOrderId" column="ins_order_id" jdbcType="INTEGER"/>
        <result property="joinModel" column="join_model" jdbcType="VARCHAR"/>
        <result property="joinName" column="join_name" jdbcType="VARCHAR"/>
        <result property="sampleCode" column="sample_code" jdbcType="VARCHAR"/>
        <result property="factory" column="factory" jdbcType="VARCHAR"/>
        <result property="laboratory" column="laboratory" jdbcType="VARCHAR"/>
        <result property="sampleType" column="sample_type" jdbcType="VARCHAR"/>
        <result property="sample" column="sample" jdbcType="VARCHAR"/>
        <result property="model" column="model" jdbcType="VARCHAR"/>
        <result property="isLeave" column="is_leave" jdbcType="INTEGER"/>
        <result property="leaveNum" column="leave_num" jdbcType="INTEGER"/>
        <result property="insProgress" column="ins_progress" jdbcType="VARCHAR"/>
        <result property="insState" column="ins_state" jdbcType="INTEGER"/>
        <result property="sendTime" column="send_time" jdbcType="TIMESTAMP"/>
        <result property="joinNum" column="join_num" jdbcType="INTEGER"/>
        <result property="remark" column="remark" jdbcType="VARCHAR"/>
        <result property="appointed" column="appointed" jdbcType="TIMESTAMP"/>
        <result property="createUser" column="create_user" jdbcType="INTEGER"/>
        <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
        <association property="insOrderList" javaType="com.ruoyi.inspect.pojo.InsOrder">
            <id property="id" column="id" jdbcType="INTEGER"/>
            <result property="entrustCode" column="entrust_code" jdbcType="VARCHAR"/>
            <result property="custom" column="custom" jdbcType="VARCHAR"/>
            <result property="company" column="company" jdbcType="VARCHAR"/>
            <result property="code" column="code" jdbcType="VARCHAR"/>
            <result property="type" column="type" jdbcType="INTEGER"/>
            <result property="appointed" column="appointed" jdbcType="TIMESTAMP"/>
            <result property="state" column="state" jdbcType="INTEGER"/>
            <result property="remark" column="remark" jdbcType="VARCHAR"/>
            <result property="otcCode" column="otc_code" jdbcType="VARCHAR"/>
            <result property="createUser" column="create_user" jdbcType="INTEGER"/>
            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
            <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
        </association>
    </resultMap>
    <select id="selectSampleOrderList" resultMap="map">
        select * from(
        select s.id,
        s.join_name,
        o.create_user,
        o.create_time,
        o.update_user,
        o.update_time
        from ins_sample s
        left join ins_order o on s.ins_order_id = o.id
        )a
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
    </select>
</mapper>
inspect-server/src/main/resources/mapper/WarehouseCellMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.inspect.mapper.WarehouseCellMapper">
    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.WarehouseCell">
        <id property="id" column="id" jdbcType="INTEGER"/>
        <result property="row" column="row" jdbcType="INTEGER"/>
        <result property="col" column="col" jdbcType="INTEGER"/>
        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
        <result property="createUser" column="create_user" jdbcType="INTEGER"/>
        <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
        <result property="state" column="state" jdbcType="INTEGER"/>
        <result property="shelfId" column="shelf_id" jdbcType="INTEGER"/>
    </resultMap>
    <select id="getWarehouse" resultMap="WarehouseCellAndHistoryDto">
        select wc.id, wc.row, wc.col, i.id sampleId, i.sample, i.model, i.sample_code from warehouse_cell wc
        left join ins_sample i on i.cell_id = wc.id
        where wc.state = 1
        and wc.shelf_id = #{shelfId}
        order by wc.id
    </select>
    <resultMap id="WarehouseCellAndHistoryDto" type="com.ruoyi.inspect.dto.WarehouseCellAndSampleDto">
        <id property="id" column="id" jdbcType="INTEGER"/>
        <result property="row" column="row" jdbcType="INTEGER"/>
        <result property="col" column="col" jdbcType="INTEGER"/>
        <collection property="samples" resultMap="InsSample"/>
    </resultMap>
    <resultMap id="InsSample" type="com.ruoyi.inspect.pojo.InsSample">
        <id property="id" column="sampleId"/>
        <result property="sample" column="sample"/>
        <result property="model" column="model"/>
        <result property="sampleCode" column="sample_code"/>
    </resultMap>
</mapper>
inspect-server/src/main/resources/mapper/WarehouseHistoryMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.inspect.mapper.WarehouseHistoryMapper">
    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.WarehouseHistory">
            <id property="id" column="id" jdbcType="INTEGER"/>
            <result property="insSampleId" column="ins_sample_id" jdbcType="INTEGER"/>
            <result property="state" column="state" jdbcType="INTEGER"/>
            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
            <result property="createUser" column="create_user" jdbcType="INTEGER"/>
            <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
            <result property="cellId" column="cell_id" jdbcType="INTEGER"/>
    </resultMap>
    <select id="getUserNameById" resultType="java.lang.String">
        select name from user where id = #{userId}
    </select>
    <select id="getHistoryListBySampleId" resultType="com.ruoyi.inspect.dto.HistoryDto">
        select wh.*,u.name createUserName from warehouse_history wh
        left join user u on u.id = wh.create_user
        where wh.ins_sample_id = #{sampleId}
        order by wh.id desc
    </select>
</mapper>
inspect-server/src/main/resources/mapper/WarehouseMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.inspect.mapper.WarehouseMapper">
    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.Warehouse">
            <id property="id" column="id" jdbcType="INTEGER"/>
            <result property="name" column="name" jdbcType="VARCHAR"/>
            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
            <result property="createUser" column="create_user" jdbcType="INTEGER"/>
            <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
    </resultMap>
    <resultMap id="Warehouse" type="com.ruoyi.inspect.dto.WarehouseDto">
        <id property="id" column="id" jdbcType="INTEGER"/>
        <result property="name" column="name" jdbcType="VARCHAR"/>
        <collection property="warehouseShelfList" resultMap="shelf"/>
    </resultMap>
    <resultMap id="shelf" type="com.ruoyi.inspect.pojo.WarehouseShelf">
        <id property="id" column="sId" jdbcType="INTEGER"/>
        <result property="name" column="sName" jdbcType="VARCHAR"/>
        <result property="row" column="row" jdbcType="INTEGER"/>
        <result property="col" column="col" jdbcType="INTEGER"/>
    </resultMap>
    <select id="selectWarehouseList" resultMap="Warehouse">
        select w.id,w.name,ws.id sId,ws.name sName,ws.row,ws.col,ws.warehouse_id from warehouse w
        left join warehouse_shelf ws on w.id = ws.warehouse_id
    </select>
</mapper>
inspect-server/src/main/resources/mapper/WarehouseShelfMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.inspect.mapper.WarehouseShelfMapper">
    <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.WarehouseShelf">
            <id property="id" column="id" jdbcType="INTEGER"/>
            <result property="name" column="name" jdbcType="VARCHAR"/>
            <result property="row" column="row" jdbcType="INTEGER"/>
            <result property="col" column="col" jdbcType="INTEGER"/>
            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
            <result property="createUser" column="create_user" jdbcType="INTEGER"/>
            <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
            <result property="warehouseId" column="warehouse_id" jdbcType="INTEGER"/>
    </resultMap>
</mapper>
pom.xml
@@ -45,12 +45,17 @@
        <hutool.version>5.8.18</hutool.version>
        <easyexcel.version>3.3.2</easyexcel.version>
        <poi.tl.version>1.12.2</poi.tl.version>
        <amqp.version>3.2.6</amqp.version>
    </properties>
    <!-- ä¾èµ–声明 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-amqp</artifactId>
                <version>${amqp.version}</version>
            </dependency>
            <!-- è¦†ç›–SpringFramework的依赖配置-->
            <dependency>
                <groupId>org.springframework</groupId>
ruoyi-common/src/main/java/com/ruoyi/common/utils/EasyExcelUtils.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,181 @@
package com.ruoyi.common.utils;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.metadata.style.WriteFont;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
/**
*@author: Zou, Yu
*@description:
*@date: 2023/9/24 0024 13:18
**/
public class EasyExcelUtils {
    public static HorizontalCellStyleStrategy getStyleStrategy(){
        return getStyleStrategy(IndexedColors.WHITE);
    }
    /**
     * color枚举: IndexedColors
     * @param color
     * @return
     */
    public static HorizontalCellStyleStrategy getStyleStrategy(IndexedColors color) {
        // å¤´çš„ç­–ç•¥
        WriteCellStyle headWriteCellStyle = new WriteCellStyle();
        // èƒŒæ™¯è®¾ç½®ä¸ºç°è‰²
        headWriteCellStyle.setFillForegroundColor(color.getIndex());
        WriteFont headWriteFont = new WriteFont();
        headWriteFont.setFontHeightInPoints((short) 10);
        // å­—体样式
        headWriteFont.setFontName("宋体");
        headWriteCellStyle.setWriteFont(headWriteFont);
        // è‡ªåŠ¨æ¢è¡Œ
        headWriteCellStyle.setWrapped(false);
        // æ°´å¹³å¯¹é½æ–¹å¼
        headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
        // åž‚直对齐方式
        headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        // å†…容的策略
        WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
        // è¿™é‡Œéœ€è¦æŒ‡å®š FillPatternType ä¸ºFillPatternType.SOLID_FOREGROUND ä¸ç„¶æ— æ³•显示背景颜色.头默认了 FillPatternType所以可以不指定
//        contentWriteCellStyle.setFillPatternType(FillPatternType.SQUARES);
//        contentWriteCellStyle.setDataFormat((short) 49);
        // èƒŒæ™¯ç™½è‰²
        contentWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
        WriteFont contentWriteFont = new WriteFont();
        // å­—体大小
        contentWriteFont.setFontHeightInPoints((short) 11);
        // å­—体样式
        contentWriteFont.setFontName("宋体");
        contentWriteCellStyle.setWriteFont(contentWriteFont);
        // å†…容居中对齐
        contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
        //内容垂直居中
        contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        //边框设置
        contentWriteCellStyle.setBorderTop(BorderStyle.THIN);
        contentWriteCellStyle.setBorderRight(BorderStyle.THIN);
        contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);
        contentWriteCellStyle.setBorderLeft(BorderStyle.THIN);
        // è¿™ä¸ªç­–略是 å¤´æ˜¯å¤´çš„æ ·å¼ å†…容是内容的样式 å…¶ä»–的策略可以自己实现
        return new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
    }
    public static HorizontalCellStyleStrategy getStyleFixedStrategy() {
        // å¤´çš„ç­–ç•¥
        WriteCellStyle headWriteCellStyle = new WriteCellStyle();
        // èƒŒæ™¯è®¾ç½®ä¸ºç°è‰²
        headWriteCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
        WriteFont headWriteFont = new WriteFont();
        headWriteFont.setFontHeightInPoints((short) 12);
        // å­—体样式
        headWriteFont.setFontName("Calibri");
        headWriteCellStyle.setWriteFont(headWriteFont);
        // è‡ªåŠ¨æ¢è¡Œ
        headWriteCellStyle.setWrapped(false);
        // æ°´å¹³å¯¹é½æ–¹å¼
        headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
        // åž‚直对齐方式
        headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        // å†…容的策略
        WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
        // è¿™é‡Œéœ€è¦æŒ‡å®š FillPatternType ä¸ºFillPatternType.SOLID_FOREGROUND ä¸ç„¶æ— æ³•显示背景颜色.头默认了 FillPatternType所以可以不指定
//        contentWriteCellStyle.setFillPatternType(FillPatternType.SQUARES);
        // èƒŒæ™¯ç™½è‰²
        contentWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
        WriteFont contentWriteFont = new WriteFont();
        // å­—体大小
        contentWriteFont.setFontHeightInPoints((short) 10);
        // å­—体样式
        contentWriteFont.setFontName("Calibri");
        contentWriteCellStyle.setWriteFont(contentWriteFont);
        // å†…容左对齐
        contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.LEFT);
        // è¿™ä¸ªç­–略是 å¤´æ˜¯å¤´çš„æ ·å¼ å†…容是内容的样式 å…¶ä»–的策略可以自己实现
        return new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
    }
    public static HorizontalCellStyleStrategy getArveStyleStrategy() {
        // å¤´çš„ç­–ç•¥
        WriteCellStyle headWriteCellStyle = new WriteCellStyle();
        // èƒŒæ™¯è®¾ç½®ä¸º
        headWriteCellStyle.setFillForegroundColor(IndexedColors.BLACK.getIndex());
        WriteFont headWriteFont = new WriteFont();
        headWriteFont.setFontHeightInPoints((short) 12);
        // å­—体样式
        headWriteFont.setFontName("Calibri");
        headWriteFont.setColor(IndexedColors.WHITE.getIndex());
        headWriteCellStyle.setWriteFont(headWriteFont);
        headWriteCellStyle.setBorderBottom(BorderStyle.MEDIUM);
        headWriteCellStyle.setLeftBorderColor(IndexedColors.WHITE.getIndex());
        headWriteCellStyle.setRightBorderColor(IndexedColors.WHITE.getIndex());
        // è‡ªåŠ¨æ¢è¡Œ
        headWriteCellStyle.setWrapped(true);
        // æ°´å¹³å¯¹é½æ–¹å¼
        headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.LEFT);
        // åž‚直对齐方式
        headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        // å†…容的策略
        WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
        // è¿™é‡Œéœ€è¦æŒ‡å®š FillPatternType ä¸ºFillPatternType.SOLID_FOREGROUND ä¸ç„¶æ— æ³•显示背景颜色.头默认了 FillPatternType所以可以不指定
//        contentWriteCellStyle.setFillPatternType(FillPatternType.SQUARES);
        // èƒŒæ™¯ç™½è‰²
        contentWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
        WriteFont contentWriteFont = new WriteFont();
        // å­—体大小
        contentWriteFont.setFontHeightInPoints((short) 10);
        // å­—体样式
        contentWriteFont.setFontName("Calibri");
        contentWriteCellStyle.setWriteFont(contentWriteFont);
        // è¿™ä¸ªç­–略是 å¤´æ˜¯å¤´çš„æ ·å¼ å†…容是内容的样式 å…¶ä»–的策略可以自己实现
        return new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
    }
    /**
     * è®¾ç½®response
     * @param response
     * @param targetName
     * @return
     */
    public static OutputStream getResponse(HttpServletResponse response, String targetName) throws IOException {
        return getResponse(response,targetName,ExcelTypeEnum.XLS.getValue());
    }
    /**
     * è®¾ç½®response
     * @param response
     * @param targetName
     * @param suffix æ–‡ä»¶åŽç¼€
     * @return
     */
    public static OutputStream getResponse(HttpServletResponse response, String targetName,String suffix) throws IOException {
        String fileName;
        try {
            fileName = targetName + suffix;
            fileName =  URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString());
            response.setContentType("application/vnd.ms-excel");
            response.setHeader("Cache-Control", "no-cache");
            response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
            response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
            return response.getOutputStream();
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }
    }
}