From 44daca093696d96e822df6584866910f7316863b Mon Sep 17 00:00:00 2001 From: chenrui <1187576398@qq.com> Date: 星期一, 10 三月 2025 17:39:54 +0800 Subject: [PATCH] lims检测中心设备代码迁移 --- cnas-require/src/main/java/com/ruoyi/requier/pojo/InformationNotification.java | 69 cnas-require/src/main/java/com/ruoyi/requier/service/QrShowService.java | 9 basic-server/src/main/java/com/ruoyi/basic/service/ProductService.java | 2 cnas-require/pom.xml | 5 ruoyi-framework/src/main/java/com/ruoyi/framework/util/RedisUtil.java | 631 ++ cnas-require/src/main/java/com/ruoyi/requier/handler/FiberOpticConnectorLossReportHandler.java | 210 cnas-require/src/main/java/com/ruoyi/requier/dto/BDto.java | 14 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsUnPassServiceImpl.java | 34 ruoyi-common/src/main/java/com/ruoyi/common/constant/ExchangeConstants.java | 7 cnas-require/src/main/java/com/ruoyi/requier/service/InformationNotificationService.java | 32 cnas-require/src/main/java/com/ruoyi/requier/mapper/PkSlaveMapper.java | 20 cnas-require/src/main/java/com/ruoyi/requier/dto/DeviceDto.java | 43 cnas-require/src/main/java/com/ruoyi/requier/service/impl/InsReportServiceImpl.java | 942 ++++ cnas-require/src/main/java/com/ruoyi/requier/handler/FiberOpticRibbonReportHandler.java | 734 +++ cnas-require/src/main/java/com/ruoyi/requier/mapper/InformationNotificationMapper.java | 20 cnas-require/src/main/resources/mapper/PkMasterMapper.xml | 19 inspect-server/src/main/java/com/ruoyi/inspect/service/InsUnPassService.java | 18 basic-server/src/main/resources/mapper/ProductMapper.xml | 6 cnas-require/src/main/java/com/ruoyi/requier/service/DataConfigService.java | 23 cnas-require/src/main/java/com/ruoyi/requier/handler/FiberConfigReportHandler.java | 617 ++ ruoyi-common/src/main/java/com/ruoyi/common/constant/RouterKeyConstants.java | 13 ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysPasswordService.java | 2 cnas-require/src/main/java/com/ruoyi/requier/pojo/DeviceMaintenance.java | 42 cnas-require/src/main/java/com/ruoyi/requier/service/impl/QrShowServiceImpl.java | 269 + cnas-require/src/main/java/com/ruoyi/requier/handler/TemperatureCyclingReportHandler1.java | 582 ++ cnas-require/src/main/java/com/ruoyi/requier/service/DeviceService.java | 65 basic-server/src/main/java/com/ruoyi/basic/mapper/ProductMapper.java | 2 cnas-require/src/main/java/com/ruoyi/requier/service/impl/DataConfigServiceImpl.java | 66 cnas-require/src/main/java/com/ruoyi/requier/service/impl/DeviceServiceImpl.java | 1119 ++++ cnas-require/src/main/java/com/ruoyi/requier/pojo/PkMaster.java | 61 cnas-require/src/main/java/com/ruoyi/requier/service/InsReportService.java | 56 cnas-require/src/main/java/com/ruoyi/requier/mapper/DeviceMapper.java | 43 basic-server/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java | 5 cnas-require/src/main/java/com/ruoyi/requier/service/impl/InsOrderPlanServiceImpl.java | 2784 ++++++++++++ cnas-require/src/main/resources/mapper/PkSlaveMapper.xml | 28 cnas-require/src/main/java/com/ruoyi/requier/pojo/DeviceMetricRecord.java | 115 cnas-require/src/main/java/com/ruoyi/requier/mapper/PkMasterMapper.java | 16 cnas-require/src/main/java/com/ruoyi/requier/service/PkMasterService.java | 21 cnas-require/src/main/java/com/ruoyi/requier/dto/InformationNotificationDto.java | 11 cnas-require/src/main/java/com/ruoyi/requier/pojo/PkSlave.java | 75 pom.xml | 4 ruoyi-framework/src/main/java/com/ruoyi/framework/util/MyUtil.java | 119 cnas-require/src/main/java/com/ruoyi/requier/pojo/DataConfig.java | 69 cnas-require/src/main/java/com/ruoyi/requier/dto/DataConfigDto.java | 39 cnas-require/src/main/java/com/ruoyi/requier/dto/DeviceConfigDtoPage.java | 70 cnas-require/src/main/java/com/ruoyi/requier/dto/DeviceMaintenanceExport.java | 45 inspect-server/src/main/java/com/ruoyi/inspect/service/InsBushingService.java | 21 ruoyi-framework/src/main/java/com/ruoyi/framework/util/MatrixToImageWriter.java | 68 cnas-require/src/main/java/com/ruoyi/requier/handler/ThermalCycleReportHandler.java | 599 ++ inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsBushingServiceImpl.java | 80 cnas-require/src/main/java/com/ruoyi/requier/util/DataAcquisition.java | 792 +++ cnas-require/src/main/java/com/ruoyi/requier/handler/BasicReportHandler.java | 556 ++ cnas-require/src/main/java/com/ruoyi/requier/mapper/DataConfigMapper.java | 22 cnas-require/src/main/resources/mapper/DeviceMapper.xml | 184 cnas-require/src/main/java/com/ruoyi/requier/controller/DeviceController.java | 263 + cnas-require/src/main/java/com/ruoyi/requier/service/InsOrderPlanService.java | 78 basic-server/src/main/java/com/ruoyi/basic/mapper/StandardProductListMapper.java | 1 cnas-require/src/main/java/com/ruoyi/requier/dto/ADto.java | 16 cnas-require/src/main/java/com/ruoyi/requier/mapper/DeviceMetricRecordMapper.java | 16 cnas-require/src/main/java/com/ruoyi/requier/handler/PiperConfigReportHandler.java | 388 + cnas-require/src/main/java/com/ruoyi/requier/pojo/Device.java | 140 cnas-require/src/main/java/com/ruoyi/requier/service/impl/InformationNotificationServiceImpl.java | 95 cnas-require/src/main/resources/mapper/InformationNotificationMapper.xml | 16 cnas-require/src/main/java/com/ruoyi/requier/service/impl/PkMasterServiceImpl.java | 809 +++ cnas-require/src/main/java/com/ruoyi/requier/handler/TemperatureTestReportHandler.java | 367 + cnas-require/src/main/resources/mapper/DeviceMaintenanceMapper.xml | 22 cnas-require/src/main/resources/mapper/DataConfigMapper.xml | 48 cnas-require/src/main/java/com/ruoyi/requier/mapper/DeviceMaintenanceMapper.java | 18 68 files changed, 13,771 insertions(+), 4 deletions(-) diff --git a/basic-server/src/main/java/com/ruoyi/basic/mapper/ProductMapper.java b/basic-server/src/main/java/com/ruoyi/basic/mapper/ProductMapper.java index 8fdbc4a..03f4375 100644 --- a/basic-server/src/main/java/com/ruoyi/basic/mapper/ProductMapper.java +++ b/basic-server/src/main/java/com/ruoyi/basic/mapper/ProductMapper.java @@ -17,6 +17,8 @@ public interface ProductMapper extends BaseMapper<Product> { IPage<Product> selectProductListByObjectId(Page page, @Param("ew") QueryWrapper<ProductDTO1> ew, @Param("partNo") String partNo); + + String getWordQrModel(Integer orderId); } diff --git a/basic-server/src/main/java/com/ruoyi/basic/mapper/StandardProductListMapper.java b/basic-server/src/main/java/com/ruoyi/basic/mapper/StandardProductListMapper.java index 2898c62..0942d94 100644 --- a/basic-server/src/main/java/com/ruoyi/basic/mapper/StandardProductListMapper.java +++ b/basic-server/src/main/java/com/ruoyi/basic/mapper/StandardProductListMapper.java @@ -7,7 +7,6 @@ import org.apache.ibatis.annotations.Param; import java.util.List; -import java.util.Map; /** * @author Administrator diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/ProductService.java b/basic-server/src/main/java/com/ruoyi/basic/service/ProductService.java index 6fdc7c2..4afa8c8 100644 --- a/basic-server/src/main/java/com/ruoyi/basic/service/ProductService.java +++ b/basic-server/src/main/java/com/ruoyi/basic/service/ProductService.java @@ -25,4 +25,6 @@ int delProduct(Integer id); void importPartExcel(List<StructureTestObjectData> list); + + String getWordQrModel(Integer orderId); } diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java index 217a86c..f6ec4d6 100644 --- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java +++ b/basic-server/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java @@ -178,4 +178,9 @@ } }); } + + @Override + public String getWordQrModel(Integer orderId) { + return baseMapper.getWordQrModel(orderId); + } } diff --git a/basic-server/src/main/resources/mapper/ProductMapper.xml b/basic-server/src/main/resources/mapper/ProductMapper.xml index 78a1353..4b9c929 100644 --- a/basic-server/src/main/resources/mapper/ProductMapper.xml +++ b/basic-server/src/main/resources/mapper/ProductMapper.xml @@ -35,4 +35,10 @@ ${ew.customSqlSegment} </if> </select> + + <select id="getWordQrModel" resultType="java.lang.String"> + SELECT GROUP_CONCAT(DISTINCT isa.model) model + FROM ins_sample isa + where isa.ins_order_id = #{orderId} + </select> </mapper> diff --git a/cnas-require/pom.xml b/cnas-require/pom.xml index 32347b9..efe458d 100644 --- a/cnas-require/pom.xml +++ b/cnas-require/pom.xml @@ -34,6 +34,11 @@ <groupId>com.ruoyi</groupId> <artifactId>inspect-server</artifactId> </dependency> + + <dependency> + <groupId>com.ruoyi</groupId> + <artifactId>cnas-process</artifactId> + </dependency> </dependencies> </project> diff --git a/cnas-require/src/main/java/com/ruoyi/requier/controller/DeviceController.java b/cnas-require/src/main/java/com/ruoyi/requier/controller/DeviceController.java new file mode 100644 index 0000000..55898d2 --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/controller/DeviceController.java @@ -0,0 +1,263 @@ +package com.ruoyi.requier.controller; + + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.utils.JackSonUtil; +import com.ruoyi.requier.dto.DataConfigDto; +import com.ruoyi.requier.dto.DeviceDto; +import com.ruoyi.requier.pojo.Device; +import com.ruoyi.requier.pojo.PkMaster; +import com.ruoyi.requier.service.DataConfigService; +import com.ruoyi.requier.service.DeviceService; +import com.ruoyi.requier.service.PkMasterService; +import com.ruoyi.system.mapper.UserMapper; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 璁惧(DeviceController)琛ㄦ帶鍒跺眰 + */ +@Api(tags = "璁惧") +@RestController +@RequestMapping("/deviceScope") +public class DeviceController { + + @Resource + private UserMapper userMapper; + @Resource + private DeviceService deviceService; + + @Value("${file.path}") + private String filePath; + + @Autowired + private DataConfigService dataConfigService; + + @Autowired + private PkMasterService pkMasterService; + + /** + * 鑾峰彇浜哄憳淇℃伅 + * @return + * @throws Exception + */ + @GetMapping("/selectUserList") + public Result selectUserList() { + return Result.success(deviceService.selectUserList()); + } + + /** + * 鏍规嵁departLimsId 鑾峰彇浜哄憳 (selectUserList鍓嶇璋冪敤鎺ュ彛澶 瀹规槗鎶ラ敊) + */ + @GetMapping("/selectUserListByDepartLimsId") + public Result selectUserListByDepartLimsId(String departLimsId) { + return Result.success(deviceService.selectUserListByDepartLimsId(departLimsId)); + } + + + @ApiOperation(value = "鏌ョ湅璁惧浜岀淮鐮佹寜閽�") + @GetMapping("/showDeviceQrCodeButton") + public void showDeviceQrCodeButton() { } + + //璁惧宸ュ叿鏄庣粏 + @ApiOperation(value = "鏌ヨ璁惧璇︽儏鍒楄〃") + @PostMapping("/selectDeviceParameter") + public Result selectDeviceParameter(@RequestBody Map<String, Object> data, @RequestParam(value = "laboratoryNameIsNull", required = false) Boolean laboratoryNameIsNull) throws Exception { + Page page = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("page")), Page.class); + DeviceDto itemParameter = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), DeviceDto.class); + return Result.success(deviceService.selectDeviceParameter(page, itemParameter, laboratoryNameIsNull)); + } + + @ApiOperation(value = "娣诲姞璁惧璇︽儏鍙傛暟") + @PostMapping("/addDeviceParameter") + public Result addDeviceParameter(@RequestBody Device itemParameter) { + return Result.success(deviceService.addDeviceParameter(itemParameter)); + } + + @ApiOperation(value = "鍒犻櫎璁惧璇︽儏鍙傛暟") + @PostMapping("/delDeviceParameter") + public Result<?> delDeviceParameter(Integer id) { + return Result.success(deviceService.delDeviceParameter(id)); + } + + @ApiOperation(value = "淇敼璁惧璇︽儏鍙傛暟") + @PostMapping("/upDeviceParameter") + public Result<?> upDeviceParameter(@RequestBody Device itemParameter) { + return Result.success(deviceService.upDeviceParameter(itemParameter)); + } + + @ApiOperation(value = "鏄惁鍏佽淇敼閲囬泦鍊�") + @DeleteMapping("/isItAllowedToModifyTheCollectedValues") + public Result<?> isItAllowedToModifyTheCollectedValues() { + return Result.success(); + } + + @ApiOperation(value = "鑾峰彇璁惧鎬昏") + @GetMapping("/selectEquipmentOverview") + public Result selectEquipmentOverview() { + return Result.success(deviceService.selectEquipmentOverview()); + } + + @ApiOperation(value = "鑾峰彇琚巿鏉冧汉") + @GetMapping("/authorizedPerson") + public Result authorizedPerson() { + return Result.success(deviceService.authorizedPerson()); + } + + @ApiOperation(value = "鎼滅储") + @GetMapping("/search") + public Result search(Integer status, String deviceName, String specificationModel, String largeCategory) { + return Result.success(deviceService.search(status, deviceName, specificationModel, largeCategory)); + } + + //鍥剧墖涓婁紶 + @ApiOperation(value = "璁惧鍥剧墖涓婁紶") + @PostMapping("/uploadFile") + public Result uploadFile(MultipartFile file) { + + System.out.println(file); + String urlString; + String pathName; + String filename = file.getOriginalFilename(); + try { + String path = filePath; + File realpath = new File(path); + if (!realpath.exists()) { + realpath.mkdirs(); + } + pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMdd")) + "-" + file.getOriginalFilename(); + urlString = realpath + "/" + pathName; + file.transferTo(new File(urlString)); + HashMap<String, String> map = new HashMap<>(); + map.put("name", filename); + map.put("url", pathName); + return Result.success(map); + } catch (Exception e) { + e.printStackTrace(); + System.err.println("鍥剧墖涓婁紶閿欒"); + return null; + } + } + + @ApiOperation(value = "鑾峰彇璁惧璐熻矗浜�") + @GetMapping("/selectDevicePrincipal") + public Result selectDevicePrincipal() { + return Result.success(deviceService.selectDevicePrincipal()); + } + + @ApiOperation(value = "閫氳繃椤圭洰鑾峰彇璁惧鍒楄〃") + @PostMapping("/selectDeviceByCategory") + public Result selectDeviceByCategory(String inspectionItem, String inspectionItemSubclass,String sonLaboratory) { + return Result.success(deviceService.selectDeviceByCategory(inspectionItem, inspectionItemSubclass,sonLaboratory)); + } + + @ApiOperation(value = "閫氳繃璁惧缂栧彿鑾峰彇璁惧鍒楄〃") + @GetMapping("/selectDeviceByCode") + public Result<DeviceDto> selectDeviceByCode(Integer id) { + return Result.success(deviceService.selectDeviceByCode(id)); + } + + /** + * + * @param request 鍙栬姹備腑鐨刬p + * @param id 妫�楠屾牱鍝� 涓婚敭id + * @param entrustCode 濮旀墭缂栧彿 + * @param sampleCode 鏍峰搧缂栧彿 + * @param fiberOpticRibbon 鍏夌氦甯︾紪鍙� + * @return + */ + @ApiOperation("/鏁伴噰-鏁版嵁閲囬泦") + @GetMapping("/dataCollection") + public Result<?> dataAcquisition(HttpServletRequest request, + @RequestParam("id") Integer id, + @RequestParam("entrustCode") String entrustCode, + @RequestParam("sampleCode") String sampleCode, + @RequestParam(value = "fiberOpticRibbon", required = false) String fiberOpticRibbon) { + return deviceService.dataAcquisition(request, id, entrustCode, sampleCode, fiberOpticRibbon); + } + + @ApiOperation(value = "鍒ゆ柇璇ヨ澶囨槸鍚﹀彲浠ユ暟閲�") + @GetMapping("/determineWhetherToCollectData") + public Result<?> determineWhetherToCollectData(@RequestParam("managementNumber") String managementNumber, HttpServletRequest request) { + return deviceService.determineWhetherToCollectData(managementNumber, request); + } + + @ApiOperation(value = "缁存姢鏁伴噰閰嶇疆") + @PostMapping("/saveDataAcquisitionConfiguration") + public Result<?> saveDataAcquisitionConfiguration(@RequestParam(value = "deviceId") Integer deviceId, @RequestBody DataConfigDto dataConfigList) { + dataConfigService.saveDataAcquisitionConfiguration(deviceId, dataConfigList); + return Result.success(); + } + + @ApiOperation(value = "鏌ヨ鏁伴噰閰嶇疆") + @GetMapping("/queryDataAcquisitionConfiguration") + public Result<?> queryDataAcquisitionConfiguration(@RequestParam("deviceId") Integer deviceId, + @RequestParam("isDevice") Boolean isDevice, + @RequestParam(value = "inspectionItem", required = false) String inspectionItem, + @RequestParam(value = "inspectionItemSubclass", required = false) String inspectionItemSubclass) { + return dataConfigService.queryDataAcquisitionConfiguration(deviceId, isDevice, inspectionItem, inspectionItemSubclass); + } + + @ApiOperation(value = "鍒犻櫎鏁伴噰閰嶇疆") + @DeleteMapping("/deleteDataAcquisitionConfiguration") + public Result<?> deleteDataAcquisitionConfiguration(@RequestParam("ids") String ids) { + List<String> split = Arrays.asList(ids.split(",")); + List<String> collect = split.stream().distinct().collect(Collectors.toList()); + dataConfigService.removeBatchByIds(collect); + return Result.success(); + } + + @ApiOperation(value = "鑿滃崟") + @PostMapping("/menu") + public Result menu() { + return Result.success(deviceService.menu()); + } + + + @ApiOperation(value = "娓╁害寰幆鏁伴噰") + @PostMapping("/temDataAcquisition") + public Result<?> temDataAcquisition(@RequestBody PkMaster pkMaster) { + return Result.success(pkMasterService.temDataAcquisition(pkMaster)); + } + + @ApiOperation(value = "宸︿晶璁惧鏍戝舰鏍�") + @GetMapping("/treeDevice") + public Result treeDevice(String deviceName) { + return Result.success(deviceService.treeDevice(deviceName)); + } + + + @ApiOperation(value = "娓╁害寰幆鏁伴噰鎬讳綋") + @PostMapping("/temDataAcquisition2") + public Result<?> temDataAcquisition2(@RequestBody PkMaster pkMaster) { + return Result.success(pkMasterService.temDataAcquisition2(pkMaster)); + } + + @ApiOperation(value = "鍒楄〃缁熻瀵煎嚭") + @PostMapping("/export") + public void exportData(@RequestBody Map<String, Object> data, HttpServletResponse response) throws Exception { +// DeviceDto deviceDto = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), DeviceDto.class); +// deviceService.export(deviceDto,response); + } + + + + +} \ No newline at end of file diff --git a/cnas-require/src/main/java/com/ruoyi/requier/dto/ADto.java b/cnas-require/src/main/java/com/ruoyi/requier/dto/ADto.java new file mode 100644 index 0000000..74d174b --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/dto/ADto.java @@ -0,0 +1,16 @@ +package com.ruoyi.requier.dto; + +import lombok.Data; + +import java.util.List; + +@Data +public class ADto { + + private int k; + private String v; + private String i; + private String p; + private boolean self; + private List<BDto> c; +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/dto/BDto.java b/cnas-require/src/main/java/com/ruoyi/requier/dto/BDto.java new file mode 100644 index 0000000..dbadaba --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/dto/BDto.java @@ -0,0 +1,14 @@ +package com.ruoyi.requier.dto; + +import lombok.Data; + +@Data +public class BDto { + + private int k; + private String v; + private String i; + private String u; + private String p; + private String g; +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/dto/DataConfigDto.java b/cnas-require/src/main/java/com/ruoyi/requier/dto/DataConfigDto.java new file mode 100644 index 0000000..abd37e0 --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/dto/DataConfigDto.java @@ -0,0 +1,39 @@ +package com.ruoyi.requier.dto; + +import com.ruoyi.requier.pojo.DataConfig; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class DataConfigDto { + + private List<DataConfig> dataConfigList; + + private Boolean isDevice; + + @ApiModelProperty("鏂囦欢鍚庣紑") + private String fileType; + + @ApiModelProperty("閲囬泦鍦板潃") + private String collectUrl; + + @ApiModelProperty("瀛樺偍鍦板潃") + private String storageUrl; + + @ApiModelProperty("璁惧IP") + private String ip; + + @ApiModelProperty("鏁伴噰-濮旀墭瀛楁") + private String entrustCode; + + @ApiModelProperty("鏁伴噰-鏍峰搧瀛楁") + private String sampleCode; + + @ApiModelProperty("鏁伴噰-db锛宮db鏂囦欢鍚嶇О") + private String dbFileName; + + @ApiModelProperty("鏁伴噰-db鏂囦欢 鍏夌氦甯︾紪鍙�") + private String fiberOpticRibbon; +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/dto/DeviceConfigDtoPage.java b/cnas-require/src/main/java/com/ruoyi/requier/dto/DeviceConfigDtoPage.java new file mode 100644 index 0000000..f09a3f4 --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/dto/DeviceConfigDtoPage.java @@ -0,0 +1,70 @@ +package com.ruoyi.requier.dto; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class DeviceConfigDtoPage { + + @ApiModelProperty(value = "璁惧鍚嶇О") + private String deviceName; + + @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛") + @TableField(fill = FieldFill.INSERT) + private Integer createUser; + + @ApiModelProperty(value = "鏂囦欢鍚庣紑") + private String fileType; + + @ApiModelProperty(value = "閲囬泦鍦板潃") + private String collectUrl; + + @ApiModelProperty(value = "瀛樺偍鍦板潃") + private String storageUrl; + + @ApiModelProperty(value = "IP鍦板潃") + private String ip; + + @ApiModelProperty(value = "妫�楠岄」") + private String inspectionItem; + + @ApiModelProperty(value = "妫�楠岄」瀛愰」") + private String inspectionItemSubclass; + + @ApiModelProperty(value = "鍏紡") + private String formula; + + @ApiModelProperty(value = "鍙傜収X") + private String referx; + + @ApiModelProperty(value = "X") + private String x; + + @ApiModelProperty(value = "鍙傜収Y") + private String refery; + + @ApiModelProperty(value = "Y") + private String y; + + private Integer id; + + @ApiModelProperty(value = "妫�楠屽璞�") + private String sample; + + @ApiModelProperty(value = "妫�楠岄」鐩甶d") + private Integer structureItemParameterId; + + @ApiModelProperty("鏁伴噰-濮旀墭瀛楁") + private String entrustCode; + + @ApiModelProperty("鏁伴噰-鏍峰搧瀛楁") + private String sampleCode; + + @ApiModelProperty("鏁伴噰-db锛宮db鏂囦欢鍚嶇О") + private String dbFileName; + + @ApiModelProperty("鏁伴噰-db鏂囦欢 鍏夌氦甯︾紪鍙�") + private String fiberOpticRibbon; +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/dto/DeviceDto.java b/cnas-require/src/main/java/com/ruoyi/requier/dto/DeviceDto.java new file mode 100644 index 0000000..5e850c6 --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/dto/DeviceDto.java @@ -0,0 +1,43 @@ +package com.ruoyi.requier.dto; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.ruoyi.requier.pojo.Device; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class DeviceDto extends Device { + + @ApiModelProperty(value = "绠$悊浜�") + private String equipmentManagerUser; + + @ApiModelProperty(value = "鎵�灞為儴闂�") + @JsonInclude(JsonInclude.Include.NON_NULL) + private String laboratoryName; + + @ApiModelProperty(value = "妫�楠岄」鐩�") + private String insProductItem; + + @ApiModelProperty(value = "绠$悊浜哄鍚�") + private String equipmentManagerName; + + @ApiModelProperty(value = "琚巿鏉冧汉濮撳悕") + private String authorizedPersonName; + + @ApiModelProperty(value = "鏍稿噯璇佷功缂栧彿") + private String calibrateNo; + + @ApiModelProperty(value = "鏈�杩戞牎鍑嗘棩鏈�") + private LocalDateTime lastCalibrationDateTwo; + + @ApiModelProperty(value = "涓嬫鏍″噯鏃ユ湡") + private LocalDateTime nextCalibrationDateTwo; + + +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/dto/DeviceMaintenanceExport.java b/cnas-require/src/main/java/com/ruoyi/requier/dto/DeviceMaintenanceExport.java new file mode 100644 index 0000000..d3421a0 --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/dto/DeviceMaintenanceExport.java @@ -0,0 +1,45 @@ +package com.ruoyi.requier.dto; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import lombok.Data; + +@Data +public class DeviceMaintenanceExport { + + @ColumnWidth(20) + @ExcelProperty("璁惧鍚嶇О") + private String deviceName; + + @ColumnWidth(20) + @ExcelProperty("娴佺▼缂栧彿") + private String deviceNumber; + + @ColumnWidth(20) + @ExcelProperty("绠$悊缂栧彿") + private String managementNumber; + + @ColumnWidth(50) + @ExcelProperty("缁存姢鍐呭") + private String content; + + @ColumnWidth(20) + @ExcelProperty("缁存姢鏃堕棿") + private String date; + + @ColumnWidth(20) + @ExcelProperty("涓嬫缁存姢鏃堕棿") + private String nextDate; + + @ColumnWidth(20) + @ExcelProperty("缁存姢绫诲瀷") + private String maintenanceType; + + @ColumnWidth(20) + @ExcelProperty("缁存姢浜�") + private String name; + + @ColumnWidth(50) + @ExcelProperty("澶囨敞") + private String comments; +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/dto/InformationNotificationDto.java b/cnas-require/src/main/java/com/ruoyi/requier/dto/InformationNotificationDto.java new file mode 100644 index 0000000..11ced67 --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/dto/InformationNotificationDto.java @@ -0,0 +1,11 @@ +package com.ruoyi.requier.dto; + +import com.ruoyi.requier.pojo.InformationNotification; +import lombok.Data; + +@Data +public class InformationNotificationDto extends InformationNotification { + private String senderUser; + + private String consigneeUser; +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/handler/BasicReportHandler.java b/cnas-require/src/main/java/com/ruoyi/requier/handler/BasicReportHandler.java new file mode 100644 index 0000000..7d07526 --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/handler/BasicReportHandler.java @@ -0,0 +1,556 @@ +package com.ruoyi.requier.handler; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.deepoove.poi.data.*; +import com.deepoove.poi.data.style.*; +import com.ruoyi.framework.util.MyUtil; +import com.ruoyi.inspect.dto.SampleProductDto; +import com.ruoyi.inspect.mapper.InsOrderMapper; +import com.ruoyi.inspect.mapper.InsSampleMapper; +import com.ruoyi.inspect.pojo.InsProduct; +import com.ruoyi.inspect.pojo.InsReport; +import com.ruoyi.requier.service.impl.InsOrderPlanServiceImpl; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.xwpf.usermodel.ParagraphAlignment; +import org.apache.poi.xwpf.usermodel.TableRowAlign; +import org.apache.poi.xwpf.usermodel.XWPFTable; +import org.apache.poi.xwpf.usermodel.XWPFTableCell; + +import java.text.Collator; +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + +/** + * 鍩虹鎶ュ憡澶勭悊绫� + */ +public class BasicReportHandler { + + /** + * 榛樿琛ㄦ牸瀹藉害 + */ + private final static int[] DEFAULT_COL_WIDTHS = {650, 1600, 2000, 750, 2800, 1100, 1100}; + + /** + * 鍏夌氦琛ㄦ牸瀹藉害 + */ + private final static int[] FIBER_COL_WIDTHS = {650, 1700, 2000, 750, 2000, 1800, 1100}; + + private final InsOrderMapper baseMapper; + + private final InsOrderPlanServiceImpl insOrderPlanServiceImpl; + + private final InsSampleMapper insSampleMapper; + + public BasicReportHandler(InsOrderMapper insOrderMapper, InsOrderPlanServiceImpl insOrderPlanServiceImpl, InsSampleMapper insSampleMapper){ + this.baseMapper = insOrderMapper; + this.insOrderPlanServiceImpl = insOrderPlanServiceImpl; + this.insSampleMapper = insSampleMapper; + } + + /** + * 鍐欏叆鏂规硶 + * @param samples 鎵�鏈夋牱鍝� + * @param insReport report瀵硅薄 + * @param tables 妫�楠岄」琛ㄦ牸鏁版嵁 + * @param standardMethod 鏍囧噯鏂规硶 + * @param models 鎵�鏈夋牱鍝佺殑鍨嬪彿 + * @param unEqualSet 鍘婚噸鐨勬墍鏈夋楠岄」鐩暟閲� + * @param modelDl 鐢靛姏鐗规畩鍨嬪彿澶勭悊 + * @param deviceSet 鍘婚噸鐨勬墍鏈夋楠岄」浣跨敤璁惧鍒楄〃 + */ + public void doWrite(List<SampleProductDto> samples, InsReport insReport, List<Map<String,Object>> tables, + Set<String> standardMethod, Set<String> models, Set<String> unEqualSet, + List<String> modelDl, Set<String> deviceSet){ + //澶勭悊鍏夌氦椤圭洰鍜屾澗濂楃,鎺掗櫎娓╁害寰幆 + List<InsProduct> fiberList = new ArrayList<>(); + samples.forEach(s->{ + fiberList.addAll(s.getInsProduct().stream().filter(p->(p.getSonLaboratory().equals("鍏夌氦璇曢獙瀹�")&&Objects.isNull(p.getSpecialItemParentId()) + ||(p.getSonLaboratory().equals("鏉愭枡璇曢獙瀹�")&&Objects.nonNull(p.getInsFiberId())) + ||(p.getInspectionItem().contains("鏉惧绠�")||p.getInspectionItemSubclass().contains("鏉惧绠�"))) + &&!p.getInspectionItem().equals("娓╁害寰幆")).collect(Collectors.toList())); + }); + if(!fiberList.isEmpty()){ + //鏍规嵁妫�楠岄」鍒嗙粍 + Map<String, List<InsProduct>> groupMap = fiberList.stream().collect(Collectors.groupingBy(g -> MyUtil.joinChars("",g.getInspectionItem(),g.getInspectionItemSubclass()))); + SampleProductDto sampleProductDto = new SampleProductDto(); + List<InsProduct> handleProductList = new ArrayList<>(); + for (String s : groupMap.keySet()) { + if(!groupMap.get(s).isEmpty()){ + List<String> lastValueList = groupMap.get(s).stream().map(InsProduct::getLastValue).map(String::trim).collect(Collectors.toList()); + String lastValue = ""; + boolean a = lastValueList.contains("绗﹀悎"); + if(lastValueList.contains("绗﹀悎") || lastValueList.contains("涓嶇鍚�") || lastValueList.contains("涓嶅垽瀹�")){ + long count1 = lastValueList.stream().filter(f->f.equals("绗﹀悎")).count(); + long count2 = lastValueList.stream().filter(f->f.equals("涓嶇鍚�")).count(); + if(count1>0&&count2==0){ + lastValue = "绗﹀悎"; + }else if(count2>0){ + lastValue = "涓嶇鍚�"; + }else{ + lastValue="涓嶅垽瀹�"; + } + }else { + double maxLastValue = lastValueList.stream().mapToDouble(Double::parseDouble).max().orElse(0); + double minLastValue = lastValueList.stream().mapToDouble(Double::parseDouble).min().orElse(0); + lastValue = minLastValue+"-"+maxLastValue; + + } + InsProduct insProduct = groupMap.get(s).get(0); + sampleProductDto.setModel(insProduct.getModel()); + insProduct.setLastValue(lastValue); + handleProductList.add(insProduct); + } + } + handleProductList.sort((o1,o2)->{ + //鏍规嵁妫�楠岄」鎺掑簭 + if(!Objects.equals(o1.getInspectionItem(),o2.getInspectionItem())){ + List<String> specialItems = Arrays.asList("鑰愮幆澧冨簲鍔涘紑瑁�","鐑敹缂╃巼"); + if(specialItems.contains(o1.getInspectionItem()) && specialItems.contains(o2.getInspectionItem())){ + return Integer.MAX_VALUE; + } + Collator instance = Collator.getInstance(Locale.CHINA); + return instance.compare(o1.getInspectionItem(),o2.getInspectionItem()); + } + //妫�楠屽瓙椤规帓搴� + if(StringUtils.isNotBlank(o1.getInspectionItemSubclass())&& StringUtils.isNotBlank(o2.getInspectionItemSubclass())){ + if(!Objects.equals(o1.getInspectionItemSubclass(),o2.getInspectionItemSubclass())){ + Collator instance = Collator.getInstance(Locale.CHINA); + return instance.compare(o1.getInspectionItemSubclass(),o2.getInspectionItemSubclass()); + } + } + return 0; + }); + sampleProductDto.setInsProduct(handleProductList); + //鍐欏叆琛ㄦ牸 + writeTableRow(sampleProductDto,insReport,tables,FIBER_COL_WIDTHS); + } + samples.forEach(a -> { + Set<Integer> set = new HashSet<>(); + Map<Integer, String> map2 = new HashMap<>(); + //娣诲姞鎵�鏈夋楠岄」 + unEqualSet.addAll(a.getInsProduct().stream().map(m->m.getInspectionItem()+m.getInspectionItemSubclass()).collect(Collectors.toList())); + models.add(a.getModel()); + standardMethod.add(baseMapper.getStandardMethodCode(a.getStandardMethodListId())); + insOrderPlanServiceImpl.getTemplateThing(set, map2, a.getInsProduct()); + for (InsProduct b : a.getInsProduct()) { + if("鐢靛姏璇曢獙瀹�".equals(b.getSonLaboratory()) && Arrays.asList("閽㈡潗","閾濇潗").contains(b.getSample())){ + modelDl.add(b.getModel()); + } + if (b.getInsProductResult() != null) { + if (ObjectUtils.isNotEmpty(b.getInsProductResult().getEquipValue())) { + List<JSONObject> jsonObjects = JSON.parseArray(b.getInsProductResult().getEquipValue(), JSONObject.class); + for (JSONObject jsonObject : jsonObjects) { + if (!(jsonObject.get("v") + "").isEmpty()) { + deviceSet.add(jsonObject.get("v") + ""); + } + } + } + } + } + //鍐欏叆琛ㄦ牸 + //鎺掗櫎鍏夌氦璇曢獙瀹ょ殑椤圭洰鍜屾澗濂楃锛岄櫎浜嗘俯搴﹀惊鐜� + a.setInsProduct(a.getInsProduct().stream() + .filter(p->(!p.getSonLaboratory().equals("鍏夌氦璇曢獙瀹�")&&Objects.isNull(p.getInsFiberId()))||p.getInspectionItem().equals("娓╁害寰幆")) + .filter(p->!p.getInspectionItem().contains("鏉惧绠�")&&!p.getInspectionItemSubclass().contains("鏉惧绠�")) + .collect(Collectors.toList())); + writeTableRow(a,insReport,tables,DEFAULT_COL_WIDTHS); + }); + } + + /** + * 鍐欏叆琛ㄦ牸琛� + * @param a 鏍峰搧淇℃伅 + * @param insReport report瀵硅薄 + * @param tables 妫�楠岄」琛ㄦ牸瀵硅薄 + * @param colWidths 琛ㄦ牸鍒楀璁剧疆 + */ + private static void writeTableRow(SampleProductDto a,InsReport insReport,List<Map<String,Object>> tables,int[] colWidths){ + List<RowRenderData> rows = new ArrayList<>(); + AtomicInteger index = new AtomicInteger(); + Set<String> itemSet = new HashSet<>(); + for (int i = 0; i < 3 + a.getInsProduct().size(); i++) { + RowRenderData rowRenderData = new RowRenderData(); + RowStyle rowStyle = new RowStyle(); + rowStyle.setHeight(40); + rowRenderData.setRowStyle(rowStyle); + List<CellRenderData> cells = new ArrayList<>(); + if (i >= 2 && i < 2 + a.getInsProduct().size()) { + if (itemSet.add(a.getInsProduct().get(i - 2).getInspectionItem())) { + index.getAndIncrement(); + } + } + //鍒楁暟 + for (int j = 0; j < 7; j++) { + CellRenderData cellRenderData = new CellRenderData(); + CellStyle cellStyle = new CellStyle(); + cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER); + cellRenderData.setCellStyle(cellStyle); + List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>(); + ParagraphRenderData paragraphRenderData = new ParagraphRenderData(); + ParagraphStyle paragraphStyle = new ParagraphStyle(); + paragraphStyle.setAlign(ParagraphAlignment.CENTER); + paragraphRenderData.setParagraphStyle(paragraphStyle); + List<RenderData> renderData = new ArrayList<>(); + TextRenderData textRenderData = new TextRenderData(); + Style style = new Style(); + style.setFontFamily("瀹嬩綋"); + style.setFontSize(10); + style.setColor("000000"); + textRenderData.setStyle(style); + if (i == 0) { + //绗竴琛� + if (j == 0 || j == 1) { + //绗竴鍒楀拰绗簩鍒� + if(StringUtils.isNotBlank(a.getSampleCode())){ + textRenderData.setText("鏍峰搧缂栧彿@Sample number鈭�1"); + }else{ + textRenderData.setText("瑙勬牸鍨嬪彿@Type鈭�0302"); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 2 || j == 3) { + //绗笁鍒楀拰绗洓鍒� + if(StringUtils.isNotBlank(a.getSampleCode())){ + textRenderData.setText(a.getSampleCode() + "鈭�2"); + }else{ + textRenderData.setText("瑙勬牸鍨嬪彿@Type鈭�0302"); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 4) { + //绗簲鍒� + textRenderData.setText("瑙勬牸鍨嬪彿@Type鈭�0302"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else { + //绗叚鍒楀拰绗竷鍒� + textRenderData.setText(a.getModel() + "鈭�3"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } else if (i == 1) { + //绗簩琛� + if (j == 0) { + //绗竴鍒� + textRenderData.setText("搴忓彿@No."); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 1 || j == 2) { + //绗簩鍒楀拰绗笁鍒� + textRenderData.setText("妫�娴嬮」鐩瓳Testing item鈭�4"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 3) { + //绗洓鍒� + textRenderData.setText("鍗曚綅@Unit"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 4) { + //绗簲鍒� + textRenderData.setText("鏍囧噯瑕佹眰@Requirement"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 5) { + //绗叚鍒� + textRenderData.setText("妫�楠岀粨鏋淍Test result"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else { + //绗竷鍒� + textRenderData.setText("缁撹@Conclusion"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } else if (i == 2 + a.getInsProduct().size()) { + //鏈�鍚庝竴琛� + if (j == 0 || j == 1) { + //绗竴鍒楀拰绗簩鍒� + textRenderData.setText("澶囨敞鈭�5"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else { + //鍏朵綑鍒� + textRenderData.setText("鈥溾垰鈥濊〃绀洪」鐩悎鏍硷紝鈥溍椻�濊〃绀洪」鐩笉鍚堟牸銆侤鈥溾垰鈥� indicates test item is qualified,鈥溍椻�� indicates test item is not qualified 鈭�6"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } else { + //鍏朵綑琛� + if (j == 0) { + //绗竴鍒� + textRenderData.setText(index + "鈭�2" + index); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 1) { + //绗簩鍒� + InsProduct insProduct = a.getInsProduct().get(i - 2); + if (ObjectUtil.isNotEmpty(insProduct.getInspectionItemSubclass())) { + if (ObjectUtil.isNotEmpty(insProduct.getInspectionItemEn())) { + String str = MyUtil.joinChars("@",insProduct.getInspectionItem(),insProduct.getInspectionItemEn()); + textRenderData.setText(str + "鈭�3" + str); + } else { + textRenderData.setText(insProduct.getInspectionItem() + "鈭�3" + insProduct.getInspectionItem()); + } + } else { + if (ObjectUtil.isNotEmpty(insProduct.getInspectionItemEn())) { + String str = MyUtil.joinChars("@",insProduct.getInspectionItem(),insProduct.getInspectionItemEn()); + textRenderData.setText(str + "鈭�3" + str); + } else { + textRenderData.setText(insProduct.getInspectionItem() + "鈭�3" + insProduct.getInspectionItem()); + } + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 2) { + //绗笁鍒� + InsProduct insProduct = a.getInsProduct().get(i - 2); + if (ObjectUtil.isNotEmpty(insProduct.getInspectionItemSubclass())) { + if (ObjectUtil.isNotEmpty(insProduct.getInspectionItemSubclassEn())) { + String str = MyUtil.joinChars("@",insProduct.getInspectionItemSubclass(),insProduct.getInspectionItemSubclassEn()); + textRenderData.setText(str); + } else { + textRenderData.setText(insProduct.getInspectionItemSubclass()); + } + } else { + if (ObjectUtil.isNotEmpty(insProduct.getInspectionItemEn())) { + String str = MyUtil.joinChars("@",insProduct.getInspectionItem(),insProduct.getInspectionItemEn()); + textRenderData.setText(str + "鈭�3" + str); + } else { + textRenderData.setText(insProduct.getInspectionItem() + "鈭�3" + insProduct.getInspectionItem()); + } + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 3) { + //绗洓鍒� + textRenderData.setText(ObjectUtil.isNotEmpty(a.getInsProduct().get(i - 2).getUnit()) ? a.getInsProduct().get(i - 2).getUnit() : ""); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 4) { + //绗簲鍒� + textRenderData.setText(a.getInsProduct().get(i - 2).getTell()); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 5) { + //绗叚鍒� + textRenderData.setText(a.getInsProduct().get(i - 2).getLastValue()); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else { + //绗竷鍒� + InsProduct p = a.getInsProduct().get(i - 2); + if (p.getInsResult() == 0) { + textRenderData.setText("脳"); + } else if (a.getInsProduct().get(i - 2).getInsResult() == 1) { + textRenderData.setText("鈭�"); + } else { + textRenderData.setText("-"); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + } + rowRenderData.setCells(cells); + if (!rowRenderData.getCells().isEmpty()) { + rows.add(rowRenderData); + } + } + //鍐欏叆琛ㄦ牸鐨勮 + TableRenderData tableRenderData = new TableRenderData(); + tableRenderData.setRows(rows); + + List<TableRenderData> tables1 = new ArrayList<>(); + tableRenderData.setRows(new ArrayList<>()); + double totalHeight = 0; + double heightThreshold = 700.0; // 鍗曢〉楂樺害闃堝�� + List<RowRenderData> firstTwoRows = new ArrayList<>(); // 淇濆瓨鍓嶄袱琛屼互渚垮鍒跺埌鏂拌〃鏍� + List<RowRenderData> endRows = new ArrayList<>(); // 淇濆瓨鍓嶄袱琛屼互渚垮鍒跺埌鏂拌〃鏍� + // 淇濆瓨鍓嶄袱琛屼互渚垮鍒跺埌鏂拌〃鏍� + firstTwoRows.add(rows.get(0)); + firstTwoRows.add(rows.get(1)); + endRows.add(rows.get(rows.size() - 1)); + for (RowRenderData row : rows) { + double rowHeight = row.getRowStyle().getHeight(); // 鑾峰彇褰撳墠琛岀殑琛岄珮 + // 鍒ゆ柇瀛椾綋鍐呭鏄惁鏈夊鐨�, 澶氱殑琛岄珮涔樺�嶆暟 + RowRenderData lastRaw = rows.get(rows.size() - 1); + // 鎺掗櫎鏈�鍚庝竴琛� + if (rows.get(0) != row && rows.get(1) != row && lastRaw != row) { + // 璋冩暣楂樺害 + rowHeight = adjustRowHeight(row, rowHeight); + } + totalHeight += rowHeight; // 鏇存柊鎬昏楂� + if (totalHeight> heightThreshold) { + tableRenderData.getRows().addAll(endRows); + // 鍒涘缓鏂拌〃鏍煎苟澶嶅埗鍓嶄袱琛� + TableRenderData newTableRenderData = new TableRenderData(); + newTableRenderData.setRows(new ArrayList<>(firstTwoRows)); + //璁剧疆鏍峰紡 + TableStyle tableStyle = new TableStyle(); + tableStyle.setColWidths(colWidths); + tableStyle.setWidth("10000"); + tableStyle.setAlign(TableRowAlign.CENTER); + BorderStyle borderStyle = new BorderStyle(); + borderStyle.setColor("000000"); + borderStyle.setType(XWPFTable.XWPFBorderType.THICK); + borderStyle.setSize(14); + tableStyle.setLeftBorder(borderStyle); + tableStyle.setTopBorder(borderStyle); + tableStyle.setRightBorder(borderStyle); + tableStyle.setBottomBorder(borderStyle); + tableRenderData.setTableStyle(tableStyle); + newTableRenderData.setTableStyle(tableStyle); + // 娣诲姞鏈�鍚庝竴琛� + tableRenderData.addRow(rows.get(rows.size() - 1)); + tables1.add(tableRenderData); + tableRenderData = newTableRenderData; + totalHeight = 180 + rowHeight;//180涓烘柊椤甸潰琛ㄥご鍜屾渶鍚庝竴琛岀殑楂樺害 + } + tableRenderData.getRows().add(row); + } + if (!tableRenderData.getRows().isEmpty() && tableRenderData.getRows().size() != 3) { + //璁剧疆鏍峰紡 + TableStyle tableStyle = new TableStyle(); + tableStyle.setColWidths(colWidths); + tableStyle.setWidth("10000"); + tableStyle.setAlign(TableRowAlign.CENTER); + BorderStyle borderStyle = new BorderStyle(); + borderStyle.setColor("000000"); + borderStyle.setType(XWPFTable.XWPFBorderType.THICK); + borderStyle.setSize(14); + tableStyle.setLeftBorder(borderStyle); + tableStyle.setTopBorder(borderStyle); + tableStyle.setRightBorder(borderStyle); + tableStyle.setBottomBorder(borderStyle); + tableRenderData.setTableStyle(tableStyle); + tables1.add(tableRenderData); + } + tables1.forEach(table -> { + Map<String, Object> tableMap = new HashMap<>(); + tableMap.put("table", table); + tableMap.put("report", insReport); + tables.add(tableMap); + }); + } + + + + /** + * 璋冩暣楂樺害 + * @param row + * @param rowHeight + * @return + */ + private static double adjustRowHeight(RowRenderData row, double rowHeight) { + // 鏍规嵁妫�楠岄」鐩悕绉拌繘琛岄珮搴﹁皟鏁� + //鏍规嵁妫�楠岄」(i:1)銆佹楠屽瓙椤�(i:2)銆佹爣鍑嗚姹�(i:4)涓瓧绗︽渶闀跨殑鏉ヨ绠� + TextRenderData insItemData = (TextRenderData) row.getCells().get(1).getParagraphs().get(0).getContents().get(0); + if(insItemData.getText().contains("鎴愬垎鍒嗘瀽")){ + return rowHeight; + } + TextRenderData insSubItemData = (TextRenderData) row.getCells().get(2).getParagraphs().get(0).getContents().get(0); + TextRenderData requiredData = (TextRenderData) row.getCells().get(4).getParagraphs().get(0).getContents().get(0); + String dataText = insItemData.getText(); + if(insSubItemData.getText().length()>dataText.length()){ + dataText = insSubItemData.getText(); + } + if(Objects.nonNull(requiredData) && requiredData.getText().length()>dataText.length()){ + dataText = requiredData.getText(); + } + TextRenderData valueData = (TextRenderData) row.getCells().get(5).getParagraphs().get(0).getContents().get(0); + String valueText = valueData.getText(); + // 鑾峰彇妫�娴嬪唴瀹瑰垽鏂槸鍚﹁秴鍑� + if (StringUtils.isNotBlank(dataText)) { + double number = 1; + double chinaLength = 10; + double englishLength = 20; + double valueLength = 2; + // 鏍规嵁@绗﹀彿鎴彇涓嫳鏂� + String[] splits = dataText.split("鈭�"); + String[] split; + if(splits.length>0){ + split = splits[0].split("@"); + }else{ + split = dataText.split("@"); + } + // 鏂囧瓧鍊嶆暟 + double chinaMultiple = (Math.ceil(split[0].length() / chinaLength)) - 1; + // 鑻辨枃鍊嶆暟 + double englishMultiple = 0; + if(split.length>1){ + englishMultiple = (Math.ceil(split[1].length() / englishLength)) - 1; + } + double multiple = number + chinaMultiple * 0.5 + englishMultiple * 0.5; + if (StringUtils.isNotBlank(valueText)) { + double valueMultiple = (Math.ceil(valueText.length() / valueLength)) - 1; + if (multiple < number + valueMultiple * 0.4) { + multiple = number + valueMultiple * 0.4; + } + } + rowHeight = rowHeight * multiple; + } + return rowHeight; + } + +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/handler/FiberConfigReportHandler.java b/cnas-require/src/main/java/com/ruoyi/requier/handler/FiberConfigReportHandler.java new file mode 100644 index 0000000..0977bdb --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/handler/FiberConfigReportHandler.java @@ -0,0 +1,617 @@ +package com.ruoyi.requier.handler; + +import com.deepoove.poi.data.*; +import com.deepoove.poi.data.style.*; +import com.ruoyi.framework.exception.ErrorException; +import com.ruoyi.framework.util.MyUtil; +import com.ruoyi.inspect.dto.SampleProductDto; +import com.ruoyi.inspect.mapper.InsProductMapper; +import com.ruoyi.inspect.mapper.InsSampleMapper; +import com.ruoyi.inspect.pojo.InsProduct; +import com.ruoyi.inspect.pojo.InsReport; +import com.ruoyi.inspect.pojo.InsSample; +import com.ruoyi.inspect.vo.InsProductFiberVO; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.xwpf.usermodel.ParagraphAlignment; +import org.apache.poi.xwpf.usermodel.TableRowAlign; +import org.apache.poi.xwpf.usermodel.XWPFTable; +import org.apache.poi.xwpf.usermodel.XWPFTableCell; + +import java.text.Collator; +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + +/** + * 鍏夌氦閰嶇疆鎶ュ憡澶勭悊绫� + */ +public class FiberConfigReportHandler { + + /** + * 榛樿琛ㄦ牸瀹藉害 + */ + private final static int[] DEFAULT_COL_WIDTHS = {1600,0, 1200, 1200, 1200, 1200, 1200, 1200,1200}; + + private final InsProductMapper insProductMapper; + private final InsSampleMapper insSampleMapper; + + public FiberConfigReportHandler(InsProductMapper insProductMapper, InsSampleMapper insSampleMapper){ + this.insProductMapper = insProductMapper; + this.insSampleMapper = insSampleMapper; + } + + private final static String ITEM_SPLIT_CHAR = "&";//妫�楠岄」鍒嗛殧绗� + + private final static String COLOR_SPLIT_CHAR = "-";//鑹叉爣鍒嗛殧绗� + + /** + * + * @param samples 鎵�鏈夋牱鍝� + * @param insReport report瀵硅薄 + * @param tables2 鍏夌氦閰嶇疆闄勪欢琛ㄦ牸琛屽垪琛� + * @param colorDict 鑹叉爣瀛楀吀 + */ + public void doWrite(List<SampleProductDto> samples, InsReport insReport, List<Map<String,Object>> tables2, + List<String> colorDict){ + AtomicInteger index2 = new AtomicInteger(1);//椤电爜 + samples.forEach(sample -> { + //鏌ヨ鏍峰搧涓嬬殑妫�楠岄」鍜岃壊鏍� + List<InsProductFiberVO> insProducts1 = insProductMapper.selectInsProductInsFiberList(sample.getId()); + //鏍规嵁鑹叉爣鍒嗙粍 + Map<String,List<InsProductFiberVO>> groupProducts = insProducts1.stream() + .filter(p->!p.getInspectionItem().equals("鍏夌氦鎺ュご鎹熻��")) + .collect(Collectors.groupingBy(product -> product.getBushColor()+"-"+product.getColor())); + if(groupProducts.isEmpty()){ + return; + } + List<String[]> collect = groupProducts.keySet().stream().map(k -> k.split(COLOR_SPLIT_CHAR)).sorted((o1, o2) -> { + if (o1.length > 1 && o2.length > 1) { + if (!Objects.equals(o1[0], o2[0])) { + Integer o1Index = colorDict.indexOf(o1[0]); + Integer o2Index = colorDict.indexOf(o2[0]); + return o1Index.compareTo(o2Index); + } + if (!Objects.equals(o1[1], o2[1])) { + Integer o1Index = colorDict.indexOf(o1[1]); + Integer o2Index = colorDict.indexOf(o2[1]); + return o1Index.compareTo(o2Index); + } + } + return 0; + }).collect(Collectors.toList()); + List<String> sortKeys = collect.stream().map(c->String.join(COLOR_SPLIT_CHAR,c)).collect(Collectors.toList()); + //妫�楠岄」鍒楄〃(琛ㄥご) + List<String> itemMap = insProducts1.stream().sorted((o1,o2)->{ + //鏍规嵁妫�楠岄」鎺掑簭 + if(!Objects.equals(o1.getInspectionItem(),o2.getInspectionItem())){ + List<String> specialItems = Arrays.asList("鑰愮幆澧冨簲鍔涘紑瑁�","鐑敹缂╃巼"); + if(specialItems.contains(o1.getInspectionItem()) && specialItems.contains(o2.getInspectionItem())){ + return Integer.MAX_VALUE; + } + Collator instance = Collator.getInstance(Locale.CHINA); + return instance.compare(o1.getInspectionItem(),o2.getInspectionItem()); + } + //妫�楠屽瓙椤规帓搴� + if(StringUtils.isNotBlank(o1.getInspectionItemSubclass())&& StringUtils.isNotBlank(o2.getInspectionItemSubclass())){ + if(!Objects.equals(o1.getInspectionItemSubclass(),o2.getInspectionItemSubclass())){ + Collator instance = Collator.getInstance(Locale.CHINA); + return instance.compare(o1.getInspectionItemSubclass(),o2.getInspectionItemSubclass()); + } + } + return 0; + }).map(insProduct -> { + String item = MyUtil.joinChars("@",insProduct.getInspectionItem(),insProduct.getInspectionItemEn()); + String itemSubClass = MyUtil.joinChars("@",insProduct.getInspectionItemSubclass(),insProduct.getInspectionItemSubclassEn()); + return MyUtil.joinChars(ITEM_SPLIT_CHAR,item,itemSubClass); + }).distinct().collect(Collectors.toList()); + long size = itemMap.size(); + long size2 = insProducts1.stream().map(InsProduct::getInsFiberId).distinct().count(); + long number = 7; + long k = 0; + //鍒ゆ柇妫�楠岄」鐩槸鍚︽湁鐖跺瓙鍏崇郴 + int a = itemMap.stream().anyMatch(p -> p.split(ITEM_SPLIT_CHAR).length>0) ? 2 : 1; + for (long c = 0; c < size; c++) { + if (c % number == 0) { + List<RowRenderData> rows = new ArrayList<>(); + //琛ㄦ牸鐨勮鏁� + for (long i = 0; i < size2 + a + 1; i++) { + RowRenderData rowRenderData = new RowRenderData(); + RowStyle rowStyle = new RowStyle(); + rowStyle.setHeight(40); + rowRenderData.setRowStyle(rowStyle); + List<CellRenderData> cells = new ArrayList<>(); + //琛ㄦ牸鐨勫垪鏁� + for (long j = 0; j < 9; j++) { + CellRenderData cellRenderData = new CellRenderData(); + CellStyle cellStyle = new CellStyle(); + cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER); + cellRenderData.setCellStyle(cellStyle); + List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>(); + ParagraphRenderData paragraphRenderData = new ParagraphRenderData(); + ParagraphStyle paragraphStyle = new ParagraphStyle(); + paragraphStyle.setAlign(ParagraphAlignment.CENTER); + paragraphRenderData.setParagraphStyle(paragraphStyle); + List<RenderData> renderData = new ArrayList<>(); + TextRenderData textRenderData = new TextRenderData(); + Style style = new Style(); + style.setFontFamily("瀹嬩綋"); + style.setColor("000000"); + style.setFontSize(10); + textRenderData.setStyle(style); + if(i==0){ + //绗竴琛� + if (j == 0) { + //绗竴鍒� + textRenderData.setText("鏍峰搧缂栧彿@Sample number鈭�456"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 1) { + //绗簩鍒� + textRenderData.setText("鏍峰搧缂栧彿@Sample number鈭�456"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 2) { + //绗簩鍒� + textRenderData.setText(sample.getSampleCode()+"鈭�4566"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + }else if (j == 3) { + //绗簩鍒� + textRenderData.setText(sample.getSampleCode()+"鈭�4566"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + }else if (j == 4) { + //绗簩鍒� + textRenderData.setText("瑙勬牸鍨嬪彿@Type鈭�457"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + }else if (j == 5) { + //绗簩鍒� + textRenderData.setText("瑙勬牸鍨嬪彿@Type鈭�457"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + }else if (j == 6) { + //绗簩鍒� + textRenderData.setText(sample.getModel()+"鈭�4577"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + }else if (j == 7) { + //绗簩鍒� + textRenderData.setText(sample.getModel()+"鈭�4577"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + }else{ + //绗簩鍒� + textRenderData.setText(sample.getModel()+"鈭�4577"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + else if (i == 1) { + //绗簩琛� + if (j == 0) { + //绗竴鍒� + textRenderData.setText("绠¤壊鏍嘆Pipe鈭�100"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 1) { + //绗簩鍒� + textRenderData.setText("鍏夌氦鑹叉爣@Scanning Number鈭�101"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else { + if(itemMap.size()>(int) (j - 2 + k)){ + String inspectionItem = itemMap.get((int) (j - 2 + k)).split(ITEM_SPLIT_CHAR)[0]; + textRenderData.setText( inspectionItem + "鈭�" + inspectionItem); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + }else{ + String inspectionItem = itemMap.get(itemMap.size()-1).split(ITEM_SPLIT_CHAR)[0]; + textRenderData.setText("鈭�" + inspectionItem); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + } + else if (a == 2 && i == 2) { + //鏈夌埗瀛愰」鐩叧绯荤殑绗笁琛� + if (j == 0) { + //绗竴鍒� + textRenderData.setText("绠¤壊鏍嘆Pipe鈭�100"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 1) { + //绗簩鍒� + textRenderData.setText("鍏夌氦鑹叉爣@Scanning Number鈭�101"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else { + //椤圭洰淇℃伅 + if(itemMap.size()>(int)(j - 2 + k)){ + //鍒ゆ柇鏄惁鏈夐」鐩瓙绫� + String[] splits = itemMap.get((int) (j - 2 + k)).split(ITEM_SPLIT_CHAR); + if (splits.length<2 || "@".equals(splits[1])) { + textRenderData.setText(splits[0] + "鈭�" + splits[0]); + } else { + textRenderData.setText(splits[1]+"鈭�"+splits[0]+splits[1]); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + }else{ + //鍒ゆ柇鏄惁鏈夐」鐩瓙绫� + String[] splits = itemMap.get(itemMap.size()-1).split(ITEM_SPLIT_CHAR); + if (splits.length<2 || "@".equals(splits[1])) { + textRenderData.setText("鈭�" + splits[0]); + } else { + textRenderData.setText("鈭�"+splits[0]+splits[1]); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + } + else{ + //寰幆鑹叉爣 + String key = sortKeys.get((int)i-3); + if(itemMap.size()>(int) (j - 2 + k)) { + int index = Math.max((int) (j - 2 + k), 0); + String item = itemMap.get(index); + InsProductFiberVO insProduct = groupProducts.get(key).stream() + .filter(p->{ + String insItem = MyUtil.joinChars("@",p.getInspectionItem(),p.getInspectionItemEn()); + String insSubItem = MyUtil.joinChars("@",p.getInspectionItemSubclass(),p.getInspectionItemSubclassEn()); + return item.equals(MyUtil.joinChars(ITEM_SPLIT_CHAR,insItem,insSubItem)); + }).findFirst().orElse(new InsProductFiberVO()); + //濉�� + if (j == 0) { + //绗竴鍒� + textRenderData.setText(insProduct.getBushColor()); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 1) { + //绗簩鍒� + textRenderData.setText(insProduct.getColor()); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else { + //椤圭洰淇℃伅 + if((index+1)==groupProducts.get(key).size()){ + textRenderData.setText(insProduct.getLastValue()+"鈭憀ast"+key); + }else{ + textRenderData.setText(insProduct.getLastValue()); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } else { + + textRenderData.setText("鈭憀ast"+key); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + } + rowRenderData.setCells(cells); + if (!rowRenderData.getCells().isEmpty()) { + rows.add(rowRenderData); + } + } + TableRenderData tableRenderData = new TableRenderData(); + tableRenderData.setRows(rows); + int countSize = tableRenderData.getRows().get(0).getCells().size(); + for (RowRenderData row : tableRenderData.getRows()) { + if (row.getCells().size() != countSize) { + throw new ErrorException("姣忚鍗曞厓鏍间笉鐩哥瓑4"); + } + } + TableStyle tableStyle = new TableStyle(); + tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH); + tableStyle.setAlign(TableRowAlign.CENTER); + BorderStyle borderStyle = new BorderStyle(); + borderStyle.setColor("000000"); + borderStyle.setType(XWPFTable.XWPFBorderType.THICK); + borderStyle.setSize(14); + tableStyle.setLeftBorder(borderStyle); + tableStyle.setTopBorder(borderStyle); + tableStyle.setRightBorder(borderStyle); + tableStyle.setBottomBorder(borderStyle); + tableRenderData.setTableStyle(tableStyle); + Map<String, Object> table = new HashMap<>(); + table.put("table2", tableRenderData); + table.put("report", insReport); + table.put("sample_number", sample.getSampleCode()); + table.put("type", sample.getModel()); + table.put("index2", index2.get()); + tables2.add(table); + k += 7; + index2.getAndIncrement(); + } + } + }); + } + + + /** + * 鍏夌氦闄勪欢琛ㄦ牸锛氬啓鍏ヨ鏁版嵁 + * @param fiberList 鍏夌氦椤圭洰淇℃伅 + * @param tables2 鍏夌氦闄勪欢琛ㄦ牸 + */ + public void writeFiberEnclosureTableRow(List<InsProduct> fiberList, List<Map<String, Object>> tables2,InsReport insReport) { + AtomicInteger index2 = new AtomicInteger(1);//椤电爜 + int colCount = 9;//琛ㄦ牸鎬诲垪鏁� + int itemCount = 7;//琛ㄦ牸椤圭洰鍒楁暟 + int k = 0;//宸查亶鍘嗘楠岄」鏁伴噺 + //妫�楠岄」鍒楄〃(琛ㄥご) + List<String> itemMap = fiberList.stream().map(insProduct -> { + String item = MyUtil.joinChars("@",insProduct.getInspectionItem(),insProduct.getInspectionItemEn()); + String itemSubClass = MyUtil.joinChars("@",insProduct.getInspectionItemSubclass(),insProduct.getInspectionItemSubclassEn()); + return MyUtil.joinChars(ITEM_SPLIT_CHAR,item,itemSubClass); + }).sorted(Comparator.naturalOrder()).distinct().collect(Collectors.toList()); + //鏍规嵁鏍峰搧id鍒嗙粍 + Map<Integer,List<InsProduct>> groupProducts = fiberList.stream() + .collect(Collectors.groupingBy(InsProduct::getInsSampleId)); + //sampleId椤哄簭鎺掑簭 + List<Integer> sortKeys = groupProducts.keySet().stream().sorted(Comparator.naturalOrder()).collect(Collectors.toList()); + //鍒ゆ柇妫�楠岄」鐩槸鍚︽湁鐖跺瓙鍏崇郴 + int a = itemMap.stream().anyMatch(p -> p.split(ITEM_SPLIT_CHAR).length>0) ? 2 : 1; + for (int c = 0; c < itemMap.size(); c++) { + if (c % itemCount == 0) { + List<RowRenderData> rows = new ArrayList<>(); + //琛ㄦ牸鐨勮鏁�(鏍峰搧鏁伴噺+琛ㄥご) + int tableRow = sortKeys.size() + a; + for (int i = 0; i < tableRow; i++) { + RowRenderData rowRenderData = new RowRenderData(); + RowStyle rowStyle = new RowStyle(); + rowStyle.setHeight(40); + rowRenderData.setRowStyle(rowStyle); + List<CellRenderData> cells = new ArrayList<>(); + //琛ㄦ牸鐨勫垪鏁� + for (int j = 0; j < colCount; j++) { + CellRenderData cellRenderData = new CellRenderData(); + CellStyle cellStyle = new CellStyle(); + cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER); + cellRenderData.setCellStyle(cellStyle); + List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>(); + ParagraphRenderData paragraphRenderData = new ParagraphRenderData(); + ParagraphStyle paragraphStyle = new ParagraphStyle(); + paragraphStyle.setAlign(ParagraphAlignment.CENTER); + paragraphRenderData.setParagraphStyle(paragraphStyle); + List<RenderData> renderData = new ArrayList<>(); + TextRenderData textRenderData = new TextRenderData(); + Style style = new Style(); + style.setFontFamily("瀹嬩綋"); + style.setColor("000000"); + style.setFontSize(10); + textRenderData.setStyle(style); + //绗竴琛� + if(i==0){ + if (j < 2) { + //绗竴鍒� + textRenderData.setText("鏍峰搧缂栧彿@Sample number鈭�45678"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else{ + //鐢熸垚琛ㄥご + if(itemMap.size()> (j - 2 + k)){ + String inspectionItem = itemMap.get(j - 2 + k).split(ITEM_SPLIT_CHAR)[0]; + textRenderData.setText( inspectionItem + "鈭�" + inspectionItem); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + }else{ + String inspectionItem = itemMap.get(itemMap.size()-1).split(ITEM_SPLIT_CHAR)[0]; + textRenderData.setText("鈭�" + inspectionItem); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + } + else if (a == 2 && i == 1) { + //鏈夌埗瀛愰」鐩叧绯荤殑绗簩琛� + if (j < 2) { + //绗竴鍒� + textRenderData.setText("鏍峰搧缂栧彿@Sample number鈭�45678"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else { + //椤圭洰淇℃伅 + if(itemMap.size()> (j - 2 + k)){ + //鍒ゆ柇鏄惁鏈夐」鐩瓙绫� + String[] splits = itemMap.get(j - 2 + k).split(ITEM_SPLIT_CHAR); + if (splits.length<2 || "@".equals(splits[1])) { + textRenderData.setText(splits[0] + "鈭�" + splits[0]); + } else { + textRenderData.setText(splits[1]+"鈭�"+splits[0]+splits[1]); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + }else{ + //鍒ゆ柇鏄惁鏈夐」鐩瓙绫� + String[] splits = itemMap.get(itemMap.size()-1).split(ITEM_SPLIT_CHAR); + if (splits.length<2 || "@".equals(splits[1])) { + textRenderData.setText("鈭�" + splits[0]); + } else { + textRenderData.setText("鈭�"+splits[0]+splits[1]); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + } + else{ + //寰幆鏍峰搧 + Integer key = sortKeys.get(i-2); + if(itemMap.size()>j - 2 + k) { + //鏌ヨ褰撳墠鏍峰搧淇℃伅 + InsSample insSample = insSampleMapper.selectById(key); + int index = Math.max(j - 2 + k, 0); + String item = itemMap.get(index); + InsProduct insProduct = groupProducts.get(key).stream() + .filter(p->{ + String insItem = MyUtil.joinChars("@",p.getInspectionItem(),p.getInspectionItemEn()); + String insItemSubClass = MyUtil.joinChars("@",p.getInspectionItemSubclass(),p.getInspectionItemSubclassEn()); + return item.equals(MyUtil.joinChars(ITEM_SPLIT_CHAR,insItem,insItemSubClass)); + }) + .findFirst().orElse(new InsProduct()); + //濉�� + if (j < 2) { + //绗竴鍒� + textRenderData.setText(insSample.getSampleCode()+"鈭�"+key); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else { + //椤圭洰淇℃伅 + if((index+1)==groupProducts.get(key).size()){ + textRenderData.setText(insProduct.getLastValue()+"鈭憀ast"+key); + }else{ + textRenderData.setText(insProduct.getLastValue()); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } else { + textRenderData.setText("鈭憀ast"+key); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + } + rowRenderData.setCells(cells); + if (!rowRenderData.getCells().isEmpty()) { + rows.add(rowRenderData); + } + } + TableRenderData tableRenderData = new TableRenderData(); + tableRenderData.setRows(rows); + int countSize = tableRenderData.getRows().get(0).getCells().size(); + for (RowRenderData row : tableRenderData.getRows()) { + if (row.getCells().size() != countSize) { + throw new ErrorException("鍏夌氦鎶ュ憡闄勪欢琛ㄦ牸鍒楁暟涓嶅尮閰�"); + } + } + TableStyle tableStyle = new TableStyle(); + tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH); +// tableStyle.setColWidths(DEFAULT_COL_WIDTHS); +// tableStyle.setWidth("10000"); + tableStyle.setAlign(TableRowAlign.CENTER); + BorderStyle borderStyle = new BorderStyle(); + borderStyle.setColor("000000"); + borderStyle.setType(XWPFTable.XWPFBorderType.THICK); + borderStyle.setSize(14); + tableStyle.setLeftBorder(borderStyle); + tableStyle.setTopBorder(borderStyle); + tableStyle.setRightBorder(borderStyle); + tableStyle.setBottomBorder(borderStyle); + tableRenderData.setTableStyle(tableStyle); + Map<String, Object> table = new HashMap<>(); + table.put("table2", tableRenderData); + table.put("report", insReport); + table.put("index2", index2.get()); + tables2.add(table); + k += 7; + index2.getAndIncrement(); + } + } + + + } + + /** + * 鍏夌氦闄勪欢琛ㄦ牸锛氬啓鍏ヨ鏁版嵁 + * @param ribbonList 鍏夌氦椤圭洰淇℃伅 + * @param tables6 鍏夌氦甯﹀昂瀵稿弬鏁伴檮浠惰〃鏍� + */ + public void writeFiberOpticRibbonEnclosureTableRow(List<InsProduct> ribbonList, List<Map<String, Object>> tables6,InsReport insReport){ + + } + +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/handler/FiberOpticConnectorLossReportHandler.java b/cnas-require/src/main/java/com/ruoyi/requier/handler/FiberOpticConnectorLossReportHandler.java new file mode 100644 index 0000000..ae64968 --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/handler/FiberOpticConnectorLossReportHandler.java @@ -0,0 +1,210 @@ +package com.ruoyi.requier.handler; + +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.deepoove.poi.data.*; +import com.deepoove.poi.data.style.*; +import com.ruoyi.framework.exception.ErrorException; +import com.ruoyi.framework.util.MyUtil; +import com.ruoyi.inspect.mapper.InsProductMapper; +import com.ruoyi.inspect.pojo.InsProduct; +import com.ruoyi.inspect.pojo.InsReport; +import com.ruoyi.inspect.pojo.InsSample; +import org.apache.poi.xwpf.usermodel.ParagraphAlignment; +import org.apache.poi.xwpf.usermodel.TableRowAlign; +import org.apache.poi.xwpf.usermodel.XWPFTable; +import org.apache.poi.xwpf.usermodel.XWPFTableCell; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 鍏夌氦鎺ュご鎹熻�楁姤鍛婂鐞嗙被 + */ +public class FiberOpticConnectorLossReportHandler { + + private final InsProductMapper insProductMapper; + + public FiberOpticConnectorLossReportHandler(InsProductMapper insProductMapper){ + this.insProductMapper = insProductMapper; + } + + /** + * + * @param insProducts0 褰撳墠璁㈠崟涓嬬殑鎵�鏈夋楠岄」 + * @param insSamples 褰撳墠璁㈠崟鎵�鏈夋牱鍝� + * @param insReport report瀵硅薄 + * @param tables4 鍏夌氦鎺ュご鎹熻�楅檮浠惰〃鏍艰鏁版嵁 + */ + public void doWrite(List<InsProduct> insProducts0, + List<InsSample> insSamples, + InsReport insReport, + List<Map<String,Object>> tables4){ +// //鍘婚噸鐨勬楠岄」鐩� + List<String> filteredProducts = insProducts0.stream() + .map(insProduct -> (MyUtil.joinChars(",",insProduct.getInspectionItem(),insProduct.getInspectionItemEn(),insProduct.getInspectionItemSubclass(),insProduct.getInspectionItemSubclassEn(),insProduct.getTell()))) + .distinct().collect(Collectors.toList()); + long index4 = 0; + //鍏夌氦鎺ュご鎹熻�楃殑鎶ュ憡杩樻槸tables4 + //鏌ヨ鏍峰搧(鍙煡璇㈠甫"/")鐨勬暟閲� + List<InsSample> sampleList = insSamples.stream().filter(insSample -> insSample.getSampleCode().contains("/")).collect(Collectors.toList()); + //杩囨护鍑哄厜绾ゆ帴澶存崯鑰楃殑妫�楠岄」鐩� + List<String> strings = filteredProducts.stream().filter(s -> s.contains("鍏夌氦鎺ュご鎹熻��")).distinct().sorted(Comparator.naturalOrder()).collect(Collectors.toList()); + long index41 = 1; + for (int i = 0; i < sampleList.size(); i++) { + if (i % 16 == 0) { + //鏍峰搧鏁伴噺瓒呰繃16闇�瑕佹柊澧炶〃鏍� + List<RowRenderData> rows = new ArrayList<>(); + int count2 = sampleList.size() - (index41 - 1) * 16 < 16 ? (int) (sampleList.size() - (index41 - 1) * 16 + 1) : 17; + //琛ㄦ牸鐨勮鏁� + for (int j = 0; j < count2; j++) { + RowRenderData rowRenderData = new RowRenderData(); + RowStyle rowStyle = new RowStyle(); + rowStyle.setHeight(40); + rowRenderData.setRowStyle(rowStyle); + List<CellRenderData> cells = new ArrayList<>(); + //琛ㄦ牸鐨勫垪鏁� + for (int k = 0; k < 6; k++) { + CellRenderData cellRenderData = new CellRenderData(); + CellStyle cellStyle = new CellStyle(); + cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER); + cellRenderData.setCellStyle(cellStyle); + List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>(); + ParagraphRenderData paragraphRenderData = new ParagraphRenderData(); + ParagraphStyle paragraphStyle = new ParagraphStyle(); + paragraphStyle.setAlign(ParagraphAlignment.CENTER); + paragraphRenderData.setParagraphStyle(paragraphStyle); + List<RenderData> renderData = new ArrayList<>(); + TextRenderData textRenderData = new TextRenderData(); + Style style = new Style(); + style.setFontFamily("瀹嬩綋"); + style.setColor("000000"); + textRenderData.setStyle(style); + if (j == 0) { + //绗竴琛� + if (k == 0) { + //绗竴鍒� + textRenderData.setText("鍏夌氦绫诲瀷@Fiber type"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (k == 1 || k == 2) { + //绗簩 涓夊垪 + textRenderData.setText("鏍峰搧缂栧彿@Sample number鈭�3333"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else { + String[] split = strings.get(k - 3).split(","); + if (ObjectUtils.isEmpty(split[3]) || split[3].isEmpty()) { + textRenderData.setText(split[2]); + } else { + textRenderData.setText(split[2] + "@" + split[3]); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } else { + if (k == 0) { + //绗竴鍒� + textRenderData.setText(sampleList.get(0).getModel() + "鈭�44"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (k == 1) { + //绗簩鍒� + textRenderData.setText(sampleList.get(j - 1).getSampleCode().split("/")[0]); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (k == 2) { + //绗笁鍒� + textRenderData.setText(sampleList.get(j - 1).getSampleCode().split("/")[1]); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else { + //鏍规嵁瀵瑰簲鐨勬牱鍝佺紪鍙峰拰妫�楠岄」鐩煡璇㈠搴旀暟鎹�(鏈�缁堝��) + String[] split = strings.get(k - 3).split(","); + // 濡傛灉鏄楠岄」涓哄厜绾ゆ帴澶存崯鑰楋紝鍒欏彇绗竴鏉� + InsProduct insProduct = null; + if(split[0].equals("鍏夌氦鎺ュご鎹熻��")) { + insProduct = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getState, 1) + .eq(InsProduct::getInsSampleId, sampleList.get(j - 1).getId()) + .eq(InsProduct::getInspectionItem, split[0]) + .eq(InsProduct::getInspectionItemSubclass, split[2])).get(0); + }else { + insProduct = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getState, 1) + .eq(InsProduct::getInsSampleId, sampleList.get(j - 1).getId()) + .eq(InsProduct::getInspectionItem, split[0]) + .eq(InsProduct::getInspectionItemSubclass, split[2])); + } + textRenderData.setText(insProduct.getLastValue()); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + } + rowRenderData.setCells(cells); + if (!rowRenderData.getCells().isEmpty()) { + rows.add(rowRenderData); + } + } + TableRenderData tableRenderData = new TableRenderData(); + tableRenderData.setRows(rows); + int countSize = tableRenderData.getRows().get(0).getCells().size(); + for (RowRenderData row : tableRenderData.getRows()) { + /*for (CellRenderData cell : row.getCells()) { + System.out.print(cell.getParagraphs().get(0).getContents()); + } + System.out.println("");*/ + if (row.getCells().size() != countSize) { + throw new ErrorException("姣忚鍗曞厓鏍间笉鐩哥瓑3"); + } + } + TableStyle tableStyle = new TableStyle(); + tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH); + tableStyle.setAlign(TableRowAlign.CENTER); + BorderStyle borderStyle = new BorderStyle(); + borderStyle.setColor("000000"); + borderStyle.setType(XWPFTable.XWPFBorderType.THICK); + borderStyle.setSize(14); + tableStyle.setLeftBorder(borderStyle); + tableStyle.setTopBorder(borderStyle); + tableStyle.setRightBorder(borderStyle); + tableStyle.setBottomBorder(borderStyle); + tableRenderData.setTableStyle(tableStyle); + Map<String, Object> table = new HashMap<>(); + table.put("table4", tableRenderData); + table.put("report", insReport); + table.put("index4", index4 + 1); + tables4.add(table); + index4++; + index41++; + } + } + tables4.forEach(table4 -> { + table4.put("tableSize4", tables4.size()); + }); + + } + +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/handler/FiberOpticRibbonReportHandler.java b/cnas-require/src/main/java/com/ruoyi/requier/handler/FiberOpticRibbonReportHandler.java new file mode 100644 index 0000000..aa98b07 --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/handler/FiberOpticRibbonReportHandler.java @@ -0,0 +1,734 @@ +package com.ruoyi.requier.handler; + +import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.deepoove.poi.data.*; +import com.deepoove.poi.data.style.*; +import com.ruoyi.framework.exception.ErrorException; +import com.ruoyi.framework.util.MyUtil; +import com.ruoyi.inspect.dto.SampleProductDto; +import com.ruoyi.inspect.mapper.InsProductMapper; +import com.ruoyi.inspect.mapper.InsSampleMapper; +import com.ruoyi.inspect.pojo.InsProduct; +import com.ruoyi.inspect.pojo.InsReport; +import com.ruoyi.inspect.pojo.InsSample; +import com.ruoyi.inspect.vo.InsProductFiberVO; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.xwpf.usermodel.ParagraphAlignment; +import org.apache.poi.xwpf.usermodel.TableRowAlign; +import org.apache.poi.xwpf.usermodel.XWPFTable; +import org.apache.poi.xwpf.usermodel.XWPFTableCell; + +import java.text.Collator; +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + +/** + * 鍏夌氦甯﹀昂瀵稿弬鏁版姤鍛婂鐞嗙被 + */ +public class FiberOpticRibbonReportHandler { + + /** + * 榛樿琛ㄦ牸瀹藉害 + */ + private final static int[] DEFAULT_COL_WIDTHS = {1600,0, 1200, 1200, 1200, 1200, 1200, 1200,1200}; + + private final InsProductMapper insProductMapper; + private final InsSampleMapper insSampleMapper; + + public FiberOpticRibbonReportHandler(InsProductMapper insProductMapper, InsSampleMapper insSampleMapper){ + this.insProductMapper = insProductMapper; + this.insSampleMapper = insSampleMapper; + } + + private final static String ITEM_SPLIT_CHAR = "&";//妫�楠岄」鍒嗛殧绗� + + private final static String COLOR_SPLIT_CHAR = "-";//鑹叉爣鍒嗛殧绗� + + /** + * + * @param samples 鎵�鏈夋牱鍝� + * @param insReport report瀵硅薄 + * @param tables6 灏哄鍙傛暟闄勪欢琛ㄦ牸琛屽垪琛� + * @param colorDict 鑹叉爣瀛楀吀 + */ + public void doWrite(List<SampleProductDto> samples, InsReport insReport, List<Map<String,Object>> tables6, + List<String> colorDict){ + AtomicInteger index6 = new AtomicInteger(1);//椤电爜 + samples.forEach(sample -> { + //鏌ヨ鏍峰搧涓嬬殑妫�楠岄」鍜屽厜绾ゅ甫缂栧彿 + List<InsProductFiberVO> insProducts1 = insProductMapper.selectInsProductInsFibersList(sample.getId()); + //鏍规嵁鍏夌氦甯︾紪鍙� + Map<String,List<InsProductFiberVO>> groupProducts = insProducts1.stream() + .filter(p->p.getInspectionItem().equals("灏哄鍙傛暟")) + .collect(Collectors.groupingBy(product -> product.getBushColor()+"-"+product.getCode())); + if(groupProducts.isEmpty()){ + return; + } + List<String[]> collect = groupProducts.keySet().stream().map(k -> k.split(COLOR_SPLIT_CHAR)).sorted((o1, o2) -> { + if (o1.length > 1 && o2.length > 1) { + if (!Objects.equals(o1[0], o2[0])) { + Integer o1Index = colorDict.indexOf(o1[0]); + Integer o2Index = colorDict.indexOf(o2[0]); + return o1Index.compareTo(o2Index); + } + if (!Objects.equals(o1[1], o2[1])) { + Integer o1Index = colorDict.indexOf(o1[1]); + Integer o2Index = colorDict.indexOf(o2[1]); + return o1Index.compareTo(o2Index); + } + } + return 0; + }).collect(Collectors.toList()); + List<String> sortKeys = collect.stream().map(c->String.join(COLOR_SPLIT_CHAR,c)).collect(Collectors.toList()); + //妫�楠岄」鍒楄〃(琛ㄥご) + List<String> itemMap = insProducts1.stream().sorted((o1,o2)->{ + //鏍规嵁妫�楠岄」鎺掑簭 + if(!Objects.equals(o1.getInspectionItem(),o2.getInspectionItem())){ + List<String> specialItems = Arrays.asList("鑰愮幆澧冨簲鍔涘紑瑁�","鐑敹缂╃巼"); + if(specialItems.contains(o1.getInspectionItem()) && specialItems.contains(o2.getInspectionItem())){ + return Integer.MAX_VALUE; + } + Collator instance = Collator.getInstance(Locale.CHINA); + return instance.compare(o1.getInspectionItem(),o2.getInspectionItem()); + } + //妫�楠屽瓙椤规帓搴� + if(StringUtils.isNotBlank(o1.getInspectionItemSubclass())&& StringUtils.isNotBlank(o2.getInspectionItemSubclass())){ + if(!Objects.equals(o1.getInspectionItemSubclass(),o2.getInspectionItemSubclass())){ + Collator instance = Collator.getInstance(Locale.CHINA); + return instance.compare(o1.getInspectionItemSubclass(),o2.getInspectionItemSubclass()); + } + } + return 0; + }).map(insProduct -> { + String item = MyUtil.joinChars("@",insProduct.getInspectionItem(),insProduct.getInspectionItemEn()); + String itemSubClass = MyUtil.joinChars("@",insProduct.getInspectionItemSubclass(),insProduct.getInspectionItemSubclassEn()); + return MyUtil.joinChars(ITEM_SPLIT_CHAR,item,itemSubClass); + }).distinct().collect(Collectors.toList()); + long size = itemMap.size();//琛ㄥご闀垮害 + long size2 = insProducts1.stream().map(InsProduct::getInsFibersId).distinct().count(); + long number = 10; + //鍒ゆ柇妫�楠岄」鐩槸鍚︽湁鐖跺瓙鍏崇郴 + int a = itemMap.stream().anyMatch(p -> p.split(ITEM_SPLIT_CHAR).length>0) ? 2 : 1; + for (long c = 0; c < size; c++) { + if (c % number == 0) { + List<RowRenderData> rows = new ArrayList<>(); + //琛ㄦ牸鐨勮鏁� + for (long i = 0; i < size2 + a + 2; i++) { + RowRenderData rowRenderData = new RowRenderData(); + RowStyle rowStyle = new RowStyle(); + rowStyle.setHeight(40); + rowRenderData.setRowStyle(rowStyle); + List<CellRenderData> cells = new ArrayList<>(); + //琛ㄦ牸鐨勫垪鏁� + for (long j = 0; j < 12; j++) { + CellRenderData cellRenderData = new CellRenderData(); + CellStyle cellStyle = new CellStyle(); + cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER); + cellRenderData.setCellStyle(cellStyle); + List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>(); + ParagraphRenderData paragraphRenderData = new ParagraphRenderData(); + ParagraphStyle paragraphStyle = new ParagraphStyle(); + paragraphStyle.setAlign(ParagraphAlignment.CENTER); + paragraphRenderData.setParagraphStyle(paragraphStyle); + List<RenderData> renderData = new ArrayList<>(); + TextRenderData textRenderData = new TextRenderData(); + Style style = new Style(); + style.setFontFamily("瀹嬩綋"); + style.setColor("000000"); + style.setFontSize(10); + textRenderData.setStyle(style); + if(i==0){ + //绗竴琛� + if (j<=2) { + textRenderData.setText("鏍峰搧缂栧彿@Sample number鈭�456"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j >2&&j<=5) { + textRenderData.setText(sample.getSampleCode()+"鈭�4566"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j >5&&j<=8) { + textRenderData.setText("瑙勬牸鍨嬪彿@Type鈭�457"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + }else{ + textRenderData.setText(sample.getModel()+"鈭�4577"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + else if (i == 1) { + //绗簩琛� + if (j == 0) { + //绗竴鍒� + textRenderData.setText("绠¤壊鏍嘆Pipe鈭�100"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 1) { + //绗簩鍒� + textRenderData.setText("鍏夌氦甯︾紪鍙稝Scanning Number鈭�101"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else { + String inspectionItem = itemMap.get(itemMap.size()-1).split(ITEM_SPLIT_CHAR)[0]; + textRenderData.setText("鈭�" + inspectionItem); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + else if (a == 2 && i == 2) { + //鏈夌埗瀛愰」鐩叧绯荤殑绗笁琛� + if (j == 0) { + //绗竴鍒� + textRenderData.setText("绠¤壊鏍嘆Pipe鈭�100"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + else if (j == 1) { + //绗簩鍒� + textRenderData.setText("鍏夌氦甯︾紪鍙稝Scanning Number鈭�101"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + else if (j >1&& j<=3) { + String[] splits = itemMap.get(0).split(ITEM_SPLIT_CHAR); + if (splits.length<2 || "@".equals(splits[1])) { + textRenderData.setText(splits[0] + "鈭�" + splits[0]); + } else { + textRenderData.setText(splits[1]+"鈭�"+splits[0]+splits[1]); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + else if (j>3&&j<=5) { + String[] splits = itemMap.get(1).split(ITEM_SPLIT_CHAR); + if (splits.length<2 || "@".equals(splits[1])) { + textRenderData.setText(splits[0] + "鈭�" + splits[0]); + } else { + textRenderData.setText(splits[1]+"鈭�"+splits[0]+splits[1]); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + else if (j >5&&j<=7) { + String[] splits = itemMap.get(2).split(ITEM_SPLIT_CHAR); + if (splits.length<2 || "@".equals(splits[1])) { + textRenderData.setText(splits[0] + "鈭�" + splits[0]); + } else { + textRenderData.setText(splits[1]+"鈭�"+splits[0]+splits[1]); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + else if (j >7&&j<=9) { + String[] splits = itemMap.get(3).split(ITEM_SPLIT_CHAR); + if (splits.length<2 || "@".equals(splits[1])) { + textRenderData.setText(splits[0] + "鈭�" + splits[0]); + } else { + textRenderData.setText(splits[1]+"鈭�"+splits[0]+splits[1]); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + else{ + String[] splits = itemMap.get(4).split(ITEM_SPLIT_CHAR); + if (splits.length<2 || "@".equals(splits[1])) { + textRenderData.setText(splits[0] + "鈭�" + splits[0]); + } else { + textRenderData.setText(splits[1]+"鈭�"+splits[0]+splits[1]); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + else if ( i == 3) { + //绗洓琛� + if (j == 0) { + //绗竴鍒� + textRenderData.setText("绠¤壊鏍嘆Pipe鈭�100"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 1) { + //绗簩鍒� + textRenderData.setText("鍏夌氦甯︾紪鍙稝Scanning Number鈭�101"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else { + //椤圭洰淇℃伅 + if((int)(j - 2)%2==0){ + textRenderData.setText("A绔�"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + }else{ + textRenderData.setText("B绔�"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + } + else{ + //寰幆鍏夌氦甯︾紪鍙� + String key = sortKeys.get((int)i-4); + String item; + if (j<=3) { + item = itemMap.get(0); + } + else if (j>3&&j<=5) { + item = itemMap.get(1); + } + else if (j >5&&j<=7) { + item = itemMap.get(2); + } + else if (j >7&&j<=9) { + item = itemMap.get(3); + } else{ + item = itemMap.get(4); + } + InsProductFiberVO insProduct = groupProducts.get(key).stream() + .filter(p->{ + String insItem = MyUtil.joinChars("@",p.getInspectionItem(),p.getInspectionItemEn()); + String insSubItem = MyUtil.joinChars("@",p.getInspectionItemSubclass(),p.getInspectionItemSubclassEn()); + return item.equals(MyUtil.joinChars(ITEM_SPLIT_CHAR,insItem,insSubItem)); + }).findFirst().orElse(new InsProductFiberVO()); + //濉�� + if (j == 0) { + //绗竴鍒� + textRenderData.setText(insProduct.getBushColor()); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 1) { + //绗簩鍒� + textRenderData.setText(insProduct.getCode()); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else { + //椤圭洰淇℃伅 + if((int)(j - 2)%2==0){ + textRenderData.setText(transformInsValue(insProduct.getInsValue()).get(0)); + }else{ + textRenderData.setText(transformInsValue(insProduct.getInsValue()).get(1)); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + } + rowRenderData.setCells(cells); + if (!rowRenderData.getCells().isEmpty()) { + rows.add(rowRenderData); + } + } + TableRenderData tableRenderData = new TableRenderData(); + tableRenderData.setRows(rows); + int countSize = tableRenderData.getRows().get(0).getCells().size(); + for (RowRenderData row : tableRenderData.getRows()) { + if (row.getCells().size() != countSize) { + throw new ErrorException("姣忚鍗曞厓鏍间笉鐩哥瓑6"); + } + } + TableStyle tableStyle = new TableStyle(); + tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH); + tableStyle.setAlign(TableRowAlign.CENTER); + BorderStyle borderStyle = new BorderStyle(); + borderStyle.setColor("000000"); + borderStyle.setType(XWPFTable.XWPFBorderType.THICK); + borderStyle.setSize(14); + tableStyle.setLeftBorder(borderStyle); + tableStyle.setTopBorder(borderStyle); + tableStyle.setRightBorder(borderStyle); + tableStyle.setBottomBorder(borderStyle); + tableRenderData.setTableStyle(tableStyle); + Map<String, Object> table = new HashMap<>(); + table.put("table6", tableRenderData); + table.put("report", insReport); + table.put("sample_number", sample.getSampleCode()); + table.put("type", sample.getModel()); + table.put("index6", index6.get()); + tables6.add(table); + index6.getAndIncrement(); + } + } + }); + } + + /** + * 鏍煎紡鍖栨楠岃繃绋嬪�糺son瀛楃涓� + * @param insValue 妫�楠岃繃绋嬪�糺son瀛楃涓� + * @return + */ + private static List<String> transformInsValue(String insValue){ + List<String> list = new ArrayList<>(); + if(!insValue.isEmpty() && !"[]".equals(insValue)){ + for (Object o : JSONUtil.parseArray(insValue)) { + JSONObject obj = JSON.parseObject(JSON.toJSONString(o)); + if(Objects.nonNull(obj.get("v"))){ + list.add(obj.get("v").toString()); + } + } + } + return list; + } + + /** + * 鍏夌氦闄勪欢琛ㄦ牸锛氬啓鍏ヨ鏁版嵁 + * @param ribbonList 鍏夌氦椤圭洰淇℃伅 + * @param tables6 鍏夌氦甯﹀昂瀵稿弬鏁伴檮浠惰〃鏍� + */ + public void writeFiberOpticRibbonEnclosureTableRow(List<InsProductFiberVO> ribbonList, List<Map<String, Object>> tables6,InsReport insReport){ + AtomicInteger index6 = new AtomicInteger(1);//椤电爜 + int colCount = 12;//琛ㄦ牸鎬诲垪鏁� + int itemCount = 10;//琛ㄦ牸椤圭洰鍒楁暟 + //妫�楠岄」鍒楄〃(琛ㄥご) + List<String> itemMap = ribbonList.stream().sorted((o1,o2)->{ + //鏍规嵁妫�楠岄」鎺掑簭 + if(!Objects.equals(o1.getInspectionItem(),o2.getInspectionItem())){ + List<String> specialItems = Arrays.asList("鑰愮幆澧冨簲鍔涘紑瑁�","鐑敹缂╃巼"); + if(specialItems.contains(o1.getInspectionItem()) && specialItems.contains(o2.getInspectionItem())){ + return Integer.MAX_VALUE; + } + Collator instance = Collator.getInstance(Locale.CHINA); + return instance.compare(o1.getInspectionItem(),o2.getInspectionItem()); + } + //妫�楠屽瓙椤规帓搴� + if(StringUtils.isNotBlank(o1.getInspectionItemSubclass())&& StringUtils.isNotBlank(o2.getInspectionItemSubclass())){ + if(!Objects.equals(o1.getInspectionItemSubclass(),o2.getInspectionItemSubclass())){ + Collator instance = Collator.getInstance(Locale.CHINA); + return instance.compare(o1.getInspectionItemSubclass(),o2.getInspectionItemSubclass()); + } + } + return 0; + }).map(insProduct -> { + String item = MyUtil.joinChars("@",insProduct.getInspectionItem(),insProduct.getInspectionItemEn()); + String itemSubClass = MyUtil.joinChars("@",insProduct.getInspectionItemSubclass(),insProduct.getInspectionItemSubclassEn()); + return MyUtil.joinChars(ITEM_SPLIT_CHAR,item,itemSubClass); + }).distinct().collect(Collectors.toList()); + //鏍规嵁鏍峰搧id鍒嗙粍 + Map<Integer,List<InsProductFiberVO>> groupProducts = ribbonList.stream() + .collect(Collectors.groupingBy(InsProductFiberVO::getInsSampleId)); + //sampleId椤哄簭鎺掑簭 + List<Integer> sortKeys = groupProducts.keySet().stream().sorted(Comparator.naturalOrder()).collect(Collectors.toList()); + //鍒ゆ柇妫�楠岄」鐩槸鍚︽湁鐖跺瓙鍏崇郴 + int a = itemMap.stream().anyMatch(p -> p.split(ITEM_SPLIT_CHAR).length>0) ? 2 : 1; + for (int c = 0; c < itemMap.size(); c++) { + if (c % itemCount == 0) { + List<RowRenderData> rows = new ArrayList<>(); + //琛ㄦ牸鐨勮鏁�(鏍峰搧鏁伴噺+琛ㄥご) + int tableRow = sortKeys.size() + a + 1; + for (int i = 0; i < tableRow; i++) { + RowRenderData rowRenderData = new RowRenderData(); + RowStyle rowStyle = new RowStyle(); + rowStyle.setHeight(40); + rowRenderData.setRowStyle(rowStyle); + List<CellRenderData> cells = new ArrayList<>(); + //琛ㄦ牸鐨勫垪鏁� + for (int j = 0; j < colCount; j++) { + CellRenderData cellRenderData = new CellRenderData(); + CellStyle cellStyle = new CellStyle(); + cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER); + cellRenderData.setCellStyle(cellStyle); + List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>(); + ParagraphRenderData paragraphRenderData = new ParagraphRenderData(); + ParagraphStyle paragraphStyle = new ParagraphStyle(); + paragraphStyle.setAlign(ParagraphAlignment.CENTER); + paragraphRenderData.setParagraphStyle(paragraphStyle); + List<RenderData> renderData = new ArrayList<>(); + TextRenderData textRenderData = new TextRenderData(); + Style style = new Style(); + style.setFontFamily("瀹嬩綋"); + style.setColor("000000"); + style.setFontSize(10); + textRenderData.setStyle(style); + //绗竴琛� + if(i==0){ + if (j < 2) { + //绗竴鍒� + textRenderData.setText("鏍峰搧缂栧彿@Sample number鈭�45678"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else{ + //鐢熸垚琛ㄥご + if(itemMap.size()> (j - 2)){ + String inspectionItem = itemMap.get(j - 2).split(ITEM_SPLIT_CHAR)[0]; + textRenderData.setText( inspectionItem + "鈭�" + inspectionItem); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + }else{ + String inspectionItem = itemMap.get(itemMap.size()-1).split(ITEM_SPLIT_CHAR)[0]; + textRenderData.setText("鈭�" + inspectionItem); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + } + else if (a == 2 && i == 1) { + //鏈夌埗瀛愰」鐩叧绯荤殑绗簩琛� + if (j < 2) { + //绗竴鍒� + textRenderData.setText("鏍峰搧缂栧彿@Sample number鈭�45678"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j >1&& j<=3) { + String[] splits = itemMap.get(0).split(ITEM_SPLIT_CHAR); + if (splits.length<2 || "@".equals(splits[1])) { + textRenderData.setText(splits[0] + "鈭�" + splits[0]); + } else { + textRenderData.setText(splits[1]+"鈭�"+splits[0]+splits[1]); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + else if (j>3&&j<=5) { + String[] splits = itemMap.get(1).split(ITEM_SPLIT_CHAR); + if (splits.length<2 || "@".equals(splits[1])) { + textRenderData.setText(splits[0] + "鈭�" + splits[0]); + } else { + textRenderData.setText(splits[1]+"鈭�"+splits[0]+splits[1]); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + else if (j >5&&j<=7) { + String[] splits = itemMap.get(2).split(ITEM_SPLIT_CHAR); + if (splits.length<2 || "@".equals(splits[1])) { + textRenderData.setText(splits[0] + "鈭�" + splits[0]); + } else { + textRenderData.setText(splits[1]+"鈭�"+splits[0]+splits[1]); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + else if (j >7&&j<=9) { + String[] splits = itemMap.get(3).split(ITEM_SPLIT_CHAR); + if (splits.length<2 || "@".equals(splits[1])) { + textRenderData.setText(splits[0] + "鈭�" + splits[0]); + } else { + textRenderData.setText(splits[1]+"鈭�"+splits[0]+splits[1]); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + else{ + String[] splits = itemMap.get(4).split(ITEM_SPLIT_CHAR); + if (splits.length<2 || "@".equals(splits[1])) { + textRenderData.setText(splits[0] + "鈭�" + splits[0]); + } else { + textRenderData.setText(splits[1]+"鈭�"+splits[0]+splits[1]); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + else if (i == 2) { + //绗笁琛� + if (j < 2) { + //绗竴鍒� + textRenderData.setText("鏍峰搧缂栧彿@Sample number鈭�45678"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else { + //椤圭洰淇℃伅 + if((j - 2) %2==0){ + textRenderData.setText("A绔�"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + }else{ + textRenderData.setText("B绔�"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + } + else{ + //寰幆鏍峰搧 + Integer key = sortKeys.get(i-3); + //鏌ヨ褰撳墠鏍峰搧淇℃伅 + InsSample insSample = insSampleMapper.selectById(key); + int index = Math.max(j - 2, 0); + String item; + if (j<=3) { + item = itemMap.get(0); + } + else if (j>3&&j<=5) { + item = itemMap.get(1); + } + else if (j >5&&j<=7) { + item = itemMap.get(2); + } + else if (j >7&&j<=9) { + item = itemMap.get(3); + } else{ + item = itemMap.get(4); + } + InsProductFiberVO insProduct = groupProducts.get(key).stream() + .filter(p->{ + String insItem = MyUtil.joinChars("@",p.getInspectionItem(),p.getInspectionItemEn()); + String insItemSubClass = MyUtil.joinChars("@",p.getInspectionItemSubclass(),p.getInspectionItemSubclassEn()); + return item.equals(MyUtil.joinChars(ITEM_SPLIT_CHAR,insItem,insItemSubClass)); + }) + .findFirst().orElse(new InsProductFiberVO()); + //濉�� + if (j < 2) { + //绗竴鍒� + textRenderData.setText(insSample.getSampleCode()+"鈭�"+key); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else { + //椤圭洰淇℃伅 + if(index%2==0){ + textRenderData.setText(transformInsValue(insProduct.getInsValue()).get(0)); + }else{ + textRenderData.setText(transformInsValue(insProduct.getInsValue()).get(1)); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } +// if(itemMap.size()>j - 2) { +// } + } + } + rowRenderData.setCells(cells); + if (!rowRenderData.getCells().isEmpty()) { + rows.add(rowRenderData); + } + } + TableRenderData tableRenderData = new TableRenderData(); + tableRenderData.setRows(rows); + int countSize = tableRenderData.getRows().get(0).getCells().size(); + for (RowRenderData row : tableRenderData.getRows()) { + if (row.getCells().size() != countSize) { + throw new ErrorException("鍏夌氦甯︽姤鍛婇檮浠惰〃鏍煎垪鏁颁笉鍖归厤"); + } + } + TableStyle tableStyle = new TableStyle(); + tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH); +// tableStyle.setColWidths(DEFAULT_COL_WIDTHS); +// tableStyle.setWidth("10000"); + tableStyle.setAlign(TableRowAlign.CENTER); + BorderStyle borderStyle = new BorderStyle(); + borderStyle.setColor("000000"); + borderStyle.setType(XWPFTable.XWPFBorderType.THICK); + borderStyle.setSize(14); + tableStyle.setLeftBorder(borderStyle); + tableStyle.setTopBorder(borderStyle); + tableStyle.setRightBorder(borderStyle); + tableStyle.setBottomBorder(borderStyle); + tableRenderData.setTableStyle(tableStyle); + Map<String, Object> table = new HashMap<>(); + table.put("table6", tableRenderData); + table.put("report", insReport); + table.put("index6", index6.get()); + tables6.add(table); + index6.getAndIncrement(); + } + } + } + +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/handler/PiperConfigReportHandler.java b/cnas-require/src/main/java/com/ruoyi/requier/handler/PiperConfigReportHandler.java new file mode 100644 index 0000000..3c0ab02 --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/handler/PiperConfigReportHandler.java @@ -0,0 +1,388 @@ +package com.ruoyi.requier.handler; + +import com.deepoove.poi.data.*; +import com.deepoove.poi.data.style.*; +import com.ruoyi.framework.exception.ErrorException; +import com.ruoyi.framework.util.MyUtil; +import com.ruoyi.inspect.dto.SampleProductDto; +import com.ruoyi.inspect.mapper.InsProductMapper; +import com.ruoyi.inspect.pojo.InsProduct; +import com.ruoyi.inspect.pojo.InsReport; +import com.ruoyi.inspect.vo.InsProductFiberVO; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.xwpf.usermodel.ParagraphAlignment; +import org.apache.poi.xwpf.usermodel.TableRowAlign; +import org.apache.poi.xwpf.usermodel.XWPFTable; +import org.apache.poi.xwpf.usermodel.XWPFTableCell; + +import java.text.Collator; +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + +/** + * 鏉惧绠℃姤鍛婂鐞嗙被 + */ +public class PiperConfigReportHandler { + + + private final InsProductMapper insProductMapper; + + public PiperConfigReportHandler(InsProductMapper insProductMapper){ + this.insProductMapper = insProductMapper; + } + + private final static String ITEM_SPLIT_CHAR = "&";//妫�楠岄」鍒嗛殧绗� + + private final static String COLOR_SPLIT_CHAR = "-";//鑹叉爣鍒嗛殧绗� + + /** + * + * @param samples 鎵�鏈夋牱鍝� + * @param insReport report瀵硅薄 + * @param tables5 鏉惧绠¢檮浠惰〃鏍艰鍒楄〃 + * @param colorDict 鑹叉爣瀛楀吀 + */ + public void doWrite(List<SampleProductDto> samples, InsReport insReport, List<Map<String,Object>> tables5, List<String> colorDict){ + AtomicInteger index5 = new AtomicInteger(1);//椤电爜 + samples.forEach(sample -> { + //鏌ヨ鏍峰搧涓嬬殑妫�楠岄」鍜岃壊鏍� + List<InsProductFiberVO> insProducts1 = insProductMapper.selectInsProductInsBushList(sample.getId());//鏌ヨ濂楃鐩稿叧鏁版嵁 + //鏍规嵁鑹叉爣鍒嗙粍 + Map<String,List<InsProductFiberVO>> groupProducts = insProducts1.stream() + .filter(p->!p.getInspectionItem().equals("鍏夌氦鎺ュご鎹熻��")) + .collect(Collectors.groupingBy(product -> product.getBushColor()+"-"+product.getColor())); + if(groupProducts.isEmpty()){ + return; + } + List<String[]> collect = groupProducts.keySet().stream().map(k -> k.split(COLOR_SPLIT_CHAR)).sorted((o1, o2) -> { + if (o1.length > 1 && o2.length > 1) { + if (!Objects.equals(o1[0], o2[0])) { + Integer o1Index = colorDict.indexOf(o1[0]); + Integer o2Index = colorDict.indexOf(o2[0]); + return o1Index.compareTo(o2Index); + } + if (!Objects.equals(o1[1], o2[1])) { + Integer o1Index = colorDict.indexOf(o1[1]); + Integer o2Index = colorDict.indexOf(o2[1]); + return o1Index.compareTo(o2Index); + } + } + return 0; + }).collect(Collectors.toList()); + List<String> sortKeys = collect.stream().map(c->String.join(COLOR_SPLIT_CHAR,c)).collect(Collectors.toList()); + //妫�楠岄」鍒楄〃(琛ㄥご) + List<String> itemMap = insProducts1.stream().sorted((o1,o2)->{ + //鏍规嵁妫�楠岄」鎺掑簭 + if(!Objects.equals(o1.getInspectionItem(),o2.getInspectionItem())){ + List<String> specialItems = Arrays.asList("鑰愮幆澧冨簲鍔涘紑瑁�","鐑敹缂╃巼"); + if(specialItems.contains(o1.getInspectionItem()) && specialItems.contains(o2.getInspectionItem())){ + return Integer.MAX_VALUE; + } + Collator instance = Collator.getInstance(Locale.CHINA); + return instance.compare(o1.getInspectionItem(),o2.getInspectionItem()); + } + //妫�楠屽瓙椤规帓搴� + if(StringUtils.isNotBlank(o1.getInspectionItemSubclass())&& StringUtils.isNotBlank(o2.getInspectionItemSubclass())){ + if(!Objects.equals(o1.getInspectionItemSubclass(),o2.getInspectionItemSubclass())){ + Collator instance = Collator.getInstance(Locale.CHINA); + return instance.compare(o1.getInspectionItemSubclass(),o2.getInspectionItemSubclass()); + } + } + return 0; + }).map(insProduct -> { + String item = MyUtil.joinChars("@",insProduct.getInspectionItem(),insProduct.getInspectionItemEn()); + String itemSubClass = MyUtil.joinChars("@",insProduct.getInspectionItemSubclass(),insProduct.getInspectionItemSubclassEn()); + return MyUtil.joinChars(ITEM_SPLIT_CHAR,item,itemSubClass); + }).distinct().collect(Collectors.toList()); + long size = itemMap.size(); + long size2 = insProducts1.stream().map(InsProduct::getInsBushId).distinct().count(); + long number = 7; + long k = 0; + //鍒ゆ柇妫�楠岄」鐩槸鍚︽湁鐖跺瓙鍏崇郴 + int a = itemMap.stream().anyMatch(p -> p.split(ITEM_SPLIT_CHAR).length>0) ? 2 : 1; + for (long c = 0; c < size; c++) { + if (c % number == 0) { + List<RowRenderData> rows = new ArrayList<>(); + //琛ㄦ牸鐨勮鏁� + for (long i = 0; i < size2 + a + 1; i++) { + RowRenderData rowRenderData = new RowRenderData(); + RowStyle rowStyle = new RowStyle(); + rowStyle.setHeight(40); + rowRenderData.setRowStyle(rowStyle); + List<CellRenderData> cells = new ArrayList<>(); + //琛ㄦ牸鐨勫垪鏁� + for (long j = 0; j < 9; j++) { + CellRenderData cellRenderData = new CellRenderData(); + CellStyle cellStyle = new CellStyle(); + cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER); + cellRenderData.setCellStyle(cellStyle); + List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>(); + ParagraphRenderData paragraphRenderData = new ParagraphRenderData(); + ParagraphStyle paragraphStyle = new ParagraphStyle(); + paragraphStyle.setAlign(ParagraphAlignment.CENTER); + paragraphRenderData.setParagraphStyle(paragraphStyle); + List<RenderData> renderData = new ArrayList<>(); + TextRenderData textRenderData = new TextRenderData(); + Style style = new Style(); + style.setFontFamily("瀹嬩綋"); + style.setColor("000000"); + style.setFontSize(10); + textRenderData.setStyle(style); + if(i==0){ + //绗竴琛� + if (j == 0) { + //绗竴鍒� + textRenderData.setText("鏍峰搧缂栧彿@Sample number鈭�456"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 1) { + //绗簩鍒� + textRenderData.setText("鏍峰搧缂栧彿@Sample number鈭�456"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 2) { + //绗簩鍒� + textRenderData.setText(sample.getSampleCode()+"鈭�4566"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + }else if (j == 3) { + //绗簩鍒� + textRenderData.setText(sample.getSampleCode()+"鈭�4566"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + }else if (j == 4) { + //绗簩鍒� + textRenderData.setText("瑙勬牸鍨嬪彿@Type鈭�457"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + }else if (j == 5) { + //绗簩鍒� + textRenderData.setText("瑙勬牸鍨嬪彿@Type鈭�457"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + }else if (j == 6) { + //绗簩鍒� + textRenderData.setText(sample.getModel()+"鈭�4577"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + }else if (j == 7) { + //绗簩鍒� + textRenderData.setText(sample.getModel()+"鈭�4577"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + }else{ + //绗簩鍒� + textRenderData.setText(sample.getModel()+"鈭�4577"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + else if (i == 1) { + //绗簩琛� + if (j == 0) { + //绗竴鍒� + textRenderData.setText("绠¤壊鏍嘆Pipe鈭�100"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 1) { + //绗簩鍒� + textRenderData.setText("绠¤壊鏍嘆Pipe鈭�100"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else { + if(itemMap.size()>(int) (j - 2 + k)){ + String inspectionItem = itemMap.get((int) (j - 2 + k)).split(ITEM_SPLIT_CHAR)[0]; + textRenderData.setText( inspectionItem + "鈭�" + inspectionItem); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + }else{ + String inspectionItem = itemMap.get(itemMap.size()-1).split(ITEM_SPLIT_CHAR)[0]; + textRenderData.setText("鈭�" + inspectionItem); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + } + else if (a == 2 && i == 2) { + //鏈夌埗瀛愰」鐩叧绯荤殑绗笁琛� + if (j == 0) { + //绗竴鍒� + textRenderData.setText("绠¤壊鏍嘆Pipe鈭�100"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 1) { + //绗簩鍒� + textRenderData.setText("绠¤壊鏍嘆Pipe鈭�100"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else { + //椤圭洰淇℃伅 + if(itemMap.size()>(int)(j - 2 + k)){ + //鍒ゆ柇鏄惁鏈夐」鐩瓙绫� + String[] splits = itemMap.get((int) (j - 2 + k)).split(ITEM_SPLIT_CHAR); + if (splits.length<2 || "@".equals(splits[1])) { + textRenderData.setText(splits[0] + "鈭�" + splits[0]); + } else { + textRenderData.setText(splits[1]+"鈭�"+splits[0]+splits[1]); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + }else{ + //鍒ゆ柇鏄惁鏈夐」鐩瓙绫� + String[] splits = itemMap.get(itemMap.size()-1).split(ITEM_SPLIT_CHAR); + if (splits.length<2 || "@".equals(splits[1])) { + textRenderData.setText("鈭�" + splits[0]); + } else { + textRenderData.setText("鈭�"+splits[0]+splits[1]); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + } + else{ + //寰幆鑹叉爣 + String key = sortKeys.get((int)i-3); + if(itemMap.size()>(int) (j - 2 + k)) { + int index = Math.max((int) (j - 2 + k), 0); + String item = itemMap.get(index); + InsProductFiberVO insProduct = groupProducts.get(key).stream() + .filter(p->{ + String insItem = MyUtil.joinChars("@",p.getInspectionItem(),p.getInspectionItemEn()); + String insSubItem = MyUtil.joinChars("@",p.getInspectionItemSubclass(),p.getInspectionItemSubclassEn()); + return item.equals(MyUtil.joinChars(ITEM_SPLIT_CHAR,insItem,insSubItem)); + }).findFirst().orElse(new InsProductFiberVO()); + //濉�� + if (j == 0) { + //绗竴鍒� + textRenderData.setText(insProduct.getBushColor()+"鈭�"+key); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 1) { + //绗簩鍒� + textRenderData.setText(insProduct.getBushColor()+"鈭�"+key); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else { + //椤圭洰淇℃伅 + if((index+1)==groupProducts.get(key).size()){ + textRenderData.setText(insProduct.getLastValue()+"鈭憀ast"+key); + }else{ + textRenderData.setText(insProduct.getLastValue()); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } else { + + textRenderData.setText("鈭憀ast"+key); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + } + rowRenderData.setCells(cells); + if (!rowRenderData.getCells().isEmpty()) { + rows.add(rowRenderData); + } + } + TableRenderData tableRenderData = new TableRenderData(); + tableRenderData.setRows(rows); + int countSize = tableRenderData.getRows().get(0).getCells().size(); + for (RowRenderData row : tableRenderData.getRows()) { + if (row.getCells().size() != countSize) { + throw new ErrorException("姣忚鍗曞厓鏍间笉鐩哥瓑4"); + } + } + TableStyle tableStyle = new TableStyle(); + tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH); + tableStyle.setAlign(TableRowAlign.CENTER); + BorderStyle borderStyle = new BorderStyle(); + borderStyle.setColor("000000"); + borderStyle.setType(XWPFTable.XWPFBorderType.THICK); + borderStyle.setSize(14); + tableStyle.setLeftBorder(borderStyle); + tableStyle.setTopBorder(borderStyle); + tableStyle.setRightBorder(borderStyle); + tableStyle.setBottomBorder(borderStyle); + tableRenderData.setTableStyle(tableStyle); + Map<String, Object> table = new HashMap<>(); + table.put("table5", tableRenderData); + table.put("report", insReport); + table.put("sample_number", sample.getSampleCode()); + table.put("type", sample.getModel()); + table.put("index5", index5.get()); + tables5.add(table); + k += 7; + index5.getAndIncrement(); + } + } + }); + } + + +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/handler/TemperatureCyclingReportHandler1.java b/cnas-require/src/main/java/com/ruoyi/requier/handler/TemperatureCyclingReportHandler1.java new file mode 100644 index 0000000..ff2cac8 --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/handler/TemperatureCyclingReportHandler1.java @@ -0,0 +1,582 @@ +package com.ruoyi.requier.handler; + +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.deepoove.poi.data.*; +import com.deepoove.poi.data.style.*; +import com.ruoyi.framework.exception.ErrorException; +import com.ruoyi.inspect.dto.SampleProductDto; +import com.ruoyi.inspect.mapper.InsFiberMapper; +import com.ruoyi.inspect.mapper.InsProductMapper; +import com.ruoyi.inspect.mapper.InsProductResultMapper; +import com.ruoyi.inspect.pojo.InsFiber; +import com.ruoyi.inspect.pojo.InsProduct; +import com.ruoyi.inspect.pojo.InsProductResult; +import com.ruoyi.inspect.pojo.InsReport; +import org.apache.poi.xwpf.usermodel.ParagraphAlignment; +import org.apache.poi.xwpf.usermodel.TableRowAlign; +import org.apache.poi.xwpf.usermodel.XWPFTable; +import org.apache.poi.xwpf.usermodel.XWPFTableCell; + +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * 娓╁害寰幆鎶ュ憡鐢熸垚澶勭悊鏂规硶 + */ +public class TemperatureCyclingReportHandler1 { + + private final InsProductMapper insProductMapper; + + private final InsFiberMapper insFiberMapper; + + private final InsProductResultMapper insProductResultMapper; + + public TemperatureCyclingReportHandler1(InsProductMapper insProductMapper, InsFiberMapper insFiberMapper, InsProductResultMapper insProductResultMapper) { + this.insProductMapper = insProductMapper; + this.insFiberMapper = insFiberMapper; + this.insProductResultMapper = insProductResultMapper; + } + + public void doWrite(List<SampleProductDto> samples, InsReport insReport, List<Map<String, Object>> tables3) { + AtomicInteger index3 = new AtomicInteger(1); + // 鑷畾涔夋瘮杈冨櫒 + Comparator<InsProduct> customComparator = Comparator.comparing( + InsProduct::getInspectionItemSubclass, + Comparator.naturalOrder() + ); + samples.forEach(sample -> { + // 鏌ヨ娓╁害寰幆涓嬬殑妫�楠岄」鐩� + List<InsProduct> insPros = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getState, 1) + .eq(InsProduct::getInsSampleId, sample.getId()) + .isNotNull(InsProduct::getSpecialItemParentId) + .isNotNull(InsProduct::getInsFiberId) + .isNotNull(InsProduct::getInspectionItemClass)); + //鑾峰彇鎵�鏈夊厜绾よ壊鏍� + List<InsFiber> insFibers = insFiberMapper.selectBatchIds(insPros.stream().map(InsProduct::getInsFiberId).collect(Collectors.toList())); + //鑾峰彇鍏夌氦鑹叉爣鐨勬暟閲�(琛屾暟) + long size2 = insPros.stream().map(InsProduct::getInsFiberId).distinct().count(); + //鑾峰彇鎵�鏈夌殑鍏夌氦椤圭洰(1310nm) + List<String> nm = insPros.stream().map(InsProduct::getInspectionItemClass).distinct().collect(Collectors.toList()); + /*鍏堟牴鎹惊鐜鏁拌繘琛岄亶鍘�*/ + Map<String, List<InsProduct>> xunhuans = insPros.stream().collect(Collectors.groupingBy(InsProduct::getInspectionItem)); + for (int i = 0; i < xunhuans.entrySet().size(); i++) { + //鑾峰彇璇ュ惊鐜殑鎵�鏈夋俯搴� + String s1 = String.valueOf((i + 1)); + //杩囨护鍑�20鈩�(甯告俯)鍜�20鈩� + List<InsProduct> filterList = xunhuans.get(s1).stream().filter(f->f.getInspectionItemSubclass().equals("20鈩�(甯告俯)")).collect(Collectors.toList()); + List<InsProduct> filterList2 = xunhuans.get(s1).stream().filter(f->f.getInspectionItemSubclass().equals("20鈩�")).collect(Collectors.toList()); + //鎺掑簭鍏朵粬娓╁害 + List<InsProduct> sortList = xunhuans.get(s1).stream() + .filter(f->!Arrays.asList("20鈩�(甯告俯)","20鈩�").contains(f.getInspectionItemSubclass())) + .sorted(customComparator).collect(Collectors.toList()); + //鍚堝苟 + Map<String, List<InsProduct>> wendus = Stream.of(filterList,sortList,filterList2).flatMap(List::stream).collect(Collectors.groupingBy( + InsProduct::getInspectionItemSubclass, + LinkedHashMap::new, // 淇濊瘉 Map 涓敭鐨勯『搴忔槸鎻掑叆椤哄簭 + Collectors.toCollection(ArrayList::new) // 淇濊瘉姣忎釜缁勫唴鍏冪礌椤哄簭 + )); + List<String> wendu = new ArrayList<>(wendus.keySet()); + for (int m = 0; m < wendu.size(); m += 3) { + //涓変釜娓╁害涓�寮犺〃,褰撻亶鍘嗗埌绗洓涓俯搴︾殑鏃跺�欓渶瑕侀噸鏂板缓琛� + List<RowRenderData> rows = new ArrayList<>(); + //琛ㄦ牸鐨勮鏁�(鍏夌氦鑹叉爣鐨勬暟閲�+8) + for (int j = 0; j < size2 + 8; j++) { + RowRenderData rowRenderData = new RowRenderData(); + RowStyle rowStyle = new RowStyle(); + rowStyle.setHeight(40); + rowRenderData.setRowStyle(rowStyle); + List<CellRenderData> cells = new ArrayList<>(); + //琛ㄦ牸鐨勫垪鏁�(2*鍏夌氦椤圭洰*3+1) + for (int k = 0; k < 6 * nm.size() + 1; k++) { + CellRenderData cellRenderData = new CellRenderData(); + CellStyle cellStyle = new CellStyle(); + cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER); + cellRenderData.setCellStyle(cellStyle); + List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>(); + ParagraphRenderData paragraphRenderData = new ParagraphRenderData(); + ParagraphStyle paragraphStyle = new ParagraphStyle(); + paragraphStyle.setAlign(ParagraphAlignment.CENTER); + paragraphRenderData.setParagraphStyle(paragraphStyle); + List<RenderData> renderData = new ArrayList<>(); + TextRenderData textRenderData = new TextRenderData(); + Style style = new Style(); + style.setFontFamily("瀹嬩綋"); + style.setColor("000000"); + style.setFontSize(10); + textRenderData.setStyle(style); + if (j == 0) { + //绗竴琛� + if (k <= (6L * nm.size() + 1) / 4) { + //绗竴鍒� + textRenderData.setText("鏍峰搧缂栧彿@Sample number鈭�1000"); + } else if (k > (6L * nm.size() + 1) / 4 && k <= (6L * nm.size() + 1) / 2) { + //绗簩鍒� + textRenderData.setText(sample.getSampleCode() + "鈭�998"); + } else if (k > (6L * nm.size() + 1) / 2 && k < 6L * nm.size()) { + //绗笁鍒� + textRenderData.setText("瑙勬牸鍨嬪彿@Type 鈭�999"); + } else { + //绗洓鍒� + textRenderData.setText(sample.getModel()); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + else if (j == 1) { + //绗簩琛� + if (k == 0) { + //绗竴鍒� + textRenderData.setText("鍏夌氦鑹叉爣@ScanningNumber鈭�1004"); + } else { + textRenderData.setText("妫�娴嬬粨鏋滐紙dB/km锛�(寰幆" + (i + 1) + ")鈭�1005"); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + else if (j == 2) { + //绗笁琛� + if (k == 0) { + //绗竴鍒� + textRenderData.setText("鍏夌氦鑹叉爣@ScanningNumber鈭�1004"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (k <= 6L * nm.size() / 3) { + textRenderData.setText(wendu.get(m) + "鈭�52"+j + m); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (k > 6L * nm.size() / 3 && k <= 6L * nm.size() / 3 * 2) { + int i1 = m + 1; + String s = ""; + try { + s = wendu.get(m + 1); + } catch (Exception e) { + } + textRenderData.setText(s + "鈭�52"+j + i1); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else { + int i1 = m + 2; + String s = ""; + try { + s = wendu.get(m + 2); + } catch (Exception e) { + } + textRenderData.setText(s + "鈭�52" +j+ i1); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + else if (j == 3) { + //绗洓琛� + if (k == 0) { + //绗竴鍒� + textRenderData.setText("鍏夌氦鑹叉爣@ScanningNumber鈭�1004"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else { + for (int j1 = 0; j1 < 3; j1++) {//涓�寮犺〃3涓俯搴� + for (int i1 = 0; i1 < nm.size(); i1++) {//寰幆鍏夌氦椤圭洰:1310nm + if (k > 2 * j1 * nm.size() + 2 * i1 && k <= 2 * j1 * nm.size() + 2 * (i1 + 1)) { + textRenderData.setText(nm.get(i1) + "鈭�88888" + ((k + 1) / nm.size()) + i1); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + } + } + } + else if (j == 4) { + //绗簲琛� + if (k == 0) { + //绗竴鍒� + textRenderData.setText("鍏夌氦鑹叉爣@ScanningNumber鈭�1004"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (k % 2 == 1) { + if (k <= 6L * nm.size() / 3 && wendu.get(m).equals("20鈩�(甯告俯)")) { + textRenderData.setText("琛板噺" + "鈭�42" +j+ k); + } else { + textRenderData.setText(" 琛板噺 "); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else { + if (k <= 6L * nm.size() / 3 && wendu.get(m).equals("20鈩�(甯告俯)")) { + textRenderData.setText("琛板噺" + "鈭�42"+j + (k - 1)); + } else { + textRenderData.setText("|鈭� 伪|"); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + else if (j == size2 + 5) { + //鍊掓暟绗笁琛� + if (k == 0) { + //绗竴鍒� + textRenderData.setText("|max|"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + else if (k % 2 == 0) { + String s = ""; + if (k <= 6L * nm.size() / 3) { + s = wendu.get(m); + } else if (k > 6L * nm.size() / 3 && k <= 6L * nm.size() / 3 * 2) { + try { + s = wendu.get(m + 1); + } catch (Exception e) { + } + } else { + try { + s = wendu.get(m + 2); + } catch (Exception e) { + } + } + //璁$畻绗�()娓╁害鐨勭()涓」鐩殑鎵�鏈夎壊鏍囩殑鏈�缁堝�肩殑鏈�澶у�� + if (s.equals("")) { + textRenderData.setText(""); + } else { + try { + if (k <= 6L * nm.size() / 3 && wendu.get(m).equals("20鈩�(甯告俯)")){ + List<Integer> ips = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getInsSampleId, sample.getId()) + .isNotNull(InsProduct::getInsFiberId) + .eq(InsProduct::getInspectionItem, i + 1) + .eq(InsProduct::getInspectionItemSubclass, s) + .eq(InsProduct::getInspectionItemClass, nm.get((k - 2) / 2 % nm.size()))) + .stream().map(InsProduct::getId).collect(Collectors.toList()); + List<InsProductResult> insProductResults = insProductResultMapper.selDetail(ips); + Optional<String> max = insProductResults.stream().map(insProductResult -> { + { + String[] splitStr = insProductResult.getComValue().split(":"); + return splitStr[splitStr.length - 1].split("\"")[1]; + } + }).filter(value -> !value.isEmpty()).max(String::compareTo); + textRenderData.setText(max.get() + "鈭�"+j+ (k-1)); + }else { + Optional<String> max = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getInsSampleId, sample.getId()) + .isNotNull(InsProduct::getInsFiberId) + .eq(InsProduct::getInspectionItem, i + 1) + .eq(InsProduct::getInspectionItemSubclass, s) + .eq(InsProduct::getInspectionItemClass, nm.get((k - 2) / 2 % nm.size()))) + .stream().map(InsProduct::getLastValue) + .filter(value -> !value.isEmpty()) + .max(String::compareTo); + if (max.isPresent()) { + textRenderData.setText(max.get()); + } else { + textRenderData.setText(""); + } + } + } catch (Exception e) { + textRenderData.setText(""); + } + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + else { + String s = ""; + if (k <= 6L * nm.size() / 3) { + s = wendu.get(m); + } else if (k > 6L * nm.size() / 3 && k <= 6L * nm.size() / 3 * 2) { + try { + s = wendu.get(m + 1); + } catch (Exception e) { + } + } else { + try { + s = wendu.get(m + 2); + } catch (Exception e) { + } + } + //璁$畻绗�()娓╁害鐨勭()涓」鐩殑鎵�鏈夎壊鏍囩殑骞冲潎鍊肩殑鏈�澶у�� + if (s.equals("")) { + textRenderData.setText(""); + } else { + List<Integer> ips = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getInsSampleId, sample.getId()) + .isNotNull(InsProduct::getInsFiberId) + .eq(InsProduct::getInspectionItem, i + 1) + .eq(InsProduct::getInspectionItemSubclass, s) + .eq(InsProduct::getInspectionItemClass, nm.get((k - 1) / 2 % nm.size()))).stream().map(InsProduct::getId).collect(Collectors.toList()); + List<InsProductResult> insProductResults = insProductResultMapper.selDetail(ips); + Optional<String> max = insProductResults.stream().map(insProductResult -> { + { + String[] splitStr = insProductResult.getComValue().split(":"); + return splitStr[splitStr.length - 1].split("\"")[1]; + } + }).filter(value -> !value.isEmpty()).max(String::compareTo); + if (k <= 6L * nm.size() / 3 && wendu.get(m).equals("20鈩�(甯告俯)")){ + textRenderData.setText(max.get() + "鈭�"+j+ k); + }else { + if (max.isPresent()) { + textRenderData.setText(max.get()); + } else { + textRenderData.setText(""); + } + } + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + else if (j == size2 + 6) { + //鍊掓暟绗簩琛� + if (k == 0) { + //绗竴鍒� + textRenderData.setText("|鈭� 伪 max|"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (k % 2 == 0) { + String s = ""; + if (k <= 6L * nm.size() / 3) { + s = wendu.get(m); + } else if (k > 6L * nm.size() / 3 && k <= 6L * nm.size() / 3 * 2) { + try { + s = wendu.get(m + 1); + } catch (Exception e) { + } + } else { + try { + s = wendu.get(m + 2); + } catch (Exception e) { + } + } + //璁$畻绗�()娓╁害鐨勭()涓」鐩殑鎵�鏈夎壊鏍囩殑鏈�缁堝�肩殑鏈�澶у�� + if (s.equals("")) { + textRenderData.setText(""); + } else { + if (k <= 6L * nm.size() / 3 && wendu.get(m).equals("20鈩�(甯告俯)")) { + textRenderData.setText("-" + "鈭�" + j + (k-1)); + } else { + List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getInsSampleId, sample.getId()) + .isNotNull(InsProduct::getInsFiberId) + .eq(InsProduct::getInspectionItem, i + 1) + .eq(InsProduct::getInspectionItemSubclass, s) + .eq(InsProduct::getInspectionItemClass, nm.get((k - 2) / 2 % nm.size()))); + try { + Optional<String> max = insProducts.stream().map(InsProduct::getLastValue) + .filter(value -> !value.isEmpty()) + .max(String::compareTo); + if (max.isPresent()) { + textRenderData.setText(max.get()); + } else { + textRenderData.setText(""); + } + } catch (Exception e) { + textRenderData.setText(""); + } + } + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else { + if (k <= 6L * nm.size() / 3 && wendu.get(m).equals("20鈩�(甯告俯)")) { + textRenderData.setText("-" + "鈭�" + j + k); + } else { + textRenderData.setText("-"); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + else if (j == size2 + 7) { + //鍊掓暟绗竴琛� + textRenderData.setText("鈥渱鈭� 伪|鈥濊〃绀洪檮鍔犺“鍑忕粷瀵瑰�尖垜111111"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + else { + //鍏朵綑濉啓妫�楠屽�肩殑鍐呭 + if (k == 0) { + //绗竴鍒楀~鍐欒壊鏍� + InsFiber insFiber = insFibers.get((j - 5)); + textRenderData.setText(insFiber.getBushColor() + "-" + insFiber.getColor()); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (k % 2 == 0) { + //濉啓琛板噺宸氨鏄痩ast_value + String s = ""; + if (k <= 6L * nm.size() / 3) { + s = wendu.get(m); + } else if (k > 6L * nm.size() / 3 && k <= 6L * nm.size() / 3 * 2) { + try { + s = wendu.get(m + 1); + } catch (Exception e) { + } + } else { + try { + s = wendu.get(m + 2); + } catch (Exception e) { + } + } + if (s.isEmpty()) { + textRenderData.setText(""); + } else { + List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getInsSampleId, sample.getId()) + .isNotNull(InsProduct::getInsFiberId) + .eq(InsProduct::getInsFiberId, insFibers.get(j - 5).getId()) + .eq(InsProduct::getInspectionItem, i + 1) + .eq(InsProduct::getInspectionItemSubclass, s) + .eq(InsProduct::getInspectionItemClass, nm.get((k - 2) / 2 % nm.size()))); + if (k <= 6L * nm.size() / 3 && s.equals("20鈩�(甯告俯)")) { + String comValue = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery() + .eq(InsProductResult::getInsProductId, insProducts.get(0).getId())) + .getComValue(); + String[] splitStr = comValue.split(":"); + textRenderData.setText(splitStr[splitStr.length - 1].split("\"")[1] + "鈭�" + j + (k - 1)); + } else { + textRenderData.setText(insProducts.get(0).getLastValue()); + } + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else { + //濉啓鍏朵綑姝e父娓╁害鐨勮“鍑�(result琛ㄩ噷闈㈢殑com_value) + String s = ""; + if (k <= 6L * nm.size() / 3) { + s = wendu.get(m); + } else if (k > 6L * nm.size() / 3 && k <= 6L * nm.size() / 3 * 2) { + try { + s = wendu.get(m + 1); + } catch (Exception e) { + } + } else { + try { + s = wendu.get(m + 2); + } catch (Exception e) { + } + } + if (s.equals("")) { + textRenderData.setText(""); + } else { + List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getInsSampleId, sample.getId()) + .isNotNull(InsProduct::getInsFiberId) + .eq(InsProduct::getInsFiberId, insFibers.get(j - 5).getId()) + .eq(InsProduct::getInspectionItem, i + 1) + .eq(InsProduct::getInspectionItemSubclass, s) + .eq(InsProduct::getInspectionItemClass, nm.get((k - 1) / 2 % nm.size()))); + String comValue = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery() + .eq(InsProductResult::getInsProductId, insProducts.get(0).getId())) + .getComValue(); + String[] splitStr = comValue.split(":"); + if (k <= 6L * nm.size() / 3 && s.equals("20鈩�(甯告俯)")) { + textRenderData.setText(splitStr[splitStr.length - 1].split("\"")[1] + "鈭�" + j + k); + } else { + textRenderData.setText(splitStr[splitStr.length - 1].split("\"")[1]); + } + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + } + rowRenderData.setCells(cells); + if (!rowRenderData.getCells().isEmpty()) { + rows.add(rowRenderData); + } + } + TableRenderData tableRenderData = new TableRenderData(); + tableRenderData.setRows(rows); + int countSize = tableRenderData.getRows().get(0).getCells().size(); + for (RowRenderData row : tableRenderData.getRows()) { + if (row.getCells().size() != countSize) { + throw new ErrorException("姣忚鍗曞厓鏍间笉鐩哥瓑5"); + } + } + TableStyle tableStyle = new TableStyle(); + tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH); + tableStyle.setAlign(TableRowAlign.CENTER); + BorderStyle borderStyle = new BorderStyle(); + borderStyle.setColor("000000"); + borderStyle.setType(XWPFTable.XWPFBorderType.THICK); + borderStyle.setSize(14); + tableStyle.setLeftBorder(borderStyle); + tableStyle.setTopBorder(borderStyle); + tableStyle.setRightBorder(borderStyle); + tableStyle.setBottomBorder(borderStyle); + tableRenderData.setTableStyle(tableStyle); + Map<String, Object> table = new HashMap<>(); + table.put("table3", tableRenderData); + table.put("report", insReport); + table.put("index3", index3.get()); + tables3.add(table); + index3.getAndIncrement(); + } + } + }); + } + +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/handler/TemperatureTestReportHandler.java b/cnas-require/src/main/java/com/ruoyi/requier/handler/TemperatureTestReportHandler.java new file mode 100644 index 0000000..58aa547 --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/handler/TemperatureTestReportHandler.java @@ -0,0 +1,367 @@ +package com.ruoyi.requier.handler; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.deepoove.poi.data.*; +import com.deepoove.poi.data.style.*; +import com.ruoyi.framework.exception.ErrorException; +import com.ruoyi.inspect.dto.SampleProductDto; +import com.ruoyi.inspect.mapper.InsProductMapper; +import com.ruoyi.inspect.mapper.InsProductResultMapper; +import com.ruoyi.inspect.pojo.InsProduct; +import com.ruoyi.inspect.pojo.InsProductResult; +import com.ruoyi.inspect.pojo.InsReport; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.xwpf.usermodel.ParagraphAlignment; +import org.apache.poi.xwpf.usermodel.TableRowAlign; +import org.apache.poi.xwpf.usermodel.XWPFTable; +import org.apache.poi.xwpf.usermodel.XWPFTableCell; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 娓╁崌璇曢獙鎶ュ憡澶勭悊绫� + */ +public class TemperatureTestReportHandler { + + private final InsProductMapper insProductMapper; + + private final InsProductResultMapper insProductResultMapper; + + public TemperatureTestReportHandler(InsProductMapper insProductMapper, InsProductResultMapper insProductResultMapper){ + this.insProductMapper = insProductMapper; + this.insProductResultMapper = insProductResultMapper; + } + + /** + * + * @param samples 褰撳墠璁㈠崟鐨勬墍鏈夋牱鍝� + * @param insReport report瀵硅薄 + * @param tables3 娓╁崌璇曢獙闄勪欢琛ㄦ牸鏁版嵁 + */ + public void doWrite(List<SampleProductDto> samples, InsReport insReport, List<Map<String,Object>> tables3){ + samples.forEach(sample -> { + //鏌ヨ娓╁崌璇曢獙涓嬬殑妫�楠岄」鐩� + List<InsProduct> insPros = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getState, 1) + .eq(InsProduct::getInsSampleId, sample.getId()) + .isNotNull(InsProduct::getSpecialItemParentId) //鍖哄垎甯歌椤圭洰 + .isNull(InsProduct::getInspectionItemClass)//鐢ㄦ楠屽垎椤瑰瓧娈靛尯鍒俯鍗囪瘯楠屼笌鐑惊鐜� + .isNull(InsProduct::getInsFiberId) //鐢ㄥ厜绾ゅ尯鍒俯鍗囪瘯楠屽拰娓╁害寰幆 + .eq(InsProduct::getInspectionItem, "1")); //娓╁崌璇曢獙鐨勫惊鐜彧鏈�1娆� + //鏌ヨ濉啓鐨勬楠屽�兼湁澶氬皯绉� + InsProductResult insProductResult = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPros.get(0).getId())).get(0); + int vCount = StringUtils.countMatches(insProductResult.getInsValue(), "\"v\":\""); + long index3 = 1; + for (int c = 0; c < vCount; c++) { + if (c % 16 == 0) { + List<RowRenderData> rows = new ArrayList<>(); + //琛ㄦ牸鐨勮鏁� + for (int i = 0; i < 3 + vCount; i++) { + RowRenderData rowRenderData = new RowRenderData(); + RowStyle rowStyle = new RowStyle(); + rowStyle.setHeight(40); + rowRenderData.setRowStyle(rowStyle); + List<CellRenderData> cells = new ArrayList<>(); + String a = null;//瀵肩嚎娓╁害 + String b = null;//鑰愬紶娓╁害 + String d = null;//鎺ョ画娓╁害 + //鍒楁暟 + for (int j = 0; j < 6; j++) { + CellRenderData cellRenderData = new CellRenderData(); + CellStyle cellStyle = new CellStyle(); + cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER); + cellRenderData.setCellStyle(cellStyle); + List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>(); + ParagraphRenderData paragraphRenderData = new ParagraphRenderData(); + ParagraphStyle paragraphStyle = new ParagraphStyle(); + paragraphStyle.setAlign(ParagraphAlignment.CENTER); + paragraphRenderData.setParagraphStyle(paragraphStyle); + List<RenderData> renderData = new ArrayList<>(); + TextRenderData textRenderData = new TextRenderData(); + Style style = new Style(); + style.setFontFamily("瀹嬩綋"); + style.setColor("000000"); + textRenderData.setStyle(style); + if (i == 0) { + //绗竴琛� + if (j == 0) { + //绗竴鍒� + textRenderData.setText("鏍峰搧缂栧彿@Sample number"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 1) { + //绗簩鍒� + textRenderData.setText(sample.getSampleCode()); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 2) { + //绗笁鍒� + textRenderData.setText("瑙勬牸鍨嬪彿@Type and size"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 3) { + //绗洓鍒� + textRenderData.setText(sample.getModel()); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 4) { + //绗簲鍒� + textRenderData.setText("妫�娴嬮」@Testing items"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else { + //绗叚鍒� + textRenderData.setText("娓╁崌璇曢獙@Temperature rise test"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } else if (i == 1) { + //绗簩琛� + if (j == 0) { + //绗竴鍒� + textRenderData.setText("鐜娓╁害@Ambient temperature锛堚剝锛�"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 1) { + //绗簩鍒� + textRenderData.setText("瀵肩嚎娓╁害@Wire temperature锛堚剝锛�"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 2) { + //绗笁鍒� + textRenderData.setText("鑰愬紶娓╁害@Tensile temperature锛堚剝锛�"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 3) { + //绗洓鍒� + textRenderData.setText("鎺ョ画娓╁害@Connection temperature锛堚剝锛�"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else { + //绗簲鍒楃鍏垪 + textRenderData.setText("缁撴灉鍒ゅ畾@Result judgment鈭�100"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + else if (i == 2 + vCount) { + //鏈�鍚庝竴琛� + if (j == 0 || j == 1) { + //绗竴鍒楀拰绗簩鍒� + textRenderData.setText("澶囨敞鈭�101"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else { + //鍏朵綑鍒� + textRenderData.setText("鈥溾垰鈥濊〃绀洪」鐩悎鏍硷紝鈥溍椻�濊〃绀洪」鐩笉鍚堟牸銆傗垜102"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + else { + //鍏朵綑琛� + if (j == 0) { + //绗竴鍒�(鐜娓╁害) + InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getState, 1) + .eq(InsProduct::getInsSampleId, sample.getId()) + .eq(InsProduct::getInspectionItemSubclass, "鐜娓╁害") + .isNotNull(InsProduct::getSpecialItemParentId) //鍖哄垎甯歌椤圭洰 + .isNull(InsProduct::getInspectionItemClass)//鐢ㄦ楠屽垎椤瑰瓧娈靛尯鍒俯鍗囪瘯楠屼笌鐑惊鐜� + .isNull(InsProduct::getInsFiberId) //鐢ㄥ厜绾ゅ尯鍒俯鍗囪瘯楠屽拰娓╁害寰幆 + .eq(InsProduct::getInspectionItem, "1")); //娓╁崌璇曢獙鐨勫惊鐜彧鏈�1娆� + String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue(); + JSONArray jsonArray = JSONArray.parseArray(insValue); + JSONObject jsonObject = jsonArray.getJSONObject(i - 2); + String vValue = jsonObject.getString("v"); + System.out.println("鐜娓╁害绗� " + (i - 1) + " 涓� 'v' 瀛楁鐨勫�兼槸: " + vValue); + textRenderData.setText(vValue); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + else if (j == 1) { + //绗簩鍒�(瀵肩嚎娓╁害) + InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getState, 1) + .eq(InsProduct::getInsSampleId, sample.getId()) + .eq(InsProduct::getInspectionItemSubclass, "瀵肩嚎娓╁害") + .isNotNull(InsProduct::getSpecialItemParentId) //鍖哄垎甯歌椤圭洰 + .isNull(InsProduct::getInspectionItemClass)//鐢ㄦ楠屽垎椤瑰瓧娈靛尯鍒俯鍗囪瘯楠屼笌鐑惊鐜� + .isNull(InsProduct::getInsFiberId) //鐢ㄥ厜绾ゅ尯鍒俯鍗囪瘯楠屽拰娓╁害寰幆 + .eq(InsProduct::getInspectionItem, "1")); //娓╁崌璇曢獙鐨勫惊鐜彧鏈�1娆� + String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue(); + JSONArray jsonArray = JSONArray.parseArray(insValue); + JSONObject jsonObject = jsonArray.getJSONObject(i - 2); + String vValue = jsonObject.getString("v"); + a = vValue; + System.out.println("瀵肩嚎娓╁害绗� " + (i - 1) + " 涓� 'v' 瀛楁鐨勫�兼槸: " + vValue); + textRenderData.setText(vValue); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + else if (j == 2) { + //绗笁鍒�(鑰愬紶娓╁害) + InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getState, 1) + .eq(InsProduct::getInsSampleId, sample.getId()) + .eq(InsProduct::getInspectionItemSubclass, "鑰愬紶娓╁害") + .isNotNull(InsProduct::getSpecialItemParentId) //鍖哄垎甯歌椤圭洰 + .isNull(InsProduct::getInspectionItemClass)//鐢ㄦ楠屽垎椤瑰瓧娈靛尯鍒俯鍗囪瘯楠屼笌鐑惊鐜� + .isNull(InsProduct::getInsFiberId) //鐢ㄥ厜绾ゅ尯鍒俯鍗囪瘯楠屽拰娓╁害寰幆 + .eq(InsProduct::getInspectionItem, "1")); //娓╁崌璇曢獙鐨勫惊鐜彧鏈�1娆� + if (ObjectUtils.isNotEmpty(insPro)) { + String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue(); + JSONArray jsonArray = JSONArray.parseArray(insValue); + JSONObject jsonObject = jsonArray.getJSONObject(i - 2); + String vValue = jsonObject.getString("v"); + b = vValue; + System.out.println("鑰愬紶娓╁害绗� " + (i - 1) + " 涓� 'v' 瀛楁鐨勫�兼槸: " + vValue); + textRenderData.setText(vValue); + } else { + textRenderData.setText(""); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + else if (j == 3) { + //绗洓鍒�(鎺ョ画娓╁害) + InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getState, 1) + .eq(InsProduct::getInsSampleId, sample.getId()) + .eq(InsProduct::getInspectionItemSubclass, "鎺ョ画娓╁害") + .isNotNull(InsProduct::getSpecialItemParentId) //鍖哄垎甯歌椤圭洰 + .isNull(InsProduct::getInspectionItemClass)//鐢ㄦ楠屽垎椤瑰瓧娈靛尯鍒俯鍗囪瘯楠屼笌鐑惊鐜� + .isNull(InsProduct::getInsFiberId) //鐢ㄥ厜绾ゅ尯鍒俯鍗囪瘯楠屽拰娓╁害寰幆 + .eq(InsProduct::getInspectionItem, "1")); //娓╁崌璇曢獙鐨勫惊鐜彧鏈�1娆� + if (ObjectUtils.isNotEmpty(insPro)) { + String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue(); + JSONArray jsonArray = JSONArray.parseArray(insValue); + JSONObject jsonObject = jsonArray.getJSONObject(i - 2); + String vValue = jsonObject.getString("v"); + d = vValue; + System.out.println("鎺ョ画娓╁害绗� " + (i - 1) + " 涓� 'v' 瀛楁鐨勫�兼槸: " + vValue); + textRenderData.setText(vValue); + } else { + textRenderData.setText(""); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + else { + //绗簲鍒� 绗叚鍒�(缁撹) + //鍒ゆ柇鍚堟牸涓庝笉鍚堟牸 + BigDecimal decimal1 = new BigDecimal(a); + BigDecimal decimal2 = new BigDecimal(b == null ? "0" : b); + BigDecimal decimal3 = new BigDecimal(d == null ? "0" : d); + if (decimal1.compareTo(decimal2) > 0 && decimal1.compareTo(decimal3) > 0) { + textRenderData.setText("鈭氣垜20"+i); + } else { + textRenderData.setText("脳鈭�20"+i); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + } + rowRenderData.setCells(cells); + if (rowRenderData.getCells().size() != 0) { + rows.add(rowRenderData); + } + } + TableRenderData tableRenderData = new TableRenderData(); + tableRenderData.setRows(rows); + int countSize = tableRenderData.getRows().get(0).getCells().size(); + for (RowRenderData row : tableRenderData.getRows()) { + /*for (CellRenderData cell : row.getCells()) { + System.out.print(cell.getParagraphs().get(0).getContents()); + } + System.out.println("");*/ + if (row.getCells().size() != countSize) { + throw new ErrorException("姣忚鍗曞厓鏍间笉鐩哥瓑5"); + } + } + TableStyle tableStyle = new TableStyle(); + tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH); + tableStyle.setAlign(TableRowAlign.CENTER); + BorderStyle borderStyle = new BorderStyle(); + borderStyle.setColor("000000"); + borderStyle.setType(XWPFTable.XWPFBorderType.THICK); + borderStyle.setSize(14); + tableStyle.setLeftBorder(borderStyle); + tableStyle.setTopBorder(borderStyle); + tableStyle.setRightBorder(borderStyle); + tableStyle.setBottomBorder(borderStyle); + tableRenderData.setTableStyle(tableStyle); + Map<String, Object> table = new HashMap<>(); + table.put("table3", tableRenderData); + table.put("report", insReport); + table.put("index3", index3); + tables3.add(table); + index3++; + } + } + }); + } + +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/handler/ThermalCycleReportHandler.java b/cnas-require/src/main/java/com/ruoyi/requier/handler/ThermalCycleReportHandler.java new file mode 100644 index 0000000..47534c9 --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/handler/ThermalCycleReportHandler.java @@ -0,0 +1,599 @@ +package com.ruoyi.requier.handler; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.deepoove.poi.data.*; +import com.deepoove.poi.data.style.*; +import com.ruoyi.framework.exception.ErrorException; +import com.ruoyi.inspect.dto.SampleProductDto; +import com.ruoyi.inspect.mapper.InsProductMapper; +import com.ruoyi.inspect.mapper.InsProductResultMapper; +import com.ruoyi.inspect.pojo.InsProduct; +import com.ruoyi.inspect.pojo.InsProductResult; +import com.ruoyi.inspect.pojo.InsReport; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.xwpf.usermodel.ParagraphAlignment; +import org.apache.poi.xwpf.usermodel.TableRowAlign; +import org.apache.poi.xwpf.usermodel.XWPFTable; +import org.apache.poi.xwpf.usermodel.XWPFTableCell; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 鐑惊鐜姤鍛婂鐞嗙被 + */ +public class ThermalCycleReportHandler { + + + private final InsProductMapper insProductMapper; + + private final InsProductResultMapper insProductResultMapper; + + public ThermalCycleReportHandler(InsProductMapper insProductMapper, InsProductResultMapper insProductResultMapper){ + this.insProductMapper = insProductMapper; + this.insProductResultMapper = insProductResultMapper; + } + + /** + * + * @param samples 褰撳墠璁㈠崟鐨勬墍鏈夋牱鍝� + * @param insReport report瀵硅薄 + * @param tables3 鐑惊鐜檮浠惰〃鏍兼暟鎹� + */ + public void doWrite(List<SampleProductDto> samples, InsReport insReport, List<Map<String,Object>> tables3){ + samples.forEach(sample -> { + //璁$畻鏁版嵁鐨勮鏁�,鍏堟煡鍑烘湁澶氬皯娆″惊鐜�,鍐嶆煡姣忎釜寰幆鐨勫~鍐欐暟閲� + InsProduct insProduct = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getState, 1) + .eq(InsProduct::getInsSampleId, sample.getId()) + .eq(InsProduct::getInspectionItem, "鐑惊鐜�")); + String[] split = insProduct.getAsk().split(";"); + Integer cycle = Integer.parseInt(split[split.length - 1]);//寰幆娆℃暟 + int vCount = 0; + List<Integer> list = new ArrayList<>(); + for (Integer i = 1; i <= cycle; i++) { + //鏌ユ瘡涓惊鐜噷闈㈢殑濉啓鏁伴噺 + List<InsProduct> insPros = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getState, 1) + .eq(InsProduct::getInsSampleId, sample.getId()) + .isNotNull(InsProduct::getSpecialItemParentId) //鍖哄垎甯歌椤圭洰 + .eq(InsProduct::getInspectionItemClass, "鐩存祦鐢甸樆") + .isNull(InsProduct::getInsFiberId) //鐢ㄥ厜绾ゅ尯鍒俯鍗囪瘯楠屽拰娓╁害寰幆 + .eq(InsProduct::getInspectionItem, i + "")); + InsProductResult insProductResult = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPros.get(0).getId())).get(0); + vCount += StringUtils.countMatches(insProductResult.getInsValue(), "\"v\":\""); + list.add(StringUtils.countMatches(insProductResult.getInsValue(), "\"v\":\"")); + } + long index3 = 1; + for (int c = 0; c < vCount; c++) { + if (c % 18 == 0) { + List<RowRenderData> rows = new ArrayList<>(); + //琛ㄦ牸鐨勮鏁� + for (int i = 0; i < 4 + vCount; i++) { + RowRenderData rowRenderData = new RowRenderData(); + RowStyle rowStyle = new RowStyle(); + rowStyle.setHeight(40); + rowRenderData.setRowStyle(rowStyle); + List<CellRenderData> cells = new ArrayList<>(); + String a = null;//瀵肩嚎娓╁害 + String b = null;//鑰愬紶娓╁害 + String d = null;//鎺ョ画娓╁害 + //鍒楁暟 + for (int j = 0; j < 9; j++) { + CellRenderData cellRenderData = new CellRenderData(); + CellStyle cellStyle = new CellStyle(); + cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER); + cellRenderData.setCellStyle(cellStyle); + List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>(); + ParagraphRenderData paragraphRenderData = new ParagraphRenderData(); + ParagraphStyle paragraphStyle = new ParagraphStyle(); + paragraphStyle.setAlign(ParagraphAlignment.CENTER); + paragraphRenderData.setParagraphStyle(paragraphStyle); + List<RenderData> renderData = new ArrayList<>(); + TextRenderData textRenderData = new TextRenderData(); + Style style = new Style(); + style.setFontFamily("瀹嬩綋"); + style.setColor("000000"); + textRenderData.setStyle(style); + if (i == 0) { + //绗竴琛� + if (j == 0) { + //绗竴鍒� + textRenderData.setText("鏍峰搧缂栧彿@Sample number"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 1) { + //绗簩鍒� + textRenderData.setText(sample.getSampleCode()); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 2 || j == 3) { + //绗笁鍒楀拰绗洓鍒� + textRenderData.setText("瑙勬牸鍨嬪彿@Type and size鈭�301"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 4 || j == 5) { + //绗簲鍒楀拰绗叚鍒� + textRenderData.setText(sample.getModel()+"鈭�302"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 6) { + //绗竷鍒� + textRenderData.setText("妫�娴嬮」@Testing items"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else { + //绗叓鍒楀拰绗節鍒� + textRenderData.setText("鐑惊鐜疈Thermal cycle鈭�303"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + else if (i == 1) { + //绗簩琛� + if (j == 0) { + //绗竴鍒� + textRenderData.setText("寰幆娆℃暟@Number of cycles(times)鈭�100"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 1) { + //绗簩鍒� + textRenderData.setText("鐜娓╁害@Ambient temperature锛堚剝锛夆垜101"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 2 || j == 3) { + //绗笁鍒楀拰绗洓鍒� + textRenderData.setText("瀵肩嚎@Conductor鈭�102"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 4 || j == 5) { + //绗簲鍒楀拰绗叚鍒� + textRenderData.setText("鑰愬紶绾垮す@Tension clamp鈭�103"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 6 || j == 7) { + //绗竷鍒楃鍏垪 + textRenderData.setText("鎺ョ画閲戝叿@Splicing fittings鈭�104"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else { + //绗節鍒� + textRenderData.setText("缁撴灉鍒ゅ畾@Result judgment鈭�105"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + else if (i == 2) { + //绗笁琛� + if (j == 0) { + //绗竴鍒� + textRenderData.setText("寰幆娆℃暟@Number of cycles(times)鈭�100"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 1) { + //绗簩鍒� + textRenderData.setText("鐜娓╁害@Ambient temperature锛堚剝锛夆垜101"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 2) { + //绗笁鍒� + textRenderData.setText("娓╁害@Temperature锛堚剝锛�"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 3) { + //绗洓鍒� + textRenderData.setText("鐩存祦鐢甸樆@DC resistance锛埼�/km锛�"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 4) { + //绗簲鍒� + textRenderData.setText("娓╁害@Temperature锛堚剝锛�"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 5) { + //绗叚鍒� + textRenderData.setText("鐩存祦鐢甸樆@DC resistance锛埼�/km锛�"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 6) { + //绗竷鍒� + textRenderData.setText("娓╁害@Temperature锛堚剝锛�"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else if (j == 7) { + //绗叓鍒� + textRenderData.setText("鐩存祦鐢甸樆@DC resistance锛埼�/km锛�"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else { + //绗節鍒� + textRenderData.setText("缁撴灉鍒ゅ畾@Result judgment鈭�105"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + else if (i == 3 + vCount) { + //鏈�鍚庝竴琛� + if (j == 0) { + //绗竴鍒� + textRenderData.setText("澶囨敞"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } else { + //鍏朵綑鍒� + textRenderData.setText("鈥溾垰鈥濊〃绀洪」鐩悎鏍硷紝鈥溍椻�濊〃绀洪」鐩笉鍚堟牸銆傗垜108"); + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + else { + //鍏朵綑琛� + if (j == 0) { + //绗竴鍒� + int aa= 0; + for (int m = 0; m < cycle; m++) { + aa += list.get(m); + if (i-3<aa){ + textRenderData.setText((m+1)+""); + break; + } + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + else if (j == 1) { + //绗簩鍒� + int aa= 0; + for (int m = 0; m < cycle; m++) { + aa += list.get(m); + if (i-3<aa){ + InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getState, 1) + .eq(InsProduct::getInsSampleId, sample.getId()) + .eq(InsProduct::getInspectionItemSubclass, "鐜娓╁害") + .isNotNull(InsProduct::getSpecialItemParentId) + .eq(InsProduct::getInspectionItemClass,"鐩存祦鐢甸樆") + .isNull(InsProduct::getInsFiberId) + .eq(InsProduct::getInspectionItem, (m+1)+"")); + String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue(); + JSONArray jsonArray = JSONArray.parseArray(insValue); + JSONObject jsonObject = jsonArray.getJSONObject(i - 3-(aa-list.get(m))); + String vValue = jsonObject.getString("v"); + System.out.println("鐜娓╁害绗� " + (i - 2-(aa-list.get(m))) + " 涓� 'v' 瀛楁鐨勫�兼槸: " + vValue); + textRenderData.setText(vValue); + break; + } + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + else if (j == 2) { + //绗笁鍒� + int aa= 0; + for (int m = 0; m < cycle; m++) { + aa += list.get(m); + if (i-3<aa){ + InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getState, 1) + .eq(InsProduct::getInsSampleId, sample.getId()) + .eq(InsProduct::getInspectionItemSubclass, "瀵肩嚎娓╁害") + .isNotNull(InsProduct::getSpecialItemParentId) + .eq(InsProduct::getInspectionItemClass,"鐩存祦鐢甸樆") + .isNull(InsProduct::getInsFiberId) + .eq(InsProduct::getInspectionItem, (m+1)+"")); + if (ObjectUtils.isNotEmpty(insPro)) { + String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue(); + JSONArray jsonArray = JSONArray.parseArray(insValue); + JSONObject jsonObject = jsonArray.getJSONObject(i - 3 - (aa - list.get(m))); + String vValue = jsonObject.getString("v"); + a=vValue; + System.out.println("瀵肩嚎娓╁害绗� " + (i - 2 - (aa - list.get(m))) + " 涓� 'v' 瀛楁鐨勫�兼槸: " + vValue); + textRenderData.setText(vValue); + }else textRenderData.setText(""); + break; + } + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + else if (j == 3) { + //绗洓鍒� + int aa= 0; + for (int m = 0; m < cycle; m++) { + aa += list.get(m); + if (i-3<aa){ + InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getState, 1) + .eq(InsProduct::getInsSampleId, sample.getId()) + .eq(InsProduct::getInspectionItemSubclass, "瀵肩嚎娓╁害") + .isNotNull(InsProduct::getSpecialItemParentId) + .eq(InsProduct::getInspectionItemClass,"鐩存祦鐢甸樆") + .isNull(InsProduct::getInsFiberId) + .eq(InsProduct::getInspectionItem, (m+1)+"")); + if (ObjectUtils.isNotEmpty(insPro)) { + String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue(); + JSONArray jsonArray = JSONArray.parseArray(insValue); + JSONObject jsonObject = jsonArray.getJSONObject(i - 3 - (aa - list.get(m))); + String vValue = jsonObject.getString("w"); + System.out.println("瀵肩嚎娓╁害绗� " + (i - 2 - (aa - list.get(m))) + " 涓� 'w' 瀛楁鐨勫�兼槸: " + vValue); + textRenderData.setText(vValue); + }else textRenderData.setText(""); + break; + } + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + else if (j == 4) { + //绗簲鍒� + int aa= 0; + for (int m = 0; m < cycle; m++) { + aa += list.get(m); + if (i-3<aa){ + InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getState, 1) + .eq(InsProduct::getInsSampleId, sample.getId()) + .eq(InsProduct::getInspectionItemSubclass, "鑰愬紶娓╁害") + .isNotNull(InsProduct::getSpecialItemParentId) + .eq(InsProduct::getInspectionItemClass,"鐩存祦鐢甸樆") + .isNull(InsProduct::getInsFiberId) + .eq(InsProduct::getInspectionItem, (m+1)+"")); + if (ObjectUtils.isNotEmpty(insPro)) { + String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue(); + JSONArray jsonArray = JSONArray.parseArray(insValue); + JSONObject jsonObject = jsonArray.getJSONObject(i - 3 - (aa - list.get(m))); + String vValue = jsonObject.getString("v"); + b=vValue; + System.out.println("鑰愬紶娓╁害绗� " + (i - 2 - (aa - list.get(m))) + " 涓� 'v' 瀛楁鐨勫�兼槸: " + vValue); + textRenderData.setText(vValue); + }else textRenderData.setText(""); + break; + } + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + else if (j == 5) { + //绗叚鍒� + int aa= 0; + for (int m = 0; m < cycle; m++) { + aa += list.get(m); + if (i-3<aa){ + InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getState, 1) + .eq(InsProduct::getInsSampleId, sample.getId()) + .eq(InsProduct::getInspectionItemSubclass, "鑰愬紶娓╁害") + .isNotNull(InsProduct::getSpecialItemParentId) + .eq(InsProduct::getInspectionItemClass,"鐩存祦鐢甸樆") + .isNull(InsProduct::getInsFiberId) + .eq(InsProduct::getInspectionItem, (m+1)+"")); + if (ObjectUtils.isNotEmpty(insPro)) { + String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue(); + JSONArray jsonArray = JSONArray.parseArray(insValue); + JSONObject jsonObject = jsonArray.getJSONObject(i - 3 - (aa - list.get(m))); + String vValue = jsonObject.getString("w"); + System.out.println("鑰愬紶娓╁害绗� " + (i - 2 - (aa - list.get(m))) + " 涓� 'w' 瀛楁鐨勫�兼槸: " + vValue); + textRenderData.setText(vValue); + }else textRenderData.setText(""); + break; + } + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + else if (j == 6) { + //绗竷鍒� + int aa= 0; + for (int m = 0; m < cycle; m++) { + aa += list.get(m); + if (i-3<aa){ + InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getState, 1) + .eq(InsProduct::getInsSampleId, sample.getId()) + .eq(InsProduct::getInspectionItemSubclass, "鎺ョ画娓╁害") + .isNotNull(InsProduct::getSpecialItemParentId) + .eq(InsProduct::getInspectionItemClass,"鐩存祦鐢甸樆") + .isNull(InsProduct::getInsFiberId) + .eq(InsProduct::getInspectionItem, (m+1)+"")); + if (ObjectUtils.isNotEmpty(insPro)) { + String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue(); + JSONArray jsonArray = JSONArray.parseArray(insValue); + JSONObject jsonObject = jsonArray.getJSONObject(i - 3 - (aa - list.get(m))); + String vValue = jsonObject.getString("v"); + d=vValue; + System.out.println("鎺ョ画娓╁害绗� " + (i - 2 - (aa - list.get(m))) + " 涓� 'v' 瀛楁鐨勫�兼槸: " + vValue); + textRenderData.setText(vValue); + }else textRenderData.setText(""); + break; + } + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + else if (j == 7) { + //绗叓鍒� + int aa= 0; + for (int m = 0; m < cycle; m++) { + aa += list.get(m); + if (i-3<aa){ + InsProduct insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getState, 1) + .eq(InsProduct::getInsSampleId, sample.getId()) + .eq(InsProduct::getInspectionItemSubclass, "鎺ョ画娓╁害") + .isNotNull(InsProduct::getSpecialItemParentId) + .eq(InsProduct::getInspectionItemClass,"鐩存祦鐢甸樆") + .isNull(InsProduct::getInsFiberId) + .eq(InsProduct::getInspectionItem, (m+1)+"")); + if (ObjectUtils.isNotEmpty(insPro)) { + String insValue = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())).get(0).getInsValue(); + JSONArray jsonArray = JSONArray.parseArray(insValue); + JSONObject jsonObject = jsonArray.getJSONObject(i - 3 - (aa - list.get(m))); + String vValue = jsonObject.getString("w"); + System.out.println("鎺ョ画娓╁害绗� " + (i - 2 - (aa - list.get(m))) + " 涓� 'w' 瀛楁鐨勫�兼槸: " + vValue); + textRenderData.setText(vValue); + }else textRenderData.setText(""); + break; + } + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + else { + //鍒ゆ柇鍚堟牸涓庝笉鍚堟牸 + BigDecimal decimal1 = new BigDecimal(a); + BigDecimal decimal2 = new BigDecimal(b == null ? "0" : b); + BigDecimal decimal3 = new BigDecimal(d == null ? "0" : d); + if (decimal1.compareTo(decimal2) > 0 && decimal1.compareTo(decimal3) > 0) { + textRenderData.setText("鈭�"); + } else { + textRenderData.setText("脳"); + } + renderData.add(textRenderData); + paragraphRenderData.setContents(renderData); + paragraphRenderDataList.add(paragraphRenderData); + cellRenderData.setParagraphs(paragraphRenderDataList); + cells.add(cellRenderData); + } + } + } + rowRenderData.setCells(cells); + if (rowRenderData.getCells().size() != 0) { + rows.add(rowRenderData); + } + } + TableRenderData tableRenderData = new TableRenderData(); + tableRenderData.setRows(rows); + int countSize = tableRenderData.getRows().get(0).getCells().size(); + for (RowRenderData row : tableRenderData.getRows()) { + /*for (CellRenderData cell : row.getCells()) { + System.out.print(cell.getParagraphs().get(0).getContents()); + } + System.out.println("");*/ + if (row.getCells().size() != countSize) { + throw new ErrorException("姣忚鍗曞厓鏍间笉鐩哥瓑5"); + } + } + TableStyle tableStyle = new TableStyle(); + tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH); + tableStyle.setAlign(TableRowAlign.CENTER); + BorderStyle borderStyle = new BorderStyle(); + borderStyle.setColor("000000"); + borderStyle.setType(XWPFTable.XWPFBorderType.THICK); + borderStyle.setSize(14); + tableStyle.setLeftBorder(borderStyle); + tableStyle.setTopBorder(borderStyle); + tableStyle.setRightBorder(borderStyle); + tableStyle.setBottomBorder(borderStyle); + tableRenderData.setTableStyle(tableStyle); + Map<String, Object> table = new HashMap<>(); + table.put("table3", tableRenderData); + table.put("report", insReport); + table.put("index3", index3); + tables3.add(table); + index3++; + } + } + + }); + } + +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/mapper/DataConfigMapper.java b/cnas-require/src/main/java/com/ruoyi/requier/mapper/DataConfigMapper.java new file mode 100644 index 0000000..c8b75e3 --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/mapper/DataConfigMapper.java @@ -0,0 +1,22 @@ +package com.ruoyi.requier.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.requier.dto.DeviceConfigDtoPage; +import com.ruoyi.requier.pojo.DataConfig; + +import java.util.List; + +/** + * <p> + * Mapper 鎺ュ彛 + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2024-07-13 12:23:00 + */ +public interface DataConfigMapper extends BaseMapper<DataConfig> { + + List<DeviceConfigDtoPage> selectDataConfigList(Integer deviceId); + + List<Integer> deleteDataConfig(); +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/mapper/DeviceMaintenanceMapper.java b/cnas-require/src/main/java/com/ruoyi/requier/mapper/DeviceMaintenanceMapper.java new file mode 100644 index 0000000..48dab57 --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/mapper/DeviceMaintenanceMapper.java @@ -0,0 +1,18 @@ +package com.ruoyi.requier.mapper; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.requier.dto.DeviceMaintenanceExport; +import com.ruoyi.requier.pojo.DeviceMaintenance; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface DeviceMaintenanceMapper extends BaseMapper<DeviceMaintenance> { + List<DeviceMaintenance> getDeviceMaintenanceParam(); + +// IPage<DeviceMaintenance> getDeviceMaintenancePage(Page page, Integer deviceId); + + List<DeviceMaintenanceExport> deviceMaintenanceExport(Integer deviceId); +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/mapper/DeviceMapper.java b/cnas-require/src/main/java/com/ruoyi/requier/mapper/DeviceMapper.java new file mode 100644 index 0000000..86646e9 --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/mapper/DeviceMapper.java @@ -0,0 +1,43 @@ +package com.ruoyi.requier.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.requier.dto.DeviceDto; +import com.ruoyi.requier.pojo.Device; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * 璁惧(Device)琛ㄦ暟鎹簱璁块棶灞� + */ +public interface DeviceMapper extends BaseMapper<Device> { + + IPage<Device> selectDeviceParameter(Page page, QueryWrapper<Device> ew); + List<Device> selectEquipmentOverview(Page page, QueryWrapper<Device> ew); + + //鑾峰彇琚巿鏉冧汉 + List<Device> authorizedPerson(); + + //鏌ヨ + List<Device> search(@Param(value = "status") Integer status, @Param(value = "deviceName") String deviceName, + @Param(value = "specificationModel") String specificationModel, @Param(value = "largeCategory") String largeCategory); + + //鑾峰彇鍥剧墖鏁版嵁 + void selectDeviceImage(@Param(value = "name") String name ,@Param(value = "id") Integer id); + + //鏌ヨ璁惧璐熻矗浜� + List<Device> selectDevicePrincipal(); + + IPage<DeviceDto> selectDeviceParameterPage(Page page, @Param("ew") QueryWrapper<DeviceDto> queryWrappers, @Param("laboratoryNameIsNull") Boolean laboratoryNameIsNull); + + List<Map<String, Object>> getInspectionItemSubclass(@Param("id") Integer id); + + List<Map<String, Object>> treeDevice(@Param("deviceName") String deviceName); + + DeviceDto selectDeviceByCode(Integer id); +} + diff --git a/cnas-require/src/main/java/com/ruoyi/requier/mapper/DeviceMetricRecordMapper.java b/cnas-require/src/main/java/com/ruoyi/requier/mapper/DeviceMetricRecordMapper.java new file mode 100644 index 0000000..33bc57f --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/mapper/DeviceMetricRecordMapper.java @@ -0,0 +1,16 @@ +package com.ruoyi.requier.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.requier.pojo.DeviceMetricRecord; + +/** + * <p> + * 璁惧鏍″噯 - 鏍″噯璁板綍 Mapper 鎺ュ彛 + * </p> + * + * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃 + * @since 2024-09-27 10:20:01 + */ +public interface DeviceMetricRecordMapper extends BaseMapper<DeviceMetricRecord> { + +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/mapper/InformationNotificationMapper.java b/cnas-require/src/main/java/com/ruoyi/requier/mapper/InformationNotificationMapper.java new file mode 100644 index 0000000..426406e --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/mapper/InformationNotificationMapper.java @@ -0,0 +1,20 @@ +package com.ruoyi.requier.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.requier.dto.InformationNotificationDto; +import com.ruoyi.requier.pojo.InformationNotification; + +/** + * <p> + * 娑堟伅閫氱煡 Mapper 鎺ュ彛 + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2024-04-23 02:14:30 + */ +public interface InformationNotificationMapper extends BaseMapper<InformationNotification> { + + IPage<InformationNotificationDto> getPage(Page page, String messageType, Integer userId); +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/mapper/PkMasterMapper.java b/cnas-require/src/main/java/com/ruoyi/requier/mapper/PkMasterMapper.java new file mode 100644 index 0000000..0872620 --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/mapper/PkMasterMapper.java @@ -0,0 +1,16 @@ +package com.ruoyi.requier.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.requier.pojo.PkMaster; + +/** + * <p> + * Mapper 鎺ュ彛 + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2024-07-29 01:16:26 + */ +public interface PkMasterMapper extends BaseMapper<PkMaster> { + +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/mapper/PkSlaveMapper.java b/cnas-require/src/main/java/com/ruoyi/requier/mapper/PkSlaveMapper.java new file mode 100644 index 0000000..8c4e29e --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/mapper/PkSlaveMapper.java @@ -0,0 +1,20 @@ +package com.ruoyi.requier.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.requier.pojo.PkSlave; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * <p> + * Mapper 鎺ュ彛 + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2024-07-29 01:16:39 + */ +public interface PkSlaveMapper extends BaseMapper<PkSlave> { + + List<PkSlave> selectList1(@Param("isid") String isid); +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/pojo/DataConfig.java b/cnas-require/src/main/java/com/ruoyi/requier/pojo/DataConfig.java new file mode 100644 index 0000000..29f45e2 --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/pojo/DataConfig.java @@ -0,0 +1,69 @@ +package com.ruoyi.requier.pojo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * <p> + * + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2024-07-13 12:23:00 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@TableName("device_data_config") +@ApiModel(value = "DataConfig瀵硅薄", description = "") +public class DataConfig implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("涓婚敭id") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty("鍏紡") + private String formula; + + @ApiModelProperty("鍙傜収X") + private String referx; + + @ApiModelProperty("鍙傜収Y") + private String refery; + + @ApiModelProperty("x") + private String x; + + @ApiModelProperty("y") + private String y; + + @ApiModelProperty("璁惧id") + private Integer deviceId; + + @ApiModelProperty("妫�楠岄」鐩�") + private String inspectionItem; + + @ApiModelProperty("妫�楠岄」瀛愰」") + private String inspectionItemSubclass; + + @TableField(exist = false) + @ApiModelProperty("妫�楠岄」瀛愰」") + private String insProductItem; + + @ApiModelProperty("妫�楠岄」id") + private Integer structureItemParameterId; + + @ApiModelProperty("搴忓彿") + private String serialNumber; +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/pojo/Device.java b/cnas-require/src/main/java/com/ruoyi/requier/pojo/Device.java new file mode 100644 index 0000000..eec50b2 --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/pojo/Device.java @@ -0,0 +1,140 @@ +package com.ruoyi.requier.pojo; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 璁惧(Device)琛ㄥ璞� + */ +@TableName(value = "device") +@Data +public class Device implements Serializable { + @ApiModelProperty(value = "涓婚敭") + @TableId(type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "璁惧鍚嶇О") + private String deviceName; + + @ApiModelProperty(value = "en璁惧鍚嶇О") + private String enDeviceName; + + @ApiModelProperty(value = "瑙勬牸鍨嬪彿") + private String specificationModel; + + @ApiModelProperty(value = "鐢熶骇鍘傚") + private String manufacturer; + + @ApiModelProperty(value = "鍑哄巶缂栧彿") + private String factoryNo; + + @ApiModelProperty(value = "绠$悊缂栧彿") + private String managementNumber; + + @ApiModelProperty(value = "鎶�鏈寚鏍�") + private String technicalIndicators; + + @ApiModelProperty(value = "璐疆鏃ユ湡") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime acquisitionDate; + + @ApiModelProperty(value = "鍚敤鏃ユ湡") + private LocalDateTime activationDate; + + @ApiModelProperty(value = "绠$悊浜篒d") + private Integer equipmentManager; + + @ApiModelProperty(value = "瀛樻斁鐐�") + private String storagePoint; + + @ApiModelProperty(value = "鎵�灞為儴闂↖d") + private Integer subordinateDepartmentsId; + + @ApiModelProperty(value = "妫�楠岄」鐩甀d") + private String insProductIds; + + @ApiModelProperty(value = "鏍″噯鏈嶅姟鏈烘瀯") + private String calibrationServices; + + @ApiModelProperty(value = "鏈�杩戞牎鍑嗘棩鏈�") + private LocalDateTime lastCalibrationDate; + + @ApiModelProperty(value = "涓嬫鏍″噯鏃ユ湡") + private LocalDateTime nextCalibrationDate; + + @ApiModelProperty(value = "璁惧绫诲瀷") + private String largeCategory; + + @ApiModelProperty(value = "鍗曚环") + private BigDecimal unitPrice; + + @ApiModelProperty(value = "璁惧鐘舵��") + private Integer deviceStatus; + + @ApiModelProperty(value = "鏍″噯鍛ㄦ湡(鏈�)") + private String calibrationDate; + + @ApiModelProperty(value = "鍥剧墖涓婁紶") + private String imageUpload; + + @ApiModelProperty(value = "鍥剧墖澶囨敞") + private String imageName; + + @ApiModelProperty(value = "鍒涘缓浜篿d") + @TableField(fill = FieldFill.INSERT) + private Integer createUser; + + @ApiModelProperty(value = "鏇存柊鏃堕棿") + @TableField(fill = FieldFill.INSERT_UPDATE) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime updateTime; + + @ApiModelProperty(value = "鍒涘缓鏃堕棿") + @TableField(fill = FieldFill.INSERT) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + + @ApiModelProperty("鏁伴噰-鏂囦欢鍚庣紑") + private String fileType; + + @ApiModelProperty("鏁伴噰-閲囬泦鍦板潃") + private String collectUrl; + + @ApiModelProperty("鏁伴噰-瀛樺偍鍦板潃") + private String storageUrl; + + @ApiModelProperty("鏁伴噰-璁惧IP") + private String ip; + + @ApiModelProperty("鏁伴噰-鏄惁涓烘暟閲囪澶�") + @TableField(exist = false) + private Boolean isItADataAcquisitionDevice; + + @ApiModelProperty("鏁伴噰-濮旀墭瀛楁") + private String entrustCode; + + @ApiModelProperty("鏁伴噰-鏍峰搧瀛楁") + private String sampleCode; + + @ApiModelProperty("鏁伴噰-db锛宮db鏂囦欢鍚嶇О") + private String dbFileName; + + @ApiModelProperty("鏁伴噰-db鏂囦欢 鍏夌氦甯︾紪鍙�") + private String fiberOpticRibbon; + + @ApiModelProperty("琚巿鏉冧汉") + private String authorizedPerson; + + @ApiModelProperty("璧勪骇缂栫爜") + private String assetCode; + + @ApiModelProperty("浜у湴") + private String origin; + +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/pojo/DeviceMaintenance.java b/cnas-require/src/main/java/com/ruoyi/requier/pojo/DeviceMaintenance.java new file mode 100644 index 0000000..49db473 --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/pojo/DeviceMaintenance.java @@ -0,0 +1,42 @@ +package com.ruoyi.requier.pojo; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDate; + +@Data +@EqualsAndHashCode(callSuper = false) +//@Accessors(chain = true) +@TableName("device_maintenance") +public class DeviceMaintenance { +// @TableId(value = "id", type = IdType.AUTO) + private static final long serialVersionUID = 1L; + //璁惧id + @TableId(type=IdType.AUTO) + private Integer id; + private Integer deviceId; + + private String deviceName; + //缂栧彿 + private String deviceNumber; + //缁熶竴缂栧彿 + private String managementNumber; + //缁存姢鍐呭 + private String content; + //缁存姢鏃ユ湡 + @TableField(fill = FieldFill.INSERT) + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate date; + //涓嬫缁存姢鏃ユ湡 + @DateTimeFormat(pattern = "yyyy-MM-dd") + private LocalDate nextDate; + //缁存姢绫诲瀷 + private Integer maintenanceType; + //缁存姢浜哄憳 + private String name; + //澶囨敞 + private String comments; +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/pojo/DeviceMetricRecord.java b/cnas-require/src/main/java/com/ruoyi/requier/pojo/DeviceMetricRecord.java new file mode 100644 index 0000000..2475ec9 --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/pojo/DeviceMetricRecord.java @@ -0,0 +1,115 @@ +package com.ruoyi.requier.pojo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +/** + * <p> + * 璁惧鏍″噯 - 鏍″噯璁板綍 + * </p> + * + * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃 + * @since 2024-09-27 10:20:01 + */ +@Getter +@Setter +@TableName("device_metric_record") +@ApiModel(value = "DeviceMetricRecord瀵硅薄", description = "璁惧鏍″噯 - 鏍″噯璁板綍") +@ExcelIgnoreUnannotated +public class DeviceMetricRecord implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("涓婚敭id") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty("璁板綍缂栧彿") + @ExcelProperty(value = "璁板綍缂栧彿",index = 0) + private String processNumber; + + @ApiModelProperty("璁¢噺鍗曚綅") + @ExcelProperty(value = "鏈烘瀯",index = 1) + private String unitOfMeasure; + + @ApiModelProperty("鏍″噯鏃ユ湡") + @ExcelProperty(value = "鏍″噯/鏍告煡鏃ユ湡",index = 5) + @JsonFormat(pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @ColumnWidth(20) + private Date calibrationDate; + + @ApiModelProperty("涓嬫鏍″噯鏃ユ湡") + @ExcelProperty(value = "涓嬫鏍″噯/鏍告煡鏃ユ湡",index = 6) + @JsonFormat(pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @ColumnWidth(20) + private Date nextCalibrationDate; + + @ApiModelProperty("璁$畻鍣ㄥ叿") + private String calculatingApparatus; + + @ApiModelProperty("璁$畻鏍囧噯閲忕▼") + private String standardRange; + + @ApiModelProperty("璁¢噺鏍囧噯涓嶇‘瀹氬害") + private String calibrationStandardUncertainty; + + @ApiModelProperty("渚濇嵁鏂囦欢") + private String byDocument; + + @ApiModelProperty("璇佷功缂栧彿") + @ExcelProperty(value = "鏍″噯/鏍告煡璇佷功缂栧彿",index = 3) + private String certificateSerialNumber; + + @ApiModelProperty("鐘舵��") + @ExcelProperty(value = "鏍″噯/鏍告煡缁撹",index = 2) + private String status; + + @ApiModelProperty("鍘熸枃浠跺悕绉�") + private String fileName; + + @ApiModelProperty("绯荤粺鐢熸垚鏂囦欢鍚嶇О") + private String systemFileName; + + @ApiModelProperty("澶囨敞") + @ExcelProperty(value = "璇存槑",index = 4) + private String remark; + + @ApiModelProperty("璁惧id") + private Integer deviceId; + + @ApiModelProperty("鍒涘缓鏃堕棿 / 鐧昏鏃ユ湡") + @TableField(fill = FieldFill.INSERT) + @ExcelProperty(value = "鐧昏鏃ユ湡",index = 9) + @JsonFormat(pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @ColumnWidth(20) + private LocalDateTime createTime; + + @ApiModelProperty("鐧昏浜�") + @ExcelProperty(value = "鐧昏浜�",index = 8) + private String createUser; + + @ApiModelProperty("calibrate锛氭牎鍑嗭紱examine锛氭牳鏌�") + private String type; + + @ApiModelProperty("纭鏃堕棿") + @ExcelProperty(value = "纭鏃ユ湡",index = 7) + @JsonFormat(pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @ColumnWidth(20) + private Date confirmDate; +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/pojo/InformationNotification.java b/cnas-require/src/main/java/com/ruoyi/requier/pojo/InformationNotification.java new file mode 100644 index 0000000..c647e53 --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/pojo/InformationNotification.java @@ -0,0 +1,69 @@ +package com.ruoyi.requier.pojo; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * <p> + * 娑堟伅閫氱煡 + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2024-04-23 02:14:30 + */ +@Getter +@Setter +@TableName("information_notification") +@ApiModel(value = "InformationNotification瀵硅薄", description = "娑堟伅閫氱煡") +public class InformationNotification implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("涓婚敭ID") + @TableId(type = IdType.AUTO) + private Integer id; + + @ApiModelProperty("鍒涘缓浜�") + private String createUser; + + @ApiModelProperty("鏇存柊鏃堕棿") + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; + + @ApiModelProperty("鍒涘缓鏃堕棿/鍙戦�佹椂闂�") + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + @ApiModelProperty("寰呭姙銆佹帴鏀躲�佸鏍搞�佹壒鍑嗐�侀璀︽彁閱掋�侀�氱煡鍏憡") + private String messageType; + + @ApiModelProperty("涓婚") + private String theme; + + @ApiModelProperty("鍐呭") + private String content; + + @ApiModelProperty("鍙戦�佷汉Id") + private Integer senderId; + + @ApiModelProperty("鏀朵欢浜�") + private Integer consigneeId; + + @ApiModelProperty("鏌ョ湅鐘舵�侊細宸茶锛屾湭璇�") + private Boolean viewStatus; + + @ApiModelProperty("娑堟伅鐘舵�侊紙鎷掔粷銆佹帴鏀讹級锛堟牴鎹秷鎭被鍨嬪睍绀猴級") + private Boolean messageStatus; + + @ApiModelProperty("璺宠浆璺緞") + private String jumpPath; + + @ApiModelProperty("璺宠浆Id") + private String jumpId; +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/pojo/PkMaster.java b/cnas-require/src/main/java/com/ruoyi/requier/pojo/PkMaster.java new file mode 100644 index 0000000..9debb9b --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/pojo/PkMaster.java @@ -0,0 +1,61 @@ +package com.ruoyi.requier.pojo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * <p> + * + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2024-07-29 01:16:26 + */ +@Getter +@Setter +@TableName("device_pk_master") +@ApiModel(value = "PkMaster瀵硅薄", description = "娓╁害寰幆鏁伴噰瀛愯〃") +public class PkMaster implements Serializable { + + + @ApiModelProperty("涓婚敭id") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty("濮旀墭鍗曠紪鍙�") + private String entrustCode; + + @ApiModelProperty("鏍峰搧缂栧彿") + private String sampleCode; + + @ApiModelProperty("鍨嬪彿") + private String model; + + @ApiModelProperty("寰幆娆℃暟") + private String cycles; + + @ApiModelProperty("娓╁害寰幆") + private String temperature; + + @ApiModelProperty("鍏夌氦鏍规暟") + private Integer numberOpticalFibers; + + @ApiModelProperty("device_pk_slave鍏宠仈瀛楁") + private String isid; + + @ApiModelProperty("妫�楠屾椂闂�") + private LocalDateTime detectionDate; + + @ApiModelProperty("妫�楠屼汉") + private String detectionPeople; + + +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/pojo/PkSlave.java b/cnas-require/src/main/java/com/ruoyi/requier/pojo/PkSlave.java new file mode 100644 index 0000000..4467d5f --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/pojo/PkSlave.java @@ -0,0 +1,75 @@ +package com.ruoyi.requier.pojo; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * <p> + * + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2024-07-29 01:16:39 + */ +@Getter +@Setter +@TableName("device_pk_slave") +@ApiModel(value = "PkSlave瀵硅薄", description = "娓╁害寰幆鏁伴噰瀛愯〃") +public class PkSlave implements Serializable { + + @ApiModelProperty("涓婚敭id") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty("琛板噺绯荤粺1310(dB/km)-A绔�") + private Double weaken1310A; + + @ApiModelProperty("琛板噺绯荤粺1310(dB/km)-B绔�") + private Double weaken1310B; + + @ApiModelProperty("琛板噺绯荤粺1550(dB/km)-A绔�") + private Double weaken1550A; + + @ApiModelProperty("琛板噺绯荤粺1550(dB/km)-B绔�") + private Double weaken1550B; + + @ApiModelProperty("琛板噺绯荤粺1625(dB/km)-A绔�") + private Double weaken1625A; + + @ApiModelProperty("琛板噺绯荤粺1625(dB/km)-B绔�") + private Double weaken1625B; + + @ApiModelProperty("琛板噺绯荤粺1383(dB/km)-A绔�") + private Double weaken1383A; + + @ApiModelProperty("琛板噺绯荤粺1383(dB/km)-B绔�") + private Double weaken1383B; + + @ApiModelProperty("琛板噺绯荤粺1490(dB/km)-A绔�") + private Double weaken1490A; + + @ApiModelProperty("琛板噺绯荤粺1490(dB/km)-B绔�") + private Double weaken1490B; + + @ApiModelProperty("绠¤壊鏍噄d") + private String insBushingId; + + @ApiModelProperty("鍏夌氦甯d") + private String insFibersId; + + @ApiModelProperty("鍏夌氦缂栧彿id") + private String insFiberId; + + @ApiModelProperty("device_pk_master鍏宠仈瀛楁") + private String shiftId; + + @ApiModelProperty("鍒涘缓鏃堕棿") + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/service/DataConfigService.java b/cnas-require/src/main/java/com/ruoyi/requier/service/DataConfigService.java new file mode 100644 index 0000000..26b58fd --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/service/DataConfigService.java @@ -0,0 +1,23 @@ +package com.ruoyi.requier.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.requier.dto.DataConfigDto; +import com.ruoyi.requier.pojo.DataConfig; + +/** + * <p> + * 鏈嶅姟绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2024-07-13 12:23:00 + */ +public interface DataConfigService extends IService<DataConfig> { + + void deleteDataConfig(); + + void saveDataAcquisitionConfiguration(Integer deviceId, DataConfigDto dataConfigList); + + Result<?> queryDataAcquisitionConfiguration(Integer deviceId, Boolean isDevice, String inspectionItem, String inspectionItemSubclass); +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/service/DeviceService.java b/cnas-require/src/main/java/com/ruoyi/requier/service/DeviceService.java new file mode 100644 index 0000000..868cc96 --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/service/DeviceService.java @@ -0,0 +1,65 @@ +package com.ruoyi.requier.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.domain.entity.User; +import com.ruoyi.requier.dto.ADto; +import com.ruoyi.requier.dto.DeviceDto; +import com.ruoyi.requier.pojo.Device; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.List; +import java.util.Map; + +/** + * 璁惧(Device)琛ㄦ湇鍔℃帴鍙� + */ +public interface DeviceService extends IService<Device> { + + List<User> selectUserList(); + + List<User> selectUserListByDepartLimsId(String departLimsId); + + IPage<DeviceDto> selectDeviceParameter(Page page, DeviceDto itemParameter, Boolean laboratoryNameIsNull); + + int addDeviceParameter(Device itemParameter); + + int delDeviceParameter(Integer id); + + int upDeviceParameter(Device itemParameter); + + List<Device> selectEquipmentOverview(); + + List<Device> authorizedPerson(); + + List<Device> search(Integer status, String deviceName, String specificationModel, String largeCategory); + + List<Device> selectDevicePrincipal(); + + List<Device> selectDeviceByCategory(String inspectionItem, String inspectionItemSubclass,String sonLaboratory); + + DeviceDto selectDeviceByCode(Integer id); + + /** + * + * @param request 鍙栬姹備腑鐨刬p + * @param id 妫�楠屾牱鍝� 涓婚敭id + * @param entrustCode 濮旀墭缂栧彿 + * @param sampleCode 鏍峰搧缂栧彿 + * @param fiberOpticRibbon 鍏夌氦甯︾紪鍙� + * @return + */ + Result<?> dataAcquisition(HttpServletRequest request, Integer id, String entrustCode, String sampleCode, String fiberOpticRibbon); + + List<ADto> menu(); + + List<Map<String, Object>> treeDevice(String deviceName); + + Result<?> determineWhetherToCollectData(String managementNumber, HttpServletRequest request); + + void exportData(DeviceDto deviceDto, HttpServletResponse response); + +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/service/InformationNotificationService.java b/cnas-require/src/main/java/com/ruoyi/requier/service/InformationNotificationService.java new file mode 100644 index 0000000..c03a5c2 --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/service/InformationNotificationService.java @@ -0,0 +1,32 @@ +package com.ruoyi.requier.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.requier.dto.InformationNotificationDto; +import com.ruoyi.requier.pojo.InformationNotification; + +import java.util.Map; + +/** + * <p> + * 娑堟伅閫氱煡 鏈嶅姟绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2024-04-23 02:14:30 + */ +public interface InformationNotificationService extends IService<InformationNotification> { + + IPage<InformationNotificationDto> getPage(Page page, String messageType); + + void markAllInformationReadOrDeleteAllReadMessages(Boolean isMarkAllInformationRead); + + Boolean checkForUnreadData(); + + void triggerModificationStatusToRead(Integer id); + + int addInformationNotification(InformationNotification informationNotification); + + Map<String, Object> getNumberFourTypesMessagesHomePage(); +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/service/InsOrderPlanService.java b/cnas-require/src/main/java/com/ruoyi/requier/service/InsOrderPlanService.java new file mode 100644 index 0000000..ffbdfdc --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/service/InsOrderPlanService.java @@ -0,0 +1,78 @@ +package com.ruoyi.requier.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.inspect.dto.InsOrderPlanDTO; +import com.ruoyi.inspect.dto.InsProductResultDTO; +import com.ruoyi.inspect.dto.TasksShowDto; +import com.ruoyi.inspect.dto.UnInsProductsDTO; +import com.ruoyi.inspect.pojo.InsOrderFile; +import com.ruoyi.inspect.pojo.InsProduct; +import com.ruoyi.inspect.vo.InsOrderPlanTaskSwitchVo; +import com.ruoyi.inspect.vo.InsOrderPlanVO; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; + +/** + * 妫�楠屼换鍔�-涓氬姟灞� + */ +public interface InsOrderPlanService { + + void exportInsOrderPlanResult(Map<String, Object> data, HttpServletResponse response); + + List<Map<String,Object>> getInsOrderPlanList(Map<String,Object> data); + + void exportCommissionFees(Map<String, Object> data,HttpServletResponse response); + + Map<String, Object> getTabHeader(String sonLaboratory,String samples); + + IPage<InsOrderPlanVO> selectInsOrderPlanList(Page page, InsOrderPlanDTO insOrderPlanDTO); + + IPage<InsOrderPlanTaskSwitchVo> inspectionOrderDetailsTaskSwitching(Page page, InsOrderPlanDTO insOrderPlanDTO); + + boolean claimInsOrderPlan(InsOrderPlanDTO entity); + + void saveInsContext(Map<String, Object> insContext,Integer currentTable,Integer sampleId,Integer orderId,String sonLaboratory,Boolean isDelete); + + Map<String, Object> doInsOrder(Integer id, String laboratory); + + int upPlanUser(Integer userId, Integer orderId,String sonLaboratory); + + int verifyPlan(Integer orderId, String laboratory, Integer type, String tell); + + int submitPlan(Integer orderId, String laboratory, Integer verifyUser, String entrustCode); + + List<String> getEquipName(Integer orderId,String sonLaboratory); + + + List<InsProduct> getInsProduct(Integer id, Integer type, String laboratory, HttpServletRequest request); + + List<String> checkSubmitPlan(Integer orderId, String laboratory,String temperature,String humidity); + + IPage<InsOrderFile> getFileList(Page page, InsOrderFile insOrderFile); + + int uploadFile(Integer orderId, MultipartFile file); + + Map<String,Object> getReportModel(Integer sampleId, String sonLaboratory); + + Map<String,Object> temCycle(Integer sampleId, String inspectionItem, String inspectionItemSubclass); + + List<String> upPlanUser2(Integer orderId); + + Map<String,Object> getSagTemperatureProducts(Integer sampleId); + + Map<String,Object> getSampleInfoByOrderId(Integer id,String laboratory); + + void exportUnInsProducts(UnInsProductsDTO unInsProductsDTO, HttpServletResponse response); + + int saveInsContext2(InsProductResultDTO insProductResult); + + IPage<TasksShowDto> tasksShow(Page page, String sonLaboratory); + + int getCurrentMonthPlanTotalBySonLaboratory(String sonLaboratory, LocalDateTime startTime, LocalDateTime endTime); +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/service/InsReportService.java b/cnas-require/src/main/java/com/ruoyi/requier/service/InsReportService.java new file mode 100644 index 0000000..b7d5701 --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/service/InsReportService.java @@ -0,0 +1,56 @@ +package com.ruoyi.requier.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.inspect.dto.ReportPageDto; +import com.ruoyi.inspect.pojo.InsReport; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; +import java.util.Map; + +/** +* @author Administrator +* @description 閽堝琛ㄣ�恑ns_report(妫�楠屾姤鍛�)銆戠殑鏁版嵁搴撴搷浣淪ervice +* @createDate 2024-03-17 22:10:02 +*/ +public interface InsReportService extends IService<InsReport> { + + IPage<ReportPageDto> pageInsReport(Page page, ReportPageDto reportPageDto); + +// void wordToPdf(String path,String sealUrl); + + int inReport(String url, Integer id); + + int upReportUrl(Integer id); + // 涓嬭浇 + void downReport(Integer id, Integer type ,HttpServletResponse response); + + //鎻愪氦 + int writeReport(Integer id); + + //瀹℃牳 + int examineReport(Integer id, Integer isExamine, String examineTell); + + //鎵瑰噯 + int ratifyReport(Integer id, Integer isRatify, String ratifyTell); + + int wordInsertUrl(Map<String, Object> map, String url); + + String downAll(String ids); + + int upAll(MultipartFile file) throws IOException; + + void withdraw(Map<String,Object> map); + + List<Map<String,Object>> getLaboratoryByReportId(Integer id); + + Map<String,Object> getReportCountInfo(ReportPageDto reportPageDto); + + void batchApprovalReport(List<Integer> ids); + + Map<String,Object> getBatchApprovalProgress(); +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/service/PkMasterService.java b/cnas-require/src/main/java/com/ruoyi/requier/service/PkMasterService.java new file mode 100644 index 0000000..cbad787 --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/service/PkMasterService.java @@ -0,0 +1,21 @@ +package com.ruoyi.requier.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.requier.pojo.PkMaster; + +/** + * <p> + * 鏈嶅姟绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2024-07-29 01:16:26 + */ +public interface PkMasterService extends IService<PkMaster> { + + //娓╁害寰幆鏁伴噰 + int temDataAcquisition(PkMaster pkMaster); + + //娓╁害寰幆鏁伴噰鎬讳綋 + int temDataAcquisition2(PkMaster pkMaster); +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/service/QrShowService.java b/cnas-require/src/main/java/com/ruoyi/requier/service/QrShowService.java new file mode 100644 index 0000000..57874d8 --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/service/QrShowService.java @@ -0,0 +1,9 @@ +package com.ruoyi.requier.service; + +import org.springframework.ui.Model; + +public interface QrShowService { + + void transformModelByType(Model model,String code,String type); + +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/service/impl/DataConfigServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/requier/service/impl/DataConfigServiceImpl.java new file mode 100644 index 0000000..fb6753e --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/service/impl/DataConfigServiceImpl.java @@ -0,0 +1,66 @@ +package com.ruoyi.requier.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.requier.dto.DataConfigDto; +import com.ruoyi.requier.mapper.DataConfigMapper; +import com.ruoyi.requier.mapper.DeviceMapper; +import com.ruoyi.requier.pojo.DataConfig; +import com.ruoyi.requier.pojo.Device; +import com.ruoyi.requier.service.DataConfigService; +import lombok.AllArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * <p> + * 鏈嶅姟瀹炵幇绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2024-07-13 12:23:00 + */ +@Service +@AllArgsConstructor +public class DataConfigServiceImpl extends ServiceImpl<DataConfigMapper, DataConfig> implements DataConfigService { + + private DeviceMapper deviceMapper; + + private DataConfigMapper dataConfigMapper; + + @Override + public void deleteDataConfig() { + List<Integer> integers = dataConfigMapper.deleteDataConfig(); + if (!integers.isEmpty()) { + dataConfigMapper.deleteBatchIds(integers); + } + } + + @Override + public void saveDataAcquisitionConfiguration(Integer deviceId, DataConfigDto dataConfigList) { + if (dataConfigList.getIsDevice()) { + Device device = new Device(); + BeanUtils.copyProperties(dataConfigList, device); + device.setId(deviceId); + deviceMapper.updateById(device); + } else { + this.saveOrUpdateBatch(dataConfigList.getDataConfigList()); + } + } + + @Override + public Result<?> queryDataAcquisitionConfiguration(Integer deviceId, Boolean isDevice, String inspectionItem, String inspectionItemSubclass) { + if (isDevice) { + List<DataConfig> list = baseMapper.selectList(Wrappers.<DataConfig>lambdaQuery() + .eq(DataConfig::getDeviceId, deviceId) + .eq(DataConfig::getInspectionItem, inspectionItem) + .eq(DataConfig::getInspectionItemSubclass, inspectionItemSubclass)); + return Result.success(list); + } else { + return Result.success(dataConfigMapper.selectDataConfigList(deviceId)); + } + } +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/service/impl/DeviceServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/requier/service/impl/DeviceServiceImpl.java new file mode 100644 index 0000000..8fd1281 --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/service/impl/DeviceServiceImpl.java @@ -0,0 +1,1119 @@ +package com.ruoyi.requier.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson2.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.basic.mapper.StructureItemParameterMapper; +import com.ruoyi.basic.pojo.StructureItemParameter; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.domain.entity.SysDictData; +import com.ruoyi.common.core.domain.entity.User; +import com.ruoyi.common.utils.DictUtils; +import com.ruoyi.common.utils.QueryWrappers; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.framework.exception.ErrorException; +import com.ruoyi.requier.dto.ADto; +import com.ruoyi.requier.dto.BDto; +import com.ruoyi.requier.dto.DeviceDto; +import com.ruoyi.requier.mapper.DeviceMapper; +import com.ruoyi.requier.pojo.DataConfig; +import com.ruoyi.requier.pojo.Device; +import com.ruoyi.requier.pojo.DeviceMetricRecord; +import com.ruoyi.requier.service.DataConfigService; +import com.ruoyi.requier.service.DeviceService; +import com.ruoyi.requier.util.DataAcquisition; +import com.ruoyi.system.mapper.UserMapper; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.apache.logging.log4j.util.Strings; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 璁惧(Device)琛ㄦ湇鍔″疄鐜扮被 + */ +@Service +@AllArgsConstructor +public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> implements DeviceService { + + private DeviceMapper deviceMapper; + + private UserMapper userMapper; + + private StructureItemParameterMapper structureItemParameterMapper; + + @Autowired + private DataConfigService dataConfigService; + + @Autowired + private QrShowServiceImpl qrShowService; + + @Override + public List<User> selectUserList() { + List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>().like(User::getDepartLimsId, "1")); + return users; + } + + @Override + public List<User> selectUserListByDepartLimsId(String departLimsId) { + List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>().like(User::getDepartLimsId, departLimsId)); + return users; + } + + @Override + public IPage<DeviceDto> selectDeviceParameter(Page page, DeviceDto itemParameter, Boolean laboratoryNameIsNull) { + itemParameter.setCreateUser(SecurityUtils.getUserId().intValue()); + String storagePoint = itemParameter.getStoragePoint();//瀛樻斁鐐� + itemParameter.setStoragePoint(null); + QueryWrapper<DeviceDto> wrapper = QueryWrappers.queryWrappers(itemParameter).eq(StringUtils.isNotBlank(storagePoint), "storage_point", storagePoint); + IPage<DeviceDto> iPage = deviceMapper.selectDeviceParameterPage(page, wrapper, laboratoryNameIsNull); + return iPage; + } + + @Override + public int addDeviceParameter(Device itemParameter) { + return deviceMapper.insert(itemParameter); + } + + @Override + public int delDeviceParameter(Integer id) { + return deviceMapper.deleteById(id); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public int upDeviceParameter(Device itemParameter) { + // 鍒犻櫎鏁伴噰闆嗛厤缃暟鎹� + dataConfigService.deleteDataConfig(); + // 闇�瑕佸悓鏃舵洿鏀� device琛� + + + + + return deviceMapper.updateById(itemParameter); + } + + @Override + public List<Device> selectEquipmentOverview() { + return deviceMapper.selectEquipmentOverview(new Page(1, 10), QueryWrappers.queryWrappers(new Device())); + } + + @Override + public List<Device> authorizedPerson() { + return deviceMapper.authorizedPerson(); + } + + @Override + public List<Device> search(Integer status, String deviceName, String specificationModel, String largeCategory) { + return deviceMapper.search(status, deviceName, specificationModel, largeCategory); + } + + @Override + public List<Device> selectDevicePrincipal() { + return deviceMapper.selectDevicePrincipal(); + } + + @Override + public List<Device> selectDeviceByCategory(String inspectionItem, String inspectionItemSubclass,String sonLaboratory) { +// Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId"); +// User user = Optional.ofNullable(userMapper.selectById(userId)).orElse(new User()); +// String departLimsId = user.getDepartLimsId(); +// if(departLimsId.isEmpty()){ +// +// } + List<Integer> id; + + try { + id = structureItemParameterMapper.selectList(Wrappers.<StructureItemParameter>lambdaQuery() + .eq(StructureItemParameter::getInspectionItem, inspectionItem) + .eq(ObjectUtils.isNotEmpty(inspectionItemSubclass),StructureItemParameter::getInspectionItemSubclass, inspectionItemSubclass) + .eq(ObjectUtils.isNotEmpty(sonLaboratory),StructureItemParameter::getSonLaboratory,sonLaboratory) + .select(StructureItemParameter::getId)).stream().map(StructureItemParameter::getId).collect(Collectors.toList()); +// if () { +//// id = structureItemParameterMapper.selectOne(Wrappers.<StructureItemParameter>lambdaQuery() +//// .eq(StructureItemParameter::getInspectionItem, inspectionItem) +//// .last("limit 1").select(StructureItemParameter::getId)).getId(); +// +// +// }else { +//// id = structureItemParameterMapper.selectOne(Wrappers.<StructureItemParameter>lambdaQuery() +//// .eq(StructureItemParameter::getInspectionItem, inspectionItem) +//// .eq(StructureItemParameter::getInspectionItemSubclass, inspectionItemSubclass) +//// .last("limit 1").select(StructureItemParameter::getId)).getId(); +// id = structureItemParameterMapper.selectList(Wrappers.<StructureItemParameter>lambdaQuery() +// .eq(StructureItemParameter::getInspectionItem, inspectionItem) +// +// .select(StructureItemParameter::getId)).stream().map(StructureItemParameter::getId).collect(Collectors.toList()); +// } + } catch (Exception e) { + return null; + } + List<Device> devices = deviceMapper.selectList(Wrappers.<Device>lambdaQuery() + .eq(Device::getDeviceStatus, 0) + .isNotNull(Device::getInsProductIds)); + List<Device> devices2 = new ArrayList<>(); + for (Device device : devices) { + String[] ids = device.getInsProductIds().split(","); + for (String i : ids) { + if (ObjectUtils.isNotEmpty(i)) { + if (id.contains(Integer.parseInt(i))) { + devices2.add(device); + break; + } + } + } + } + return devices2; + } + + @Override + public DeviceDto selectDeviceByCode(Integer id) { + DeviceDto deviceDto = deviceMapper.selectDeviceByCode(id); + List<Integer> ids = new ArrayList<>(); + if(Strings.isNotEmpty(deviceDto.getAuthorizedPerson())) { + if(deviceDto.getAuthorizedPerson().equals("null")) { + deviceDto.setAuthorizedPerson("[]"); + } + ids = JSON.parseArray(deviceDto.getAuthorizedPerson(), Integer.class); + } + String name = ""; + if(!ids.isEmpty()) { + name = userMapper.selectBatchIds(ids).stream().map(User::getName).collect(Collectors.joining(",")); + } + deviceDto.setAuthorizedPersonName(name); + //鏌ヨ璁惧鏍″噯淇℃伅 + DeviceMetricRecord calibrate = qrShowService.getDeviceMetricRecord(id, "calibrate"); + //deviceDto.setCalibrationDate(qrShowService.formatDate(calibrate.getCalibrationDate(),"yyyy-MM-dd")); + deviceDto.setCalibrateNo(calibrate.getCertificateSerialNumber()); + if(Objects.nonNull(calibrate.getNextCalibrationDate())){ + deviceDto.setCalibrationServices(calibrate.getUnitOfMeasure()); + deviceDto.setNextCalibrationDate(calibrate.getNextCalibrationDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); + deviceDto.setLastCalibrationDate(calibrate.getCalibrationDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); + } + + // 鍒颁簡鍋滅敤鏃ユ湡锛岃嚜鍔ㄥ皢鐘舵�佹敼涓哄仠鐢� + if(Objects.nonNull(deviceDto.getNextCalibrationDate()) && LocalDateTime.now().isAfter(deviceDto.getNextCalibrationDate())) { + List<SysDictData> enums = DictUtils.getDictCache("璁惧鐘舵��"); + List<SysDictData> status = enums.stream().filter(item -> item.getDictValue().equals("鍋滅敤")).collect(Collectors.toList()); + deviceDto.setDeviceStatus(Integer.parseInt(status.get(0).getDictValue())); + deviceMapper.updateById(deviceDto); + } + return deviceDto; + } + + /** + * + * @param request 鍙栬姹備腑鐨刬p + * @param id 妫�楠屾牱鍝� 涓婚敭id + * @param entrustCode 濮旀墭缂栧彿 + * @param sampleCode 鏍峰搧缂栧彿 + * @param fiberOpticRibbon 鍏夌氦甯︾紪鍙� + * @return + */ + @Override + public Result<?> dataAcquisition(HttpServletRequest request, Integer id, String entrustCode, String sampleCode, String fiberOpticRibbon) { + // 闃叉鍥炵幆鍦板潃鍙樹负IPv6 + String ip = DataAcquisition.getIp(request); + List<Device> device = baseMapper.selectList(Wrappers.<Device>lambdaQuery() + .eq(Device::getIp, ip)); + // 1銆佹楠� + if(device.size() > 1) { + String str = ""; + for (Device device1 : device) { + str += device1.getDeviceName() + "锛�"; + } + throw new ErrorException("IP锛�" + ip + "閰嶇疆浜嗚澶囧涓澶囷細" + str + "锛屾棤娉曡繘琛屾暟閲囷紒"); + } + if (ObjectUtils.isEmpty(device)) { + throw new ErrorException("鏈粰璇P锛�" + ip + "閰嶇疆璁惧锛屾棤娉曡繘琛屾暟閲囷紒"); + } + List<Map<String, Object>> inspectionItemSubclass = baseMapper.getInspectionItemSubclass(id); + if (ObjectUtils.isEmpty(device.get(0).getFileType()) || ObjectUtils.isEmpty(device.get(0).getCollectUrl())) { + throw new ErrorException("鏈粰璇ワ細" + device.get(0).getDeviceName() + "璁惧閰嶇疆閲囬泦璺緞鎴栨枃浠跺悗缂�锛�"); + } + // 2銆佸彇璁惧鍏宠仈鐨勬楠岄」锛屾楠屽瓙椤� + List<DataConfig> list1 = new ArrayList<>(); + inspectionItemSubclass.forEach(i -> { + List<DataConfig> list = dataConfigService.list(Wrappers.<DataConfig>lambdaQuery() + .eq(DataConfig::getDeviceId, device.get(0).getId()) + .eq(DataConfig::getInspectionItem, i.get("inspection_item")) + .eq(DataConfig::getInspectionItemSubclass, i.get("inspection_item_subclass")) + .orderBy(false, false, DataConfig::getId)); + list1.addAll(list); + }); + List<DataConfig> collect = list1.stream().distinct().collect(Collectors.toList()); + // 3銆侀噰闆嗭紝鍙栨暟鎹� + Map<String, Object> map = DataAcquisition.dataAcquisitionEntrance(collect, device.get(0), entrustCode, sampleCode, ip, fiberOpticRibbon); + // 4銆侀�犲惊鐜鏁帮紝鍙備笌鍏紡璁$畻 + if (ObjectUtils.isNotEmpty(map)) { + Map<String, Object> frequency = DataAcquisition.createFrequency(entrustCode, sampleCode,fiberOpticRibbon, map); + return Result.success(frequency); + } else { + return Result.success(null); + } + } + + @Override + public List<ADto> menu() { + //鏌ヨ鎵�鏈夎澶囦俊鎭� + List<Device> devices = baseMapper.selectList(null); + List<String> name = devices.stream().map(Device::getDeviceName).collect(Collectors.toList()); + + //鏌ヨ鎵�鏈夌敤鎴蜂俊鎭� + List<User> users = userMapper.selectList(null); + List<String> collect = users.stream().map(User::getName).collect(Collectors.toList()); + String menu="[\n" + + "\t{\n" + + "\t\tk: 0,\n" + + "\t\tv: \"涓汉棣栭〉\",\n" + + "\t\ti: \"font icon-shouyefill\",\n" + + "\t\tself: true,\n" + + "\t\tc: [{\n" + + "\t\t\tk: 0,\n" + + "\t\t\tv: \"涓汉棣栭〉\",\n" + + "\t\t\ti: \"font icon-shouyefill\",\n" + + "\t\t\tu: \"index-index\"\n" + + "\t\t}]\n" + + "\t},\n" + + "\t{\n" + + "\t\tv: \"涓氬姟绠$悊\",\n" + + "\t\ti: \"font icon-kexueyanjiuheshiyankaifa\",\n" + + "\t\tp: \"selectInsOrderParameter selectInsOrderPlanList pageInsReport costStatistics selectWarehouse\",\n" + + "\t\tc: [\n" + + " {\n" + + " v: \"鍘熸潗鏂欐楠屼笅鍗昞",\n" + + " i: \"font icon-erjidaohang\",\n" + + " u: \"b1-material-inspection-order\",\n" + + " p: \"selectInsOrderParameter\"\n" + + " },\n" + + " {\n" + + "\t\t\tv: \"妫�楠屼笅鍗昞",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"b1-inspection-order\",\n" + + "\t\t\tp: \"selectInsOrderParameter\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"妫�楠屼换鍔",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"b1-inspect-order-plan\",\n" + + "\t\t\tp: \"selectInsOrderPlanList\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鎶ュ憡缂栧埗\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"b1-report-preparation\",\n" + + "\t\t\tp: \"pageInsReport\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"璐圭敤缁熻\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"b1-expenses\",\n" + + "\t\t\tp: \"costStatistics\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鏍峰搧绠$悊\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"b1-sample\",\n" + + "\t\t\tp: \"selectWarehouse\"\n" + + "\t\t},{\n" + + "\t\t\tv: \"涓嶅悎鏍肩鐞哱",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"b1-unpass\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}\n" + + "\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\tv: \"鏍囧噯闆哱",\n" + + "\t\ti: \"font icon-biaozhunji\",\n" + + "\t\tp: \"selectStandardTreeList selectStandardTemplatePageList\",\n" + + "\t\tc: [{\n" + + "\t\t\tv: \"鏍囧噯搴揬",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"b2-standard\",\n" + + "\t\t\tp: \"selectStandardTreeList\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鍘熷璁板綍妯℃澘\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"b2-standard-template\",\n" + + "\t\t\tp: \"selectStandardTemplatePageList\"\n" + + "\t\t}]\n" + + "\t},\n" + + "\t{\n" + + "\t\tv: \"缁╂晥绠$悊\",\n" + + "\t\ti: \"font icon-jixiaoguanli\",\n" + + "\t\tp: \"\",\n" + + "\t\tc: [{\n" + + "\t\t\tv: \"宸ユ椂绠$悊\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"b3-work-time-management\",\n" + + "\t\t\tp: \"selectAuxiliaryWorkingHours\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"浜哄憳鑰冨嫟\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"浜哄憳鑰冭瘎\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"b3-personnel-evaluation\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"浜哄憳鑰冩牳\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鎶�鑳界瓑绾",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"宸ヨ祫缁撶畻\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鐝\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"b3-classes\",\n" + + "\t\t\tp: \"performanceShiftPage performanceShiftPageYear\"\n" + + "\t\t}]\n" + + "\t},\n" + + "\t{\n" + + "\t\tv: \"缁熻鍥捐〃\",\n" + + "\t\ti: \"font icon-tongjitubiao\",\n" + + "\t\tp: \"\",\n" + + "\t\tc: [{\n" + + "\t\t\tv: \"瀹為獙瀹よ绱燶",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"姣忔棩涓氬姟缁熻\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"b4-daily-business-statistics\",\n" + + "\t\t\tp: \"businessStatisticsByDay\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"妫�娴嬮」鐩粺璁",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"b4-inspection-item-statistics\",\n" + + "\t\t\tp: \"testProductByDay\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鏍峰搧缂洪櫡鎸囨暟\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"b4-sample-defects\",\n" + + "\t\t\tp: \"selectSampleDefects\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鑰楁潗缁熻\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"浜哄憳宸ヤ綔鎶ヨ〃\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}]\n" + + "\t},\n" + + "\t{\n" + + "\t\tv: \"鐢靛瓙鐪嬫澘\",\n" + + "\t\ti: \"font icon-dianzikanban-fan\",\n" + + "\t\tp: \"\",\n" + + "\t\tc: [{\n" + + "\t\t\tv: \"瀹㈡埛鎺ュ緟\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"浠诲姟灞曠ず\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"璁惧鐘舵�佸強楗卞拰搴",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}]\n" + + "\t},\n" + + "\t{\n" + + "\t\tv: \"绯荤粺鍔熻兘\",\n" + + "\t\ti: \"el-icon-s-tools\",\n" + + "\t\tp: \"\",\n" + + "\t\tc: [{\n" + + "\t\t\tv: \"鏁版嵁瀛楀吀\",\n" + + "\t\t\ti: \"el-icon-s-tools\",\n" + + "\t\t\tu: \"enums\",\n" + + "\t\t\tp: \"selectEnumList\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"瑙掕壊绠$悊\",\n" + + "\t\t\ti: \"el-icon-s-tools\",\n" + + "\t\t\tu: \"role-manage\",\n" + + "\t\t\tp: \"selectRoleLists\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鐢ㄦ埛绠$悊\",\n" + + "\t\t\ti: \"el-icon-s-tools\",\n" + + "\t\t\tu: \"person-manage\",\n" + + "\t\t\tp: \"selectUserList\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"瀹㈡埛绠$悊\",\n" + + "\t\t\ti: \"el-icon-s-tools\",\n" + + "\t\t\tu: \"custom_manage\",\n" + + "\t\t\tp: \"selectCustomPageList\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"绯荤粺鏃ュ織\",\n" + + "\t\t\ti: \"el-icon-s-tools\",\n" + + "\t\t\tu: \"system-log\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"娑堟伅璇︽儏\",\n" + + "\t\t\ti: \"el-icon-s-tools\",\n" + + "\t\t\tu: \"notice-detail\",\n" + + "\t\t\tp: \"abcd\"\n" + + "\t\t}]\n" + + "\t},\n" + + "\t{\n" + + "\t\tv: \"4 閫氱敤瑕佹眰\",\n" + + "\t\ti: \"font icon-tongyongyaoqiu\",\n" + + "\t\tp: \"\",\n" + + "\t\tc: [{\n" + + "\t\t\t\tv: \"閫氱敤瑕佹眰\",\n" + + "\t\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\t\tu: \"\",\n" + + "\t\t\t\tg: \"4 閫氱敤瑕佹眰\",\n" + + "\t\t\t\tp: \"\"\n" + + "\t\t\t},\n" + + "\t\t\t{\n" + + "\t\t\t\tv: \"鍏鎬",\n" + + "\t\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\t\tu: \"\",\n" + + "\t\t\t\tg: \"4.1 鍏鎬",\n" + + "\t\t\t\tp: \"\"\n" + + "\t\t\t},\n" + + "\t\t\t{\n" + + "\t\t\t\tv: \"淇濆瘑鎬",\n" + + "\t\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\t\tu: \"\",\n" + + "\t\t\t\tg: \"4.2 淇濆瘑鎬",\n" + + "\t\t\t\tp: \"\"\n" + + "\t\t\t}\n" + + "\t\t]\n" + + "\t},\n" + + "\t{\n" + + "\t\tv: \"5 缁撴瀯瑕佹眰\",\n" + + "\t\ti: \"font icon-jiegouyaoqiu\",\n" + + "\t\tp: \"\",\n" + + "\t\tc: [{\n" + + "\t\t\tv: \"瀹為獙瀹ょ殑娉曞緥鍦颁綅\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"A瀹為獙瀹ょ殑娉曞緥鍦颁綅\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鍏ㄦ潈璐熻矗鐨勭鐞嗗眰\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"B鍏ㄦ潈璐熻矗鐨勭鐞嗗眰\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"瀹為獙瀹よ祫璐╘",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"a5-laboratory-qualifications\",\n" + + "\t\t\tg: \"C鑳藉姏鑼冨洿鍜岃祫璐╘",\n" + + "\t\t\tp: \"getCertificationDetail\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鑳藉姏鑼冨洿\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"a5-capacity-scope\",\n" + + "\t\t\tg: \"C鑳藉姏鑼冨洿鍜岃祫璐╘",\n" + + "\t\t\tp: \"selectItemParameterList selectTestObjectList\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鍦烘墍鎴栬鏂絓",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"a5-laboratory-management\",\n" + + "\t\t\tg: \"D鍦烘墍鎴栬鏂絓",\n" + + "\t\t\tp: \"selectItemParameter\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"缁勭粐鐩稿叧鏂囦欢\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"E缁勭粐鐩稿叧鏂囦欢\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"浜哄憳宀椾綅浠昏亴\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"F浜哄憳宀椾綅浠昏亴\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"娌熼�氬拰瀹h疮\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"G娌熼�氬拰瀹h疮\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}]\n" + + "\t}, {\n" + + "\t\tv: \"6 璧勬簮瑕佹眰\",\n" + + "\t\ti: \"font icon-ziyuanyaoqiu\",\n" + + "\t\tp: \"\",\n" + + "\t\tc: [{\n" + + "\t\t\tv: \"鎬诲垯\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.1 鎬诲垯\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"浜哄憳鎬昏\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"a6-personnel-overview\",\n" + + "\t\t\tg: \"6.2 浜哄憳\",\n" + + "\t\t\tp: \"selectPersonnelOverview\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"浜哄憳鏄庣粏\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"a6-personnel-detail\",\n" + + "\t\t\tg: \"6.2 浜哄憳\",\n" + + "\t\t\tp: \"selectDepartmentLim\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"浜哄憳鍩硅\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.2 浜哄憳\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"浜哄憳鐩戠潱\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.2 浜哄憳\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"宀椾綅鑱岃矗\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.2 浜哄憳\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"浜哄憳鍩烘湰淇℃伅\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.2 浜哄憳\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"宸ヤ綔灞ュ巻\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.2 浜哄憳\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"濂栨儵璁板綍\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.2 浜哄憳\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鍩硅璁板綍\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.2 浜哄憳\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鐩戠潱璁板綍\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.2 浜哄憳\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"浠昏亴鎺堟潈璁板綍\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.2 浜哄憳\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"浜哄憳鑳藉姏鐩戞帶璁板綍\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.2 浜哄憳\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"娌熼�氳褰昞",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.2 浜哄憳\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"澶栨潵浜哄憳绠$悊\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"a6-external-personnel-management\",\n" + + "\t\t\tg: \"6.3 璁炬柦鍜岀幆澧冩潯浠禱",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"瀹為獙瀹よ鏂藉満鎵�淇℃伅\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.3 璁炬柦鍜岀幆澧冩潯浠禱",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"璁炬柦鍜岀幆澧冩潯浠惰姹俓",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.3 璁炬柦鍜岀幆澧冩潯浠禱",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鐜鏉′欢寮曠敤\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.3 璁炬柦鍜岀幆澧冩潯浠禱",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"瀹夊叏鍖轰唬琛ㄦ鏌",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.3 璁炬柦鍜岀幆澧冩潯浠禱",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"瀹夊叏鍐呭姟\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.3 璁炬柦鍜岀幆澧冩潯浠禱",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"搴熺墿澶勭悊浜ゆ帴璁板綍\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"a6-waste-handover\",\n" + + "\t\t\tg: \"6.3 璁炬柦鍜岀幆澧冩潯浠禱",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"璁惧鎬昏\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"a6-device-overview\",\n" + + "\t\t\tg: \"6.4 璁惧\",\n" + + "\t\t\tp: \"selectDeviceParameter\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"璁惧宸ュ叿鏄庣粏\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"a6-device-management\",\n" + + "\t\t\tg: \"6.4 璁惧\",\n" + + "\t\t\tp: \"selectDeviceParameter\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"璧勬簮棰勫畾\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.4 璁惧\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"浣滀笟鎸囧涔",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.4 璁惧\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"璁惧杩愯鎬昏\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.4 璁惧\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"璁惧妗f\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.4 璁惧\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"璁惧楠屾敹\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.4 璁惧\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"璁惧鏍″噯\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.4 璁惧\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"璁惧鏍告煡\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.4 璁惧\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"璁惧缁存姢\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.4 璁惧\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"璁惧鍊熺敤\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.4 璁惧\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"璁惧鏁呴殰\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.4 璁惧\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"浣跨敤璁板綍\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.4 璁惧\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"璁惧鍋滅敤/鍚敤\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.4 璁惧\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"閲忓�兼函婧愯鍒抃",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.5 璁¢噺婧簮鎬",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鏍囧噯鐗╄川娓呭崟\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"a6-standard-material-list\",\n" + + "\t\t\tg: \"6.5 璁¢噺婧簮鎬",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鏍囧噯鐗╄川楠屾敹\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.5 璁¢噺婧簮鎬",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鏍囧噯鐗╄川棰嗙敤\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"a6-standard-material-requisition\",\n" + + "\t\t\tg: \"6.5 璁¢噺婧簮鎬",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"杩囨湡鏍囨牱澶勭疆\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.5 璁¢噺婧簮鎬",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鏈嶅姟鍜屼緵搴斿搧閲囪喘\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.6 澶栭儴鎻愪緵鐨勪骇鍝佸拰鏈嶅姟\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t},{\n" + + "\t\t\tv: \"渚涘簲鍟嗙鐞哱",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"6.6 澶栭儴鎻愪緵鐨勪骇鍝佸拰鏈嶅姟\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}]\n" + + "\t},\n" + + "\t{\n" + + "\t\tv: \"7 杩囩▼瑕佹眰\",\n" + + "\t\ti: \"font icon-guochengyaoqiu\",\n" + + "\t\tp: \"\",\n" + + "\t\tc: [{\n" + + "\t\t\tv: \"妫�楠屽鎵樺崟\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"7.1 瑕佹眰銆佹爣涔﹀拰鍚堝悓璇勫\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鍚堝悓璇勫\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"7.1 瑕佹眰銆佹爣涔﹀拰鍚堝悓璇勫\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"瀹為獙瀹ょ殑妫�娴嬭兘鍔涙。妗圽",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"a7-standard-method\",\n" + + "\t\t\tg: \"7.2 鏂规硶鐨勯�夋嫨銆侀獙璇佸拰纭\",\n" + + "\t\t\tp: \"selectStandardMethodList\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鏍囧噯鏌ユ柊\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"7.2 鏂规硶鐨勯�夋嫨銆侀獙璇佸拰纭\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鏍囧噯鏂规硶鐨勫彉鏇碶",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"7.2 鏂规硶鐨勯�夋嫨銆侀獙璇佸拰纭\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鏂规硶楠岃瘉\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"7.2 鏂规硶鐨勯�夋嫨銆侀獙璇佸拰纭\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鎶芥牱\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"7.3 鎶芥牱\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃甛",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"7.4 妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃甛",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鎶�鏈褰昞",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"7.5 鎶�鏈褰昞",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"娴嬮噺涓嶇‘瀹氬害鐨勮瘎瀹歕",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"7.6 娴嬮噺涓嶇‘瀹氬害鐨勮瘎瀹歕",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"纭繚缁撴灉鏈夋晥鎬",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"7.7 纭繚缁撴灉鏈夋晥鎬",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鎶ュ憡缁撴灉\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"7.8 鎶ュ憡缁撴灉\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鎶曡瘔璇︽儏\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"7.9 鎶曡瘔\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鎶曡瘔鎯呭喌姹囨�昏〃\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"7.9 鎶曡瘔\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"涓嶇鍚堥」\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"7.10 涓嶇鍚堝伐浣淺",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"涓嶇鍚堥」鐨勫垎甯僜",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"7.10 涓嶇鍚堝伐浣淺",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鏁版嵁鎺у埗鍜屼俊鎭鐞哱",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"7.11 鏁版嵁鎺у埗鍜屼俊鎭鐞哱",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}]\n" + + "\t},\n" + + "\t{\n" + + "\t\tv: \"8 浣撶郴绠$悊瑕佹眰\",\n" + + "\t\ti: \"font icon-guanlitixiyaoqiu\",\n" + + "\t\tp: \"\",\n" + + "\t\tc: [{\n" + + "\t\t\tv: \"鏂瑰紡\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"8.1 鏂瑰紡\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"绠$悊浣撶郴鏂囦欢\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"8.2 绠$悊浣撶郴鏂囦欢\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鏂囦欢娓呭崟\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"8.3 绠$悊浣撶郴鏂囦欢鐨勬帶鍒禱",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鏂囦欢鍙楁帶\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"8.3 绠$悊浣撶郴鏂囦欢鐨勬帶鍒禱",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鏂囦欢鍙戞斁鍥炴敹\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"8.3 绠$悊浣撶郴鏂囦欢鐨勬帶鍒禱",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鏂囦欢鍙樻洿\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"8.3 绠$悊浣撶郴鏂囦欢鐨勬帶鍒禱",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鏂囦欢浣滃簾\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"8.3 绠$悊浣撶郴鏂囦欢鐨勬帶鍒禱",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"璁板綍鐨勬帶鍒禱",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"8.4 璁板綍鐨勬帶鍒禱",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"搴斿椋庨櫓鍜屾満閬囩殑鎺柦\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"8.5 搴斿椋庨櫓鍜屾満閬囩殑鎺柦\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"瀹㈡埛鍩烘湰淇℃伅绠$悊\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"8.6 鏀硅繘\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"瀹㈡埛婊℃剰搴",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"8.6 鏀硅繘\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"绾犳鎺柦\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"8.7 绾犳鎺柦\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"鍐呭绠$悊\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"8.8 鍐呭绠$悊\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}, {\n" + + "\t\t\tv: \"绠$悊璇勫\",\n" + + "\t\t\ti: \"font icon-erjidaohang\",\n" + + "\t\t\tu: \"\",\n" + + "\t\t\tg: \"8.9 绠$悊璇勫\",\n" + + "\t\t\tp: \"\"\n" + + "\t\t}]\n" + + "\t}\n" + + "]"; + List<ADto> aDtos = JSONArray.parseArray(menu, ADto.class); + List<BDto> bDtos = aDtos.get(9).getC(); + for (String s : name) { + BDto bDto = new BDto(); + bDto.setV(s); + bDto.setI("font icon-erjidaohang"); + bDto.setU("a6-device-overview"); + bDto.setG("6.4 璁惧"); + bDto.setP("selectDeviceParameter"); + bDtos.add(bDto); + } + for (String s : collect) { + BDto bDto = new BDto(); + bDto.setV(s); + bDto.setI("font icon-erjidaohang"); + bDto.setU("a6-personnel-overview"); + bDto.setG("6.2 浜哄憳"); + bDto.setP("selectPersonnelOverview"); + bDtos.add(bDto); + } + + return aDtos; + } + + @Override + public List<Map<String, Object>> treeDevice(String deviceName) { + List<Map<String, Object>> listMap = deviceMapper.treeDevice(deviceName); + return listMap; + } + + @Override + public Result<?> determineWhetherToCollectData(String managementNumber, HttpServletRequest request) { + String ip = DataAcquisition.getIp(request); + List<Device> device = baseMapper.selectList(Wrappers.<Device>lambdaQuery() + .eq(Device::getIp, ip)); + if (ObjectUtils.isEmpty(device)) { + return Result.success(false); + } + if (ObjectUtils.isEmpty(device.get(0).getFileType()) || ObjectUtils.isEmpty(device.get(0).getCollectUrl())) { + return Result.success(false); + } else { + return Result.success(true); + } + } + @Override + public void exportData(DeviceDto deviceDto, HttpServletResponse response){ + //鏌ヨ瀵煎嚭鐨勮垂鐢ㄧ粺璁℃暟鎹� +// String dates = deviceDto.getDates(); +// String[] split = dates.replaceAll("\\[", "").replaceAll("]", "").replaceAll("\"", "").split(","); +// deviceDto.setDates(null); +// List<CostStatisticsDto> deviceDtos = deviceMapper.selectList(QueryWrappers.queryWrappers(deviceDto).ge("create_time", split[0]).le("create_time", split[1] + " 23:59:59")); +// deviceDtos = deviceDtos.stream().map(dto -> { +// Set<String> uniqueTags = new HashSet<>(); +// if (dto.getInspectionItem().contains(",")) { +// for (String s : dto.getInspectionItem().split(",")) { +// uniqueTags.add(s.split("@")[0]); +// } +// } else { +// uniqueTags.add(dto.getInspectionItem().split("@")[0]); +// } +// dto.setInspectionItem(uniqueTags.toString()); +// return dto; +// }).collect(Collectors.toList()); +// +// response.setContentType("application/vnd.ms-excel"); +// response.setCharacterEncoding("UTF-8"); +// // 杩欓噷URLEncoder.encode鍙互闃叉涓枃涔辩爜 褰撶劧鍜宔asyexcel娌℃湁鍏崇郴 +// String fileName = URLEncoder.encode("鏍峰搧璐圭敤缁熻瀵煎嚭", "UTF-8"); +// response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); +// Map<String, List<CostStatisticsDto>> groupByCompany = +// deviceDtos.stream().filter(e -> StrUtil.isNotEmpty(e.getCompany())) +// .collect(Collectors.groupingBy(CostStatisticsDto::getCompany)); +// try { +// // 鏂板缓ExcelWriter +// // 鏂板缓ExcelWriter +// ExcelWriter excelWriter = +// EasyExcel.write(response.getOutputStream()) +// .registerWriteHandler(new SimpleColumnWidthStyleStrategy(25)) +// .build(); +// for (Map.Entry<String, List<CostStatisticsDto>> companyDataEntry : groupByCompany.entrySet()) { +// String sheetName = companyDataEntry.getKey(); +// List<CostStatisticsDto> dataList = companyDataEntry.getValue(); +// WriteSheet mainSheet = EasyExcel.writerSheet(sheetName) +// .head(CostStatisticsDto.class) +// .registerWriteHandler(new SimpleColumnWidthStyleStrategy(25)) +// .build(); +// excelWriter.write(dataList, mainSheet); +// } +// // 鍏抽棴娴� +// excelWriter.finish(); +// } catch (IOException e) { +// throw new RuntimeException("瀵煎嚭澶辫触"); +// } + } + + +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/service/impl/InformationNotificationServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/requier/service/impl/InformationNotificationServiceImpl.java new file mode 100644 index 0000000..e239dbc --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/service/impl/InformationNotificationServiceImpl.java @@ -0,0 +1,95 @@ +package com.ruoyi.requier.service.impl; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.requier.dto.InformationNotificationDto; +import com.ruoyi.requier.mapper.InformationNotificationMapper; +import com.ruoyi.requier.pojo.InformationNotification; +import com.ruoyi.requier.service.InformationNotificationService; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * <p> + * 娑堟伅閫氱煡 鏈嶅姟瀹炵幇绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2024-04-23 02:14:30 + */ +@Service +public class InformationNotificationServiceImpl extends ServiceImpl<InformationNotificationMapper, InformationNotification> implements InformationNotificationService { + + @Override + public IPage<InformationNotificationDto> getPage(Page page, String messageType) { + return baseMapper.getPage(page, messageType, SecurityUtils.getUserId().intValue()); + } + + @Override + public void markAllInformationReadOrDeleteAllReadMessages(Boolean isMarkAllInformationRead) { + if (isMarkAllInformationRead) { + baseMapper.update(new InformationNotification(), Wrappers.<InformationNotification>lambdaUpdate() + .set(InformationNotification::getViewStatus, true) + .eq(InformationNotification::getConsigneeId, SecurityUtils.getUserId())); + } else { + baseMapper.delete(Wrappers.<InformationNotification>lambdaUpdate() + .eq(InformationNotification::getConsigneeId, SecurityUtils.getUserId()) + .eq(InformationNotification::getViewStatus, true)); + } + } + + @Override + public Boolean checkForUnreadData() { + Map<String, Integer> map1 = null; + try { + List<InformationNotification> informationNotifications = baseMapper.selectList( + Wrappers.<InformationNotification>lambdaQuery() + .eq(InformationNotification::getConsigneeId, SecurityUtils.getUserId()) + .eq(InformationNotification::getViewStatus, false) + .last("limit 1")); + return !informationNotifications.isEmpty(); + } catch (Exception e) { + } + return false; + } + + @Override + public void triggerModificationStatusToRead(Integer id) { + baseMapper.update(new InformationNotification(), Wrappers.<InformationNotification>lambdaUpdate() + .eq(InformationNotification::getId, id) + .set(InformationNotification::getViewStatus, true)); + } + + @Override + public int addInformationNotification(InformationNotification informationNotification) { + return baseMapper.insert(informationNotification); + } + + @Override + public Map<String, Object> getNumberFourTypesMessagesHomePage() { + Map<String, Object> map = new HashMap<>(); + Long totalNumberOfMessages = baseMapper.selectCount(Wrappers.<InformationNotification>lambdaQuery() + .eq(InformationNotification::getConsigneeId, SecurityUtils.getUserId())); + Long totalNumberOfReadMessages = baseMapper.selectCount(Wrappers.<InformationNotification>lambdaQuery() + .eq(InformationNotification::getConsigneeId, SecurityUtils.getUserId()) + .eq(InformationNotification::getViewStatus, true)); + LocalDate today = LocalDate.now(); + LocalDate sevenDaysAgo = today.minusDays(7); + Long totalNumberOfMessagesInThePastSevenDays = baseMapper.selectCount(Wrappers.<InformationNotification>lambdaQuery() + .eq(InformationNotification::getConsigneeId, SecurityUtils.getUserId()) + .between(InformationNotification::getCreateTime, today, sevenDaysAgo)); + long remainingToDo = totalNumberOfMessages - totalNumberOfReadMessages; + map.put("totalNumberOfMessages", totalNumberOfMessages); + map.put("remainingToDo", remainingToDo); + map.put("totalNumberOfReadMessages", totalNumberOfReadMessages); + map.put("totalNumberOfMessagesInThePastSevenDays", totalNumberOfMessagesInThePastSevenDays); + return map; + } +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/service/impl/InsOrderPlanServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/requier/service/impl/InsOrderPlanServiceImpl.java new file mode 100644 index 0000000..a141c6b --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/service/impl/InsOrderPlanServiceImpl.java @@ -0,0 +1,2784 @@ +package com.ruoyi.requier.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.lang.UUID; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.metadata.style.WriteCellStyle; +import com.alibaba.excel.write.metadata.style.WriteFont; +import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; +import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.config.Configure; +import com.deepoove.poi.config.ConfigureBuilder; +import com.deepoove.poi.data.*; +import com.deepoove.poi.data.style.Style; +import com.deepoove.poi.util.TableTools; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.ruoyi.basic.mapper.StandardProductListMapper; +import com.ruoyi.basic.service.StandardTemplateService; +import com.ruoyi.basic.vo.StandardProductVO; +import com.ruoyi.common.constant.ExchangeConstants; +import com.ruoyi.common.constant.RouterKeyConstants; +import com.ruoyi.common.core.domain.entity.Custom; +import com.ruoyi.common.core.domain.entity.SysDictData; +import com.ruoyi.common.core.domain.entity.User; +import com.ruoyi.common.utils.DictUtils; +import com.ruoyi.common.utils.JackSonUtil; +import com.ruoyi.common.utils.QueryWrappers; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.framework.exception.ErrorException; +import com.ruoyi.framework.util.MatrixToImageWriter; +import com.ruoyi.framework.util.RedisUtil; +import com.ruoyi.inspect.dto.*; +import com.ruoyi.inspect.mapper.*; +import com.ruoyi.inspect.pojo.*; +import com.ruoyi.inspect.service.InsBushingService; +import com.ruoyi.inspect.service.InsOrderService; +import com.ruoyi.inspect.service.InsUnPassService; +import com.ruoyi.inspect.service.impl.InsOrderServiceImpl; +import com.ruoyi.inspect.util.SheetWriteHandlerUtil; +import com.ruoyi.inspect.vo.*; +import com.ruoyi.performance.mapper.AuxiliaryOutputWorkingHoursMapper; +import com.ruoyi.performance.mapper.PerformanceShiftMapper; +import com.ruoyi.performance.mapper.ShiftTimeMapper; +import com.ruoyi.requier.handler.*; +import com.ruoyi.requier.pojo.InformationNotification; +import com.ruoyi.requier.service.InformationNotificationService; +import com.ruoyi.requier.service.InsOrderPlanService; +import com.ruoyi.system.mapper.CustomMapper; +import com.ruoyi.system.mapper.UserMapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.logging.log4j.util.Strings; +import org.apache.poi.openxml4j.util.ZipSecureFile; +import org.apache.poi.ss.usermodel.FillPatternType; +import org.apache.poi.ss.usermodel.IndexedColors; +import org.apache.poi.xwpf.usermodel.*; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.URLEncoder; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; +import java.time.temporal.TemporalAdjusters; +import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; +import java.util.concurrent.locks.ReentrantLock; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + + +/** + * 妫�楠屼换鍔�-涓氬姟瀹炵幇灞� + */ +@Service +@Slf4j +public class InsOrderPlanServiceImpl extends ServiceImpl<InsOrderMapper, InsOrder> implements InsOrderPlanService { + + // 鎶ュ憡鎵爜璺緞 + @Value("${phoneQrCode}") + private String phoneQrCode; + + @Resource + private InsReportServiceImpl insReportService; + @Resource + private InsSampleMapper insSampleMapper; + @Resource + private InsSampleUserMapper insSampleUserMapper; + @Resource + private InsOrderMapper insOrderMapper; + @Resource + private InsOrderService insOrderService; + + @Resource + private InsOrderServiceImpl insOrderServiceImpl; + + @Resource + private StandardTemplateService standardTemplateService; + @Resource + private InsOrderStateMapper insOrderStateMapper; + @Resource + private InsProductMapper insProductMapper; + @Resource + private ShiftTimeMapper shiftTimeMapper; + @Resource + private PerformanceShiftMapper performanceShiftMapper; + + @Resource + private StandardProductListMapper standardProductListMapper; + + @Value("${wordUrl}") + private String wordUrl; + + @Value("${twoCode}") + private String twoCode; + + @Resource + private InsReportMapper insReportMapper; + + @Resource + private InsProductResultMapper insProductResultMapper; + + @Resource + private InsProductUserMapper insProductUserMapper; + + @Resource + private InsUnPassService insUnPassService; + + @Resource + AuxiliaryOutputWorkingHoursMapper auxiliaryOutputWorkingHoursMapper; + + @Resource + private InformationNotificationService informationNotificationService; + + @Resource + private UserMapper userMapper; + + @Resource + private CustomMapper customMapper; + + @Value("${file.path}") + private String imgUrl; + + @Resource + private InsBushingService insBushingService; + + @Resource + private InsBushingMapper insBushingMapper; + + @Resource + private InsFiberMapper insFiberMapper; + + @Resource + private InsFibersMapper insFibersMapper; + + @Resource + private InsOrderFileMapper insOrderFileMapper; + + @Resource + private InsReportApproveConfigMapper insReportApproveConfigMapper; + + @Autowired + private RabbitTemplate rabbitTemplate; + + + + private ReentrantLock lock = new ReentrantLock(); + + @Resource + private ThreadPoolTaskExecutor threadPoolTaskExecutor; + + @Override + public void exportInsOrderPlanResult(Map<String, Object> data, HttpServletResponse response) { + List<Map<String,Object>> dataList = new ArrayList<>(); + ObjectMapper objectMapper = new ObjectMapper(); + try { + Object o = getTabHeader(data.get("sonLaboratory").toString(), data.get("samples").toString()).get("tableHeader");// 鑾峰彇鍔ㄦ�佽〃澶� + List<Map<String, Object>> tableHeader = objectMapper.readValue(JSONUtil.toJsonStr(o), new TypeReference<List<Map<String, Object>>>() { + });// 琛ㄥご鏁版嵁 + Map<String, Object> table = objectMapper.readValue(JSONUtil.toJsonStr(data.get("trendsTable")), new TypeReference<Map<String, Object>>() { + }); + List<Map<String, Object>> trendsTable = getInsOrderPlanList(table); // 琛ㄦ牸鏁版嵁 + for (Map<String, Object> trend : trendsTable) { + Map<String, Object> addMap = new HashMap<>(); + addMap.put("濮旀墭鍗曞彿", trend.get("entrustCode")); + addMap.put("鏍峰搧缂栧彿", trend.get("sampleCode")); + addMap.put("绠¤壊鏍�", trend.get("bushing")); + addMap.put("鍏夌氦甯﹁壊鏍�", trend.get("fibers")); + addMap.put("鍏夌氦鑹叉爣", trend.get("fiber")); + addMap.put("妫�楠岄」鐩垎绫�", trend.get("inspectionItem")); + addMap.put("鍒涘缓浜�", trend.get("userName")); + addMap.put("妫�娴嬫椂闂�", trend.get("insTime")); + addMap.put("涓嬪彂鏃堕棿", trend.get("sendTime")); + for (Map<String, Object> map : tableHeader) { + if(Objects.isNull(trend.get(map.get("prop").toString())) || Objects.equals(trend.get(map.get("prop").toString()),"null")) { + addMap.put(map.get("label").toString(), ""); + }else { + addMap.put(map.get("label").toString(), trend.get(map.get("prop").toString())); + } + } + dataList.add(addMap); + } + List<List<String>> head = head(tableHeader); + response.setContentType("application/vnd.ms-excel"); + response.setCharacterEncoding("UTF-8"); + String fileName = URLEncoder.encode("妫�楠岀粨鏋�", "UTF-8"); + response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); + HorizontalCellStyleStrategy horizontalCellStyleStrategy = + new HorizontalCellStyleStrategy(getHeadStyle((short) 12),new WriteCellStyle()); + + ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()) + .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) + .registerWriteHandler(new SheetWriteHandlerUtil(data.get("samples").toString(),head.size())) + .useDefaultStyle(true).relativeHeadRowIndex(1) + .registerWriteHandler(horizontalCellStyleStrategy) + .build(); + WriteSheet mainSheet = EasyExcel.writerSheet("Sheet0").head(head).build(); + excelWriter.write(dataList(head,dataList), mainSheet); + // 鍏抽棴娴� + excelWriter.finish(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * 鍔ㄦ�佽〃澶� + * @param tableHeader + * @return + */ + private List<List<String>> head(List<Map<String, Object>> tableHeader) { + List<List<String>> list = new ArrayList<>(); + List<String> head0 = new ArrayList<>(); + head0.add("濮旀墭鍗曞彿"); + List<String> head1 = new ArrayList<>(); + head1.add("鏍峰搧缂栧彿"); + List<String> head2 = new ArrayList<>(); + head2.add("妫�楠岄」鐩垎绫�"); + List<String> head3 = new ArrayList<>(); + head3.add("鍒涘缓浜�"); + List<String> head4 = new ArrayList<>(); + head4.add("妫�娴嬫椂闂�"); + List<String> head5 = new ArrayList<>(); + head5.add("涓嬪彂鏃堕棿"); + List<String> head6 = new ArrayList<>(); + head6.add("绠¤壊鏍�"); + List<String> head7 = new ArrayList<>(); + head7.add("鍏夌氦甯﹁壊鏍�"); + List<String> head8 = new ArrayList<>(); + head8.add("鍏夌氦鑹叉爣"); + + list.add(head0); + list.add(head1); + list.add(head6); + list.add(head7); + list.add(head8); + list.add(head2); + list.add(head3); + list.add(head4); + list.add(head5); + for (Map<String, Object> map : tableHeader) { + List<String> head = new ArrayList<>(); + head.add(map.get("label").toString()); + list.add(head); + } + return list.stream().distinct().collect(Collectors.toList()); + } + + /** + * excel瀵煎嚭鏁版嵁 + * @param head + * @param dataList + * @return + */ + private List<List<Object>> dataList(List<List<String>> head,List<Map<String,Object>> dataList) { + List<List<Object>> list = new ArrayList<>(); + for(Map<String, Object> map : dataList) { + List<Object> addList = new ArrayList<>(); + for(List<String> k : head) { + if(map.containsKey(k.get(0))) { + addList.add(map.get(k.get(0))); + } + } + list.add(addList); + } + return list; + } + + /** + * 澶寸殑绛栫暐 + * @return + */ + public WriteCellStyle getHeadStyle(Short size){ + // 澶寸殑绛栫暐 + WriteCellStyle headWriteCellStyle = new WriteCellStyle(); + // 鑳屾櫙棰滆壊 + headWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex()); + headWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND); + // 瀛椾綋 + WriteFont headWriteFont = new WriteFont(); + headWriteFont.setFontName("榛戜綋");//璁剧疆瀛椾綋鍚嶅瓧 + headWriteFont.setFontHeightInPoints(size);//璁剧疆瀛椾綋澶у皬 + headWriteFont.setBold(true);//瀛椾綋鍔犵矖 + headWriteCellStyle.setWriteFont(headWriteFont); //鍦ㄦ牱寮忕敤搴旂敤璁剧疆鐨勫瓧浣�; + + return headWriteCellStyle; + } + @Override + public List<Map<String, Object>> getInsOrderPlanList(Map<String,Object> data) { + String sampleType = data.get("sampleType").toString(); + String sonLaboratory = data.get("sonLaboratory").toString(); + String entrustCode = data.get("entrustCode").toString(); + Integer createUser = null; + String name = ""; + if(StringUtils.isNotBlank(data.get("createUser").toString())) { + createUser = Integer.parseInt(data.get("createUser").toString()); + name = userMapper.selectById(createUser).getName(); + } + String sampleCode = data.get("sampleCode").toString(); + String startTime = ""; + String endTime = ""; + List<Map<String, Object>> maps = new ArrayList<>(); + ObjectMapper objectMapper = new ObjectMapper(); + try { + if(StringUtils.isNotBlank(data.get("insTime").toString()) && !Objects.isNull(data.get("insTime"))) { + List insTime = objectMapper.readValue(JSONUtil.toJsonStr(data.get("insTime")), List.class); + startTime = insTime.get(0).toString(); + endTime = insTime.get(1).toString(); + } + // 琛ㄥご淇℃伅 + List<Map<String, Object>> headerS = objectMapper.readValue(JSONUtil.toJsonStr(data.get("headerS")), new TypeReference<List<Map<String, Object>>>() { + }); + // 鍒ゆ柇鏄惁鏄俯搴﹀惊鐜� + if(sampleType.equals("娓╁害寰幆")) { + List<ExportInsProductVO> insOrderTemList = insOrderMapper.getInsOrderTemList(entrustCode, sampleCode, startTime, endTime,name); + List<TemperatureCycling> temList = insOrderServiceImpl.getTemList(insOrderTemList); + for (TemperatureCycling map : temList) { + Map<String, Object> resultMap = new HashMap<>(); + resultMap.put("entrustCode", map.getEntrustCode()); //濮旀墭鍗曞彿 + resultMap.put("sampleCode", map.getSampleCode()); //鏍峰搧缂栧彿 + resultMap.put("bushing", map.getBushColor()); //濂楃 + resultMap.put("fiber", map.getColor()); //鍏夌氦 + resultMap.put("fibers", map.getCode()); //鍏夌氦甯� + resultMap.put("userName", map.getCheckName()); //妫�楠屼汉 + resultMap.put("insTime", map.getInsTime()); //妫�娴嬫椂闂� + resultMap.put("sendTime", map.getSendTime()); //涓嬪彂鏃堕棿 + resultMap.put("inspectionItem", map.getSample()); //妫�楠岄」鐩� + //娓╁害寰幆瀛愰」 + resultMap.put("inspectionItems", map.getInspectionItem()); + resultMap.put("inspectionItemSubclass", map.getInspectionItemSubclass()); + resultMap.put("attenuationCoefficient1310", map.getAttenuationCoefficient1310()); + resultMap.put("attenuationDifference1", map.getAttenuationDifference1()); + resultMap.put("attenuationDifference2", map.getAttenuationDifference2()); + resultMap.put("attenuationCoefficient1625", map.getAttenuationCoefficient1625()); + resultMap.put("attenuationDifference3", map.getAttenuationDifference3()); + resultMap.put("attenuationCoefficient1383", map.getAttenuationCoefficient1383()); + resultMap.put("attenuationDifference4", map.getAttenuationDifference4()); + resultMap.put("attenuationCoefficient1490", map.getAttenuationCoefficient1490()); + resultMap.put("attenuationDifference5", map.getAttenuationDifference5()); + resultMap.put("attenuationDifferenceMax", map.getAttenuationDifferenceMax()); + resultMap.put("insResult", map.getInsResult()); + maps.add(resultMap); + } + } + else { + List<Map<String, Object>> insOrderPlanList = baseMapper.getInsOrderPlanList(sonLaboratory, entrustCode, sampleCode, createUser, startTime, endTime,sampleType); + for (Map<String, Object> map : insOrderPlanList) { + Map<String, Object> resultMap = new HashMap<>(); + resultMap.put("entrustCode", map.get("entrustCode")); //濮旀墭鍗曞彿 + resultMap.put("sampleCode", map.get("sampleCode")); //鏍峰搧缂栧彿 + resultMap.put("bushing", map.get("bushing")); //濂楃 + resultMap.put("fiber", map.get("fiber")); //鍏夌氦 + resultMap.put("fibers", map.get("fibers")); //鍏夌氦甯� + resultMap.put("userName", map.get("userName")); //鍒涘缓浜� + resultMap.put("insTime", map.get("insTime")); //妫�娴嬫椂闂� + resultMap.put("sendTime", map.get("sendTime")); //涓嬪彂鏃堕棿 + resultMap.put("inspectionItem", map.get("inspectionItem")); //妫�楠岄」鐩� + // 鏌ョ湅琛ㄥご鏄惁瀛樺湪瀛愰」 + List<Map<String, Object>> collect = headerS.stream().filter(item -> + item.get("label").toString().equals(map.get("inspectionItemSubclass").toString())) + .collect(Collectors.toList()); + // 鏈夊氨鍙栧瓙椤� 娌℃湁灏卞彇鐖堕」 + if(!collect.isEmpty() && !Objects.isNull(collect)) { + resultMap.put(collect.get(0).get("prop").toString(), map.get("lastValue"));//妫�楠屽瓙椤圭洰 妫�楠岀粨鏋� + }else { + List<Map<String, Object>> collect1 = headerS.stream().filter(item -> + item.get("label").toString().equals(map.get("inspectionItem").toString())) + .collect(Collectors.toList()); + if(!collect1.isEmpty() && !Objects.isNull(collect1)) { + resultMap.put(collect1.get(0).get("prop").toString(), map.get("lastValue"));//妫�楠岄」鐩� 妫�楠岀粨鏋� + } + } + maps.add(resultMap); + } + + } + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + return maps.stream().distinct().collect(Collectors.toList()); + } + + /** + * 鑾峰彇褰撳墠鐢ㄦ埛鐨勫疄楠屽 + * @return + */ + private String getCurrentUserLaboratory(){ + // 鑾峰彇褰撳墠浜烘墍鍦ㄥ疄楠屽 + Integer userId = SecurityUtils.getUserId().intValue(); + String departLimsId = userMapper.selectById(userId).getDepartLimsId(); + String laboratory = ""; + if(StringUtils.isNotBlank(departLimsId)) { + String[] split = departLimsId.split(","); + for (String s : split) { + if (StringUtils.isNotBlank(s) && (!Arrays.asList("1","22").contains(s))) { + laboratory = insOrderMapper.getDepartment(Integer.parseInt(s)); + } + } + } + return laboratory; + } + + /** + * 瀵煎嚭濮旀墭璐圭敤 + * @param data 鏁版嵁 + */ + @Override + public void exportCommissionFees(Map<String, Object> data,HttpServletResponse response) { + String laboratory = getCurrentUserLaboratory(); + // 鏃ユ湡鏍煎紡鍖� + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + String start = LocalDateTime.of( + LocalDate.parse(data.get("startTime").toString(), + dateTimeFormatter),LocalTime.of(00, 00, 00) + ).toString(); + String end = LocalDateTime.of( + LocalDate.parse(data.get("endTime").toString(), + dateTimeFormatter),LocalTime.of(23, 59, 59) + ).toString(); + // 鑾峰彇鏁版嵁 + String company = data.get("company").toString(); + List<CommissionFeesDto> list = insOrderMapper.selectCommissionFees(laboratory,company, start, end); + list = list.stream().map(dto -> { + Set<String> uniqueTags = new HashSet<>(); + if (dto.getInsItem().contains(",")) { + for (String s : dto.getInsItem().split(",")) { + uniqueTags.add(s.split("@")[0]); + } + } else { + uniqueTags.add(dto.getInsItem().split("@")[0]); + } + dto.setInsItem(uniqueTags.toString()); + return dto; + }).collect(Collectors.toList()); + try { + String fileName = URLEncoder.encode(laboratory+"濮旀墭璐圭敤缁熻", "UTF-8"); + response.setContentType("application/vnd.ms-excel"); + response.setCharacterEncoding("UTF-8"); + response.setHeader("content-disposition", "attachment;filename=" + fileName + ".xlsx"); + // 鏂板缓ExcelWriter + ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(),CommissionFeesDto.class).build(); + // 鏍规嵁濮旀墭鍗曚綅杩涜sheet鍒嗙被 + Map<String, List<CommissionFeesDto>> collect = list.stream().collect(Collectors.groupingBy(CommissionFeesDto::getCompany)); + Iterator<Map.Entry<String, List<CommissionFeesDto>>> iterator = collect.entrySet().iterator(); + int i = 0; + while(iterator.hasNext()) { + Map.Entry<String, List<CommissionFeesDto>> entry = iterator.next(); + WriteSheet writeSheet = EasyExcel.writerSheet(i, entry.getKey()).build(); + excelWriter.write(entry.getValue(), writeSheet); + i++; + } +// WriteSheet writeSheet = EasyExcel.writerSheet().head(CommissionFeesDto.class).build(); +// excelWriter.write(list, writeSheet); + + // 灏嗘暟鎹啓鍏� + excelWriter.finish(); + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + + @Override + public void exportUnInsProducts(UnInsProductsDTO unInsProductsDTO, HttpServletResponse response) { + String laboratory = getCurrentUserLaboratory(); + //鏃ユ湡鏍煎紡鍖� + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + LocalDateTime startDateTime = LocalDateTime.of(LocalDate.parse(unInsProductsDTO.getStartDate(),dateTimeFormatter),LocalTime.MIN); + LocalDateTime endDateTime = LocalDateTime.of(LocalDate.parse(unInsProductsDTO.getEndDate(),dateTimeFormatter),LocalTime.MAX); + + // 鑾峰彇鏁版嵁 + List<UnInsProductsVO> list = baseMapper.selectUnInsProducts(laboratory, startDateTime, endDateTime,unInsProductsDTO); + try { + String fileName = URLEncoder.encode(laboratory+"寰呮浠诲姟缁熻", "UTF-8"); + response.setContentType("application/vnd.ms-excel"); + response.setCharacterEncoding("UTF-8"); + response.setHeader("content-disposition", "attachment;filename=" + fileName + ".xlsx"); + // 鏂板缓ExcelWriter + ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).build(); + WriteSheet writeSheet = EasyExcel.writerSheet().head(UnInsProductsVO.class).build(); + excelWriter.write(list, writeSheet); + // 鍏抽棴娴� + excelWriter.finish(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public IPage<TasksShowDto> tasksShow(Page page, String sonLaboratory) { + IPage tasksShow = insOrderMapper.getTasksShow(page, sonLaboratory); + return tasksShow; + } + + @Override + public int getCurrentMonthPlanTotalBySonLaboratory(String sonLaboratory,LocalDateTime startTime, LocalDateTime endTime) { + if(StringUtils.isNotBlank(sonLaboratory)){ + if(Objects.isNull(startTime) || Objects.isNull(endTime)) { + //鑾峰彇褰撴湀鐨勫紑濮嬪拰缁撴潫鏃堕棿 + // 褰撴湀鐨勫紑濮嬫椂闂达紙绗竴澶� 00:00:00锛� + startTime = LocalDate.now() + .withDayOfMonth(1) + .atStartOfDay(); + + // 褰撴湀鐨勭粨鏉熸椂闂达紙鏈�鍚庝竴澶� 23:59:59.999999999锛� + endTime = LocalDate.now() + .with(TemporalAdjusters.lastDayOfMonth()) + .atTime(LocalTime.MAX); + } + //鏌ヨ褰撴湀璇ュ瓙璇曢獙瀹ょ殑鎬讳换鍔℃潯鏁� + return baseMapper.selectPlanCountBySonLaboratory(sonLaboratory,startTime,endTime); + } + return 0; + } + + @Override + public Map<String, Object> getTabHeader(String sonLaboratory,String samples) { + Map<String, Object> resultMap = new HashMap<>(); + List<String> list = new ArrayList<>(); + List<Map<String, Object>> maps = new ArrayList<>(); + if(StringUtils.isNotBlank(samples)) { + samples = "[" + "\"" + samples + "\""; + } + List<Map<String, Object>> tabHeader = baseMapper.getTabHeader(sonLaboratory,samples); + ObjectMapper objectMapper = new ObjectMapper(); + Long count = 1l; + for (Map<String, Object> map : tabHeader) { + try { + List<List<String>> sample = objectMapper.readValue(JSONUtil.toJsonStr(map.get("sample").toString()), new TypeReference<List<List<String>>>() { + }); + // 鑾峰彇tab椤佃〃澶� + for (List<String> strings : sample) { + list.add(strings.get(0)); + } + // 鑾峰彇琛ㄦ牸琛ㄥご + if(StringUtils.isNotBlank(samples)) { + if(map.containsKey("inspectionItemSubclass")) { + if(StringUtils.isNotBlank(map.get("inspectionItemSubclass").toString())) { + HashMap<String, Object> map1 = new HashMap<>(); + map1.put("label", map.get("inspectionItemSubclass").toString()); // label + map1.put("prop","lastValue"+count); // prop + maps.add(map1); + }else { + HashMap<String, Object> map1 = new HashMap<>(); + map1.put("label", map.get("inspectionItem").toString()); // label + map1.put("prop","lastValue"+count); // prop + maps.add(map1); + } + }else { + HashMap<String, Object> map1 = new HashMap<>(); + map1.put("label", map.get("inspectionItem").toString()); // label + map1.put("prop","lastValue"+count); // prop + maps.add(map1); + } + count++; + } + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + + if (samples.contains("娓╁害寰幆")){ + addElementToMaps(maps, "寰幆娆℃暟", "inspectionItems"); + addElementToMaps(maps, "娓╁害鐐�", "inspectionItemSubclass"); + addElementToMaps(maps, "琛板噺绯绘暟1310", "attenuationCoefficient1310"); + addElementToMaps(maps, "琛板噺宸�1", "attenuationDifference1"); + addElementToMaps(maps, "琛板噺绯绘暟1550", "attenuationCoefficient1550"); + addElementToMaps(maps, "琛板噺宸�2", "attenuationDifference2"); + addElementToMaps(maps, "琛板噺绯绘暟1625", "attenuationCoefficient1625"); + addElementToMaps(maps, "琛板噺宸�3", "attenuationDifference3"); + addElementToMaps(maps, "琛板噺1383", "attenuationCoefficient1383"); + addElementToMaps(maps, "琛板噺宸�4", "attenuationDifference4"); + addElementToMaps(maps, "琛板噺1490", "attenuationCoefficient1490"); + addElementToMaps(maps, "琛板噺宸�5", "attenuationDifference5"); + addElementToMaps(maps, "琛板噺宸甅ax", "attenuationDifferenceMax"); + addElementToMaps(maps, "鏄惁鍚堟牸", "insResult"); + } + + Map<String, Map<String, Object>> uniqueByLabel = maps.stream() + .collect(Collectors.toMap( + map -> (String) map.get("label"), + map -> map, + (existing, replacement) -> existing, // 淇濈暀绗竴涓亣鍒扮殑Map + LinkedHashMap::new + )); + // 灏嗙粨鏋滆浆鎹㈠洖List<Map<String, Object>> + List<Map<String, Object>> collect1 = new ArrayList<>(uniqueByLabel.values()); +// List<Map<String, Object>> collect1 = maps.stream().distinct().collect(Collectors.toList()); + List<String> collect = list.stream().distinct().collect(Collectors.toList()); + collect.add("娓╁害寰幆"); + resultMap.put("tabHeader", collect); + resultMap.put("tableHeader", collect1); + return resultMap; + } + + private static void addElementToMaps(List<Map<String, Object>> maps, String label, String prop) { + Map<String, Object> map = new HashMap<>(); + map.put("label", label); + map.put("prop", prop); + maps.add(map); + } + + @Override + public IPage<InsOrderPlanVO> selectInsOrderPlanList(Page page, InsOrderPlanDTO insOrderPlanDTO) { + User user = userMapper.selectById(SecurityUtils.getUserId());//褰撳墠鐧诲綍鐨勪汉 + //鑾峰彇褰撳墠浜烘墍灞炲疄楠屽id + String departLimsId = user.getDepartLimsId(); + String laboratory = null; + if (ObjectUtils.isNotEmpty(departLimsId) && !departLimsId.isEmpty()) { + String[] split = departLimsId.split(","); + //鏌ヨ瀵瑰簲鏋舵瀯鍚嶇О(閫氫俊瀹為獙瀹�,鐢靛姏瀹為獙瀹�,妫�娴嬪姙) + String departLims = baseMapper.seldepLimsId(Integer.parseInt(split[split.length - 1])); + if (departLims.contains("瀹為獙瀹�")) { + laboratory = departLims; + } + } + + String checkName = null; + String userName = null; + if (ObjectUtil.isNotEmpty(insOrderPlanDTO.getUserId())) { + userName = userMapper.selectById(SecurityUtils.getUserId()).getName(); + if(Objects.equals(insOrderPlanDTO.getInsState(),"3")) { + userName = ""; + checkName = userMapper.selectById(SecurityUtils.getUserId()).getName(); + } + insOrderPlanDTO.setUserId(null); + } + InsOrderPlanDTO planDTO = new InsOrderPlanDTO(); + QueryWrapper<InsOrderPlanDTO> wrappers = QueryWrappers.queryWrappers(planDTO); + IPage<InsOrderPlanVO> insOrderPage = insSampleMapper.findInsSampleAndOrder( + page, + userName, + checkName, + insOrderPlanDTO.getSonLaboratory(), + insOrderPlanDTO.getSample(), + insOrderPlanDTO.getSampleCode(), + laboratory, + insOrderPlanDTO.getEntrustCode(), + insOrderPlanDTO.getInsState(), + wrappers, + insOrderPlanDTO.getSendTimeRange() + ); + return insOrderPage; + } + + @Override + public IPage<InsOrderPlanTaskSwitchVo> inspectionOrderDetailsTaskSwitching(Page page, InsOrderPlanDTO insOrderPlanDTO) { + Integer userId = SecurityUtils.getUserId().intValue(); + User user = userMapper.selectById(userId);//褰撳墠鐧诲綍鐨勪汉 + + //鑾峰彇褰撳墠浜烘墍灞炲疄楠屽id + String departLimsId = user.getDepartLimsId(); + String laboratory = null; + if (ObjectUtils.isNotEmpty(departLimsId) && !departLimsId.equals("")) { + String[] split = departLimsId.split(","); + //鏌ヨ瀵瑰簲鏋舵瀯鍚嶇О(閫氫俊瀹為獙瀹�,鐢靛姏瀹為獙瀹�,妫�娴嬪姙) + String departLims = baseMapper.seldepLimsId(Integer.parseInt(split[split.length - 1])); + if (departLims.contains("瀹為獙瀹�")) { + laboratory = departLims; + } + } + if (ObjectUtil.isNotEmpty(insOrderPlanDTO.getUserId())) { + insOrderPlanDTO.setUserId(userId.longValue()); + } + String sonLaboratory = insOrderPlanDTO.getSonLaboratory();//璇曢獙瀹� + IPage<InsOrderPlanTaskSwitchVo> insOrderPage = insSampleMapper.inspectionOrderDetailsTaskSwitching(page, QueryWrappers.queryWrappers(insOrderPlanDTO), userId, sonLaboratory, laboratory); + return insOrderPage; + } + + //璁ら浠诲姟 + @Override + public boolean claimInsOrderPlan(InsOrderPlanDTO entity) { + if (Objects.isNull(entity)) { + return false; + } + Integer userId = SecurityUtils.getUserId().intValue(); + InsSampleUser insSampleUser = new InsSampleUser(entity.getInsSampleId().intValue(), userId, 0, entity.getSonLaboratory()); + return insSampleUserMapper.insert(insSampleUser) > 0; + } + + @Override + public Map<String, Object> doInsOrder(Integer id, String laboratory) { +// InsOrder insOrder = new InsOrder(); +// insOrder.setId(id); + + InsOrder order = insOrderMapper.selectById(id); + InsOrderState insOrderState = insOrderStateMapper.selectOne(new LambdaQueryWrapper<InsOrderState>() + .eq(InsOrderState::getInsOrderId, id) + .eq(InsOrderState::getLaboratory, laboratory)); + + if (BeanUtil.isEmpty(insOrderState.getInsTime())) { + order.setInsTime(LocalDateTime.now()); + insOrderMapper.updateById(order); + insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate().eq(InsOrderState::getInsOrderId, id).eq(InsOrderState::getLaboratory, laboratory).set(InsOrderState::getInsTime, LocalDateTime.now()).set(InsOrderState::getInsState, 1)); + } + Map<String, Object> map = insOrderService.getInsOrderAndSample(id, laboratory); + List<SampleProductDto> list = JSON.parseArray(JSON.toJSONString(map.get("sampleProduct")), SampleProductDto.class); + for (SampleProductDto samples : list) { + if (BeanUtil.isEmpty(samples.getInsProduct())) continue; + samples.setBushing(insBushingService.selectBushingBySampleId(samples.getId())); + } + map.put("sampleProduct", list.stream().sorted(Comparator.comparing(SampleProductDto::getId)).collect(Collectors.toList())); + return map; + } + + @Override + public List<InsProduct> getInsProduct(Integer id, Integer type, String laboratory, HttpServletRequest request) { + List<InsProduct> insProducts = new ArrayList<>(); + switch (type) { + case 0: + //鏍峰搧 + insProducts = insSampleMapper.getInsProduct1(id, laboratory); + if(!insProducts.isEmpty()) { + boolean flag = false; + for(InsProduct insProduct : insProducts) { + if("娓╁害寰幆".equals(insProduct.getInspectionItem())) { + flag = true; + break; + } + } + if(flag) { + insProducts = insSampleMapper.getInsProduct5(id, laboratory); + } + } + break; + case 1: + //鍏夌氦甯� + insProducts = insSampleMapper.getInsProduct2(id, laboratory); + break; + case 2: + //鍏夌氦 + insProducts = insSampleMapper.getInsProduct3(id, laboratory); + break; + case 3: + //濂楃 + insProducts = insSampleMapper.getInsProduct4(id, laboratory); + break; + } + + //濡傛灉鏄ぇ鏍峰搧涓嬬殑椤圭洰涓虹┖,閭d箞鏌ヨ绗竴涓厜绾ょ殑椤圭洰 + if (ObjectUtils.isEmpty(insProducts) && type == 0) { + //鏌ヨ绗竴涓厜绾ょ殑id + List<InsFiber> insFibers = insFiberMapper.selectList(Wrappers.<InsFiber>lambdaQuery() + .eq(InsFiber::getInsBushingId, insBushingMapper.selectList(Wrappers.<InsBushing>lambdaQuery() + .eq(InsBushing::getInsSampleId, id) + .isNotNull(InsBushing::getStandNum) + .isNotNull(InsBushing::getTestNum)).get(0).getId())); + if(CollectionUtils.isNotEmpty(insFibers)) { + insProducts = insSampleMapper.getInsProduct3(insFibers.get(0).getId(),laboratory); + } + // 濡傛灉鍏夌氦涓嬬殑椤圭洰涓虹┖,閭d箞鏌ヨ绗竴涓厜绾ゅ甫鐨勯」鐩� + else { + List<InsFibers> insFibersS = insFibersMapper.selectList(Wrappers.<InsFibers>lambdaQuery() + .eq(InsFibers::getInsBushingId, insBushingMapper.selectList(Wrappers.<InsBushing>lambdaQuery() + .eq(InsBushing::getInsSampleId, id) + .isNotNull(InsBushing::getTestNum) + ).get(0).getId())); + //濡傛灉鍏夌氦甯︿笉涓虹┖锛屾煡璇㈠厜绾ゅ甫涓嬫槸鍚﹂厤鏈夊厜绾� + if(!insFibersS.isEmpty()){ + List<InsFiber> insFiberList = insFiberMapper.selectList(Wrappers.<InsFiber>lambdaQuery().eq(InsFiber::getInsFibersId, insFibersS.get(0).getId())); + if(!insFiberList.isEmpty()){ + insProducts = insSampleMapper.getInsProduct3(insFiberList.get(0).getId(),laboratory); + }else{ + insProducts = insSampleMapper.getInsProduct6(insFibersS.get(0).getId(),laboratory); + } + } + } + } + Set<Integer> set = new HashSet<>(); + Map<Integer, String> map2 = new HashMap<>(); + if (BeanUtil.isEmpty(insProducts)) return null; + getTemplateThing(set, map2, insProducts); + return insProducts; + } + + @Override + public List<String> checkSubmitPlan(Integer orderId, String laboratory,String temperature,String humidity) { + List<String> collect = new ArrayList<>(); + List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId).select(InsSample::getId)); + List<Integer> ids = insSamples.stream().map(InsSample::getId).collect(Collectors.toList()); + List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() + .in(InsProduct::getInsSampleId, ids) + .eq(InsProduct::getSonLaboratory, laboratory) + .eq(InsProduct::getState, 1) + .eq(InsProduct::getInsResult, 0)); + if (insProducts.size() > 0) { + collect = insProducts.stream().map(insProduct -> { + return insProduct.getInspectionItem() + "-" + insProduct.getInspectionItemSubclass(); + }).collect(Collectors.toList()); + insProductMapper.update(null,new LambdaUpdateWrapper<InsProduct>() + .set(InsProduct::getTemperature,temperature) + .set(InsProduct::getHumidity,humidity) + .in(InsProduct::getInsSampleId,ids)); + } + return collect; + } + + @Override + public IPage<InsOrderFile> getFileList(Page page, InsOrderFile insOrderFile) { + Integer insOrderId = insOrderFile.getInsOrderId(); + insOrderFile.setInsOrderId(null); + IPage<InsOrderFile> insOrderFileIPage = insOrderFileMapper.getFileList(page, QueryWrappers.queryWrappers(insOrderFile),insOrderId); + return insOrderFileIPage; + } + + @Override + public int uploadFile(Integer orderId, MultipartFile file) { + String urlString; + String pathName; + String path; + String filename = file.getOriginalFilename(); + String contentType = file.getContentType(); + InsOrderFile insOrderFile = new InsOrderFile(); + insOrderFile.setInsOrderId(orderId); + insOrderFile.setFileName(filename); + if (contentType != null && contentType.startsWith("image/")) { + // 鏄浘鐗� + path = imgUrl; + insOrderFile.setType(1); + } else { + // 鏄枃浠� + path = wordUrl; + insOrderFile.setType(2); + } + try { + File realpath = new File(path); + if (!realpath.exists()) { + realpath.mkdirs(); + } + pathName = UUID.randomUUID() + "_" + file.getOriginalFilename(); + urlString = realpath + "/" + pathName; + file.transferTo(new File(urlString)); + insOrderFile.setFileUrl(pathName); + return insOrderFileMapper.insert(insOrderFile); + } catch (Exception e) { + e.printStackTrace(); + System.err.println("闄勪欢涓婁紶閿欒"); + return 0; + } + } + + //鍒囨崲璁板綍妯$増鏌ヨ妫�楠屽唴瀹� + @Override + public Map<String, Object> getReportModel(Integer sampleId, String sonLaboratory) { + Map<String, Object> map = new HashMap<>(); + //鍏堟煡鍑哄绠� + List<InsBushing> insBushings = insBushingMapper.selectList(Wrappers.<InsBushing>lambdaQuery().eq(InsBushing::getInsSampleId, sampleId)); + List<InsFibersVO> fibers = new ArrayList<>(); + List<InsFiber> fiber = new ArrayList<>(); + List<InsBushing> bush = new ArrayList<>(); + for (InsBushing insBushing : insBushings) { + //淇濆瓨濂楃(鏉惧绠�) + List<InsProduct> insProductsByBush = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getInsBushId, insBushing.getId()) + .eq(InsProduct::getSonLaboratory,sonLaboratory) + .eq(InsProduct::getState,1) + .and(i->i.like(InsProduct::getInspectionItem,"鏉惧绠�") + .or() + .like(InsProduct::getInspectionItemSubclass,"鏉惧绠�")) + ); + List<Integer> collectByBush = insProductsByBush.stream() + .map(InsProduct::getInsResult) + .filter(sm -> ObjectUtils.isNotEmpty(sm) && sm != 2).collect(Collectors.toList()); + //1锛氬凡妫�楠岋紝0锛氭湭妫�楠�,2:鍦ㄦ + int bushState = 0; + if(insProductsByBush.size() == collectByBush.size()){ + bushState = 1; + }else if(!collectByBush.isEmpty() && collectByBush.size()<insProductsByBush.size()){ + bushState = 2; + } + insBushing.setState(bushState); + if(!insProductsByBush.isEmpty()){ + bush.add(insBushing); + } + //鍐嶆煡璇㈠嚭鎵�鏈夌殑鍏夌氦甯� + List<InsFibers> insFibers = insFibersMapper.selectList(Wrappers.<InsFibers>lambdaQuery().eq(InsFibers::getInsBushingId, insBushing.getId())); + + List<InsFiber> insFiberList = insFiberMapper.selectList(Wrappers.<InsFiber>lambdaQuery().eq(InsFiber::getInsBushingId, insBushing.getId())); + if (CollectionUtils.isNotEmpty(insFibers)) { + for (InsFibers insFiberS : insFibers) { + //鏌ヨ鍏夌氦甯︿笅鐨勫厜绾ら厤缃� + List<InsFiber> fiberList = insFiberMapper.selectList(Wrappers.<InsFiber>lambdaQuery().eq(InsFiber::getInsFibersId, insFiberS.getId())); + if(fiberList.isEmpty()){ + List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getState,1) + .eq(InsProduct::getSonLaboratory,sonLaboratory) + .eq(InsProduct::getInsFibersId, insFiberS.getId())); + // 杩囨护鍏夌氦鎺ュご鎹熻�� + if(CollectionUtils.isNotEmpty(insProducts)) { + insProducts = insProducts.stream().filter(item -> !item.getInspectionItem().equals("鍏夌氦鎺ュご鎹熻��")).collect(Collectors.toList()); + } + //璁剧疆濂楃鐨勬楠岀姸鎬� + insFiberS.setState(getInsState(insProducts)); + InsFibersVO insFibersVO = new InsFibersVO(); + BeanUtil.copyProperties(insFiberS,insFibersVO); + insFibersVO.setIsExistProduct(!insProducts.isEmpty());//鏄惁瀛樺湪妫�楠岄」 + insFibersVO.setBushingColor(insBushing.getColor()); + //濡傛灉鍏夌氦甯︿笅鐨勯」鐩病鏈夊厜绾ゆ帴澶存崯鑰楅」鐩紝鎵嶆坊鍔犲厜绾ゅ甫淇℃伅 + if(CollectionUtils.isNotEmpty(insProducts)) { + fibers.add(insFibersVO); + } + }else{ + InsFibersVO insFibersVO = new InsFibersVO(); + BeanUtil.copyProperties(insFiberS,insFibersVO); + insFibersVO.setBushingColor(insBushing.getColor()); + //鏌ヨ鍏夌氦甯︿笅鐨勬楠岄」 + List<InsProduct> fibersProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getState,1) + .eq(InsProduct::getSonLaboratory,sonLaboratory) + .eq(InsProduct::getInsFibersId, insFiberS.getId())); + insFibersVO.setIsExistProduct(!fibersProducts.isEmpty());//鏄惁瀛樺湪妫�楠岄」 + if(!fibersProducts.isEmpty()){ + //璁剧疆鍏夌氦甯﹁壊鏍囩殑妫�楠岀姸鎬� + insFibersVO.setState(getInsState(fibersProducts)); + } + //娣诲姞鍏夌氦甯︿俊鎭� + fibers.add(insFibersVO); + for (InsFiber insFiber : fiberList) { + List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getState,1) + .eq(InsProduct::getSonLaboratory,sonLaboratory) + .eq(InsProduct::getInsFiberId, insFiber.getId())); + // 杩囨护鍏夌氦鎺ュご鎹熻�� + if(CollectionUtils.isNotEmpty(insProducts)) { + insProducts = insProducts.stream().filter(item -> !item.getInspectionItem().equals("鍏夌氦鎺ュご鎹熻��")).collect(Collectors.toList()); + } + //璁剧疆鍏夌氦鑹叉爣鐨勬楠岀姸鎬� + insFiber.setState(getInsState(insProducts)); + //濡傛灉鍏夌氦涓嬬殑椤圭洰娌℃湁鍏夌氦鎺ュご鎹熻�楅」鐩紝鎵嶆坊鍔犲厜绾や俊鎭� + if(CollectionUtils.isNotEmpty(insProducts)) { + fiber.add(insFiber); + } + } + } + } + } + //濡傛灉濂楃涓嬫病鏈夊厜绾ゅ甫灏卞彧鏈夊厜绾や簡 + else if (CollectionUtils.isNotEmpty(insFiberList)) { + for (InsFiber insFiber : insFiberList) { + List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getState,1) + .eq(InsProduct::getSonLaboratory,sonLaboratory) + .eq(InsProduct::getInsFiberId, insFiber.getId())); + // 杩囨护鍏夌氦鎺ュご鎹熻�� + if(CollectionUtils.isNotEmpty(insProducts)) { + insProducts = insProducts.stream().filter(item -> !item.getInspectionItem().equals("鍏夌氦鎺ュご鎹熻��")).collect(Collectors.toList()); + } + //璁剧疆鍏夌氦鑹叉爣鐨勬楠岀姸鎬� + insFiber.setState(getInsState(insProducts)); + if(CollectionUtils.isNotEmpty(insProducts)){ + fiber.add(insFiber); + } + } + } + } + map.put("鍏夌氦甯�", fibers); + map.put("鍏夌氦", fiber); + map.put("濂楃", bush); + return map; + } + + /** + * 鍒ゆ柇妫�楠岄」鏄惁妫�娴嬪畬锛岃繑鍥炴娴嬬姸鎬� + * @param insProducts + * @return + */ + private Integer getInsState(List<InsProduct> insProducts){ + List<Integer> collect = insProducts.stream().map(InsProduct::getInsResult) + .filter(sm -> ObjectUtils.isNotEmpty(sm) && sm != 2).collect(Collectors.toList()); + if (insProducts.size() == collect.size()) { + return 1;//宸叉楠� + } else if(!collect.isEmpty() && collect.size()<insProducts.size()){ + return 2;//鍦ㄦ楠� + } + return 0;//鏈楠� + } + + //娓╁害寰幆鏌ョ湅鍒楄〃鏁版嵁(鍖呮嫭閫氳繃鏍峰搧id,寰幆娆℃暟,娓╁害,寰幆娆℃暟杩涜绛涢��) + @Override + public Map<String, Object> temCycle(Integer sampleId, String inspectionItem, String inspectionItemSubclass) { + Map<String, Object> map = new HashMap<>(); + //鏍峰搧淇℃伅 + SampleVo sampleVo = insSampleMapper.getDetailById(sampleId); + map.put("sampleVo", sampleVo); + List<ProductVo> productVos = new ArrayList<>(); + //鍏堟煡鍑鸿繖涓牱鍝佷笅鏈夊摢浜涚鑹叉爣,鍏夌氦甯�,鍏夌氦鑹叉爣 + //鍏堟煡鍑哄绠� + List<InsBushing> insBushings = insBushingMapper.selectList(Wrappers.<InsBushing>lambdaQuery().eq(InsBushing::getInsSampleId, sampleId)); + if (insBushings.size() > 0) { + //閫氫俊--娓╁害寰幆 + for (InsBushing insBushing : insBushings) { + //鍐嶆煡璇㈠嚭鎵�鏈夌殑鍏夌氦甯� + List<InsFibers> insFibers = insFibersMapper.selectList(Wrappers.<InsFibers>lambdaQuery().eq(InsFibers::getInsBushingId, insBushing.getId())); + if (CollectionUtils.isNotEmpty(insFibers)) { + for (InsFibers insFiber : insFibers) { + //鏌ュ嚭鍏夌氦甯︿笅鎵�鏈夌殑鍏夌氦 + List<InsFiber> fiberList = insFiberMapper.selectList(Wrappers.<InsFiber>lambdaQuery().eq(InsFiber::getInsFibersId, insFiber.getId())); + for (InsFiber fiber : fiberList) { + //鍐嶆牴鎹叧鑱旂殑鍏夌氦閰嶇疆鐨刬d鍜屽惊鐜鏁板拰娓╁害鍜屾牱鍝乮d杩涜鏌ヨ妫�楠岄」鐩� + List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getInsSampleId, sampleId) + .eq(InsProduct::getInspectionItem, inspectionItem) + .eq(InsProduct::getInspectionItemSubclass, inspectionItemSubclass) + .eq(InsProduct::getInsFiberId, fiber.getId())); + for (InsProduct insProduct : insProducts) { + InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery() + .eq(InsProductResult::getInsProductId, insProduct.getId())); + ProductVo productVo = new ProductVo(); + productVo.setCode(insFiber.getCode()); + productVo.setColor(fiber.getColor()); + productVo.setBushColor(insBushing.getColor()); + if (ObjectUtils.isNotEmpty(insProductResult)) { + insProduct.setInsProductResult(insProductResult); + } + //姹傚悓绛夋潯浠朵笅1娆″惊鐜�20搴﹀父娓╃殑璁$畻鍊� + InsProductResult insProductResult1 = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getInsSampleId, sampleId) + .eq(InsProduct::getInspectionItem, "1") + .eq(InsProduct::getInspectionItemSubclass, "20鈩�(甯告俯)") + .eq(InsProduct::getInspectionItemClass, insProduct.getInspectionItemClass()) + .eq(InsProduct::getInsFiberId, fiber.getId())).getId())); + if (ObjectUtils.isNotEmpty(insProductResult1) && !insProductResult1.getComValue().equals("[]")) { + String[] splitStr = insProductResult1.getComValue().split(":"); + insProduct.setComplue(splitStr[splitStr.length-1].split("\"")[1]); + } + productVo.setInsProduct(insProduct); + productVos.add(productVo); + } + } + } + } else { + //濡傛灉濂楃涓嬫病鏈夊厜绾ゅ甫灏卞彧鏈夊厜绾や簡 + List<InsFiber> insFiberList = insFiberMapper.selectList(Wrappers.<InsFiber>lambdaQuery().eq(InsFiber::getInsBushingId, insBushing.getId())); + for (InsFiber fiber : insFiberList) { + //鍐嶆牴鎹叧鑱旂殑鍏夌氦閰嶇疆鐨刬d鍜屽惊鐜鏁板拰娓╁害鍜屾牱鍝乮d杩涜鏌ヨ妫�楠岄」鐩� + List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getInsSampleId, sampleId) + .eq(InsProduct::getInspectionItem, inspectionItem) + .eq(InsProduct::getInspectionItemSubclass, inspectionItemSubclass) + .eq(InsProduct::getInsFiberId, fiber.getId())); + for (InsProduct insProduct : insProducts) { + InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insProduct.getId())); + ProductVo productVo = new ProductVo(); + productVo.setCode("-"); + productVo.setColor(fiber.getColor()); + productVo.setBushColor(fiber.getBushColor()); + insProduct.setInsProductResult(insProductResult); + //姹傚悓绛夋潯浠朵笅1娆″惊鐜�20搴﹀父娓╃殑璁$畻鍊� + InsProductResult insProductResult1 = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getInsSampleId, sampleId) + .eq(InsProduct::getInspectionItem, "1") + .eq(InsProduct::getInspectionItemSubclass, "20鈩�(甯告俯)") + .eq(InsProduct::getInspectionItemClass, insProduct.getInspectionItemClass()) + .eq(InsProduct::getInsFiberId, fiber.getId())).getId())); + if (ObjectUtils.isNotEmpty(insProductResult1) && !insProductResult1.getComValue().equals("[]")) { + String[] splitStr = insProductResult1.getComValue().split(":"); + insProduct.setComplue(splitStr[splitStr.length-1].split("\"")[1]); + } + productVo.setInsProduct(insProduct); + productVos.add(productVo); + } + } + } + } + productVos = productVos.stream().sorted(Comparator.comparing(productVo -> productVo.getInsProduct().getInspectionItemClass())).collect(Collectors.toList()); + } else { + //鐢靛姏--鐑惊鐜拰娓╁崌璇曢獙 + List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getInsSampleId, sampleId) + .eq(InsProduct::getInspectionItem, inspectionItem)); + for (InsProduct insProduct : insProducts) { + InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insProduct.getId())); + ProductVo productVo = new ProductVo(); + if (ObjectUtils.isNotEmpty(insProductResult)) { + insProduct.setInsProductResult(insProductResult); + } + productVo.setInsProduct(insProduct); + productVos.add(productVo); + } + } + map.put("productVos", productVos); + return map; + } + + @Override + public List<String> upPlanUser2(Integer orderId) { + List<Integer> sampleId = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId)).stream().map(InsSample::getId).collect(Collectors.toList()); + List<String> sonLaboratory = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getState, 1).in(InsProduct::getInsSampleId, sampleId)).stream().map(InsProduct::getSonLaboratory).distinct().collect(Collectors.toList()); + return sonLaboratory; + } + + @Override + public Map<String, Object> getSagTemperatureProducts(Integer sampleId) { + Map<String, Object> map = new HashMap<>(); + //鏍峰搧淇℃伅 + SampleVo sampleVo = insSampleMapper.getDetailById(sampleId); + map.put("sampleVo", sampleVo); + //鐢靛姏:寮у瀭-娓╁害鐗规畩椤� + List<ProductVo> productVos = new ArrayList<>(); + List<InsProduct> insProducts = insProductMapper.findSagTemperatureProducts(sampleId,"寮у瀭-娓╁害"); + for (InsProduct insProduct : insProducts) { + InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insProduct.getId())); + ProductVo productVo = new ProductVo(); + if (ObjectUtils.isNotEmpty(insProductResult)) { + insProduct.setInsProductResult(insProductResult); + } + productVo.setInsProduct(insProduct); + productVos.add(productVo); + } + map.put("productVos", productVos); + return map; + } + + @Override + public Map<String, Object> getSampleInfoByOrderId(Integer orderId,String sonLaboratory) { + Map<String, Object> map = new HashMap<>(); + if(!Objects.isNull(orderId)){ + //妫�楠屽唴瀹瑰璞� + List<InsProductVO> insProductVOS = insProductMapper.selectProductByOrderId(orderId,sonLaboratory); + //鏍规嵁鏍峰搧id鍒嗙粍 + Map<Integer, List<InsProductVO>> groupMap = insProductVOS.stream().collect(Collectors.groupingBy(InsProductVO::getSampleId)); + List<InsProductVO> sampleList = new ArrayList<>(); + for (Integer key : groupMap.keySet()) { + AtomicInteger insSum = new AtomicInteger(0); + List<String> inspectNameList = new ArrayList<>(); + InsProductVO insProductVO = new InsProductVO(); + groupMap.get(key).forEach(k->{ + if(StringUtils.isNotBlank(k.getInspectName())){ + insSum.getAndIncrement(); + inspectNameList.add(k.getInspectName()); + } + insProductVO.setId(k.getSampleId()); + insProductVO.setSampleCode(k.getSampleCode()); + }); + if(CollectionUtils.isEmpty(inspectNameList)){ + insProductVO.setState(0); + }else if(inspectNameList.size() < groupMap.get(key).size()){ + insProductVO.setState(1); + }else if(inspectNameList.size() == groupMap.get(key).size()){ + insProductVO.setState(2); + } + insProductVO.setInspectName(inspectNameList.stream().distinct().collect(Collectors.joining(","))); + sampleList.add(insProductVO); + } + map.put("insSamples",sampleList); + map.put("insProductVOS",insProductVOS); + } + return map; + } + + @Override + @Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED) + public void saveInsContext(Map<String, Object> insContext, Integer currentTable, Integer currentSampleId, Integer orderId, String sonLaboratory, Boolean isDelete) { + try{ + if(lock.tryLock(10,TimeUnit.SECONDS)){ + Integer userId = SecurityUtils.getUserId().intValue(); + insContext.forEach((k, v) -> { + JSONObject jo = JSON.parseObject(JSON.toJSONString(v)); + InsProduct insProduct = new InsProduct(); + insProduct.setId(Integer.parseInt(k)); + InsProduct product = insProductMapper.selectById(insProduct.getId()); + if (currentTable.equals(product.getTemplateId()) && currentSampleId.equals(product.getInsSampleId())) { + List<InsProductResult> oldResults = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery() + .eq(InsProductResult::getInsProductId, insProduct.getId())); + + InsProductResult newResult = new InsProductResult(); + if (CollectionUtils.isNotEmpty(oldResults)) { + BeanUtil.copyProperties(oldResults.get(0), newResult); + } + newResult.setInsProductId(Integer.parseInt(k)); + /*鏍¢獙涓�涓媟esult琛�*/ + if (oldResults.size() > 1) { + for (int i = 1; i < oldResults.size(); i++) { + insProductResultMapper.deleteById(oldResults.get(i)); + } + } + // 淇濆瓨鐨勬暟鎹皬鏁颁綅鏁板繀椤诲ぇ浜庣瓑浜巘ell鏈�澶х殑灏忔暟浣嶆暟 + String tells = product.getTell(); + Integer digit = null; + if(StringUtils.isEmpty(tells)) { + digit = -1; + }else { + // 鎵惧埌灏忔暟浣嶆暟鏈�澶氱殑鏁板�� + Map<String, Object> stringObjectMap = maxDecimalNumber(tells); + digit = Integer.parseInt(stringObjectMap.get("maxNumber").toString()); + } + if (!Arrays.asList("搴斿姏搴斿彉","鎸姩鐤插姵").contains(product.getInspectionItem())) { + //妫�楠屽�� + if (jo.get("insValue") != null) { + JSONArray jsonArray = JSON.parseArray(JSON.toJSONString(jo.get("insValue"))); + List<Map<String, Object>> iv = new ArrayList<>(); + for (Object o : jsonArray) { + JSONObject insValue = JSON.parseObject(JSON.toJSONString(o)); + Map<String, Object> map = new HashMap<>(); + String val = ""; + if(Objects.nonNull(JSON.parseObject(JSON.toJSONString(insValue.get("v"))).get("v"))){ + val = JSON.parseObject(JSON.toJSONString(insValue.get("v"))).get("v").toString(); + } + // 濡傛灉鍙互杞崲涓烘暟瀛楋紝灏辫杩涜浣嶆暟鐨勬瘮杈� + map.put("v", completion(val, digit)); + map.put("r", JSON.toJSONString(insValue.get("r"))); + map.put("c", JSON.toJSONString(insValue.get("c"))); + map.put("w", insValue.get("w")); + try { + if ((insValue.get("u") == null || insValue.get("u").equals("")) && StrUtil.isNotEmpty(val)) { + map.put("u", userId + ""); + } else { + map.put("u", insValue.get("u")); + } + iv.add(map); + } catch (Exception e) { + } + } + newResult.setInsValue(JSON.toJSONString(iv)); + } + } + if (!Arrays.asList("搴斿姏搴斿彉","鎸姩鐤插姵").contains(product.getInspectionItem())) { + //璁$畻鍊� + if (jo.get("comValue") != null && !Objects.equals(jo.get("comValue"), "")) { + JSONArray jsonArray2 = JSON.parseArray(JSON.toJSONString(jo.get("comValue"))); + List<Map<String, Object>> cv = new ArrayList<>(); + for (Object o : jsonArray2) { + JSONObject comValue = JSON.parseObject(JSON.toJSONString(o)); + Map<String, Object> map = new HashMap<>(); + map.put("r", JSON.toJSONString(comValue.get("r"))); + map.put("c", JSON.toJSONString(comValue.get("c"))); + // 濡傛灉鍙互杞崲涓烘暟瀛楋紝灏辫杩涜浣嶆暟鐨勬瘮杈� + map.put("v", completion(JSON.parseObject(JSON.toJSONString(comValue.get("v"))).get("v").toString(), digit)); + cv.add(map); + } + newResult.setComValue(JSON.toJSONString(cv)); + } + } + //鏈�缁堝�� + try { + JSONObject resValue = JSON.parseObject(JSON.toJSONString(jo.get("resValue"))); + if (resValue.get("v") != null) { + Object o = JSON.parseObject(JSON.toJSONString(resValue.get("v"))).get("v"); + // 濡傛灉鍙互杞崲涓烘暟瀛楋紝灏辫杩涜浣嶆暟鐨勬瘮杈� + insProduct.setLastValue(completion(o.equals("") ? null : (o.toString()), digit)); + } + } catch (Exception e) { + insProduct.setLastValue("");//'' + } + //璁惧缂栧彿 + if (jo.get("equipValue") != null) { + JSONArray jsonArray2 = JSON.parseArray(JSON.toJSONString(jo.get("equipValue"))); + List<Map<String, Object>> ev = new ArrayList<>(); + for (Object o : jsonArray2) { + JSONObject equipValue = JSON.parseObject(JSON.toJSONString(o)); + Map<String, Object> map = new HashMap<>(); + map.put("v", JSON.parseObject(JSON.toJSONString(equipValue.get("v"))).get("v")); + ev.add(map); + } + newResult.setEquipValue(JSON.toJSONString(ev)); + } + //璁惧鍚嶇О + if (jo.get("equipName") != null) { + JSONArray jsonArray2 = JSON.parseArray(JSON.toJSONString(jo.get("equipName"))); + List<Map<String, Object>> ev = new ArrayList<>(); + for (Object o : jsonArray2) { + JSONObject equipValue = JSON.parseObject(JSON.toJSONString(o)); + Map<String, Object> map = new HashMap<>(); + map.put("v", JSON.parseObject(JSON.toJSONString(equipValue.get("v"))).get("v")); + ev.add(map); + } + newResult.setEquipName(JSON.toJSONString(ev)); + } + //缁撹 + try { + JSONObject insResult = JSON.parseObject(JSON.toJSONString(jo.get("insResult"))); + String ir = JSON.parseObject(JSON.toJSONString(insResult.get("v"))).get("v") + ""; + insProduct.setInsResult(Integer.parseInt(ir)); + if (product.getInspectionItem().equals("鐑惊鐜�") || product.getInspectionItem().equals("娓╁崌璇曢獙")) { + List<Integer> collect = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>() + .eq(InsProduct::getSpecialItemParentId, product.getId())).stream() + .map(InsProduct::getInsResult) + .collect(Collectors.toList()); + if (collect.contains(null)) { + insProduct.setInsResult(2); + } else if (collect.contains(0)) { + insProduct.setInsResult(0); + } else { + insProduct.setInsResult(1); + } + + } + } catch (Exception e) { + insProduct.setInsResult(2);//寰呭畾 + if (product.getInspectionItem().equals("搴斿姏搴斿彉") && product.getInspectionItemSubclass().equals("寮规�фā閲�") + && Arrays.asList("/", "-").contains(product.getAsk())) { + insProduct.setInsResult(3);// 涓嶅垽瀹� + } + // 濡傛灉鏄姬鍨傜殑缁撹涔熸敼涓轰笉鍒ゅ畾 + if(product.getInspectionItem().equals("寮у瀭-娓╁害")) { + insProduct.setInsResult(3);// 涓嶅垽瀹� + } + } + if (Objects.isNull(newResult.getId())) { + newResult.setCreateUser(userId); + newResult.setUpdateUser(userId); + insProductResultMapper.insert(newResult); + } else { + newResult.setUpdateUser(userId); + newResult.setUpdateTime(LocalDateTime.now()); + insProductResultMapper.updateById(newResult); + } + /*濡傛灉鏄涓�娆¢�夋嫨璁惧淇℃伅,涓旇繕鏈夊叾浣欐牱鍝佷篃鏈夊悓涓�涓楠岄」鐩�,閭d箞鎵�鏈夋牱鍝佺殑璇ラ」鐩兘鐢ㄨ繖涓澶囦俊鎭�*/ + //鍏堟煡璇㈡槸鍚﹁繕鏈夊叾浣欐牱鍝� + Integer insSampleId = product.getInsSampleId(); + List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, insSampleMapper.selectById(insSampleId).getInsOrderId())); + //濡傛灉鏈夊涓牱鍝佹垨鑰呮槸涓嶆槸閲囬泦绫诲瀷灏卞悓涓�涓澶� + if (insSamples.size() > 1 && !product.getInspectionItemType().equals("1")) { + //瀛樺湪鍏朵綑鏍峰搧,鏌ヨ鏄惁鏈夊悓涓�绉嶆楠岄」鐩� + for (InsSample sample : insSamples.stream().filter(insSample -> !insSample.getId().equals(insSampleId)).collect(Collectors.toList())) { + InsProduct product1 = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getState, 1) + .eq(InsProduct::getInsSampleId, sample.getId()) + .eq(InsProduct::getInspectionItem, product.getInspectionItem()) + .eq(InsProduct::getInspectionItemEn, product.getInspectionItemEn()) + .eq(InsProduct::getInspectionItemSubclass, product.getInspectionItemSubclass()) + .eq(InsProduct::getInspectionItemSubclassEn, product.getInspectionItemSubclassEn()) + .eq(InsProduct::getTemplateId, product.getTemplateId()) + .eq(InsProduct::getStandardMethodListId, product.getStandardMethodListId()) + .eq(InsProduct::getInsBushId, product.getInsBushId()) + .eq(InsProduct::getInsFibersId, product.getInsFibersId()) + .eq(InsProduct::getInsFiberId, product.getInsFiberId()) + ); + if (ObjectUtils.isNotEmpty(product1)) { + //濡傛灉瀛樺湪椤圭洰,鏌ヨ鏄惁鏈夎〃 + InsProductResult productResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery() + .eq(InsProductResult::getInsProductId, product1.getId())); + if (ObjectUtils.isEmpty(productResult)) { + //娌℃湁琛ㄦ柊寤鸿〃 + productResult = new InsProductResult(); + productResult.setInsProductId(product1.getId()); + productResult.setEquipValue(newResult.getEquipValue()); + productResult.setEquipName(newResult.getEquipValue()); + productResult.setCreateUser(userId); + productResult.setUpdateUser(userId); + insProductResultMapper.insert(productResult); + } else if (ObjectUtils.isEmpty(productResult.getEquipValue())) { + //鏈夎〃鍒ゆ柇鏄惁鏈夎澶� + productResult.setEquipValue(newResult.getEquipValue()); + productResult.setEquipName(newResult.getEquipValue()); + productResult.setUpdateUser(userId); + productResult.setUpdateTime(LocalDateTime.now()); + insProductResultMapper.updateById(productResult); + } + } + } + + } + insProduct.setUpdateUser(userId); + insProductMapper.updateById(insProduct); + // 褰撳墠鏍峰搧鏄惁鏄厜绾ら厤缃殑鍏夌氦鎺ュご鎹熻�� + if ((!Objects.isNull(product.getInsFiberId()) || !Objects.isNull(product.getInsFibersId())) && product.getInspectionItem().equals("鍏夌氦鎺ュご鎹熻��")) { + // 鏌ユ壘鍚屾牱鍝佷笅鐨勫厜绾ゆ垨鍏夌氦甯︾殑鍏夌氦鎺ュご鎹熻�� + List<InsProduct> insProducts = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>() + .eq(InsProduct::getInsSampleId, product.getInsSampleId()) + .eq(InsProduct::getInspectionItem, product.getInspectionItem()) + .eq(InsProduct::getInspectionItemSubclass, product.getInspectionItemSubclass()) + .and(item -> item + .isNotNull(InsProduct::getInsFiberId) + .or() + .isNotNull(InsProduct::getInsFibersId))); + // 瑕佸鍒剁殑result + InsProductResult copyResult = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>() + .eq(InsProductResult::getInsProductId, product.getId())); + + for (InsProduct insProduct1 : insProducts) { + InsProduct copyInsProduct = insProductMapper.selectById(product.getId()); // 澶嶅埗鐨刬nsProduct + if (!insProduct1.getId().equals(copyInsProduct.getId())) { + copyInsProduct.setId(insProduct1.getId()); // 灏嗗鍒剁殑insProduct鐨刬d璁剧疆涓鸿澶嶅埗鐨刬d + copyInsProduct.setInsFibersId(insProduct1.getInsFibersId()); // 鍏夌氦甯d + copyInsProduct.setInsFiberId(insProduct1.getInsFiberId()); // 鍏夌氦id + copyInsProduct.setInsBushId(insProduct1.getInsBushId()); // 濂楃id + insProductMapper.updateById(copyInsProduct); + // 璧嬪�糹nsProductResult + InsProductResult insProductResult = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>() + .eq(InsProductResult::getInsProductId, insProduct1.getId())); + if (Objects.isNull(insProductResult)) { + copyResult.setId(null); + copyResult.setInsProductId(insProduct1.getId()); + insProductResultMapper.insert(copyResult); + } else { + copyResult.setId(insProductResult.getId()); + copyResult.setInsProductId(insProduct1.getId()); + insProductResultMapper.updateById(copyResult); + } + } + } + } + insProductUserMapper.insert(new InsProductUser(null, userId, LocalDateTime.now(), insProduct.getId())); + + insProduct = insProductMapper.selectById(insProduct); + //鏌ヨ妫�楠屽崟淇℃伅 + InsSample insSample = insSampleMapper.selectById(insProduct.getInsSampleId()); + InsOrder insOrder = insOrderMapper.selectById(insSample.getInsOrderId()); + //鏌ヨ鐖舵楠岄」 + InsProduct parentInsProduct; + if (ObjectUtil.isNotNull(insProduct.getSpecialItemParentId())) { + parentInsProduct = insProductMapper.selectById(insProduct.getSpecialItemParentId()); + } else { + parentInsProduct = null; + } + if (!Objects.isNull(parentInsProduct)) { + if ("娓╁崌璇曢獙".equals(parentInsProduct.getInspectionItem()) || "鐑惊鐜�".equals(parentInsProduct.getInspectionItem())) { + // 娓╁崌璇曢獙浠ュ強鐑惊鐜殑鍒犻櫎 + if (isDelete) { + String inspectionItem = insProduct.getInspectionItem(); + List<InsProduct> insProducts = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>() + .eq(InsProduct::getSpecialItemParentId, parentInsProduct.getId())) + .stream() + .filter(item -> item.getInspectionItem().equals(inspectionItem)).collect(Collectors.toList()); + for (InsProduct insProduct1 : insProducts) { + InsProductResult insProductResult = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>() + .eq(InsProductResult::getInsProductId, insProduct1.getId())); + if (!Objects.isNull(insProductResult)) { + if (insProductResult.getInsProductId().equals(Integer.parseInt(k))) { + continue; + } + String insValue = insProductResult.getInsValue(); + List<Map> maps = com.alibaba.fastjson2.JSON.parseArray(insValue, Map.class); + if (maps.size() > 1) { + maps.remove(maps.size() - 1); + insProductResult.setInsValue(com.alibaba.fastjson2.JSON.toJSONString(maps)); + insProductResultMapper.updateById(insProductResult); + } + } + } + } + // 娓╁崌璇曢獙浠ュ強鐑惊鐜煡璇� + // 鐑惊鐜墍鏈夊瓙椤� + List<InsProduct> c = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>() + .eq(InsProduct::getSpecialItemParentId, parentInsProduct.getId())); + //閫氳繃inspectionItem鍒嗙粍 + Map<String, List<InsProduct>> collect1 = c.stream().collect(Collectors.groupingBy(InsProduct::getInspectionItem)); + HashMap<Integer, InsProductResult> map1 = new HashMap<>(); + Integer maxKey = Integer.MIN_VALUE; + for (Map.Entry<String, List<InsProduct>> m : collect1.entrySet()) { + List<InsProduct> thermalCycleCollect = m.getValue(); + if (!thermalCycleCollect.isEmpty()) { + for (InsProduct product1 : thermalCycleCollect) { + InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery() + .eq(InsProductResult::getInsProductId, product1.getId())); + if (!Objects.isNull(insProductResult)) { + List<Map> maps = com.alibaba.fastjson2.JSON.parseArray(insProductResult.getInsValue(), Map.class); + map1.put(maps.size(), insProductResult); + } + if (!map1.isEmpty()) { + for (Map.Entry<Integer, InsProductResult> entry : map1.entrySet()) { + if (entry.getKey() > maxKey) { + maxKey = entry.getKey(); + } + } + } + } + if (maxKey != Integer.MIN_VALUE) { + InsProductResult insProductResult = map1.get(maxKey); + List<Map> maps = com.alibaba.fastjson2.JSON.parseArray(insProductResult.getInsValue(), Map.class); + maps.get(maps.size() - 1).put("v", "");//鏈�鍚庝竴涓�间负绌� + if (maps.get(maps.size() - 1).containsKey("w")) { + maps.get(maps.size() - 1).put("w", ""); + } + for (InsProduct product1 : thermalCycleCollect) { + InsProductResult insProductResult1 = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery() + .eq(InsProductResult::getInsProductId, product1.getId())); + if (!Objects.isNull(insProductResult1)) { + if (!insProductResult1.getInsProductId().equals(insProductResult.getInsProductId())) { + List<Map> maps1 = com.alibaba.fastjson2.JSON.parseArray(insProductResult1.getInsValue(), Map.class); + if (maps1.size() < maxKey) { + int number = maxKey - maps1.size(); + for (int i = 0; i < number; i++) { + maps1.add(maps.get(maps.size() - 1)); + } + insProductResult1.setInsValue(com.alibaba.fastjson2.JSON.toJSONString(maps1)); + insProductResultMapper.updateById(insProductResult1); + } + } + } else { + if (maxKey != Integer.MIN_VALUE) { + InsProductResult insProductResult2 = map1.get(maxKey); + List<Map> maps1 = com.alibaba.fastjson2.JSON.parseArray(insProductResult2.getInsValue(), Map.class); + for (Map map : maps1) { + map.put("v", ""); + if (map.containsKey("w")) { + map.put("w", ""); + } + } + insProductResult2.setInsValue(com.alibaba.fastjson2.JSON.toJSONString(maps1)); + insProductResult2.setId(null); + insProductResult2.setInsProductId(product1.getId()); + insProductResultMapper.insert(insProductResult2); + } + } + } + maxKey = Integer.MIN_VALUE; + map1.clear(); + } + } + } + // 濡傛灉鏄绾挎俯搴︾殑鍊兼洿鏂帮紝閭d箞灏辫鍒ゆ柇鑰愬紶鍜屾帴缁槸鍚﹀悎鏍� + InsProduct insProduct1 = insProductMapper.selectById(Integer.parseInt(k)); + if (insProduct1.getInspectionItemSubclass().equals("瀵肩嚎娓╁害")) { + // 鏍规嵁鐖秈d浠ュ強妫�楠岄」鏉ユ煡鎵惧悓涓�寰幆涓嬬殑鑰愬紶鍜屾帴缁� + List<InsProduct> insProducts2 = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>() + .eq(InsProduct::getSpecialItemParentId, parentInsProduct.getId()) + .eq(InsProduct::getInspectionItem, insProduct1.getInspectionItem())); + List<Double> wire = new ArrayList<>(); // 瀵肩嚎娓╁害鐨勫�� + List<Double> strain = new ArrayList<>(); // 鑰愬紶鐨勫�� + List<Double> joint = new ArrayList<>(); // 鎺ョ画鐨勫�� + + boolean strainFlag = true; // 鑰愬紶鏄惁鍚堟牸 + boolean jointFlag = true; // 鎺ョ画鏄惁鍚堟牸 + boolean strainPending = false; // 鏄惁鏈夊緟瀹� + boolean jointPending = false; // 鏄惁鏈夊緟瀹� + for (InsProduct insProduct2 : insProducts2) { + if (insProduct2.getInspectionItemSubclass().equals("瀵肩嚎娓╁害")) { + String insValue = ""; + InsProductResult insProductResult = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>() + .eq(InsProductResult::getInsProductId, insProduct2.getId())); + if (!Objects.isNull(insProductResult)) { + insValue = insProductResult.getInsValue(); + List<Map> maps = com.alibaba.fastjson2.JSON.parseArray(insValue, Map.class); + if (maps.size() > 0) { + for (Map map : maps) { + if (Strings.isNotEmpty(map.get("v").toString())) { + wire.add(Double.parseDouble(map.get("v").toString())); + } else { + wire.add(-1.0); + } + } + } + } + } + if (insProduct2.getInspectionItemSubclass().equals("鑰愬紶娓╁害")) { + String insValue = ""; + InsProductResult insProductResult = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>() + .eq(InsProductResult::getInsProductId, insProduct2.getId())); + if (!Objects.isNull(insProductResult)) { + insValue = insProductResult.getInsValue(); + List<Map> maps = com.alibaba.fastjson2.JSON.parseArray(insValue, Map.class); + if (maps.size() > 0) { + for (Map map : maps) { + if (Strings.isNotEmpty(map.get("v").toString())) { + strain.add(Double.parseDouble(map.get("v").toString())); + } else { + strain.add(-1.0); + } + } + } + } else { + strain.add(-1.0); + } + } + if (insProduct2.getInspectionItemSubclass().equals("鎺ョ画娓╁害")) { + String insValue = ""; + InsProductResult insProductResult = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>() + .eq(InsProductResult::getInsProductId, insProduct2.getId())); + if (!Objects.isNull(insProductResult)) { + insValue = insProductResult.getInsValue(); + List<Map> maps = com.alibaba.fastjson2.JSON.parseArray(insValue, Map.class); + if (maps.size() > 0) { + for (Map map : maps) { + if (Strings.isNotEmpty(map.get("v").toString())) { + joint.add(Double.parseDouble(map.get("v").toString())); + } else { + joint.add(-1.0); + } + } + } + } else { + joint.add(-1.0); + } + } + } + // 濡傛灉瀵肩嚎娓╁害鐨勫�煎ぇ浜庤�愬紶鍜屾帴缁殑鍊硷紝閭d箞灏辨槸鍚堟牸 + if (!strain.isEmpty() && !wire.isEmpty() && (strain.size() == wire.size())) { + if (wire.contains(-1.0) || strain.contains(-1.0)) { + insProductMapper.update(null, new LambdaUpdateWrapper<InsProduct>() + .set(InsProduct::getInsResult, 2) + .eq(InsProduct::getSpecialItemParentId, parentInsProduct.getId()) + .eq(InsProduct::getInspectionItem, insProduct1.getInspectionItem()) + .eq(InsProduct::getInspectionItemSubclass, "鑰愬紶娓╁害")); + strainPending = true; + } else { + for (int i = 0; i < wire.size(); i++) { + if (wire.get(i) <= strain.get(i)) { + strainFlag = false; + break; + } + } + } + } + + if (joint.size() > 0 && wire.size() > 0 && (joint.size() == wire.size())) { + if (wire.contains(-1.0) || joint.contains(-1.0)) { + insProductMapper.update(null, new LambdaUpdateWrapper<InsProduct>() + .set(InsProduct::getInsResult, 2) + .eq(InsProduct::getSpecialItemParentId, parentInsProduct.getId()) + .eq(InsProduct::getInspectionItem, insProduct1.getInspectionItem()) + .eq(InsProduct::getInspectionItemSubclass, "鎺ョ画娓╁害")); + jointPending = true; + } else { + for (int i = 0; i < wire.size(); i++) { + if (wire.get(i) <= joint.get(i)) { + jointFlag = false; + break; + } + } + } + } + if (!strainPending) { + if (strainFlag) { + insProductMapper.update(null, new LambdaUpdateWrapper<InsProduct>() + .set(InsProduct::getInsResult, 1) + .eq(InsProduct::getSpecialItemParentId, parentInsProduct.getId()) + .eq(InsProduct::getInspectionItem, insProduct1.getInspectionItem()) + .eq(InsProduct::getInspectionItemSubclass, "鑰愬紶娓╁害")); + } else { + insProductMapper.update(null, new LambdaUpdateWrapper<InsProduct>() + .set(InsProduct::getInsResult, 0) + .eq(InsProduct::getSpecialItemParentId, parentInsProduct.getId()) + .eq(InsProduct::getInspectionItem, insProduct1.getInspectionItem()) + .eq(InsProduct::getInspectionItemSubclass, "鑰愬紶娓╁害")); + } + } + if (!jointPending) { + if (jointFlag) { + insProductMapper.update(null, new LambdaUpdateWrapper<InsProduct>() + .set(InsProduct::getInsResult, 1) + .eq(InsProduct::getSpecialItemParentId, parentInsProduct.getId()) + .eq(InsProduct::getInspectionItem, insProduct1.getInspectionItem()) + .eq(InsProduct::getInspectionItemSubclass, "鎺ョ画娓╁害")); + } else { + insProductMapper.update(null, new LambdaUpdateWrapper<InsProduct>() + .set(InsProduct::getInsResult, 0) + .eq(InsProduct::getSpecialItemParentId, parentInsProduct.getId()) + .eq(InsProduct::getInspectionItem, insProduct1.getInspectionItem()) + .eq(InsProduct::getInspectionItemSubclass, "鎺ョ画娓╁害")); + } + } + } + // 鏌ユ壘鏄惁鏈夋湭妫�娴嬬殑娆℃暟 + List<Integer> insResult = Arrays.asList(0, 1, 3); + List<InsProduct> insProducts = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>() + .eq(InsProduct::getSpecialItemParentId, parentInsProduct.getId()) + .and(w -> w.notIn(InsProduct::getInsResult, insResult) + .or() + .isNull(InsProduct::getInsResult))); + if (insProducts.isEmpty()) { + List<InsProduct> insProducts1 = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>() + .eq(InsProduct::getSpecialItemParentId, parentInsProduct.getId()) + .eq(InsProduct::getInsResult, 0)); + if (!insProducts1.isEmpty()) { + insProductMapper.update(null, new LambdaUpdateWrapper<InsProduct>() + .set(InsProduct::getInsResult, 0) + .eq(InsProduct::getId, parentInsProduct.getId())); + } else { + insProductMapper.update(null, new LambdaUpdateWrapper<InsProduct>() + .set(InsProduct::getInsResult, 1) + .eq(InsProduct::getId, parentInsProduct.getId())); + } + + } + } + } + //娣诲姞宸ユ椂璁板綍 + InsProduct finalInsProduct = insProduct; + WorkTimeDTO workTimeDTO = new WorkTimeDTO(userId, insOrder, insSample, finalInsProduct, parentInsProduct, currentSampleId, k, oldResults, newResult); + String jsonStr; + try { + jsonStr = JackSonUtil.marshal(workTimeDTO); + } catch (Exception e) { + throw new RuntimeException(e); + } + String routerKey; + switch (sonLaboratory){ + case "鏉愭枡璇曢獙瀹�": + routerKey = RouterKeyConstants.CL_KEY; + break; + case "鏈烘鎬ц兘璇曢獙瀹�": + routerKey = RouterKeyConstants.JX_KEY; + break; + case "鐢靛姏璇曢獙瀹�": + routerKey = RouterKeyConstants.DL_KEY; + break; + default: + routerKey = RouterKeyConstants.GX_KEY; + break; + } + sendQueueMessage(ExchangeConstants.WORK_TIME_EXCHANGE,routerKey,jsonStr); + + insSample.setInsState(1); + //鏈楠岀殑妫�楠岄」鏁伴噺 + Long unInsCount = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getInsSampleId, insSample.getId()) + .and(wrapper -> wrapper + .isNull(InsProduct::getInsResult) + .or() + .eq(InsProduct::getInsResult, 2) + )); + if (0 == unInsCount) { + insSample.setInsState(2); + } + insSampleMapper.updateById(insSample); + /*鏍¢獙涓�涓媟esult琛�*/ + List<InsProductResult> insProductResults = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery() + .eq(InsProductResult::getInsProductId, insProduct.getId())); + if (insProductResults.size() > 1) { + for (int i = 1; i < insProductResults.size(); i++) { + insProductResultMapper.deleteById(insProductResults.get(i)); + } + } + } + }); + String sampleIdStr = insContext.keySet().stream().findFirst().orElse(null); + if (sampleIdStr != null) { + int count = insProductMapper.selectInsProductCountByOrderId(orderId); + if (count == 0) { + insOrderStateMapper.update(new InsOrderState(), Wrappers.<InsOrderState>lambdaUpdate() + .eq(InsOrderState::getInsOrderId, orderId) + .eq(InsOrderState::getLaboratory, sonLaboratory) + .set(InsOrderState::getInsState, 2)); + insOrderMapper.update(null, new LambdaUpdateWrapper<InsOrder>() + .set(InsOrder::getState, 4) + .eq(InsOrder::getId, orderId)); + } else { + insOrderStateMapper.update(new InsOrderState(), Wrappers.<InsOrderState>lambdaUpdate() + .eq(InsOrderState::getInsOrderId, orderId) + .eq(InsOrderState::getLaboratory, sonLaboratory) + .set(InsOrderState::getInsState, 1)); + insOrderMapper.update(null, new LambdaUpdateWrapper<InsOrder>() + .set(InsOrder::getInsState, 1) + .eq(InsOrder::getId, orderId)); + } + } + } + }catch (Exception e){ + log.error("宸ユ椂璁$畻澶辫触-->褰撳墠鏍峰搧ID:{},妫�楠岃鎯�:{}",currentSampleId,insContext); + throw new RuntimeException(e); + }finally { + if(lock.isLocked())lock.unlock(); + } + } + + + /** + * 鏌ユ壘灏忔暟浣嶆暟鏈�澶氱殑鏁板�� + */ + public Map<String,Object> maxDecimalNumber(String tells) { + HashMap<String, Object> map = new HashMap<>(); + Pattern pattern = Pattern.compile("[-+]?\\d*\\.?\\d+"); + Matcher matcher = pattern.matcher(tells); + String tell = ""; + Integer maxNumber = 0; + while (matcher.find()) { + String group = matcher.group(); + Integer length = 0; + if(group.contains(".")) { + length = group.split("\\.")[1].length(); + }else { + length = 0; + } + if(length > maxNumber) { + maxNumber = length; + tell = group; + } + } + map.put("tell",tell); + map.put("maxNumber",maxNumber); + return map; + } + + /** + * 灏忔暟浣嶆暟鐨勮ˉ鍏� + */ + public String completion(String value, Integer digit) { + if(NumberUtil.isDouble(value)) { + int length = 0; + String[] splits = value.split("\\."); + if(splits.length>1){ + length = splits[1].length(); + } + if(digit > length) { + int difference = digit - length; + for (int i = 0; i < difference; i++) { + value += "0"; + } + } + } + return value; + } + + //浜ゆ帴 + @Override + public int upPlanUser(Integer userId, Integer orderId, String sonLaboratory) { + InsSampleUser insSampleUser = new InsSampleUser(); + insSampleUser.setUserId(userId); + insSampleUser.setInsSampleId(orderId); + insSampleUser.setState(0); + insSampleUser.setSonLaboratory(sonLaboratory); + return insSampleUserMapper.insert(insSampleUser); + } + + //鏍规嵁鍗曞厓鏍肩殑鏂囨湰鍐呭璁$畻瀹為檯琛岄珮 + private int estimateCellHeight(CellRenderData cellRenderData) { + // 鍋囪榛樿琛岄珮鏄�40 + int defaultHeight = 40; + // 鑾峰彇鍗曞厓鏍间腑鐨勬墍鏈夋钀� + List<ParagraphRenderData> paragraphs = cellRenderData.getParagraphs(); + int estimatedHeight = 0; + try { + // 閬嶅巻娈佃惤锛屼及绠楁瘡涓钀界殑楂樺害 + for (ParagraphRenderData paragraph : paragraphs) { + List<RenderData> contents = paragraph.getContents(); + for (RenderData content : contents) { + if (content instanceof TextRenderData) { + TextRenderData text = (TextRenderData) content; + Style style = text.getStyle(); + // 鍋囪姣忚鏂囨湰鐨勯珮搴︿负瀛椾綋澶у皬鐨�1.2鍊� + Double fontSize = Objects.isNull(style.getFontSize()) ? 12.0 : style.getFontSize(); + int lines = (int) Math.ceil(text.getText().length() / 15.0); // 鍋囪姣忚绾�15涓瓧绗� + int textHeight = (int) (fontSize * 1.2 * lines); + // 绱姞娈佃惤鐨勯珮搴� + estimatedHeight += textHeight; + } + } + } + }catch (Exception ignored){} + // 杩斿洖鏈�澶у�硷紝纭繚楂樺害涓嶄綆浜庨粯璁ら珮搴� + return Math.max(estimatedHeight, defaultHeight); + } + + /** + * 鍙戦�侀槦鍒楁秷鎭� + * @param exchange 浜ゆ崲鏈哄悕绉� + * @param routerKey 璺敱涓婚敭 + * @param jsonStr 娑堟伅鍐呭 + */ + public void sendQueueMessage(String exchange,String routerKey,String jsonStr){ + rabbitTemplate.convertAndSend(exchange,routerKey,jsonStr); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public int verifyPlan(Integer orderId, String laboratory, Integer type, String tell) { + int num = (type == 1 ? 5 : 4); + LocalDateTime now = LocalDateTime.now(); + insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate().eq(InsOrderState::getInsOrderId, orderId).eq(InsOrderState::getLaboratory, laboratory).set(InsOrderState::getInsTime, now).set(InsOrderState::getInsState, num).set(InsOrderState::getVerifyTell, tell).set(InsOrderState::getVerifyUser, SecurityUtils.getUserId())); + Long count = insOrderStateMapper.selectCount(Wrappers.<InsOrderState>lambdaQuery().eq(InsOrderState::getInsOrderId, orderId).ne(InsOrderState::getInsState, 5)); + if (count == 0 && num == 5) { + List<InsUnPass> insUnPasses = new ArrayList<>(); + /*鏍峰搧涓嬬殑椤圭洰鍙鏈変竴涓」鐩笉鍚堟牸鍒欐楠岀粨鏋滀负0,鍚﹀垯涓�1*/ + //杩欓噷鐨刬nsSamples鏄鍗曚笅鐨勬墍鏈夋牱鍝佸寘鎷�("/") + List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId)); + for (InsSample insSample : insSamples) { + List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getInsSampleId, insSample.getId()).eq(InsProduct::getState, 1)); + List<Integer> results = insProducts.stream().map(InsProduct::getInsResult).filter(Objects::nonNull).collect(Collectors.toList()); + if (results.contains(0)) { + insSample.setInsResult(0); + } else { + insSample.setInsResult(1); + } + insSampleMapper.updateById(insSample); + /*澶嶆牳閫氳繃鍚庯紝灏嗕笉鍚堟牸鐨勯」鐩俊鎭坊鍔犲埌ins_un_pass琛ㄤ腑*/ + for (InsProduct insProduct : insProducts) { + if (insProduct.getInsResult() == 0) { + InsUnPass insUnPass = new InsUnPass(); + insUnPass.setId(null); + insUnPass.setModel(insSample.getModel()); + insUnPass.setSample(insSample.getSample()); + insUnPass.setInspectionItem(insProduct.getInspectionItem()); + insUnPass.setInspectionItemSubclass(insProduct.getInspectionItemSubclass()); + insUnPass.setLastValue(insProduct.getLastValue()); + insUnPass.setEntrustCode(insOrderMapper.selectById(orderId).getEntrustCode()); + List<Integer> userIds = insProductUserMapper.selectList(Wrappers.<InsProductUser>lambdaQuery().eq(InsProductUser::getInsProductId, insProduct.getId())).stream().map(InsProductUser::getCreateUser).distinct().collect(Collectors.toList()); + if(!userIds.isEmpty()){ + String name = userMapper.selectBatchIds(userIds).stream().map(User::getName).collect(Collectors.joining(",")); + insUnPass.setName(name); + insUnPasses.add(insUnPass); + } + } + } + } + insUnPassService.saveBatch(insUnPasses); + InsOrder insOrder = insOrderMapper.selectById(orderId); + String oldSampleStr = insOrder.getSample(); + //samples鏄繃婊ゆ帀娌℃湁妫�楠岄」鐩殑鏍峰搧 + List<SampleProductDto> samples = insSampleMapper.selectSampleProductListByOrderId(orderId); + //鏌ヨ璁㈠崟涓嬬殑鍘婚噸鍚庣殑鏍峰搧鍚嶇О + List<String> unqeSampleList = samples.stream().map(InsSample::getSample).distinct().collect(Collectors.toList()); + if(unqeSampleList.size()==1){ + insOrder.setSample(unqeSampleList.get(0)); + } + InsReport insReport = new InsReport(); + insReport.setCode(insOrder.getEntrustCode()); + insReport.setInsOrderId(orderId); + List<Map<String, Object>> tables = new ArrayList<>(); + Set<String> standardMethod = new HashSet<>(); + Set<String> deviceSet = new HashSet<>(); + Set<String> models = new HashSet<>(); + AtomicReference<Integer> productSize = new AtomicReference<>(0); + String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; + Set<String> resultCh = new HashSet<>(); + Set<String> resultEn = new HashSet<>(); + //鑾峰彇妫�楠岄」鐩暟閲� + Set<String> unEqualSet = new HashSet<>(); + //鐢靛姏璇曢獙瀹わ細閽㈡潗/閾濇潗鏍峰搧鍨嬪彿 + List<String> modelDl = new ArrayList<>(); + /*鍩虹鎶ュ憡(鏍规嵁缁樺埗鐨勫師濮嬭褰曟ā鐗堝舰鎴�)*/ + BasicReportHandler basicReportHandler = new BasicReportHandler(baseMapper, this,insSampleMapper); + basicReportHandler.doWrite(samples,insReport,tables,standardMethod,models,unEqualSet,modelDl,deviceSet); + productSize.getAndSet(unEqualSet.size()); + String sampleStr = insOrder.getSample(); + if(!modelDl.isEmpty()){ + String model = modelDl.stream().distinct().findFirst().orElse(""); + sampleStr += model; + } + /*鍏夌氦鎺ュご鎹熻�楃殑鎶ュ憡鏍峰紡*/ + //鏌ヨ璁㈠崟涓嬫墍鏈夋牱鍝佺殑妫�楠岄」鐩�,濡傛灉鏈夊厜绾ゆ帴澶存崯鑰楀垯閲嶆柊鏋勫缓琛ㄦ牸 + List<Map<String, Object>> tables4 = new ArrayList<>(); + //褰撳墠璁㈠崟涓嬬殑鎵�鏈夋楠岄」 + List<InsProduct> insProducts0 = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getState, 1) + .in(InsProduct::getInsSampleId, insSamples.stream().map(InsSample::getId).distinct().collect(Collectors.toList()))); + if (insProducts0.stream().map(InsProduct::getInspectionItem).collect(Collectors.toList()).contains("鍏夌氦鎺ュご鎹熻��")){ + //澶勭悊鍏夌氦鎺ュご鎹熻�楁姤鍛� + FiberOpticConnectorLossReportHandler lossReportHandler = new FiberOpticConnectorLossReportHandler(insProductMapper); + lossReportHandler.doWrite(insProducts0,insSamples,insReport,tables4); + } + String url; + try { + InputStream inputStream = this.getClass().getResourceAsStream("/static/report-template.docx"); + File file = File.createTempFile("temp", ".tmp"); + OutputStream outputStream = new FileOutputStream(file); + IOUtils.copy(inputStream, outputStream); + url = file.getAbsolutePath(); + } catch (FileNotFoundException e) { + throw new ErrorException("鎵句笉鍒版ā鏉挎枃浠�"); + } catch (IOException e) { + throw new RuntimeException(e); + } + StringBuilder standardMethod2 = new StringBuilder(); + for (String s : standardMethod) { + standardMethod2.append("銆�").append(s); + } + standardMethod2.replace(0, 1, ""); + tables.forEach(table -> { + table.put("tableSize", tables.size() + 1); + }); + List<DeviceVO> deviceList = new ArrayList<>(); + if (!deviceSet.isEmpty()) { + deviceSet.forEach(d->deviceList.add(insOrderMapper.selectDeviceList(d))); + } + Map<String, String> codeStr = new HashMap<>(); + codeStr.put("鎶ュ憡缂栧彿", insReport.getCode()); + codeStr.put("鏍峰搧鍚嶇О", insOrder.getSample()); + codeStr.put("瑙勬牸鍨嬪彿", samples.get(0).getModel()); + codeStr.put("鍙戞斁鏃ユ湡", now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); + String codePath; + try { + String content = phoneQrCode+ insOrder.getEntrustCode() + "&type=word"; + codePath = new MatrixToImageWriter().code(content, twoCode); + } catch (Exception e) { + throw new RuntimeException(e); + } + String modelStr = ""; + for (String model : models) { + modelStr += "," + model; + } + String finalModelStr = modelStr; + String sampleEn = insSampleMapper.getSampleEn(insOrder.getSample()); + insOrder.setSample(sampleStr); + String orderType = insOrderMapper.getEnumLabelByValue(insOrder.getOrderType()); + String formType = insOrderMapper.getEnumLabelByValue(insOrder.getFormType()); + ConfigureBuilder builder = Configure.builder(); + builder.useSpringEL(true); + List<DeviceVO> finalDeviceList = deviceList; + Integer userId = insSampleUserMapper.selectOne(Wrappers.<InsSampleUser>lambdaQuery() + .eq(InsSampleUser::getInsSampleId, orderId) + .eq(InsSampleUser::getState,0) + .orderByDesc(InsSampleUser::getCreateTime) + .last("limit 1")).getUserId(); + String signatureUrl; + try { + signatureUrl = userMapper.selectById(userId).getSignatureUrl(); + } catch (Exception e) { + throw new ErrorException("鎵句笉鍒版楠屼汉鐨勭鍚�"); + } + if (ObjectUtils.isEmpty(signatureUrl) || signatureUrl.isEmpty()) { + throw new ErrorException("鎵句笉鍒版楠屼汉鐨勭鍚�"); + } + //濡傛灉鏄腑澶╃鎶�杞井缂嗗巶(02)锛屾姤鍛婂睍绀哄鎵樺崟浣嶄负涓ぉ绉戞妧鍏夌紗鎬诲巶(01) + Custom custom = customMapper.selectById(insOrder.getCompanyId()); + if(!Objects.isNull(custom) && Objects.equals("涓ぉ绉戞妧杞井缂嗗巶",custom.getCompany())){ + //涓ぉ绉戞妧鍏夌紗鎬诲巶瀹㈡埛淇℃伅 + custom = customMapper.selectOne(Wrappers.<Custom>lambdaQuery() + .eq(Custom::getCompany,"涓ぉ绉戞妧鍏夌紗鎬诲巶") + .eq(Custom::getCode2,"01").last("limit 1")); + } + //鍚堟牸鏁伴噺 + long qualifiedCount = insProducts0.stream().filter(f->f.getInsResult()==1).count(); + //鏍煎紡鍖栦笉鍚堟牸椤圭洰 + joinUnqualifiedItemChars(resultCh,resultEn,insProducts0); + String resultChStr = "渚濇嵁濮旀墭瑕佹眰锛屾墍妫�椤圭洰鍧囩鍚堣姹傘��"; + String resultEnStr = "According to commissioned requirements, all the tested items meet the requirements."; + if (!resultCh.isEmpty() && qualifiedCount>0) { + resultChStr = "渚濇嵁濮旀墭瑕佹眰锛�" + String.join("銆�",resultCh) + "鎵�妫�椤圭洰涓嶇鍚堣姹傦紝鍏朵綑鎵�妫�椤圭洰鍧囩鍚堣姹傘��"; + resultEnStr = "According to commissioned requirements," + String.join("銆�",resultEn) + " these inspected items do not meet the requirements, all other inspected items meet the requirements."; + }else if(!resultCh.isEmpty() && qualifiedCount==0){ + resultChStr = "渚濇嵁濮旀墭瑕佹眰锛屾墍妫�椤圭洰鍧囦笉绗﹀悎瑕佹眰銆�"; + resultEnStr = "According to commissioned requirements, all the tested items do not meet the requirements."; + } + + //鍏夌氦闄勪欢琛ㄦ牸鏁版嵁 + List<Map<String, Object>> tables2 = new ArrayList<>(); + //鏉惧绠¢檮浠惰〃鏍兼暟鎹� + List<Map<String, Object>> tables5 = new ArrayList<>(); + //灏哄鍙傛暟闄勪欢琛ㄦ牸鏁版嵁 + List<Map<String, Object>> tables6 = new ArrayList<>(); + /*鍏夌氦閰嶇疆鐨勬楠屾姤鍛�*/ + //鍏堝垽鏂槸鍚︽湁鍏夌氦閰嶇疆 + List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getState, 1) + .in(InsProduct::getInsSampleId, insSamples.stream().map(InsSample::getId).distinct().collect(Collectors.toList())) + .and(i->i.isNull(InsProduct::getInspectionItemClass).or().eq(InsProduct::getInspectionItemClass,"")) + );//鐢ㄦ楠屽垎椤瑰瓧娈靛尯鍒厜绾ら厤缃笌娓╁害寰幆 + //鏌ヨ鍏ㄨ壊璋憋紝杩囨护鑹叉爣骞舵帓搴� + List<String> colorList = DictUtils.getDictCache("鑹叉爣").stream() + .sorted(Comparator.comparing(SysDictData::getDictSort)) + .map(SysDictData::getDictValue) + .collect(Collectors.toList()); + //鏉惧绠¢檮浠跺鐞� + long piperCount = insProducts.stream().filter(f->!Objects.isNull(f.getInsBushId())).count(); + if(piperCount>0){ + PiperConfigReportHandler piperConfigReportHandler = new PiperConfigReportHandler(insProductMapper); + piperConfigReportHandler.doWrite(samples,insReport,tables5,colorList); + } + //杩囨护鏈夊厜绾ら厤缃殑椤圭洰 + long fiberCount = insProducts.stream().filter(f->!Objects.isNull(f.getInsFiberId())).count(); + FiberConfigReportHandler lossReportHandler = new FiberConfigReportHandler(insProductMapper,insSampleMapper); + if (fiberCount>0) { + lossReportHandler.doWrite(samples,insReport,tables2,colorList); + } else{ + //鎺掗櫎鍏夌氦鎺ュご鎹熻�楀拰灏哄鍙傛暟 + List<InsProduct> filterLists = insProducts.stream() + .filter(f->!Arrays.asList("鍏夌氦鎺ュご鎹熻��","灏哄鍙傛暟","娓╁害寰幆").contains(f.getInspectionItem())&&f.getSonLaboratory().equals("鍏夌氦璇曢獙瀹�")).collect(Collectors.toList()); + lossReportHandler.writeFiberEnclosureTableRow(filterLists,tables2,insReport); + } + //杩囨护鏈夊厜绾ゅ甫閰嶇疆鐨勯」鐩� + long fibersCount = insProducts.stream().filter(f->!Objects.isNull(f.getInsFibersId())).count(); + FiberOpticRibbonReportHandler fiberOpticRibbonReportHandler = new FiberOpticRibbonReportHandler(insProductMapper,insSampleMapper); + if (fibersCount>0) { + fiberOpticRibbonReportHandler.doWrite(samples,insReport,tables6,colorList); + } else{ + //杩囨护灏哄鍙傛暟椤圭洰 + List<InsProductFiberVO> productList = new ArrayList<>(); + insSamples.stream() + .map(InsSample::getId).distinct() + .forEach(id->productList.addAll(insProductMapper.selectProductBySampleId(id))); + List<InsProductFiberVO> vos = productList.stream().filter(f->f.getInspectionItem().equals("灏哄鍙傛暟")).collect(Collectors.toList()); + if(!vos.isEmpty()){ + fiberOpticRibbonReportHandler.writeFiberOpticRibbonEnclosureTableRow(vos,tables6,insReport); + } + } + tables2.forEach(table2 -> table2.put("tableSize2", tables2.size())); + tables5.forEach(table5 -> table5.put("tableSize5", tables5.size())); + tables6.forEach(table6 -> table6.put("tableSize6", tables6.size())); + + /*娓╁害寰幆鐨勬楠屾姤鍛�*/ + //鍏堝垽鏂槸鍚︽湁娓╁害寰幆 + List<InsProduct> insProducts3 = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getState, 1) + .in(InsProduct::getInsSampleId, insSamples.stream().map(InsSample::getId).distinct().collect(Collectors.toList())) + .isNotNull(InsProduct::getSpecialItemParentId) //鍖哄垎甯歌椤圭洰 + .isNotNull(InsProduct::getInspectionItemClass)//鐢ㄦ楠屽垎椤瑰瓧娈靛尯鍒厜绾ら厤缃笌娓╁害寰幆 + .isNotNull(InsProduct::getInsFiberId)); //鐢ㄥ厜绾ゅ尯鍒儹寰幆鍜屾俯搴﹀惊鐜� + List<Map<String, Object>> tables3 = new ArrayList<>(); + if (!insProducts3.isEmpty()) { + //澶勭悊娓╁害寰幆鎶ュ憡 + TemperatureCyclingReportHandler1 cyclingReportHandler = new TemperatureCyclingReportHandler1(insProductMapper, insFiberMapper, insProductResultMapper); + cyclingReportHandler.doWrite(samples,insReport,tables3); + } + + /*娓╁崌璇曢獙鐨勬楠屾姤鍛�*/ + List<InsProduct> insProducts1 = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getState, 1) + .in(InsProduct::getInsSampleId, insSamples.stream().map(InsSample::getId).distinct().collect(Collectors.toList())) + .isNotNull(InsProduct::getSpecialItemParentId) //鍖哄垎甯歌椤圭洰 + .isNull(InsProduct::getInspectionItemClass)//鐢ㄦ楠屽垎椤瑰瓧娈靛尯鍒俯鍗囪瘯楠屼笌鐑惊鐜� + .isNull(InsProduct::getInsFiberId) //鐢ㄥ厜绾ゅ尯鍒俯鍗囪瘯楠屽拰娓╁害寰幆 + .eq(InsProduct::getInspectionItem, "1")); //娓╁崌璇曢獙鐨勫惊鐜彧鏈�1娆� + if (!insProducts1.isEmpty()) { + //澶勭悊娓╁崌璇曢獙鎶ュ憡 + TemperatureTestReportHandler testReportHandler = new TemperatureTestReportHandler(insProductMapper, insProductResultMapper); + testReportHandler.doWrite(samples,insReport,tables3); + } + + /*鐑惊鐜殑妫�楠屾姤鍛�*/ + List<InsProduct> insProducts2 = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getState, 1) + .in(InsProduct::getInsSampleId, insSamples.stream().map(InsSample::getId).distinct().collect(Collectors.toList())) + .isNotNull(InsProduct::getSpecialItemParentId) //鍖哄垎甯歌椤圭洰 + .isNotNull(InsProduct::getInspectionItemClass)//鐢ㄦ楠屽垎椤瑰瓧娈靛尯鍒俯鍗囪瘯楠屼笌鐑惊鐜� + .isNull(InsProduct::getInsFiberId)); //鐢ㄥ厜绾ゅ尯鍒儹寰幆鍜屾俯搴﹀惊鐜� + if (!insProducts2.isEmpty()) { + //澶勭悊鐑惊鐜姤鍛� + ThermalCycleReportHandler cycleReportHandler = new ThermalCycleReportHandler(insProductMapper, insProductResultMapper); + cycleReportHandler.doWrite(samples,insReport,tables3); + } + //鍗曟牴鍨傜洿鐕冪儳鐨勬楠屾姤鍛� + tables3.forEach(table3 -> { + table3.put("tableSize3", tables3.size()); + }); + /*鑾峰彇闄勪欢鍥剧墖绫诲瀷*/ + List<Map<String, Object>> images = new ArrayList<>(); + List<InsOrderFile> insOrderFiles = insOrderFileMapper.selectList(Wrappers.<InsOrderFile>lambdaQuery().eq(InsOrderFile::getType, 1).eq(InsOrderFile::getInsOrderId, orderId)); + if (CollectionUtils.isNotEmpty(insOrderFiles)) { + insOrderFiles.forEach(insOrderFile -> { + Map<String, Object> image = new HashMap<>(); + PictureRenderData pictureRenderData = Pictures.ofLocal(imgUrl + "/" + insOrderFile.getFileUrl()).sizeInCm(17, 20).create(); + image.put("url", pictureRenderData); + image.put("report", insReport); + images.add(image); + }); + } + //濮旀墭浜哄拰鐢佃瘽瀛楁鍒ゆ柇 + if (ObjectUtils.isEmpty(insOrder.getPrepareUser())) { + insOrder.setPrepareUser("/"); + } + if (ObjectUtils.isEmpty(insOrder.getPhone())) { + insOrder.setPhone("/"); + } + //鏌ヨ瀹℃壒绛惧悕閰嶇疆 + Map<String,Object> urlMap = insReportApproveConfigMapper.selectApprovalConfigByLaboratory(insOrder.getLaboratory()); + String writeUrl = imgUrl + "/" + (Objects.isNull(urlMap.get("writeUrl"))?"":urlMap.get("writeUrl").toString());//缂栧埗浜虹鍚島rl + String examineUrl = imgUrl + "/" + (Objects.isNull(urlMap.get("examineUrl"))?"":urlMap.get("examineUrl").toString());//瀹℃牳浜虹鍚島rl + String ratifyUrl = imgUrl + "/" + (Objects.isNull(urlMap.get("ratifyUrl"))?"":urlMap.get("ratifyUrl").toString());//鎵瑰噯浜虹鍚島rl + //鑾峰彇鍦烘墍鐨勬姤鍛婁笓鐢ㄧ珷 + String sealUrl; + try { + sealUrl = insReportMapper.getLaboratoryByName(insOrder.getLaboratory()); + } catch (Exception e) { + throw new ErrorException("鎵句笉鍒版姤鍛婁笓鐢ㄧ珷"); + } + + //妫�楠岄」鐩殑鐜 + InsProduct insProduct = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getState, 1).eq(InsProduct::getInsSampleId, samples.get(0).getId())).get(0); + String environment = ""; + environment = (ObjectUtils.isNotEmpty(insProduct.getTemperature()) ? insProduct.getTemperature() + "鈩� " : "") + (ObjectUtils.isNotEmpty(insProduct.getHumidity()) ? insProduct.getHumidity() + "%" : ""); + String finalEnvironment = environment; + Custom finalCustom = custom; + String finalSealUrl = imgUrl + "/" +sealUrl; + String finalResultChStr = resultChStr; + String finalResultEnStr = resultEnStr; + ZipSecureFile.setMinInflateRatio(0.001); + XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render( + new HashMap<String, Object>() {{ + put("order", insOrder); + put("report", insReport); + put("environment", finalEnvironment); + put("custom", finalCustom); + put("sampleSize", samples.size()); + put("tables", tables); + put("tableSize", tables.size() + 1); + put("tables2", tables2.isEmpty()?null:tables2); + put("tableSize2", tables2.size()); + put("tables3", tables3.isEmpty()?null:tables3); + put("tableSize3", tables3.size()); + put("tables4", tables4.isEmpty()?null:tables4); + put("tableSize4", tables4.size()); + put("tables5", tables5.isEmpty()?null:tables5); + put("tableSize5", tables5.size()); + put("tables6", tables6.isEmpty()?null:tables6); + put("tableSize6", tables6.size()); + put("standardMethod", (standardMethod2.toString().equals("null") ? "" : standardMethod2)); + put("deviceList", finalDeviceList); + put("twoCode", Pictures.ofLocal(codePath).create()); + put("models", finalModelStr.replace(",", "")); + put("productSize", productSize); + put("createTime", now.format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�"))); + put("createTimeEn", monthNames[now.getMonthValue() - 1] + " " + now.getDayOfMonth() + ", " + now.getYear()); + put("insTime", insOrder.getInsTime().format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�"))); + put("insTimeEn", monthNames[insOrder.getInsTime().getMonthValue() - 1] + " " + insOrder.getInsTime().getDayOfMonth() + ", " + insOrder.getInsTime().getYear()); + put("writeUrl", new FilePictureRenderData(100,50, writeUrl)); + put("insUrl", new FilePictureRenderData(100,50,imgUrl + "/" + signatureUrl)); + put("images", images.isEmpty()?null:images); + put("examineUrl", new FilePictureRenderData(100,50,examineUrl)); + put("ratifyUrl", new FilePictureRenderData(100,50,ratifyUrl)); + put("sampleEn", sampleEn); + put("orderType", orderType); + put("getTime", insOrder.getExamineTime().format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�"))); + put("getTimeEn", monthNames[insOrder.getExamineTime().getMonthValue() - 1] + " " + insOrder.getExamineTime().getDayOfMonth() + ", " + insOrder.getExamineTime().getYear()); + put("seal1", new FilePictureRenderData(600,600, finalSealUrl)); + put("seal2", new FilePictureRenderData(600,600, finalSealUrl)); + put("formTypeCh", formType); + put("formTypeEn", insOrder.getFormType()); + put("resultCh", finalResultChStr); + put("resultEn", finalResultEnStr); + }}); + // 鏇存柊鏁版嵁搴撲腑鐨勭鍙戞棩鏈� + insOrderService.update(Wrappers.<InsOrder>lambdaUpdate() + .eq(InsOrder::getId, insOrder.getId()) + .set(InsOrder::getIssuingDate, now)); + try { + String name = insReport.getCode().replace("/", "") + ".docx"; + template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name))); + insReport.setUrl("/word/" + name); + insReport.setIsExamine(-9);//鏈鏍哥姸鎬佷负-9 + insReport.setIsRatify(-9);//鏈壒鍑嗙姸鎬佷负-9 + insReportMapper.insert(insReport); + insOrder.setInsState(5); + insOrder.setSample(oldSampleStr); + insOrderMapper.updateById(insOrder); + } catch (IOException e) { + throw new RuntimeException(e); + } + // 澶勭悊鍚堝苟鍗曞厓鏍肩殑闂 + String path = wordUrl + "/" + insReport.getCode().replace("/", "") + ".docx"; + // word 杞� pdf + String tempUrlPdf = insReportService.wordToPdfTemp((StrUtil.isBlank(insReport.getUrlS()) ? insReport.getUrl() : insReport.getUrlS()).replace("/word", wordUrl)); + insReportMapper.update(null,new LambdaUpdateWrapper<InsReport>() + .set(InsReport::getTempUrlPdf,tempUrlPdf) + .eq(InsReport::getId,insReport.getId())); + try { + ZipSecureFile.setMinInflateRatio(0.0001);//瑙e喅闄勪欢鏂囦欢杩囧ぇ寮曞彂鐨刏ipBom寮傚父 + FileInputStream stream = new FileInputStream(path); + XWPFDocument document = new XWPFDocument(stream); + List<XWPFTable> xwpfTables = document.getTables(); + for (int i = 0; i < xwpfTables.size(); i++) { + Set<String> set1 = new HashSet<>(); + Map<String, Map<String, Integer>> maps = new HashMap<>(); + for (int j = 0; j < xwpfTables.get(i).getRows().size(); j++) { + for (int k = 0; k < xwpfTables.get(i).getRows().get(j).getTableCells().size(); k++) { + if (xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().indexOf("鈭�") > -1) { + String[] split = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("鈭�"); + if (set1.add(split[1])) { + Map<String, Integer> map = new HashMap<>(); + map.put("sr", j); + map.put("sc", k); + map.put("er", j + 0); + map.put("ec", k + 0); + maps.put(split[1], map); + } else { + Map<String, Integer> map1 = maps.get(split[1]); + if (j == map1.get("sr")) { + map1.put("ec", map1.get("ec") + 1); + } else if (k == map1.get("sc")) { + map1.put("er", map1.get("er") + 1); + } + } + String str = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("鈭�")[0]; + xwpfTables.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0); + xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setText(str); + xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); + xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getParagraphArray(0).setAlignment(ParagraphAlignment.CENTER); + } + } + } + + // 鍗曞厓鏍兼帓搴�, 閬垮厤鏍煎紡閿欎贡 + List<Map.Entry<String, Map<String, Integer>>> entries = new ArrayList<>(maps.entrySet()); + entries.sort((o1, o2) -> o1.getValue().get("sc") - o2.getValue().get("sc")); + + // 鎸夌収椤哄簭娣诲姞杩涢泦鍚� + List<String> list = new ArrayList<>(); + for (Map.Entry<String, Map<String, Integer>> entry : entries) { + list.add(entry.getKey()); + } + /*List<String> list = new ArrayList<>(); + for (String s : maps.keySet()) { + list.add(s); + }*/ + for (int a = list.size() - 1; a >= 0; a--) { + Map<String, Integer> v = maps.get(list.get(a)); + for (int j = 0; j < v.get("er") - v.get("sr") + 1; j++) { + if (v.get("ec") > v.get("sc")) { + try { + TableTools.mergeCellsHorizonal(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec")); + } catch (Exception e) { + } + } + } + if (v.get("er") > v.get("sr")) { + try { + TableTools.mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er")); + } catch (Exception e) { + } + } + } + } + FileOutputStream fileOutputStream = new FileOutputStream(path); + document.write(fileOutputStream); + fileOutputStream.close(); + } catch (FileNotFoundException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); + } + //澶勭悊涓嫳鏂囨崲琛岀殑闂 + try { + FileInputStream stream1 = new FileInputStream(path); + XWPFDocument document1 = new XWPFDocument(stream1); + List<XWPFTable> xwpfTables1 = document1.getTables(); + for (int i = 1; i < xwpfTables1.size() - (deviceList == null ? 1 : 2); i++) { + for (int j = 0; j < xwpfTables1.get(i).getRows().size(); j++) { + for (int k = 0; k < xwpfTables1.get(i).getRows().get(j).getTableCells().size(); k++) { + if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("@")) { + String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText(); + String[] split = text.split("@"); + xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0); + XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph(); + XWPFRun run = xwpfParagraph.createRun(); + run.setText(split.length>0?split[0]:""); + if (split.length>1 && ObjectUtils.isNotNull(split[1])) { + run.addBreak(); + run.setText(split[1]); + } + xwpfParagraph.setAlignment(ParagraphAlignment.CENTER); + } + } + } + } + FileOutputStream fileOutputStream1 = new FileOutputStream(path); + document1.write(fileOutputStream1); + fileOutputStream1.close(); + } catch (FileNotFoundException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); + } + } else if(num != 5) { + //澶嶆牳涓嶉�氳繃灏嗘妸澶嶆牳鐨勮礋璐d汉鍘绘帀 + Integer id = insSampleUserMapper.selectOne(Wrappers.<InsSampleUser>lambdaQuery().eq(InsSampleUser::getInsSampleId, orderId).orderByDesc(InsSampleUser::getId).last("limit 1")).getId(); + insSampleUserMapper.deleteById(id); + } + return 1; + } + + /** + * 鏍煎紡鍖栦笉鍚堟牸椤圭洰瀛楃涓� + * @param resultCh 涓嶅悎鏍奸」鐩腑鏂囧垪琛� + * @param resultEn 涓嶅悎鏍奸」鐩嫳鏂囧垪琛� + * @param insProducts0 妫�楠岄」鍒楄〃 + */ + private void joinUnqualifiedItemChars(Set<String> resultCh, Set<String> resultEn, List<InsProduct> insProducts0) { + if(!insProducts0.isEmpty()){ + insProducts0.stream().filter(f->f.getInsResult()==0).forEach(e->{ + String chinaStr = String.join("-",e.getInspectionItem(),e.getInspectionItemSubclass()); + String englishStr = String.join("-",e.getInspectionItemEn(),e.getInspectionItemSubclassEn()); + resultCh.add(chinaStr); + resultEn.add(englishStr); + }); + } + } + + public void getTemplateThing + (Set<Integer> set, Map<Integer, String> map2, List<InsProduct> insProducts) { + for (InsProduct product : insProducts) { + if (product.getSpecialItemParentId()!=null) { + product.setTemplate(new ArrayList<>()); + continue; + } + String thing = null; + if (product.getSpecialItemParentId() == null && set.add(product.getTemplateId())) { + map2.put(product.getTemplateId(), standardTemplateService.getStandTempThingById(product.getTemplateId()) + ""); + thing = map2.get(product.getTemplateId()); + } + if (StrUtil.isNotEmpty(thing)) { + JSONObject sheet = JSON.parseObject(JSON.toJSONString(JSON.parseArray(JSON.toJSONString(JSON.parseObject(thing).get("data"))).get(0))); + JSONObject config = JSON.parseObject(JSON.toJSONString(sheet.get("config"))); + List<JSONObject> cellData = JSON.parseArray(JSON.toJSONString(sheet.get("celldata")), JSONObject.class); + Map<String, Object> style = new HashMap<>(); + style.put("rowlen", config.get("rowlen")); + style.put("columnlen", config.get("columnlen")); + product.setTemplate(cellData); + product.setStyle(style); + product.setTemplateName(standardTemplateService.getStandTempNameById(product.getTemplateId())); + } + } + } + + @Override + public int submitPlan(Integer orderId, String laboratory, Integer verifyUser, String entrustCode) { + List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId).select(InsSample::getId)); + List<Integer> ids = insSamples.stream().map(a -> a.getId()).collect(Collectors.toList()); + List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() + .in(InsProduct::getInsSampleId, ids) + .eq(InsProduct::getSonLaboratory, laboratory) + .eq(InsProduct::getState, 1) + .and(wrapper -> wrapper + .isNull(InsProduct::getInsResult) + .or() + .eq(InsProduct::getInsResult, 2) + ) + .isNull(InsProduct::getInsFiberId) + .isNull(InsProduct::getInsFibersId)); + insProducts.addAll(insProductMapper.selectFiberInsProduct(ids, laboratory)); + if (insProducts.size() > 0) { + String str = ""; + HashSet<String> set = new HashSet<>(); + int count = 0; + for (InsProduct product : insProducts) { + //濡傛灉鏄厜缂嗙殑娓╁害寰幆 + if (product.getInspectionItem().equals("娓╁害寰幆") && insOrderMapper.selectById(orderId).getSampleType().equals("鍏夌紗")) { + //鏌ヨ閭d簺寰幆娓╁害鐨勬楠岄」鐩殑缁撹鏄惁鍏ㄩ儴妫�楠� + List<InsProduct> insProductList = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getInsSampleId, product.getInsSampleId()) + .isNotNull(InsProduct::getInsFiberId).like(InsProduct::getInspectionItemSubclass, "鈩�")); + List<Integer> collect = insProductList.stream().filter(insProduct -> insProduct.getInsResult() != null).map(InsProduct::getInsResult).collect(Collectors.toList()); + List<Integer> tt = new ArrayList<>(); + tt.add(1); + if (collect.contains(0)) { + product.setLastValue("涓嶅悎鏍�"); + product.setInsResult(0); + } else if (collect.size() == insProductList.size() && collect.stream().distinct().collect(Collectors.toList()).containsAll(tt)) { + product.setLastValue("鍚堟牸"); + product.setInsResult(1); + } + insProductMapper.updateById(product); + } + //濡傛灉鏄儹寰幆鎴栬�呮槸娓╁崌璇曢獙 + else if (product.getInspectionItem().equals("鐑惊鐜�") || product.getInspectionItem().equals("娓╁崌璇曢獙")) { + //鏌ヨ杩欎簺椤圭洰涓嬬殑鍏朵粬妫�楠岄」鐩槸鍚﹀叏閮ㄦ楠� + List<InsProduct> insProductList = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getInsSampleId, product.getInsSampleId()) + .like(InsProduct::getInspectionItemSubclass, "娓╁害")); + List<Integer> collect = insProductList.stream().filter(insProduct -> insProduct.getInsResult() != null).map(InsProduct::getInsResult).collect(Collectors.toList()); + List<Integer> tt = new ArrayList<>(); + tt.add(1); + if (collect.contains(0)) { + product.setLastValue("涓嶅悎鏍�"); + product.setInsResult(0); + } else if (collect.size() == insProductList.size() && collect.stream().distinct().collect(Collectors.toList()).containsAll(tt)) { + product.setLastValue("鍚堟牸"); + product.setInsResult(1); + } + insProductMapper.updateById(product); + } + //濡傛灉鏄數鍔涚殑搴斿姏搴斿彉妫�楠岄」鐩垨鑰呮槸鐤插姵璇曢獙,缁撹鏀规垚涓嶅垽瀹� + else if (product.getInspectionItem().equals("搴斿姏搴斿彉") || product.getInspectionItem().contains("鐤插姵璇曢獙")){ + product.setInsResult(3); + insProductMapper.updateById(product); + } + //濡傛灉鏄槻鎸敜鍔熺巼鐗规�ц瘯楠� + else if (product.getInspectionItem().equals("闃叉尟閿ゅ姛鐜囩壒鎬ц瘯楠�")){ + product.setInsResult(1);//榛樿鍚堟牸 + //闇�瑕佸幓鍒ゆ柇濉啓鐨勬楠屾暟鎹槸鍚︽湁涓嶅悎鏍� + InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, product.getId())); + cn.hutool.json.JSONObject jsonObject = new cn.hutool.json.JSONObject(insProductResult.getComValue()); + // 妫�鏌� arr2 + cn.hutool.json.JSONArray arr2 = jsonObject.getJSONArray("arr2"); + for (int i = 0; i < arr2.size(); i++) { + cn.hutool.json.JSONObject obj = arr2.getJSONObject(i); + if (obj.getInt("state") == 2) { + product.setInsResult(0); + break; + } + } + // 妫�鏌� arr3 + cn.hutool.json.JSONArray arr3 = jsonObject.getJSONArray("arr3"); + for (int i = 0; i < arr3.size(); i++) { + cn.hutool.json.JSONObject obj = arr3.getJSONObject(i); + if (obj.getInt("state") == 2) { + product.setInsResult(0); + break; + } + } + insProductMapper.updateById(product); + } + else { + String notDetected = product.getInspectionItem() + " " + product.getInspectionItemSubclass(); + if(!set.contains(notDetected)) { + count++; + str += "<br/>" + count + "锛�" + product.getInspectionItem() + " " + product.getInspectionItemSubclass() + "<br/>"; + set.add(notDetected); + } + + } + } + if (ObjectUtils.isNotEmpty(str)) { + throw new ErrorException("<strong>瀛樺湪寰呮楠岀殑椤圭洰锛�</strong><br/>" + str); + } + } + insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate().eq(InsOrderState::getInsOrderId, orderId).eq(InsOrderState::getLaboratory, laboratory).set(InsOrderState::getInsTime, LocalDateTime.now()).set(InsOrderState::getInsState, 3).set(InsOrderState::getVerifyUser, verifyUser)); + Integer userId = SecurityUtils.getUserId().intValue(); + InformationNotification info = new InformationNotification(); + info.setCreateUser(insProductMapper.selectUserById(userId).get("name")); + info.setMessageType("2"); + info.setTheme("澶嶆牳閫氱煡"); + info.setContent("鎮ㄦ湁涓�鏉℃楠屼换鍔″緟澶嶆牳娑堟伅"); + info.setSenderId(userId); + info.setConsigneeId(verifyUser); + info.setViewStatus(false); + info.setJumpPath("b1-inspect-order-plan"); + informationNotificationService.addInformationNotification(info); + //澶嶆牳浜�--妫�楠屽崟鐩稿叧璐熻矗浜� + InsSampleUser insSampleUser = new InsSampleUser(); + insSampleUser.setUserId(verifyUser); + insSampleUser.setInsSampleId(orderId); + insSampleUser.setState(1); + insSampleUser.setSonLaboratory(laboratory); + insSampleUserMapper.insert(insSampleUser); + /*鏍¢獙涓�涓媟esult琛�*/ + CompletableFuture.supplyAsync(() -> { + List<Integer> ips = insProducts.stream().map(InsProduct::getId).distinct().collect(Collectors.toList()); + for (Integer ip : ips) { + List<InsProductResult> insProductResults = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery() + .eq(InsProductResult::getInsProductId, ip)); + if (insProductResults.size() > 1) { + for (int i = 1; i < insProductResults.size(); i++) { + insProductResultMapper.deleteById(insProductResults.get(i)); + } + } + } + return null; + }); + // 鍒犻櫎鏁伴噰閲囬泦娆℃暟 + String key = "frequency" + ":" + entrustCode + ":*"; + RedisUtil.delsLike(key); + return 1; + } + + @Override + public List<String> getEquipName(Integer orderId,String sonLaboratory) { + List<Integer> ids = insSampleMapper.selectList(new LambdaQueryWrapper<InsSample>() + .eq(InsSample::getInsOrderId, orderId)) + .stream() + .map(InsSample::getId) + .collect(Collectors.toList()); + // 鏌ョ湅鍗曞瓙鏄惁閫夋嫨浜嗚澶� + List<String> strList = new ArrayList<>(); + HashSet<String> set = new HashSet<>(); + List<InsProduct> productList = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>() + .in(InsProduct::getInsSampleId, ids) + .eq(InsProduct::getSonLaboratory, sonLaboratory) + .eq(InsProduct::getState, 1)); + if (CollectionUtils.isNotEmpty(productList)) { + List<InsProduct> collect = productList.stream() + .filter(item -> Objects.isNull(item.getSpecialItemParentId()) || StringUtils.isEmpty(item.getSpecialItemParentId()+"")) + .collect(Collectors.toList()); + for (InsProduct product : collect) { + InsProductResult insProductResult = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>() + .eq(InsProductResult::getInsProductId, product.getId())); + if(Objects.nonNull(insProductResult)){ + if(Objects.isNull(insProductResult.getEquipName()) || StringUtils.isEmpty(insProductResult.getEquipName())) { + strList.add(product.getInspectionItem() + " " + product.getInspectionItemSubclass()); + }else { + List<Map> maps = JSONArray.parseArray(insProductResult.getEquipName(), Map.class); + if(CollectionUtils.isNotEmpty(maps)) { + List<Map> mapList = maps.stream().filter(item -> StringUtils.isEmpty(item.get("v") + "")).collect(Collectors.toList()); + if(mapList.size() == maps.size()) { + strList.add(product.getInspectionItem() + " " + product.getInspectionItemSubclass()); + } +// for (Map map : maps) { +// if(StringUtils.isEmpty(map.get("v")+"")){ +// strList.add(product.getInspectionItem() + " " + product.getInspectionItemSubclass()); +// } +// } + }else { + strList.add(product.getInspectionItem() + " " + product.getInspectionItemSubclass()); + } + } + } + } + } + + return strList.stream().distinct().collect(Collectors.toList()); + } + + @Override + @Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED) + public int saveInsContext2(InsProductResultDTO insProductResult) { + Integer userId = SecurityUtils.getUserId().intValue(); + try { + //妫�楠岀粨鏋� + Map<String,Object> insValueMap = JackSonUtil.unmarshal(insProductResult.getInsValue(), Map.class); + //saveInsContext2鏂规硶鏈夊涓ā鏉胯皟鐢紝闇�鏍规嵁妯℃澘鍚嶇О鍒嗗紑澶勭悊 + switch (insProductResult.getTemplateName()){ + case "鏋剁┖鍦扮嚎搴斿姏搴斿彉": + //淇濆瓨寮规�фā閲忓拰妫�楠岀粨璁� + if(Objects.nonNull(insValueMap.get("elasticityModulus"))){ + String elasticityModulus = insValueMap.get("elasticityModulus").toString(); + insProductMapper.update(null,Wrappers.<InsProduct>lambdaUpdate() + .set(InsProduct::getInsResult,3)//缁撹璁句负涓嶅垽瀹� + .set(InsProduct::getElasticityModulus,elasticityModulus) + .eq(InsProduct::getId,insProductResult.getInsProductId()) + ); + } + //鍒犻櫎寮规�фā閲弅ey + insValueMap.remove("elasticityModulus"); + insProductResult.setInsValue(JackSonUtil.marshal(insValueMap)); + break; + case "鐤插姵璇曢獙": + //淇濆瓨妫�楠岀粨鏋� + if(Objects.nonNull(insValueMap.get("damage"))){ + String damage = insValueMap.get("damage").toString(); + Integer insResult = "绗﹀悎".equals(damage)?1:0; + insProductMapper.update(null,Wrappers.<InsProduct>lambdaUpdate() + .set(InsProduct::getInsResult,insResult) + .set(InsProduct::getLastValue,damage) + .eq(InsProduct::getId,insProductResult.getInsProductId()) + ); + } + break; + } + List<InsProductResult> oldResults = new ArrayList<>(); + InsProductResult insProductResult1 = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>().eq(InsProductResult::getInsProductId, insProductResult.getInsProductId())); + //鏂板鎴栨洿鏂版楠岃褰� + if (ObjectUtils.isNull(insProductResult1)){ + insProductResultMapper.insert(insProductResult); + }else { + insProductResult.setId(insProductResult1.getId()); + oldResults.add(insProductResult1); + insProductResultMapper.updateById(insProductResult); + } + //娣诲姞宸ユ椂璁板綍 + InsOrder insOrder = insOrderMapper.selectById(insProductResult.getOrderId()); + InsSample insSample = insSampleMapper.selectById(insProductResult.getSampleId()); + InsProduct insProduct = insProductMapper.selectById(insProductResult.getInsProductId()); + InsProductResult newInsResult = new InsProductResult(); + BeanUtil.copyProperties(insProductResult,newInsResult); + WorkTimeDTO workTimeDTO = new WorkTimeDTO(userId,insOrder,insSample,insProduct,null,insProductResult.getSampleId(), String.valueOf(insProductResult.getInsProductId()),oldResults ,newInsResult); + String jsonStr = JackSonUtil.marshal(workTimeDTO); + //璁$畻宸ユ椂 + //TODO:璇ユ柟娉曠洰鍓嶅彧鏈夌數鍔涚敤锛岄粯璁よ矾鐢变娇鐢ㄧ數鍔涚殑 + sendQueueMessage(ExchangeConstants.WORK_TIME_EXCHANGE,RouterKeyConstants.DL_KEY,jsonStr); + }catch (Exception e){ + throw new RuntimeException(e); + } + return 0; + } + + // 鑾峰彇涓や釜localDateTime鐨勬瘡涓�澶� + public static List<LocalDateTime> getLocalDateTimesBetween(LocalDateTime start, LocalDateTime end) { + List<LocalDateTime> localDateTimes = new ArrayList<>(); + LocalDate currentDate = start.toLocalDate(); + LocalDateTime currentLocalDateTime = start; + while (!currentDate.isAfter(end.toLocalDate())) { + localDateTimes.add(currentLocalDateTime); + currentLocalDateTime = currentLocalDateTime.plusDays(1); + currentDate = currentDate.plusDays(1); + } + return localDateTimes; + } + + /** + * 鏌ヨ妫�楠岄」瀵瑰簲鏍囧噯搴撻厤缃殑宸ユ椂淇℃伅 + * @param insProduct + * @return + */ + public StandardProductVO getInspectWorkHourAndGroup(InsProduct insProduct){ + StandardProductVO standardProductVO = new StandardProductVO(); + if(!Objects.isNull(insProduct)){ + //鏌ヨ瀵瑰簲鏍囧噯搴� + List<StandardProductVO> productVO = standardProductListMapper.getStandardProductByInsProduct( + insProduct.getLaboratory(), + insProduct.getSampleType(), + insProduct.getSample(), + insProduct.getModel(), + insProduct.getInspectionItem(), + insProduct.getInspectionItemSubclass(), + insProduct.getSonLaboratory(), + insProduct.getStandardMethodListId()); + if(!productVO.isEmpty()){ + standardProductVO = productVO.get(0); + } + //鏈夊尯闂寸殑妫�楠岄」锛屽彇妫�楠岄」瀛樼殑宸ユ椂淇℃伅 + if(StringUtils.isNotBlank(insProduct.getSection()) && StringUtils.isNotBlank(standardProductVO.getSection())){ + try { + ObjectMapper objectMapper = new ObjectMapper(); + //鍖洪棿璁剧疆 + List<String> sectionList = (List<String>)objectMapper.readValue(standardProductVO.getSection(), List.class); + //閫変腑鍖洪棿鐨勪笅鏍� + int i = sectionList.indexOf(insProduct.getSection()); + //鑾峰彇瀵瑰簲涓嬫爣鐨勫伐鏃跺拰宸ユ椂鍒嗙粍 + List<Double> hourList = (List<Double>)objectMapper.readValue(standardProductVO.getManHour(), List.class); + standardProductVO.setManHour(String.valueOf(hourList.get(i))); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + } + return standardProductVO; + } + + public static String getWeek(String dayStr) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + try { + Date date = sdf.parse(dayStr); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); + int day = calendar.get(Calendar.DAY_OF_MONTH); + return getWeekDay(dayOfWeek); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + + public static String getWeekDay(int dayOfWeek) { + switch (dayOfWeek) { + case Calendar.MONDAY: + return "鍛ㄤ竴"; + case Calendar.TUESDAY: + return "鍛ㄤ簩"; + case Calendar.WEDNESDAY: + return "鍛ㄤ笁"; + case Calendar.THURSDAY: + return "鍛ㄥ洓"; + case Calendar.FRIDAY: + return "鍛ㄤ簲"; + case Calendar.SATURDAY: + return "鍛ㄥ叚"; + case Calendar.SUNDAY: + return "鍛ㄦ棩"; + default: + return "鏈煡"; + } + } + +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/service/impl/InsReportServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/requier/service/impl/InsReportServiceImpl.java new file mode 100644 index 0000000..fd71352 --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/service/impl/InsReportServiceImpl.java @@ -0,0 +1,942 @@ +package com.ruoyi.requier.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.aspose.words.Document; +import com.aspose.words.License; +import com.aspose.words.SaveFormat; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.data.FilePictureRenderData; +import com.itextpdf.text.BadElementException; +import com.itextpdf.text.DocumentException; +import com.itextpdf.text.pdf.PdfContentByte; +import com.itextpdf.text.pdf.PdfReader; +import com.itextpdf.text.pdf.PdfStamper; +import com.ruoyi.common.core.domain.entity.User; +import com.ruoyi.common.utils.QueryWrappers; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.framework.exception.ErrorException; +import com.ruoyi.inspect.dto.ReportPageDto; +import com.ruoyi.inspect.mapper.InsOrderMapper; +import com.ruoyi.inspect.mapper.InsOrderStateMapper; +import com.ruoyi.inspect.mapper.InsReportApproveConfigMapper; +import com.ruoyi.inspect.mapper.InsReportMapper; +import com.ruoyi.inspect.pojo.InsOrder; +import com.ruoyi.inspect.pojo.InsOrderState; +import com.ruoyi.inspect.pojo.InsReport; +import com.ruoyi.process.mapper.ProcessReportMapper; +import com.ruoyi.process.pojo.ProcessReport; +import com.ruoyi.requier.service.InsReportService; +import com.ruoyi.system.mapper.UserMapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.logging.log4j.util.Strings; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.StringRedisSerializer; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.imageio.ImageIO; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.awt.image.BufferedImage; +import java.io.*; +import java.math.BigDecimal; +import java.net.URLEncoder; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.atomic.AtomicLong; +import java.util.stream.Collectors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; +import java.util.zip.ZipOutputStream; + +/** + * @author Administrator + * @description 閽堝琛ㄣ�恑ns_report(妫�楠屾姤鍛�)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇 + * @createDate 2024-03-17 22:10:02 + */ +@Service +@Slf4j +public class InsReportServiceImpl extends ServiceImpl<InsReportMapper, InsReport> + implements InsReportService { + + @Resource + private UserMapper userMapper; + + @Resource + private InsReportMapper insReportMapper; + + @Resource + ProcessReportMapper processReportMapper; + + @Value("${wordUrl}") + private String wordUrl; + + @Value("${file.licenseUrl}") + private String licenseUrl; + + @Value("${file.path}") + private String imgUrl; + + @Resource + private InsOrderMapper insOrderMapper; + + @Resource + private RedisTemplate<String, Object> redisTemplate; + + @Resource + private ThreadPoolTaskExecutor threadPoolTaskExecutor; + + @Resource + private InsOrderStateMapper insOrderStateMapper; + + private static final String SYNC_REPORT_KEY_PREFIX = "syncApprovalReport_lock_"; + + @Resource + private InsReportApproveConfigMapper insReportApproveConfigMapper; + + @Override + public IPage<ReportPageDto> pageInsReport(Page page, ReportPageDto reportPageDto) { + Map<String, Object> map = new HashMap<>(); + User user = userMapper.selectById(SecurityUtils.getUserId());//褰撳墠鐧诲綍鐨勪汉 + //鑾峰彇褰撳墠浜烘墍灞炲疄楠屽id + String departLimsId = user.getDepartLimsId(); + String laboratory = null; + if (ObjectUtils.isNotEmpty(departLimsId) && !departLimsId.isEmpty()) { + String[] split = departLimsId.split(","); + //鏌ヨ瀵瑰簲鏋舵瀯鍚嶇О(閫氫俊瀹為獙瀹�,鐢靛姏瀹為獙瀹�,妫�娴嬪姙) + String departLims = insOrderMapper.seldepLimsId(Integer.parseInt(split[split.length - 1])); + if (departLims.contains("瀹為獙瀹�")) { + laboratory = departLims; + } + } + QueryWrapper<ReportPageDto> wrapper = QueryWrappers.queryWrappers(reportPageDto); + if(Objects.nonNull(reportPageDto.getCreateTimeRange())){ + wrapper.gt(reportPageDto.getCreateTimeRange().size()>1,"create_time",reportPageDto.getCreateTimeRange().get(0)) + .lt(reportPageDto.getCreateTimeRange().size()>1,"create_time",reportPageDto.getCreateTimeRange().get(1)); + } + return insReportMapper.pageInsReport(page, wrapper ,laboratory); + } + + @Override + public int inReport(String url, Integer id) { + InsReport insReport = new InsReport(); + insReport.setId(id); + insReport.setUrlS(url); + return insReportMapper.updateById(insReport); + } + + // 杩樺師 + @Override + public int upReportUrl(Integer id) { + InsReport insReport = insReportMapper.selectById(id); + String fileName = insReport.getUrlS().replace("/word/", ""); + if(Strings.isNotEmpty(fileName)) { + String path = wordUrl + File.separator + fileName; + File file = new File(path); + if (file.exists()) { + file.delete(); + } + } + return insReportMapper.update(null, Wrappers.<InsReport>lambdaUpdate().eq(InsReport::getId, id).set(InsReport::getUrlS, null)); + } + + @Override + public void downReport(Integer id,Integer type, HttpServletResponse response) { + InsReport insReport = insReportMapper.selectById(id); + String url = ""; + // 0 涓嬭浇docx 1 涓嬭浇pdf + if(type == 0) { + url = Strings.isNotEmpty(insReport.getUrlS()) ? insReport.getUrlS() : insReport.getUrl(); + }else { + url = insReport.getTempUrlPdf(); + } + if(Strings.isEmpty(url)){ + throw new ErrorException("鎶ュ憡鍦板潃涓虹┖"); + } + File file = new File(wordUrl + File.separator + url.replace("/word/", "")); + try { + String fileName = file.getName(); + if(fileName.indexOf("_") != -1) { + fileName = fileName.split("_")[1]; + } + fileName = URLEncoder.encode(fileName, "UTF-8"); + response.setContentType("application/octet-stream"); + response.setHeader("Content-disposition","attachment;filename=" + fileName); + ServletOutputStream stream = response.getOutputStream(); + FileInputStream fileInputStream = new FileInputStream(file); + byte[] bytes = new byte[1024]; + int byteRead; + while((byteRead = fileInputStream.read(bytes)) != -1){ + stream.write(bytes, 0, byteRead); + stream.flush(); + } + fileInputStream.close(); + stream.close(); + }catch (Exception e){ + throw new ErrorException("涓嬭浇澶辫触"); + } + } + + + + + + //鎻愪氦 + @Override + public int writeReport(Integer id) { + InsReport insReport = insReportMapper.selectById(id); + insReport.setId(id); + insReport.setState(1); + insReport.setWriteTime(LocalDateTime.now());//鎻愪氦鏃堕棿 + insReport.setWriteUserId(SecurityUtils.getUserId().intValue());//鎻愪氦浜� + //鑾峰彇鎻愪氦浜虹殑绛惧悕鍦板潃 + String signatureUrl; + try { + signatureUrl = userMapper.selectById(SecurityUtils.getUserId().intValue()).getSignatureUrl(); + } catch (Exception e) { + throw new ErrorException("鎵句笉鍒扮紪鍒朵汉鐨勭鍚�"); + } + //绯荤粺鐢熸垚鎶ュ憡鍦板潃 + String url = insReport.getUrl(); + //鎵嬪姩涓婁紶鎶ュ憡鍦板潃 + String urlS = insReport.getUrlS(); + wordInsertUrl(new HashMap<String, Object>() {{ + put("writeUrl", new FilePictureRenderData(100,50,imgUrl + "/" + signatureUrl)); + }}, (urlS == null ? url : urlS).replace("/word", wordUrl)); + // 淇敼涓存椂pdf + String tempUrlPdf = wordToPdfTemp((StrUtil.isBlank(urlS) ? url : urlS).replace("/word", wordUrl)); + insReport.setTempUrlPdf("/word/" + tempUrlPdf); + return insReportMapper.updateById(insReport); + } + + //瀹℃牳 + @Override + public int examineReport(Integer id, Integer isExamine, String examineTell) { + InsReport insReport = insReportMapper.selectById(id); + insReport.setIsExamine(isExamine); + if (ObjectUtils.isNotEmpty(examineTell)) { + insReport.setExamineTell(examineTell); + } + insReport.setExamineUserId(SecurityUtils.getUserId().intValue());//瀹℃牳浜� + insReport.setExamineTime(LocalDateTime.now());//瀹℃牳鏃堕棿 + if (isExamine == 0) { + //濡傛灉瀹℃牳涓嶉�氳繃 + insReport.setState(0);//鎻愪氦鐘舵�佹敼涓哄緟鎻愪氦 + return insReportMapper.updateById(insReport); + } + //鑾峰彇瀹℃牳浜虹殑绛惧悕鍦板潃 + String signatureUrl; + try { + signatureUrl = userMapper.selectById(insReport.getExamineUserId()).getSignatureUrl(); + } catch (Exception e) { + throw new ErrorException("鎵句笉鍒板鏍镐汉鐨勭鍚�"); + } + //绯荤粺鐢熸垚鎶ュ憡鍦板潃 + String url = insReport.getUrl(); + //鎵嬪姩涓婁紶鎶ュ憡鍦板潃 + String urlS = insReport.getUrlS(); + wordInsertUrl(new HashMap<String, Object>() {{ + put("examineUrl", new FilePictureRenderData(100,50,imgUrl + "/" + signatureUrl)); + }}, (urlS == null ? url : urlS).replace("/word", wordUrl)); + // 淇敼涓存椂pdf + String tempUrlPdf = wordToPdfTemp((StrUtil.isBlank(urlS) ? url : urlS).replace("/word", wordUrl)); + insReport.setTempUrlPdf("/word/" + tempUrlPdf); + return insReportMapper.updateById(insReport); + } + + //鎵瑰噯 + @Override + @Transactional(rollbackFor = Exception.class) + public int ratifyReport(Integer id, Integer isRatify, String ratifyTell) { + InsReport insReport = insReportMapper.selectById(id); + insReport.setIsRatify(isRatify); + if (ObjectUtils.isNotEmpty(ratifyTell)) { + insReport.setRatifyTell(ratifyTell); + } + insReport.setRatifyUserId(SecurityUtils.getUserId().intValue());//鎵瑰噯浜� + insReport.setRatifyTime(LocalDateTime.now());//鎵瑰噯鏃堕棿 + if (isRatify == 0) { + //濡傛灉鎵瑰噯涓嶉�氳繃 + insReport.setState(0);//鎻愪氦鐘舵�佹敼涓哄緟鎻愪氦 + return insReportMapper.updateById(insReport); + } + //鑾峰彇鎵瑰噯浜虹殑绛惧悕鍦板潃 + String signatureUrl; + try { + signatureUrl = userMapper.selectById(insReport.getRatifyUserId()).getSignatureUrl(); + } catch (Exception e) { + throw new ErrorException("鎵句笉鍒版壒鍑嗕汉鐨勭鍚�"); + } + //鑾峰彇鍦烘墍鐨勬姤鍛婁笓鐢ㄧ珷 + String sealUrl; + try { + String laboratory = insOrderMapper.selectById(insReport.getInsOrderId()).getLaboratory(); + sealUrl = insReportMapper.getLaboratoryByName(laboratory); + } catch (Exception e) { + throw new ErrorException("鎵句笉鍒版姤鍛婁笓鐢ㄧ珷"); + } + if (sealUrl == null) throw new ErrorException("鎵句笉鍒版姤鍛婁笓鐢ㄧ珷"); + //绯荤粺鐢熸垚鎶ュ憡鍦板潃 + String url = insReport.getUrl(); + //鎵嬪姩涓婁紶鎶ュ憡鍦板潃 + String urlS = insReport.getUrlS(); + String finalUrl = (urlS == null ? url : urlS).replace("/word", wordUrl); + wordInsertUrl(new HashMap<String, Object>() {{ + put("ratifyUrl", new FilePictureRenderData(100,50,imgUrl + "/" + signatureUrl)); + put("seal1", new FilePictureRenderData(600,600,imgUrl + "/" + sealUrl)); + put("seal2", new FilePictureRenderData(600,600,imgUrl + "/" + sealUrl)); + }}, finalUrl); + wordToPdf(finalUrl, sealUrl); + + InsOrder insOrder = new InsOrder(); + insOrder.setId(insReportMapper.selectById(id).getInsOrderId()); + insOrder.setState(4); + insOrderMapper.updateById(insOrder); + // 淇敼涓存椂pdf + String tempUrlPdf = wordToPdfTemp((StrUtil.isBlank(urlS) ? url : urlS).replace("/word", wordUrl)); + insReport.setTempUrlPdf("/word/" + tempUrlPdf); + /*鏂板cnas7.8鎶ュ憡缁撴灉*/ + ProcessReport processReport = new ProcessReport(); + processReport.setInsReportCode(insReport.getCode()); + processReportMapper.insert(processReport); + return insReportMapper.updateById(insReport); + } + + @Override + public int wordInsertUrl(Map<String, Object> map, String url) { + XWPFTemplate template = XWPFTemplate.compile(url).render(map); + try { + template.writeAndClose(Files.newOutputStream(Paths.get(url))); + } catch (IOException e) { + throw new RuntimeException(e); + } + return 1; + } + + //鎶ュ憡鎵归噺涓嬭浇 + @Override + @Transactional(rollbackFor = Exception.class) + public String downAll(String ids) { + List<Long> list = Arrays.stream(ids.split(",")).map(Long::parseLong).collect(Collectors.toList()); + List<InsReport> insReports = insReportMapper.selectBatchIds(list); + String zipFilePath = null; + // 涓存椂鏂囦欢澶硅矾寰� + try { + String tempFolderPath = wordUrl + "/tempFolder"; + File tempFolder = new File(tempFolderPath); + if (tempFolder.exists()) { + deleteDirectory(tempFolder); // 鍒犻櫎鏃х殑涓存椂鏂囦欢澶� + } + tempFolder.mkdirs(); // 鍒涘缓鏂扮殑涓存椂鏂囦欢澶� + for (InsReport insReport : insReports) { + File sourceFile = new File((ObjectUtils.isNotEmpty(insReport.getUrlS()) ? insReport.getUrlS() : insReport.getUrl()).replace("/word", wordUrl)); + // 涓嬭浇鏂囦欢鍚嶇О鍘婚櫎鏃堕棿 + String destinationFileName = sourceFile.getName(); + if(destinationFileName.indexOf("_") != -1) { + destinationFileName = destinationFileName.split("_")[1]; + } + File destinationFile = new File(tempFolder, destinationFileName); + Files.copy(sourceFile.toPath(), destinationFile.toPath(), StandardCopyOption.REPLACE_EXISTING); + } + // 鍘嬬缉涓存椂鏂囦欢澶� + zipFilePath = wordUrl + "/zip/output.zip"; + zipDirectory(tempFolderPath, zipFilePath); + + // 娓呯悊涓存椂鏂囦欢澶� + deleteDirectory(tempFolder); + + System.out.println("ZIP鏂囦欢鍒涘缓瀹屾垚锛�"); + } catch (IOException e) { + e.printStackTrace(); + } + return "/word/zip/output.zip"; + } + + //鎵归噺涓婁紶 + @Override + @Transactional(rollbackFor = Exception.class) + public int upAll(MultipartFile file) { + if (file != null) { + // 鏍规嵁鏂囦欢鍚嶆煡璇d + String fileName = file.getOriginalFilename(); + String code = fileName.replace(".docx", "").replace("JCZX", "JCZX/"); + if(fileName.lastIndexOf("_") != -1) { + code = code.substring(file.getOriginalFilename().lastIndexOf("_") + 1); + } + //鏌ヨ鏈鏍哥殑鎶ュ憡鏁版嵁 + InsReport insReport = insReportMapper.selectOne(Wrappers.<InsReport>lambdaQuery().eq(InsReport::getCode, code).eq(InsReport::getIsExamine,-9)); + if (ObjectUtils.isEmpty(insReport)) { + throw new ErrorException("娌℃湁缂栧彿涓�" + code + "鐨勬姤鍛婃垨璇ユ姤鍛婂凡瀹℃牳閫氳繃"); + } + // 濡傛灉UrlS鏈夊�� 鍏堝皢璇ユ枃浠跺垹闄� + if(Strings.isNotEmpty(insReport.getUrlS())) { + String url = wordUrl + File.separator + insReport.getUrlS().replace("/word/", ""); + File file1 = new File(url); + if(file1.exists()) { + file1.delete(); + } + } + String urlString; + String pathName; + String path = wordUrl; + File realpath = new File(path); + if (!realpath.exists()) { + realpath.mkdirs(); + } + pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + insReport.getCode().replace("/", "") + ".docx"; + urlString = realpath + "/" + pathName; + // 澶嶅埗鏂囦欢鍒版寚瀹氳矾寰� + try { + Files.copy(file.getInputStream(), new File(urlString).toPath(), StandardCopyOption.REPLACE_EXISTING); + } catch (IOException e) { + throw new RuntimeException(e); + } + inReport("/word/" + pathName, insReport.getId()); + } +// File tempFile = null; +// File unzipDir = null; +// try { +// tempFile = File.createTempFile(wordUrl, ".zip"); +// file.transferTo(tempFile); +// +// unzipDir = new File("uploaded_files"); +// if (!unzipDir.exists()) { +// unzipDir.mkdir(); +// } +// unzip(tempFile, unzipDir); +// // 澶勭悊瑙e帇鍚庣殑鏂囦欢 +// File[] files = unzipDir.listFiles(); +// if (files != null) { +// for (File f : files) { +// // 鏍规嵁鏂囦欢鍚嶆煡璇d +// String name = f.getName(); +// String code = f.getName().replace(".docx", "").replace("JCZX", "JCZX/"); +// if(f.getName().lastIndexOf("_") != -1) { +// code = code.substring(f.getName().lastIndexOf("_") + 1); +// } +// //InsReport insReport = insReportMapper.selectOne(Wrappers.<InsReport>lambdaQuery().eq(InsReport::getCode, f.getName().replace(".docx", "").replace("JCZX", "JCZX/"))); +// InsReport insReport = insReportMapper.selectOne(Wrappers.<InsReport>lambdaQuery().eq(InsReport::getCode, code)); +// if (ObjectUtils.isEmpty(insReport)) { +// throw new ErrorException("娌℃湁鎵惧埌 " + f.getName() + " 杩欎釜鏂囦欢瀵瑰簲鐨勬姤鍛婃暟鎹�"); +// } +// // 濡傛灉UrlS鏈夊�� 鍏堝皢璇ユ枃浠跺垹闄� +// if(Strings.isNotEmpty(insReport.getUrlS())) { +// String url = wordUrl + File.separator + insReport.getUrlS().replace("/word/", ""); +// File file1 = new File(url); +// if(file1.exists()) { +// file1.delete(); +// } +// } +// String urlString; +// String pathName; +// try { +// String path = wordUrl; +// File realpath = new File(path); +// if (!realpath.exists()) { +// realpath.mkdirs(); +// } +// pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + insReport.getCode().replace("/", "") + ".docx"; +// urlString = realpath + "/" + pathName; +// // 澶嶅埗鏂囦欢鍒版寚瀹氳矾寰� +// Files.copy(f.toPath(), new File(urlString).toPath(), StandardCopyOption.REPLACE_EXISTING); +// inReport("/word/" + pathName, insReport.getId()); +// } +// catch (IOException e) { +// throw new ErrorException("鏂囦欢涓婁紶澶辫触"); +// } +// } +// } +// } catch (IOException e) { +// throw new ErrorException("鏂囦欢澶勭悊澶辫触"); +// } finally { +// if (tempFile != null && tempFile.exists()) { +// tempFile.delete(); +// } +// // 閫掑綊鍒犻櫎瑙e帇鐩綍鍙婂叾涓殑鏂囦欢 +// if (unzipDir.exists()) { +// deleteDirectory(unzipDir); // 鍒犻櫎鏃х殑涓存椂鏂囦欢澶� +// } +// } + return 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void withdraw(Map<String,Object> map) { + Integer id = Integer.parseInt(map.get("id").toString()); + List<String> list = JSONArray.parseArray(map.get("laboratory").toString(), String.class); + Integer insOrderId = insReportMapper.selectById(id).getInsOrderId(); + List<InsOrderState> insOrderStateS = insOrderStateMapper.selectList(new LambdaQueryWrapper<InsOrderState>() + .eq(InsOrderState::getInsOrderId, insOrderId) + .in(CollectionUtils.isNotEmpty(list),InsOrderState::getLaboratory, list)); + if(CollectionUtils.isNotEmpty(insOrderStateS)) { + List<Integer> collect = insOrderStateS.stream().map(InsOrderState::getId).collect(Collectors.toList()); + // 淇敼璇ュ崟瀛愯瘯楠屽鐨勭姸鎬佷负寰呭鏍革紝鍒犻櫎鎶ュ憡淇℃伅 + insOrderStateMapper.update(null,new LambdaUpdateWrapper<InsOrderState>() + .set(InsOrderState::getInsState,3) // 寰呭鏍� + .in(InsOrderState::getId,collect)); + insReportMapper.delete(new LambdaQueryWrapper<InsReport>().eq(InsReport::getId,id)); + } + } + + @Override + public List<Map<String, Object>> getLaboratoryByReportId(Integer id) { + List<Map<String, Object>> list = new ArrayList<>(); + Integer insOrderId = insReportMapper.selectById(id).getInsOrderId(); + insOrderStateMapper.selectList(new LambdaQueryWrapper<InsOrderState>() + .eq(InsOrderState::getInsOrderId,insOrderId)) + .forEach(insOrderState -> { + Map<String, Object> map = new HashMap<>(); + map.put("label",insOrderState.getLaboratory()); + map.put("value",insOrderState.getLaboratory()); + list.add(map); + }); + return list; + } + + @Override + public Map<String, Object> getReportCountInfo(ReportPageDto reportPageDto) { + HashMap<String, Object> map = new HashMap<>(); + User user = userMapper.selectById(SecurityUtils.getUserId());//褰撳墠鐧诲綍鐨勪汉 + //鑾峰彇褰撳墠浜烘墍灞炲疄楠屽id + String departLimsId = user.getDepartLimsId(); + String laboratory = null; + if (ObjectUtils.isNotEmpty(departLimsId) && !departLimsId.isEmpty()) { + String[] split = departLimsId.split(","); + //鏌ヨ瀵瑰簲鏋舵瀯鍚嶇О(閫氫俊瀹為獙瀹�,鐢靛姏瀹為獙瀹�,妫�娴嬪姙) + String departLims = insOrderMapper.seldepLimsId(Integer.parseInt(split[split.length - 1])); + if (departLims.contains("瀹為獙瀹�")) { + laboratory = departLims; + } + } + QueryWrapper<ReportPageDto> wrapper = QueryWrappers.queryWrappers(reportPageDto); + if(Objects.nonNull(reportPageDto.getCreateTimeRange())){ + wrapper.gt(reportPageDto.getCreateTimeRange().size()>1,"create_time",reportPageDto.getCreateTimeRange().get(0)) + .lt(reportPageDto.getCreateTimeRange().size()>1,"create_time",reportPageDto.getCreateTimeRange().get(1)); + + } + map.put("unSubmitCount",insReportMapper.findReportCountInfo(wrapper,laboratory,"ir.write_user_id").size()); + map.put("unExamineCount",insReportMapper.findReportCountInfo(wrapper,laboratory,"ir.is_examine").size()); + map.put("unRatifyCount",insReportMapper.findReportCountInfo(wrapper,laboratory,"ir.is_ratify").size()); + return map; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void batchApprovalReport(List<Integer> ids) { + redisTemplate.setKeySerializer(new StringRedisSerializer()); + Integer userId = SecurityUtils.getUserId().intValue(); + String key = SYNC_REPORT_KEY_PREFIX+userId; + //鎵ц鍓嶅垹闄や箣鍓嶇殑keys + deleteRedisKeys(key); + synchronized (key) { + redisTemplate.opsForValue().set(key,1); + RequestContextHolder.setRequestAttributes(RequestContextHolder.getRequestAttributes(),true); + //寮傛鎵ц瀹℃壒鎿嶄綔 + CompletableFuture.runAsync(() -> { + try { + runBatchApproval(ids,key); + }catch (Exception e){ + //鍒犻櫎key + deleteRedisKeys(key); + redisTemplate.opsForValue().set(key+"_exception",e.getMessage()); + } + },threadPoolTaskExecutor); + } + } + + /** + * 鍒犻櫎redis key + * @param key + */ + private void deleteRedisKeys(String key){ + redisTemplate.delete(key); + redisTemplate.delete(key+"_num"); + redisTemplate.delete(key+"_count"); + redisTemplate.delete(key+"_surplus"); + redisTemplate.delete(key+"_exception"); + } + + /** + * 鎵ц瀹℃壒鎿嶄綔 + * @param ids 鎶ュ憡id鍒楄〃 + */ + private void runBatchApproval(List<Integer> ids,String keyPrefix) { + if(ids.isEmpty()){ + return; + } + long start = System.currentTimeMillis(); + String surplusKey = keyPrefix + "_surplus";//鍓╀綑鏉℃暟 + String numKey = keyPrefix + "_num";//鎬昏繘搴� + String countKey = keyPrefix + "_count";//鎬绘潯鏁� + redisTemplate.opsForValue().set(countKey, ids.size()); + redisTemplate.opsForValue().set(surplusKey, ids.size()); + Object countObj = redisTemplate.opsForValue().get(countKey); + long parsed2 = Long.parseLong(String.valueOf(countObj)); + AtomicLong count = new AtomicLong(parsed2); + for (Integer id : ids) { + //涓氬姟浠g爜 + InsReport insReport = insReportMapper.selectById(id); + String laboratory = insOrderMapper.selectById(insReport.getInsOrderId()).getLaboratory(); + //鑾峰彇绛惧悕鍜屽嵃绔� + String sealUrl; + String writeUrl; + String examineUrl; + String ratifyUrl; + int writeId; + int examineId; + int ratifyId; + try { + sealUrl = insReportMapper.getLaboratoryByName(laboratory);//鍗扮珷 + Map<String,Object> urlMap = insReportApproveConfigMapper.selectApprovalConfigByLaboratory(laboratory);//绛惧悕 + writeUrl = imgUrl + "/" + (Objects.isNull(urlMap.get("writeUrl"))?"":urlMap.get("writeUrl").toString());//缂栧埗浜虹鍚島rl + examineUrl = imgUrl + "/" + (Objects.isNull(urlMap.get("examineUrl"))?"":urlMap.get("examineUrl").toString());//瀹℃牳浜虹鍚島rl + ratifyUrl = imgUrl + "/" + (Objects.isNull(urlMap.get("ratifyUrl"))?"":urlMap.get("ratifyUrl").toString());//鎵瑰噯浜虹鍚島rl + writeId = Integer.parseInt(urlMap.get("writeId").toString());//缂栧埗浜� + examineId = Integer.parseInt(urlMap.get("examineId").toString());//瀹℃牳浜虹 + ratifyId =Integer.parseInt(urlMap.get("ratifyId").toString());//鎵瑰噯浜� + } catch (Exception e) { + throw new ErrorException("鎵句笉鍒扮鍚嶅拰鍗扮珷"); + } + //璁剧疆鎶ュ憡淇℃伅 + insReport.setIsExamine(1); + insReport.setIsRatify(1); + insReport.setState(1); + insReport.setWriteUserId(writeId); + insReport.setExamineUserId(examineId); + insReport.setRatifyUserId(ratifyId); + if(Objects.isNull(insReport.getWriteTime())){ + insReport.setWriteTime(LocalDateTime.now()); + } + if(Objects.isNull(insReport.getExamineTime())){ + insReport.setExamineTime(LocalDateTime.now()); + } + if(Objects.isNull(insReport.getRatifyTime())){ + insReport.setRatifyTime(LocalDateTime.now()); + } + //鏇存柊璁㈠崟鐘舵�� + InsOrder insOrder = new InsOrder(); + insOrder.setId(insReport.getInsOrderId()); + insOrder.setState(4); + insOrderMapper.updateById(insOrder); + //绯荤粺鐢熸垚鎶ュ憡鍦板潃 + String url = insReport.getUrl(); + //鎵嬪姩涓婁紶鎶ュ憡鍦板潃 + String urlS = insReport.getUrlS(); + String finalUrl = (StringUtils.isBlank(urlS) ? url : urlS).replace("/word", wordUrl); + wordInsertUrl(new HashMap<String, Object>() {{ + put("writeUrl", new FilePictureRenderData(100,50,writeUrl)); + put("examineUrl", new FilePictureRenderData(100,50,examineUrl)); + put("ratifyUrl", new FilePictureRenderData(100,50,ratifyUrl)); + put("seal1", new FilePictureRenderData(600,600,imgUrl + "/" +sealUrl)); + put("seal2", new FilePictureRenderData(600,600,imgUrl + "/" +sealUrl)); + }}, finalUrl); + wordToPdf(finalUrl, sealUrl); + // 淇敼涓存椂pdf + String tempUrlPdf = wordToPdfTemp((StrUtil.isBlank(urlS) ? url : urlS).replace("/word", wordUrl)); + insReport.setTempUrlPdf("/word/" + tempUrlPdf); + //鏇存柊鎶ュ憡鐘舵�� + insReportMapper.updateById(insReport); + //鏇存柊redis鐨刱ey + Object o = redisTemplate.opsForValue().get(numKey); + if (Objects.isNull(o)) { + redisTemplate.opsForValue().set(numKey, 1); + } else { + long parsed = Long.parseLong(String.valueOf(o)); + redisTemplate.opsForValue().set(numKey, parsed + 1); + } + redisTemplate.opsForValue().set(surplusKey, count.decrementAndGet()); + } + long end = System.currentTimeMillis(); + long useTime = (end-start)/1000; + log.info("绾跨▼{}鎶ュ憡瀹℃壒缁撴潫锛岃�楁椂:{}s",keyPrefix,useTime); + } + + @Override + public Map<String, Object> getBatchApprovalProgress() { + Integer userId = SecurityUtils.getUserId().intValue(); + String key = SYNC_REPORT_KEY_PREFIX + userId; + Map<String, Object> map = new HashMap<>(); + map.put("hasProgress",false); + map.put("hasNum",0); + map.put("hasCount",0); + map.put("surplus",0); + Object o = redisTemplate.opsForValue().get(key); + if(Objects.nonNull(o)){ + map.put("hasProgress",true); + } + Object o1 = redisTemplate.opsForValue().get(key+"_num"); + Object o2 = redisTemplate.opsForValue().get(key+"_count"); + Object surplus = redisTemplate.opsForValue().get(key+"_surplus"); + Object exception = redisTemplate.opsForValue().get(key+"_exception"); + if(Objects.nonNull(surplus)){ + map.put("surplus",surplus); + } + if (Objects.nonNull(o1)&&Objects.nonNull(o2)){ + //寰楀埌杩涘害 + BigDecimal multiply = new BigDecimal(String.valueOf(o1)).divide(new BigDecimal(String.valueOf(o2)), 2,BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(100)); + map.put("hasNum",multiply); + map.put("hasCount",Long.parseLong(String.valueOf(o2))); + } + map.put("hasException",exception); + return map; + } + + //瑙e帇鏂囦欢澶� + private void unzip(File zipFile, File destDir) throws IOException { + try (ZipFile zip = new ZipFile(zipFile)) { + Enumeration<? extends ZipEntry> entries = zip.entries(); + while (entries.hasMoreElements()) { + ZipEntry entry = entries.nextElement(); + File file = new File(destDir, entry.getName()); + if (entry.isDirectory()) { + file.mkdirs(); + } else { + file.getParentFile().mkdirs(); + try (InputStream in = zip.getInputStream(entry); + OutputStream out = new FileOutputStream(file)) { + byte[] buffer = new byte[1024]; + int len; + while ((len = in.read(buffer)) > 0) { + out.write(buffer, 0, len); + } + } + } + } + } + } + + // 鍘嬬缉鏂囦欢澶� + public static void zipDirectory(String sourceDirPath, String zipFilePath) throws IOException { + try (ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFilePath))) { + Path sourceDir = Paths.get(sourceDirPath); + Files.walk(sourceDir) + .filter(path -> !Files.isDirectory(path)) + .forEach(path -> { + ZipEntry zipEntry = new ZipEntry(sourceDir.relativize(path).toString()); + try { + zipOut.putNextEntry(zipEntry); + Files.copy(path, zipOut); + zipOut.closeEntry(); + } catch (IOException e) { + e.printStackTrace(); + } + }); + } + } + + // 鍒犻櫎鏂囦欢澶瑰強鍏跺唴瀹� + public static void deleteDirectory(File directory) throws IOException { + if (directory.isDirectory()) { + File[] files = directory.listFiles(); + if (files != null) { + for (File file : files) { + deleteDirectory(file); + } + } + } + Files.delete(directory.toPath()); + } + + /** + * word杞崲pdf + * @param path + * @return + */ + public String wordToPdfTemp(String path) { + try { + return wordToPdf(path, path.replace(".docx", ".pdf")); + } catch (Exception e) { + throw new ErrorException("杞崲澶辫触"); + } + } + + public String wordToPdf(String wordPath, String pdfPath) { + FileOutputStream os = null; + try { + //鍑瘉 涓嶇劧鍒囨崲鍚庢湁姘村嵃 + InputStream is = Files.newInputStream(new File(licenseUrl).toPath()); + License license = new License(); + license.setLicense(is); + if (!license.getIsLicensed()) { + System.out.println("License楠岃瘉涓嶉�氳繃..."); + return null; + } + //鐢熸垚涓�涓┖鐨凱DF鏂囦欢 + File file; + //鍒ゆ柇鏄惁鏄繘鍘傛姤鍛� + file = new File(pdfPath); + os = new FileOutputStream(file); + //瑕佽浆鎹㈢殑word鏂囦欢 + Document doc = new Document(wordPath); + doc.save(os, SaveFormat.PDF); + String name = file.getName(); + return file.getName(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (os != null) { + try { + os.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return null; + } + +// @Override +// public void wordToPdf(String path, String sealUrl) { +// CompletableFuture.supplyAsync(() -> { +// try { +// wordToPdf(path, path.replace(".docx", ".pdf"), sealUrl); +// return null; +// } catch (Exception e) { +// throw new ErrorException("杞崲澶辫触"); +// } +// }).thenAccept(res -> { +// }).exceptionally(e -> { +// e.printStackTrace(); +// return null; +// }); +// } + + + +// public String wordToPdf(String wordPath, String pdfPath, String sealUrl) { +// FileOutputStream os = null; +// try { +// //鍑瘉 涓嶇劧鍒囨崲鍚庢湁姘村嵃 +//// InputStream inputStream = this.getClass().getResourceAsStream("/lib/license.xml"); +// /*String url; +// try { +// InputStream inputStream = this.getClass().getResourceAsStream("/lib/license.xml"); +// File file = File.createTempFile("temp", ".tmp"); +// OutputStream outputStream = new FileOutputStream(file); +// IOUtils.copy(inputStream, outputStream); +// url = file.getAbsolutePath(); +// } catch (FileNotFoundException e) { +// throw new ErrorException("鎵句笉鍒版ā鏉挎枃浠�"); +// } catch (IOException e) { +// throw new RuntimeException(e); +// }*/ +// InputStream is = new ClassPathResource("/lib/license.xml").getInputStream(); +// License license = new License(); +// license.setLicense(is); +// if (!license.getIsLicensed()) { +// System.out.println("License楠岃瘉涓嶉�氳繃..."); +// return null; +// } +// //鐢熸垚涓�涓┖鐨凱DF鏂囦欢 +// File file = new File(pdfPath.replace(".pdf", "-1.pdf")); +// os = new FileOutputStream(file); +// //瑕佽浆鎹㈢殑word鏂囦欢 +// com.aspose.words.Document doc = new com.aspose.words.Document(wordPath); +// doc.save(os, SaveFormat.PDF); +// +// //娣诲姞楠戠紳绔� +// stamperCheckMarkPDF(pdfPath.replace(".pdf", "-1.pdf"), pdfPath, imgUrl + "/" + sealUrl); +// +// +// } catch (Exception e) { +// e.printStackTrace(); +// } finally { +// if (os != null) { +// try { +// os.close(); +// } catch (IOException e) { +// e.printStackTrace(); +// } +// } +// } +// return null; +// } + + /** + * 鍒囧壊鍥剧墖 + * + * @param Path 鍥剧墖璺緞 + * @param n 鍒囧壊浠芥暟 + */ + public static com.itextpdf.text.Image[] slicingImages(String Path, int n) throws IOException, BadElementException { + com.itextpdf.text.Image[] nImage = new com.itextpdf.text.Image[n]; + BufferedImage img = ImageIO.read(new File(Path)); + + int h = img.getHeight(); + int w = img.getWidth(); + + int sw = w / n; + for (int i = 0; i < n; i++) { + BufferedImage subImg; + if (i == n - 1) {//鏈�鍚庡墿浣欓儴鍒� + subImg = img.getSubimage(i * sw, 0, w - i * sw, h); + } else {//鍓峮-1鍧楀潎鍖�鍒� + subImg = img.getSubimage(i * sw, 0, sw, h); + } + ByteArrayOutputStream out = new ByteArrayOutputStream(); + ImageIO.write(subImg, Path.substring(Path.lastIndexOf('.') + 1), out); + nImage[i] = com.itextpdf.text.Image.getInstance(out.toByteArray()); + + } + return nImage; + } + + /** + * 鐩栭獞缂濈珷 + * + * @param infilePath 鍘烶DF璺緞 + * @param outFilePath 杈撳嚭PDF璺緞 + */ + public static void stamperCheckMarkPDF(String infilePath, String outFilePath, String picPath) throws IOException, DocumentException { + PdfReader reader = new PdfReader(infilePath);//閫夋嫨闇�瑕佸嵃绔犵殑pdf + PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(outFilePath));//鍔犲畬鍗扮珷鍚庣殑pdf + + + com.itextpdf.text.Rectangle pageSize = reader.getPageSize(1);//鑾峰緱绗竴椤� + float height = pageSize.getHeight(); + float width = pageSize.getWidth(); + + int nums = reader.getNumberOfPages(); + com.itextpdf.text.Image[] nImage = slicingImages(picPath, nums);//鐢熸垚楠戠紳绔犲垏鍓插浘鐗� + + for (int n = 1; n <= nums; n++) { + PdfContentByte over = stamp.getOverContent(n);//璁剧疆鍦ㄧ鍑犻〉鎵撳嵃鍗扮珷 + com.itextpdf.text.Image img = nImage[n - 1];//閫夋嫨鍥剧墖 + float newHeight = 100f; + float newWidth = img.getWidth() / (img.getHeight() / 100); + img.scaleAbsolute(newWidth, newHeight);//鎺у埗鍥剧墖澶у皬 + img.setAbsolutePosition(width - newWidth, height / 2 - newHeight / 2);//鎺у埗鍥剧墖浣嶇疆 + over.addImage(img); + } + stamp.close(); + } +} + + + + + + diff --git a/cnas-require/src/main/java/com/ruoyi/requier/service/impl/PkMasterServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/requier/service/impl/PkMasterServiceImpl.java new file mode 100644 index 0000000..cbafb5d --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/service/impl/PkMasterServiceImpl.java @@ -0,0 +1,809 @@ +package com.ruoyi.requier.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.basic.vo.StandardProductVO; +import com.ruoyi.common.core.domain.entity.User; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.framework.exception.ErrorException; +import com.ruoyi.inspect.mapper.*; +import com.ruoyi.inspect.pojo.*; +import com.ruoyi.inspect.vo.ProductVo; +import com.ruoyi.performance.mapper.AuxiliaryOutputWorkingHoursMapper; +import com.ruoyi.performance.mapper.PerformanceShiftMapper; +import com.ruoyi.performance.mapper.ShiftTimeMapper; +import com.ruoyi.performance.pojo.AuxiliaryOutputWorkingHours; +import com.ruoyi.performance.pojo.PerformanceShift; +import com.ruoyi.performance.pojo.ShiftTime; +import com.ruoyi.requier.mapper.PkMasterMapper; +import com.ruoyi.requier.mapper.PkSlaveMapper; +import com.ruoyi.requier.pojo.PkMaster; +import com.ruoyi.requier.pojo.PkSlave; +import com.ruoyi.requier.service.InsOrderPlanService; +import com.ruoyi.requier.service.PkMasterService; +import com.ruoyi.system.mapper.UserMapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.logging.log4j.util.Strings; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.stream.Collectors; + +/** + * <p> + * 鏈嶅姟瀹炵幇绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2024-07-29 01:16:26 + */ +@Service +@Slf4j +public class PkMasterServiceImpl extends ServiceImpl<PkMasterMapper, PkMaster> implements PkMasterService { + + @Resource + private PkMasterMapper pkMasterMapper; + + @Resource + private PkSlaveMapper pkSlaveMapper; + + @Resource + private InsOrderMapper insOrderMapper; + + @Resource + private InsSampleMapper insSampleMapper; + + @Resource + private InsProductMapper insProductMapper; + + @Resource + private InsProductResultMapper insProductResultMapper; + + @Resource + private InsProductUserMapper insProductUserMapper; + + @Resource + private UserMapper userMapper; + + @Resource + private InsOrderPlanService insOrderPlanService; + + @Resource + private InsOrderPlanServiceImpl insOrderPlanServiceImpl; + + @Resource + private ShiftTimeMapper shiftTimeMapper; + @Resource + private PerformanceShiftMapper performanceShiftMapper; + + @Resource + private AuxiliaryOutputWorkingHoursMapper auxiliaryOutputWorkingHoursMapper; + + //娓╁害寰幆鏁伴噰 + @Override + @Transactional(rollbackFor = Exception.class) + public int temDataAcquisition(PkMaster pkMaster) { + Integer userId = SecurityUtils.getUserId().intValue(); + //鏌ヨ鏁伴噰鍏宠仈鐨勫瓙琛ㄤ俊鎭� + PkMaster master = new PkMaster(); + List<PkMaster> pkMasters = pkMasterMapper.selectList(Wrappers.<PkMaster>lambdaQuery() + .eq(PkMaster::getEntrustCode, pkMaster.getEntrustCode()) + .eq(PkMaster::getSampleCode, pkMaster.getSampleCode()) + .eq(PkMaster::getModel, pkMaster.getModel()) + .eq(PkMaster::getCycles, pkMaster.getCycles()) + .eq(PkMaster::getTemperature, pkMaster.getTemperature()).orderByDesc(PkMaster::getId)); + if(!pkMasters.isEmpty()){ + master = pkMasters.get(0); + } + //鏌ヨ瀵瑰簲鐨勬楠屽崟琛� + InsOrder insOrder = insOrderMapper.selectOne(Wrappers.<InsOrder>lambdaQuery().eq(InsOrder::getState, 1).eq(InsOrder::getEntrustCode, pkMaster.getEntrustCode())); + if (ObjectUtils.isEmpty(insOrder)) { + throw new ErrorException("娌℃湁鎵惧埌瀵瑰簲濮旀墭鍗�" + pkMaster.getEntrustCode()); + } + //鏌ヨ瀵瑰簲妫�楠屾牱鍝乮d + InsSample insSample = insSampleMapper.selectOne(Wrappers.<InsSample>lambdaQuery() + .eq(InsSample::getInsOrderId, insOrder.getId()) + .eq(InsSample::getSampleCode, pkMaster.getSampleCode()) + .eq(InsSample::getModel, pkMaster.getModel())); + if (ObjectUtils.isEmpty(insSample)) { + throw new ErrorException("娌℃湁鎵惧埌瀵瑰簲濮旀墭鍗曚笅鐨勮鏍峰搧" + pkMaster.getSampleCode()); + } if (ObjectUtils.isNotEmpty(master)) { + //throw new ErrorException("娌℃湁鎵惧埌瀵瑰簲濮旀墭鍗�" + pkMaster.getEntrustCode() + "鐨勬暟閲囨暟鎹�"); + List<PkSlave> pkSlaves = pkSlaveMapper.selectList1(master.getIsid()); + if (CollectionUtils.isEmpty(pkSlaves)) { + throw new ErrorException("娌℃湁鎵惧埌瀵瑰簲濮旀墭鍗�" + pkMaster.getEntrustCode() + "鐨勬暟閲囧瓙鏁版嵁"); + } + + //鏌ヨ瀵瑰簲妫�楠岄」鐩� + Map<String, Object> map = insOrderPlanService.temCycle(insSample.getId(), pkMaster.getCycles(), pkMaster.getTemperature()); + List<ProductVo> productVos = (List<ProductVo>) map.get("productVos"); + if (CollectionUtils.isNotEmpty(productVos)) { + //todo 濡傛灉娓╁害寰幆鐨勯」鐩畁m鏈夋敼鍔ㄨ繖閲岄渶瑕佹敼鍔� @zss + for (PkSlave pkSlave : pkSlaves) { + for (ProductVo productVo : productVos) { + if (pkSlave.getInsBushingId().equals(productVo.getBushColor()) && + pkSlave.getInsFibersId().equals(productVo.getCode()) && + pkSlave.getInsFiberId().equals(productVo.getColor())) { + //鎵惧埌瀵瑰簲鐨勬暟鎹�(瀵瑰簲濂楃鍏夌氦鐨勬暟鎹�) + List<InsProductResult> results = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, productVo.getInsProduct().getId())); + InsProductResult result; + if (CollectionUtils.isEmpty(results)) { + result = new InsProductResult(); + } else { + result = results.get(0); + } + result.setInsProductId(productVo.getInsProduct().getId());//妫�楠岄」鐩甶d + List<Map<String, Object>> iv = new ArrayList<>(); + List<Map<String, Object>> cv = new ArrayList<>(); + if (productVo.getInsProduct().getInspectionItemClass().equals("1310nm")) { + //1310nm澶栫 + Map<String, Object> map1 = new HashMap<>(); + map1.put("u", userId + ""); + map1.put("v", ObjectUtils.isNotEmpty(pkSlave.getWeaken1310A()) ? pkSlave.getWeaken1310A().toString() : null); + iv.add(map1); + //1310nm鍐呯 + Map<String, Object> map2 = new HashMap<>(); + map2.put("u", userId + ""); + map2.put("v", ObjectUtils.isNotEmpty(pkSlave.getWeaken1310B()) ? pkSlave.getWeaken1310B().toString() : null); + iv.add(map2); + //1310nm琛板噺绯绘暟 + Map<String, Object> map3 = new HashMap<>(); + double v = 0.0; + if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1310A()) && ObjectUtils.isNotEmpty(pkSlave.getWeaken1310B())) { + v = (pkSlave.getWeaken1310A() + pkSlave.getWeaken1310B()) / 2; + } else if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1310A()) && ObjectUtils.isEmpty(pkSlave.getWeaken1310B())) { + v = pkSlave.getWeaken1310A(); + } else if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1310B()) && ObjectUtils.isEmpty(pkSlave.getWeaken1310A())) { + v = pkSlave.getWeaken1310B(); + } else { + log.info("鏁伴噰id锛歿}", pkSlave.getId()); + throw new ErrorException("1310鐨勪袱绔兘娌℃湁鏁版嵁!!!"); + } + BigDecimal decimal = BigDecimal.valueOf(v).setScale(3, RoundingMode.HALF_UP); + map3.put("v", String.valueOf(decimal)); + cv.add(map3); + } else if (productVo.getInsProduct().getInspectionItemClass().equals("1550nm")) { + //1550nm澶栫 + Map<String, Object> map1 = new HashMap<>(); + map1.put("u", userId + ""); + map1.put("v", ObjectUtils.isNotEmpty(pkSlave.getWeaken1550A()) ? pkSlave.getWeaken1550A().toString() : null); + iv.add(map1); + //1550nm鍐呯 + Map<String, Object> map2 = new HashMap<>(); + map2.put("u", userId + ""); + map2.put("v", ObjectUtils.isNotEmpty(pkSlave.getWeaken1550B()) ? pkSlave.getWeaken1550B().toString() : null); + iv.add(map2); + //1550nm琛板噺绯绘暟 + Map<String, Object> map3 = new HashMap<>(); + double v = 0.0; + if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1550A()) && ObjectUtils.isNotEmpty(pkSlave.getWeaken1550B())) { + v = (pkSlave.getWeaken1550A() + pkSlave.getWeaken1550B()) / 2; + } else if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1550A()) && ObjectUtils.isEmpty(pkSlave.getWeaken1550B())) { + v = pkSlave.getWeaken1550A(); + } else if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1550B()) && ObjectUtils.isEmpty(pkSlave.getWeaken1550A())) { + v = pkSlave.getWeaken1550B(); + } else { + throw new ErrorException("1550鐨勪袱绔兘娌℃湁鏁版嵁!!!"); + } + BigDecimal decimal = BigDecimal.valueOf(v).setScale(3, RoundingMode.HALF_UP); + map3.put("v", String.valueOf(decimal)); + cv.add(map3); + } else if (productVo.getInsProduct().getInspectionItemClass().equals("1625nm")) { + //1625nm澶栫 + Map<String, Object> map1 = new HashMap<>(); + map1.put("u", userId + ""); + map1.put("v", ObjectUtils.isNotEmpty(pkSlave.getWeaken1625A()) ? pkSlave.getWeaken1625A().toString() : null); + iv.add(map1); + //1625nm鍐呯 + Map<String, Object> map2 = new HashMap<>(); + map2.put("u", userId + ""); + map2.put("v", ObjectUtils.isNotEmpty(pkSlave.getWeaken1625B()) ? pkSlave.getWeaken1625B().toString() : null); + iv.add(map2); + //1625nm琛板噺绯绘暟 + Map<String, Object> map3 = new HashMap<>(); + double v = 0.0; + if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1625A()) && ObjectUtils.isNotEmpty(pkSlave.getWeaken1625B())) { + v = (pkSlave.getWeaken1625A() + pkSlave.getWeaken1625B()) / 2; + } else if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1625A()) && ObjectUtils.isEmpty(pkSlave.getWeaken1625B())) { + v = pkSlave.getWeaken1625A(); + } else if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1625B()) && ObjectUtils.isEmpty(pkSlave.getWeaken1625A())) { + v = pkSlave.getWeaken1625B(); + } else { + throw new ErrorException("1625鐨勪袱绔兘娌℃湁鏁版嵁!!!"); + } + BigDecimal decimal = BigDecimal.valueOf(v).setScale(3, RoundingMode.HALF_UP); + map3.put("v", String.valueOf(decimal)); + cv.add(map3); + } else if (productVo.getInsProduct().getInspectionItemClass().equals("1383nm")) { + //1383nm澶栫 + Map<String, Object> map1 = new HashMap<>(); + map1.put("u", userId + ""); + map1.put("v", ObjectUtils.isNotEmpty(pkSlave.getWeaken1383A()) ? pkSlave.getWeaken1383A().toString() : null); + iv.add(map1); + //1383nm鍐呯 + Map<String, Object> map2 = new HashMap<>(); + map2.put("u", userId + ""); + map2.put("v", ObjectUtils.isNotEmpty(pkSlave.getWeaken1383B()) ? pkSlave.getWeaken1383B().toString() : null); + iv.add(map2); + //1383nm琛板噺绯绘暟 + Map<String, Object> map3 = new HashMap<>(); + double v = 0.0; + if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1383A()) && ObjectUtils.isNotEmpty(pkSlave.getWeaken1383B())) { + v = (pkSlave.getWeaken1383A() + pkSlave.getWeaken1310B()) / 2; + } else if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1383A()) && ObjectUtils.isEmpty(pkSlave.getWeaken1383B())) { + v = pkSlave.getWeaken1383A(); + } else if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1383B()) && ObjectUtils.isEmpty(pkSlave.getWeaken1383A())) { + v = pkSlave.getWeaken1383B(); + } else { + throw new ErrorException("1383鐨勪袱绔兘娌℃湁鏁版嵁!!!"); + } + BigDecimal decimal = BigDecimal.valueOf(v).setScale(3, RoundingMode.HALF_UP); + map3.put("v", String.valueOf(decimal)); + cv.add(map3); + } else if (productVo.getInsProduct().getInspectionItemClass().equals("1490nm")) { + //1490nm澶栫 + Map<String, Object> map1 = new HashMap<>(); + map1.put("u", userId + ""); + map1.put("v", ObjectUtils.isNotEmpty(pkSlave.getWeaken1490A()) ? pkSlave.getWeaken1490A().toString() : null); + iv.add(map1); + //1490nm鍐呯 + Map<String, Object> map2 = new HashMap<>(); + map2.put("u", userId + ""); + map2.put("v", ObjectUtils.isNotEmpty(pkSlave.getWeaken1490B()) ? pkSlave.getWeaken1490B().toString() : null); + iv.add(map2); + //1490nm琛板噺绯绘暟 + Map<String, Object> map3 = new HashMap<>(); + double v = 0.0; + if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1490A()) && ObjectUtils.isNotEmpty(pkSlave.getWeaken1490B())) { + v = (pkSlave.getWeaken1490A() + pkSlave.getWeaken1310B()) / 2; + } else if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1490A()) && ObjectUtils.isEmpty(pkSlave.getWeaken1490B())) { + v = pkSlave.getWeaken1490A(); + } else if (ObjectUtils.isNotEmpty(pkSlave.getWeaken1490B()) && ObjectUtils.isEmpty(pkSlave.getWeaken1490A())) { + v = pkSlave.getWeaken1490B(); + } else { + throw new ErrorException("1490鐨勪袱绔兘娌℃湁鏁版嵁!!!"); + } + BigDecimal decimal = BigDecimal.valueOf(v).setScale(3, RoundingMode.HALF_UP); + map3.put("v", String.valueOf(decimal)); + cv.add(map3); + } else { + throw new ErrorException("娌℃湁鎵惧埌璇ユ俯搴︾殑妫�楠岄」鐩�" + productVo.getInsProduct().getInspectionItemClass()); + } + result.setInsValue(JSON.toJSONString(iv));//妫�楠屽�� + result.setComValue(JSON.toJSONString(cv));//璁$畻鍊� + if (BeanUtil.isEmpty(result.getId())) { + result.setCreateUser(userId); + result.setUpdateUser(userId); + insProductResultMapper.insert(result); + } else { + result.setUpdateUser(userId); + result.setUpdateTime(LocalDateTime.now()); + insProductResultMapper.updateById(result); + } + + InsProduct insProduct = productVo.getInsProduct(); + InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insProduct.getId())); + String[] comValue = insProductResult.getComValue().split(":"); + String comple = comValue[comValue.length-1].split("\"")[1]; + //棣栧厛鏌ョ湅娓╁害鏄惁鏄�20搴﹀父娓� + if (!pkMaster.getTemperature().equals("20鈩�(甯告俯)")) { + //濡傛灉涓嶆槸鍏堟煡璇㈡槸鍚︽湁鍊� + int a = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getInsSampleId, insSample.getId()) + .eq(InsProduct::getInspectionItem, "1") + .eq(InsProduct::getInspectionItemSubclass, "20鈩�(甯告俯)")).stream().map(InsProduct::getInsResult).anyMatch(ObjectUtils::isEmpty) ? 1 : 0; + if (a == 1) { + throw new ErrorException("鍏堣幏鍙�20鈩�(甯告俯)鐨勬楠屽��,鍐嶈幏鍙栧叾浠栨俯搴�" + pkMaster.getSampleCode()); + } else { + //璁$畻琛板噺宸� + InsProduct insPro = null; + switch (insProduct.getInspectionItemClass()) { + case "1310nm": + //鏌ヨ20鈩�(甯告俯)1310nm鐨勮“鍑忕郴鏁� + try { + insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getInsSampleId, insSample.getId()) + .eq(InsProduct::getInspectionItem, "1") + .eq(InsProduct::getInspectionItemSubclass, "20鈩�(甯告俯)") + .eq(InsProduct::getInspectionItemClass, "1310nm") + .eq(InsProduct::getInsFiberId, productVo.getInsProduct().getInsFiberId())); + } catch (Exception e) { + throw new ErrorException("娌℃湁鏌ュ埌20鈩�(甯告俯),1310nm椤圭洰" + productVo.getInsProduct().getInsFiberId() + "鍏夌氦鐨勬楠岄」鐩�"); + } + break; + case "1550nm": + //鏌ヨ20鈩�(甯告俯)1550nm鐨勮“鍑忕郴鏁� + try { + insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getInsSampleId, insSample.getId()) + .eq(InsProduct::getInspectionItem, "1") + .eq(InsProduct::getInspectionItemSubclass, "20鈩�(甯告俯)") + .eq(InsProduct::getInspectionItemClass, "1550nm") + .eq(InsProduct::getInsFiberId, productVo.getInsProduct().getInsFiberId())); + } catch (Exception e) { + throw new ErrorException("娌℃湁鏌ュ埌20鈩�(甯告俯),1625nm椤圭洰" + productVo.getInsProduct().getInsFiberId() + "鍏夌氦鐨勬楠岄」鐩�"); + } + break; + case "1625nm": + //鏌ヨ20鈩�(甯告俯)1625nm鐨勮“鍑忕郴鏁� + try { + insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getInsSampleId, insSample.getId()) + .eq(InsProduct::getInspectionItem, "1") + .eq(InsProduct::getInspectionItemSubclass, "20鈩�(甯告俯)") + .eq(InsProduct::getInspectionItemClass, "1625nm") + .eq(InsProduct::getInsFiberId, productVo.getInsProduct().getInsFiberId())); + } catch (Exception e) { + throw new ErrorException("娌℃湁鏌ュ埌20鈩�(甯告俯),1625nm椤圭洰" + productVo.getInsProduct().getInsFiberId() + "鍏夌氦鐨勬楠岄」鐩�"); + } + break; + case "1383nm": + //鏌ヨ20鈩�(甯告俯)1383nm鐨勮“鍑忕郴鏁� + try { + insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getInsSampleId, insSample.getId()) + .eq(InsProduct::getInspectionItem, "1") + .eq(InsProduct::getInspectionItemSubclass, "20鈩�(甯告俯)") + .eq(InsProduct::getInspectionItemClass, "1383nm") + .eq(InsProduct::getInsFiberId, productVo.getInsProduct().getInsFiberId())); + } catch (Exception e) { + throw new ErrorException("娌℃湁鏌ュ埌20鈩�(甯告俯),1383nm椤圭洰" + productVo.getInsProduct().getInsFiberId() + "鍏夌氦鐨勬楠岄」鐩�"); + } + break; + case "1490nm": + //鏌ヨ20鈩�(甯告俯)1490nm鐨勮“鍑忕郴鏁� + try { + insPro = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getInsSampleId, insSample.getId()) + .eq(InsProduct::getInspectionItem, "1") + .eq(InsProduct::getInspectionItemSubclass, "20鈩�(甯告俯)") + .eq(InsProduct::getInspectionItemClass, "1490nm") + .eq(InsProduct::getInsFiberId, productVo.getInsProduct().getInsFiberId())); + } catch (Exception e) { + throw new ErrorException("娌℃湁鏌ュ埌20鈩�(甯告俯),1490nm椤圭洰" + productVo.getInsProduct().getInsFiberId() + "鍏夌氦鐨勬楠岄」鐩�"); + } + break; + } + InsProductResult insProductRes = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, insPro.getId())); + String[] split = insProductRes.getComValue().split(":"); + double abs = Math.abs(Double.parseDouble(split[split.length-1].split("\"")[1]) - Double.parseDouble(comple)); + BigDecimal scale = BigDecimal.valueOf(abs).setScale(3, RoundingMode.HALF_UP); + insProduct.setLastValue(String.valueOf(scale)); + String ask = insProduct.getAsk(); + int insResult = 1; + switch (ask.charAt(0)) { + case '<': + insResult = Double.parseDouble(insProduct.getLastValue()) < Double.parseDouble(ask.substring(1)) ? 1 : 0; + break; + case '>': + insResult = Double.parseDouble(insProduct.getLastValue()) > Double.parseDouble(ask.substring(1)) ? 1 : 0; + break; + case '=': + insResult = Double.parseDouble(insProduct.getLastValue()) == Double.parseDouble(ask.substring(1)) ? 1 : 0; + break; + case '鈮�': + insResult = Double.parseDouble(insProduct.getLastValue()) <= Double.parseDouble(ask.substring(1)) ? 1 : 0; + break; + case '鈮�': + insResult = Double.parseDouble(insProduct.getLastValue()) >= Double.parseDouble(ask.substring(1)) ? 1 : 0; + break; + } + insProduct.setInsResult(insResult); + } + } else { + //濡傛灉鏄�20搴﹀父娓�,闇�瑕佺粰鍑哄悎鏍肩殑缁撹 + insProduct.setInsResult(1);//20搴﹀父娓╃殑妫�楠岄」榛樿涓哄悎鏍� + } + insProduct.setUpdateUser(userId); + insProductMapper.updateById(insProduct); + User user = userMapper.selectOne(Wrappers.<User>lambdaQuery().eq(User::getAccount, master.getDetectionPeople())); + if (ObjectUtils.isEmpty(user)) { + throw new ErrorException("lims绯荤粺娌℃湁鎵惧埌璇ョ敤鎴�" + master.getDetectionPeople()); + } + insProductUserMapper.insert(new InsProductUser(null, user.getId(), master.getDetectionDate(), insProduct.getId())); + } + } + } + } + //缁欐俯搴﹀惊鐜殑妫�楠岄」鐩粦瀹氳澶� + InsProduct product = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getState, 1) + .eq(InsProduct::getInsSampleId, insSample.getId()) + .eq(InsProduct::getInspectionItem, "娓╁害寰幆")); + if (ObjectUtils.isEmpty(product)) { + throw new ErrorException("娌℃湁鎵惧埌瀵瑰簲濮旀墭鍗曚笅璇ユ牱鍝佺殑鐩稿叧娓╁害寰幆妫�楠岄」鐩�"); + } + InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery().eq(InsProductResult::getInsProductId, product.getId())); + if (ObjectUtils.isEmpty(insProductResult)) { + insProductResult = new InsProductResult(); + insProductResult.setInsProductId(product.getId()); + } + if (ObjectUtils.isEmpty(insProductResult.getEquipValue())) { + List<Map<String, Object>> dv = new ArrayList<>(); + Map<String, Object> map4 = new HashMap<>(); + map4.put("v", "JCZX-TX-TT02006"); + dv.add(map4); + Map<String, Object> map5 = new HashMap<>(); + map5.put("v", "JCZX-TX-TT02001"); + dv.add(map5); + insProductResult.setEquipValue(JSON.toJSONString(dv)); + List<Map<String, Object>> dn = new ArrayList<>(); + Map<String, Object> map6 = new HashMap<>(); + map6.put("v", "姝ュ叆寮忛珮浣庢俯婀跨儹璇曢獙绠�"); + dn.add(map6); + Map<String, Object> map7 = new HashMap<>(); + map7.put("v", "姝ュ叆寮忛珮浣庢俯璇曢獙绠�"); + dn.add(map7); + insProductResult.setEquipName(JSON.toJSONString(dn)); + if (BeanUtil.isEmpty(insProductResult.getId())) { + insProductResult.setCreateUser(userId); + insProductResult.setUpdateUser(userId); + insProductResultMapper.insert(insProductResult); + } else { + insProductResult.setUpdateUser(userId); + insProductResult.setUpdateTime(LocalDateTime.now()); + insProductResultMapper.updateById(insProductResult); + } + } + } + //鏌ユ壘鏍峰搧涓嬭娆℃暟鐨勬俯搴︾殑椤圭洰 + List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getInsSampleId, insSample.getId()) + .eq(InsProduct::getState, 1) + .isNotNull(InsProduct::getSpecialItemParentId) + .isNotNull(InsProduct::getInspectionItemClass)); + // 杩囨护鍑哄綋鍓嶅惊鐜鏁� 鍜� 娓╁害鐨勬楠岄」鐩� + List<InsProduct> productList = insProducts.stream() + .filter(item -> item.getInspectionItem().equals(pkMaster.getCycles()) && + item.getInspectionItemSubclass().equals(pkMaster.getTemperature())) + .collect(Collectors.toList()); + // 宸ユ椂娣诲姞 + int count = 0; + for(InsProduct insProduct1 : productList) { + // 鏌ヨinsProductResult鎷垮埌insValue鐨勬湁鍊肩殑涓暟 + InsProductResult insProductResult = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>() + .eq(InsProductResult::getInsProductId, insProduct1.getId())); + if(!Objects.isNull(insProductResult)) { + // insProductResult涓嶄负绌�,鑾峰彇鏈夊�肩殑涓暟 + insProductResult.getInsValue(); + List<Map> maps = JSONArray.parseArray(insProductResult.getInsValue(), Map.class); + for (Map map : maps) { + if (Strings.isNotEmpty(map.get("v").toString())) { + count++; + break; + } + } + } + } + // 璇ュ崟瀛愪笅闄や簡褰撳墠娆℃暟浠ュ強娓╁害鏈夊�肩殑璁板綍 + List<InsProduct> productList1 = insProducts.stream() + .filter(item -> !(item.getInspectionItem().equals(pkMaster.getCycles()) && item.getInspectionItemSubclass().equals(pkMaster.getTemperature()))) + .collect(Collectors.toList()); + int allValue = 0; + for(InsProduct insProduct1 : productList1) { + // 鏌ヨinsProductResult鎷垮埌insValue鐨勬湁鍊肩殑涓暟 + InsProductResult insProductResult = insProductResultMapper.selectOne(new LambdaQueryWrapper<InsProductResult>() + .eq(InsProductResult::getInsProductId, insProduct1.getId())); + if(!Objects.isNull(insProductResult)) { + // insProductResult涓嶄负绌�,鑾峰彇鏈夊�肩殑涓暟 + insProductResult.getInsValue(); + List<Map> maps = JSONArray.parseArray(insProductResult.getInsValue(), Map.class); + for (Map map : maps) { + if (Strings.isNotEmpty(map.get("v").toString())) { + allValue++; + break; + } + } + } + } + Map<String, Boolean> map = isOvertimeAndCrossDay(userId); + Boolean isWithinRange = map.get("isWithinRange"); // 鏄惁姝e父涓婄彮 + Boolean isCross = map.get("isCross"); // 鏄惁璺ㄥぉ + BigDecimal manHour = BigDecimal.ZERO; // 宸ユ椂 + InsProduct insProduct = insProductMapper.selectOne(new LambdaQueryWrapper<InsProduct>().eq(InsProduct::getInsSampleId, insSample.getId()) + .eq(InsProduct::getInspectionItem, "娓╁害寰幆")); + StandardProductVO workHourMap = insOrderPlanServiceImpl.getInspectWorkHourAndGroup(insProduct); + if(ObjectUtil.isNotNull(workHourMap)){ + manHour = new BigDecimal(workHourMap.getManHour()); + } + DateTimeFormatter formatters = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + DateTime parse = DateUtil.parse(LocalDateTime.now().format(formatter)); + AuxiliaryOutputWorkingHours auxiliaryOutputWorkingHours = new AuxiliaryOutputWorkingHours(); + auxiliaryOutputWorkingHours.setInspectionItem("娓╁害寰幆"); // 妫�楠岄」鐩� + auxiliaryOutputWorkingHours.setInspectionItemSubclass(""); // 妫�楠岄」鐩瓙绫� + if(isWithinRange) { + // 姝e父涓婄彮 + auxiliaryOutputWorkingHours.setOrderNo(insOrder.getEntrustCode()); // 闈炲姞鐝鎵樺崟鍙� + auxiliaryOutputWorkingHours.setWorkTime(new BigDecimal(accuracy(manHour,count))); // 宸ユ椂 + auxiliaryOutputWorkingHours.setAmount(count); // 闈炲姞鐝暟閲� + }else{ + // 鍔犵彮 + auxiliaryOutputWorkingHours.setOvertimeOrderNo(insOrder.getEntrustCode()); // 闈炲姞鐝鎵樺崟鍙� + auxiliaryOutputWorkingHours.setOvertimeWorkTime(new BigDecimal(accuracy(manHour,count))); // 宸ユ椂 + auxiliaryOutputWorkingHours.setOvertimeAmount(count); // 闈炲姞鐝暟閲� + } + if(isCross) { + String date = LocalDateTime.now().minusDays(1).toLocalDate().atStartOfDay().format(formatters);// 鍓嶄竴澶� + auxiliaryOutputWorkingHours.setDateTime(date); // 鏃ユ湡 + }else { + String date = LocalDateTime.now().toLocalDate().atStartOfDay().format(formatters);// 褰撳ぉ + auxiliaryOutputWorkingHours.setDateTime(date); // 鏃ユ湡 + } + auxiliaryOutputWorkingHours.setOutputWorkTime(new BigDecimal(accuracy(manHour,count))); // 浜у嚭宸ユ椂 + auxiliaryOutputWorkingHours.setWeekDay(insOrderPlanServiceImpl.getWeek(LocalDateTime.now().format(formatters)));//鏄熸湡 + auxiliaryOutputWorkingHours.setWeek(String.valueOf(DateUtil.weekOfYear(DateUtil.offsetDay(parse, 1))));//鍛ㄦ + auxiliaryOutputWorkingHours.setCheck(userId);//妫�娴嬩汉 + auxiliaryOutputWorkingHours.setSample(insSample.getSampleCode());//鏍峰搧缂栧彿 + auxiliaryOutputWorkingHours.setManHourGroup(workHourMap.getManHourGroup());//宸ユ椂鍒嗙粍 + // 鏌ヨ闇�瑕佹搷浣滅殑鏃ユ湡鏄惁鏈夎褰� + List<AuxiliaryOutputWorkingHours> oldRecords = auxiliaryOutputWorkingHoursMapper.selectList(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery() + .eq(AuxiliaryOutputWorkingHours::getCheck,userId) + .eq(AuxiliaryOutputWorkingHours::getInspectionItem, "娓╁害寰幆") + .eq(AuxiliaryOutputWorkingHours::getInspectionItemSubclass, "") + .eq(AuxiliaryOutputWorkingHours::getSample, insSample.getSampleCode()) + .and(i->i.eq(AuxiliaryOutputWorkingHours::getOrderNo, insOrder.getEntrustCode()) + .or() + .eq(AuxiliaryOutputWorkingHours::getOvertimeOrderNo, insOrder.getEntrustCode())) + .eq(AuxiliaryOutputWorkingHours::getDateTime, auxiliaryOutputWorkingHours.getDateTime()) + ); + // 鎵�鏈夌殑璁板綍锛堝叾浠栧ぉ + 褰撳墠澶╋級 + List<AuxiliaryOutputWorkingHours> addOldRecords = auxiliaryOutputWorkingHoursMapper.selectList(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery() + .eq(AuxiliaryOutputWorkingHours::getCheck,userId) + .eq(AuxiliaryOutputWorkingHours::getInspectionItem, "娓╁害寰幆") + .eq(AuxiliaryOutputWorkingHours::getInspectionItemSubclass, "") + .eq(AuxiliaryOutputWorkingHours::getSample, insSample.getSampleCode()) + .and(i->i.eq(AuxiliaryOutputWorkingHours::getOrderNo, insOrder.getEntrustCode()) + .or() + .eq(AuxiliaryOutputWorkingHours::getOvertimeOrderNo, insOrder.getEntrustCode())) + ); + if(CollectionUtils.isEmpty(oldRecords)){ + // 鏂板涔熻鏌ョ湅鏄惁鏈夋墍鏈夌殑璁板綍 + if(Objects.isNull(addOldRecords)) { + // 鍏朵粬澶╀篃娌℃湁璁板綍 + auxiliaryOutputWorkingHoursMapper.insert(auxiliaryOutputWorkingHours); + }else{ + // 鎵�鏈夌殑璁板綍 + int otherDayAmount = 0; // 鎵�鏈夌殑鏁伴噺 + for(AuxiliaryOutputWorkingHours a : addOldRecords) { + otherDayAmount += (Objects.isNull(a.getAmount()) ? 0 : a.getAmount()) + (Objects.isNull(a.getOvertimeAmount()) ? 0 : a.getOvertimeAmount()); + } + if(isWithinRange) { + // 姝e父涓婄彮 + + auxiliaryOutputWorkingHours.setWorkTime(new BigDecimal(accuracy(manHour,(count - otherDayAmount + allValue)))); // 宸ユ椂 + auxiliaryOutputWorkingHours.setAmount((count - otherDayAmount + allValue)); // 闈炲姞鐝暟閲� + }else { + // 鍔犵彮 + auxiliaryOutputWorkingHours.setOvertimeWorkTime(new BigDecimal(accuracy(manHour,(count - otherDayAmount + allValue)))); // 宸ユ椂 + auxiliaryOutputWorkingHours.setOvertimeAmount((count - otherDayAmount + allValue)); // 闈炲姞鐝暟閲� + } + auxiliaryOutputWorkingHours.setOutputWorkTime(new BigDecimal(accuracy(manHour,(count - otherDayAmount + allValue)))); // 浜у嚭宸ユ椂 + auxiliaryOutputWorkingHoursMapper.insert(auxiliaryOutputWorkingHours); + } + }else { + // 涓嶄负绌� + Integer oldAmount = 0; // 宸ユ椂娣诲姞鐨勪釜鏁� + for(AuxiliaryOutputWorkingHours a : addOldRecords) { + oldAmount += (Objects.isNull(a.getAmount()) ? 0 : a.getAmount()) + (Objects.isNull(a.getOvertimeAmount()) ? 0 : a.getOvertimeAmount()); + } + if(count > (oldAmount - allValue)){ + // 鏌ユ壘鍑烘棩鏈熶负寰楀埌鏃ユ湡鐨勮褰� + List<AuxiliaryOutputWorkingHours> collect = oldRecords.stream().filter(item -> item.getDateTime().equals(auxiliaryOutputWorkingHours.getDateTime())).collect(Collectors.toList()); + if(CollectionUtils.isNotEmpty(collect)){ + // 鏈夌殑璇濆氨鏄洿鏂版搷浣� + AuxiliaryOutputWorkingHours auxiliaryOutputWorkingHours1 = collect.get(0); + if(isWithinRange) { + // 姝e父涓婄彮 + // 鎷垮埌鍘熸湰鐨勬暟閲� 涓� 鏂扮殑鏁伴噺鐩稿姞 + int num = Objects.isNull(auxiliaryOutputWorkingHours1.getAmount()) ? 0 :auxiliaryOutputWorkingHours1.getAmount(); // 鍘熸湰鐨勬暟閲� + auxiliaryOutputWorkingHours1.setAmount(count - oldAmount + num + allValue); // 闈炲姞鐝暟閲� + auxiliaryOutputWorkingHours1.setOrderNo(insOrder.getEntrustCode()); // 闈炲姞鐝鎵樺崟鍙� + auxiliaryOutputWorkingHours1.setWorkTime(new BigDecimal(accuracy(manHour,(count - oldAmount + num + allValue)))); // 宸ユ椂 + BigDecimal outputWorkTime = new BigDecimal(accuracy(manHour, auxiliaryOutputWorkingHours1.getAmount())).add((Objects.isNull(auxiliaryOutputWorkingHours1.getOvertimeWorkTime()) ? new BigDecimal(0) : auxiliaryOutputWorkingHours1.getOvertimeWorkTime())); + auxiliaryOutputWorkingHours1.setOutputWorkTime(outputWorkTime);// 浜у嚭宸ユ椂 閲囬泦鑲畾鏄細閲囬泦瀹� + }else{ + // 鍔犵彮 + // 鎷垮埌鍘熸湰鐨勬暟閲� 涓� 鏂扮殑鏁伴噺鐩稿姞 + int num = Objects.isNull(auxiliaryOutputWorkingHours1.getOvertimeAmount()) ? 0 :auxiliaryOutputWorkingHours1.getOvertimeAmount(); // 鍘熸湰鐨勬暟閲� + auxiliaryOutputWorkingHours1.setOvertimeAmount(count - oldAmount + num + allValue);// 鍔犵彮鏁伴噺 + auxiliaryOutputWorkingHours1.setOvertimeOrderNo(insOrder.getEntrustCode()); // 鍔犵彮濮旀墭鍗曞彿 + auxiliaryOutputWorkingHours1.setOvertimeWorkTime(new BigDecimal(accuracy(manHour,(count - oldAmount + num + allValue)))); // 宸ユ椂 + BigDecimal outputWorkTime = new BigDecimal(accuracy(manHour, auxiliaryOutputWorkingHours1.getOvertimeAmount())).add( + (Objects.isNull(auxiliaryOutputWorkingHours1.getWorkTime()) ? new BigDecimal(0) : auxiliaryOutputWorkingHours1.getWorkTime())); + auxiliaryOutputWorkingHours1.setOutputWorkTime(outputWorkTime); // 浜у嚭宸ユ椂 閲囬泦鑲畾鏄細閲囬泦瀹� + } + auxiliaryOutputWorkingHoursMapper.updateById(auxiliaryOutputWorkingHours1); + } + } + } + + + + return 0; + } + + //娓╁害寰幆鏁伴噰鎬讳綋 + @Override + @Transactional(rollbackFor = Exception.class) + public int temDataAcquisition2(PkMaster pkMaster) { + //鏌ヨ鍑烘墍鏈夊惊鐜鏁板拰娓╁害,鐒跺悗寰幆璋冪敤temDataAcquisition鎺ュ彛 + //鏌ヨ瀵瑰簲鐨勬楠屽崟琛� + InsOrder insOrder = insOrderMapper.selectOne(Wrappers.<InsOrder>lambdaQuery().eq(InsOrder::getState, 1).eq(InsOrder::getEntrustCode, pkMaster.getEntrustCode())); + if (ObjectUtils.isEmpty(insOrder)) { + throw new ErrorException("娌℃湁鎵惧埌瀵瑰簲濮旀墭鍗�" + pkMaster.getEntrustCode()); + } + //鏌ヨ瀵瑰簲妫�楠屾牱鍝乮d + InsSample insSample = insSampleMapper.selectOne(Wrappers.<InsSample>lambdaQuery() + .eq(InsSample::getInsOrderId, insOrder.getId()) + .eq(InsSample::getSampleCode, pkMaster.getSampleCode()) + .eq(InsSample::getModel, pkMaster.getModel())); + if (ObjectUtils.isEmpty(insSample)) { + throw new ErrorException("娌℃湁鎵惧埌瀵瑰簲濮旀墭鍗曚笅鐨勮鏍峰搧" + pkMaster.getSampleCode()); + } + //鏌ユ壘鏍峰搧涓嬫墍鏈夋俯搴﹀惊鐜殑椤圭洰 + List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery() + .eq(InsProduct::getInsSampleId, insSample.getId()) + .eq(InsProduct::getState, 1) + .isNotNull(InsProduct::getSpecialItemParentId) + .isNotNull(InsProduct::getInspectionItemClass)); + //杩囨护鍑烘墍鏈夊惊鐜鏁板拰娓╁害 + List<String> collect1 = insProducts.stream().map(InsProduct::getInspectionItem).distinct().collect(Collectors.toList()); + List<String> collect2 = insProducts.stream().map(InsProduct::getInspectionItemSubclass).distinct().collect(Collectors.toList()); + for (String s : collect1) { + for (String s1 : collect2) { + PkMaster master = new PkMaster(); + master.setEntrustCode(pkMaster.getEntrustCode()); + master.setSampleCode(pkMaster.getSampleCode()); + master.setModel(pkMaster.getModel()); + master.setCycles(s); + master.setTemperature(s1); + temDataAcquisition(master); + } + } + return 0; + } + + /** + * 鏄惁鍔犵彮銆佽法澶� + */ + public Map<String,Boolean> isOvertimeAndCrossDay(Integer userId){ + Map<String, Boolean> map = new HashMap<>(); + Boolean isWithinRange = true; + Boolean isCross = false; // 鏄惁灏嗗綋鍓嶆楠屽崟瀛愮殑宸ユ椂璁$畻鍒扮彮娆″紑濮嬪ぉ + LocalDateTime today = LocalDateTime.of(LocalDate.now(), LocalTime.MIDNIGHT); + PerformanceShift performanceShift = performanceShiftMapper.selectOne(Wrappers.<PerformanceShift>lambdaQuery() + .eq(PerformanceShift::getUserId, userId) + .eq(PerformanceShift::getWorkTime, today)); + if (ObjectUtils.isNotEmpty(performanceShift)) { + ShiftTime shiftTime = shiftTimeMapper.selectOne(Wrappers.<ShiftTime>lambdaQuery().eq(ShiftTime::getShift, performanceShift.getShift())); + if (ObjectUtils.isNotEmpty(shiftTime)) { + DateTimeFormatter forma = DateTimeFormatter.ofPattern("HH:mm"); + LocalTime now = LocalTime.now(); + LocalTime startTime = LocalTime.parse(shiftTime.getStartTime(), forma); + LocalTime endTime = LocalTime.parse(shiftTime.getEndTime(), forma); + // 妫�鏌ュ綋鍓嶆椂闂存槸鍚﹀湪鑼冨洿鍐咃紙鍖呮嫭杈圭晫锛� + + // 濡傛灉褰撳墠鏃堕棿涓嶅湪浠婂ぉ鐨勭彮娆″唴 17:00~5.00 15.00 棣栧厛鍒ゆ柇鏄惁璺ㄥぉ浜� + // 璺ㄥぉ鐨勬儏鍐� + if (startTime.isAfter(endTime)) { + // 鏌ョ湅褰撳墠鏃堕棿鏄惁鍦ㄧ彮娆℃椂闂村唴 + if (now.isAfter(startTime)) { + // 濡傛灉鏄湪缁撴潫鏃堕棿涔嬪悗閭d箞灏辨槸姝e父涓婄彮 + isWithinRange = true; + isCross = false; + } else { + // 褰撳墠鏃堕棿涓嶅湪鐝鍐咃紝鏌ョ湅鏄ㄥぉ鐨勭彮娆� + LocalDateTime yesterday = LocalDateTime.of(LocalDate.now().minusDays(1), LocalTime.MIDNIGHT); + PerformanceShift yesterdayShift = performanceShiftMapper.selectOne(Wrappers.<PerformanceShift>lambdaQuery() + .eq(PerformanceShift::getUserId, userId) + .eq(PerformanceShift::getWorkTime, yesterday)); + ShiftTime yesterdayShiftTime = shiftTimeMapper.selectOne(Wrappers.<ShiftTime>lambdaQuery().eq(ShiftTime::getShift, yesterdayShift.getShift())); + // 濡傛灉鏄ㄥぉ鐨勭彮娆′笉涓虹┖锛岄偅涔堝氨瑕佺湅鏄ㄥぉ鐨勭彮娆℃椂闂� + if (!Objects.isNull(yesterdayShiftTime)) { + LocalTime yesterdayStartTime = LocalTime.parse(yesterdayShiftTime.getStartTime(), forma); + LocalTime yesterdayEndTime = LocalTime.parse(yesterdayShiftTime.getEndTime(), forma); + // 鏄ㄥぉ鐨勭彮娆℃槸鍚﹁法澶� + if (yesterdayStartTime.isAfter(yesterdayEndTime)) { + // 濡傛灉鏄ㄥぉ鐨勭彮娆¤法澶╀簡锛岄偅涔堝氨瑕佺湅浠婂ぉ鏄惁鍦ㄦ槰澶╃殑鐝鍐咃紝骞朵笖鍙兘鏄湪缁撴潫鏃堕棿涔嬪墠锛屽凡缁忓疄鐜颁簡璺ㄥぉ + if (now.isBefore(yesterdayEndTime)) { + // 鍦ㄦ槰澶╃彮娆℃椂闂村唴姝e父涓婄彮锛屽伐鏃惰绠楀埌鏄ㄥぉ + isWithinRange = true; + isCross = true; + } else { + // 涓嶅湪鏄ㄥぉ鐝鏃堕棿鍐呭氨鏄姞鐝紝宸ユ椂璁$畻鍒版槰澶� + isWithinRange = false; + isCross = true; + } + } else { + // 鏄ㄥぉ鐨勭彮娆℃病鏈夎法澶� 濡傛灉褰撳墠鏃堕棿鍦ㄤ粖澶╃彮娆″紑濮嬫椂闂翠箣鍓嶅氨鏄槰澶╃殑鍔犵彮锛屽惁鍒欏氨鏄粖澶╃殑鍔犵彮 + if (now.isBefore(startTime)) { + isWithinRange = false; + isCross = true; + } else { + isWithinRange = false; + isCross = false; + } + } + } else { + isWithinRange = false; + // 濡傛灉鏄湪寮�濮嬫椂闂翠箣鍓嶉偅涔堝氨瑕佺畻鍒版槰澶� + if (now.isBefore(startTime)) { + isCross = true; + } else { + isCross = false; + } + } + } + } else { + // 褰撳墠鐝涓嶈法澶╃殑鎯呭喌涓� + // 濡傛灉褰撳墠鏃堕棿鍦ㄥ紑濮嬫椂闂翠箣鍓嶏紝鏌ユ槰澶╃殑鐝鐪嬪綋鍓嶆椂闂存槸鍚﹀湪鏄ㄥぉ鐨勭彮娆″唴 + if (now.isBefore(startTime)) { + // 鏌ョ湅鏄ㄥぉ鏄惁璺ㄥぉ + LocalDateTime yesterday = LocalDateTime.of(LocalDate.now().minusDays(1), LocalTime.MIDNIGHT); + PerformanceShift yesterdayShift = performanceShiftMapper.selectOne(Wrappers.<PerformanceShift>lambdaQuery() + .eq(PerformanceShift::getUserId, userId) + .eq(PerformanceShift::getWorkTime, yesterday)); + ShiftTime yesterdayShiftTime = shiftTimeMapper.selectOne(Wrappers.<ShiftTime>lambdaQuery().eq(ShiftTime::getShift, yesterdayShift.getShift())); + LocalTime yesterdayStartTime = LocalTime.parse(yesterdayShiftTime.getStartTime(), forma); + LocalTime yesterdayEndTime = LocalTime.parse(yesterdayShiftTime.getEndTime(), forma); + if (yesterdayStartTime.isAfter(yesterdayEndTime)) { + // 濡傛灉鏄ㄥぉ璺ㄥぉ + if (now.isBefore(yesterdayEndTime)) { + // 鍦ㄦ槰澶╃殑鐝鏃堕棿鍐呮甯镐笂鐝紝宸ユ椂璁$畻鍒版槰澶� + isWithinRange = true; + isCross = true; + } else { + // 涓嶅湪鏄ㄥぉ鐝鏃堕棿鍐呭氨鏄姞鐝紝宸ユ椂璁$畻鍒版槰澶� + isWithinRange = false; + isCross = true; + } + } else { + // 鏄ㄥぉ涓嶈法澶� + isWithinRange = false; + isCross = true; + } + } else if (now.isAfter(endTime)) { + // 濡傛灉褰撳墠鏃堕棿鍦ㄧ粨鏉熸椂闂翠箣鍚庯紝閭d箞灏辨槸浠婂ぉ鐨勫姞鐝� + isWithinRange = false; + isCross = false; + } else { + // 姝e父涓婄彮 + isWithinRange = true; + isCross = false; + } + } + } + } + map.put("isWithinRange",isWithinRange); + map.put("isCross",isCross); + return map; + } + + /** + * 绮惧害闂 + */ + public double accuracy(BigDecimal manHour, int count){ + return manHour.multiply(BigDecimal.valueOf(count)).setScale(4, RoundingMode.HALF_UP).doubleValue(); + } + +} + + diff --git a/cnas-require/src/main/java/com/ruoyi/requier/service/impl/QrShowServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/requier/service/impl/QrShowServiceImpl.java new file mode 100644 index 0000000..d6a790f --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/service/impl/QrShowServiceImpl.java @@ -0,0 +1,269 @@ +package com.ruoyi.requier.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.basic.mapper.StructureItemParameterMapper; +import com.ruoyi.basic.pojo.Product; +import com.ruoyi.basic.pojo.StructureItemParameter; +import com.ruoyi.basic.service.ProductService; +import com.ruoyi.common.core.domain.entity.Custom; +import com.ruoyi.inspect.mapper.InsOrderMapper; +import com.ruoyi.inspect.mapper.InsProductMapper; +import com.ruoyi.inspect.mapper.InsSampleMapper; +import com.ruoyi.inspect.pojo.InsOrder; +import com.ruoyi.inspect.pojo.InsProduct; +import com.ruoyi.inspect.pojo.InsSample; +import com.ruoyi.inspect.service.InsOrderService; +import com.ruoyi.requier.mapper.DeviceMaintenanceMapper; +import com.ruoyi.requier.mapper.DeviceMapper; +import com.ruoyi.requier.mapper.DeviceMetricRecordMapper; +import com.ruoyi.requier.pojo.Device; +import com.ruoyi.requier.pojo.DeviceMaintenance; +import com.ruoyi.requier.pojo.DeviceMetricRecord; +import com.ruoyi.requier.service.QrShowService; +import com.ruoyi.system.service.CustomService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.ui.Model; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.Duration; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.stream.Collectors; + +@Service +public class QrShowServiceImpl implements QrShowService { + + @Autowired + private InsOrderService insOrderService; + + @Autowired + private ProductService productService; + + @Autowired + private CustomService customService; + + @Autowired + private InsOrderMapper insOrderMapper; + + @Autowired + private DeviceMapper deviceMapper; + + @Autowired + private DeviceMetricRecordMapper deviceMetricRecordMapper; + + @Autowired + private DeviceMaintenanceMapper deviceMaintenanceMapper; + + @Autowired + private StructureItemParameterMapper structureItemParameterMapper; + + @Autowired + private InsSampleMapper insSampleMapper; + + @Autowired + private InsProductMapper insProductMapper; + + @Value("${spring.profiles.active}") + private String active; + + private String getIp(){ + if(StringUtils.isNotBlank(active)){ + return "prod".equals(active)?"https://zttx-lims.ztt.cn:8021/lims/":"http://114.132.189.42:8001/"; + } + return "http://192.168.1.124:8001/lims/"; + } + + @Override + public void transformModelByType(Model model, String code, String type) { + if(StringUtils.isNotBlank(type)){ + switch (type){ + case "word": + InsOrder insOrder = insOrderService.getOne(Wrappers.<InsOrder>lambdaQuery() + .eq(InsOrder::getEntrustCode, code)); + Product product = productService.getOne(Wrappers.<Product>lambdaQuery() + .eq(Product::getName, insOrder.getSample())); + String insOrderModel = productService.getWordQrModel(insOrder.getId()); + Custom company = customService.getOne(Wrappers.<Custom>lambdaQuery() + .eq(Custom::getCompany, insOrder.getCompany())); + String orderType = insOrderMapper.getEnumLabelByValue(insOrder.getOrderType()); + String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; + model.addAttribute("entrustCode", code); + model.addAttribute("productName",product.getName()); + model.addAttribute("productNameEn",product.getNameEn()); + model.addAttribute("insOrderModel", insOrderModel); + model.addAttribute("company", company.getCompany()); + model.addAttribute("companyEn", company.getCompanyEn()); + model.addAttribute("getTime", insOrder.getExamineTime().format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�"))); + String getTimeEn = monthNames[insOrder.getExamineTime().getMonthValue() - 1] + " " + insOrder.getExamineTime().getDayOfMonth() + ", " + insOrder.getExamineTime().getYear(); + model.addAttribute("getTimeEn", getTimeEn); + model.addAttribute("issuingDate", insOrder.getIssuingDate().format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�"))); + String issuingDateEn = monthNames[insOrder.getIssuingDate().getMonthValue() - 1] + " " + insOrder.getIssuingDate().getDayOfMonth() + ", " + insOrder.getIssuingDate().getYear(); + model.addAttribute("issuingDateEn", issuingDateEn); + model.addAttribute("orderType", orderType); + model.addAttribute("orderTypeEn", insOrder.getOrderType()); + break; + case "device": + //鏌ヨ璁惧涓昏〃淇℃伅 + List<Device> deviceList = deviceMapper.selectList(Wrappers.<Device>lambdaQuery().eq(Device::getManagementNumber, code)); + if(deviceList.size()>1){ + throw new RuntimeException("璁惧缂栧彿"+code+"閲嶅"); + } + Device device = deviceList.isEmpty()?null:deviceList.get(0); + if(!Objects.isNull(device)){ + //鏌ヨ璁惧鏍″噯淇℃伅 + DeviceMetricRecord calibrate = getDeviceMetricRecord(device.getId(), "calibrate"); + //鏌ヨ璁惧鏍告煡淇℃伅 + DeviceMetricRecord examine = getDeviceMetricRecord(device.getId(), "examine"); + //鏌ヨ璁惧缁存姢璁板綍 + DeviceMaintenance deviceMaintenance = Optional.ofNullable(deviceMaintenanceMapper.selectOne(Wrappers.<DeviceMaintenance>lambdaQuery() + .eq(DeviceMaintenance::getDeviceId, device.getId()) + .orderByDesc(DeviceMaintenance::getId) + .last("limit 1"))).orElse(new DeviceMaintenance()); + model.addAttribute("progress",calcDeviceNextCheckRatio(calibrate.getCalibrationDate(),calibrate.getNextCalibrationDate()));//璺濈涓嬫鏍″噯鏃ユ湡鐨勫ぉ鏁扮櫨鍒嗘瘮 + model.addAttribute("deviceName",device.getDeviceName());//璁惧鍚嶇О + model.addAttribute("deviceCode",device.getManagementNumber());//璁惧缂栧彿 + model.addAttribute("usedYears",calcUsedYears(device.getActivationDate()));//鍚敤鏃堕暱(骞�) + model.addAttribute("runStatus",device.getDeviceStatus());//璁惧杩愯鐘舵�� + model.addAttribute("lastCalibrationDate",formatDate(calibrate.getCalibrationDate(),"yyyy-MM-dd"));//鏈�杩戞牎鍑嗘棩鏈� + model.addAttribute("nextCalibrationDate",formatDate(calibrate.getNextCalibrationDate(),"yyyy-MM-dd"));//涓嬫鏍″噯鏃ユ湡 + String calibrateStatus = "0yes".equals(calibrate.getStatus())?"鍚堟牸":"1no".equals(calibrate.getStatus())?"涓嶅悎鏍�":"鍏朵粬"; + model.addAttribute("calibrateStatus",Objects.isNull(calibrate.getCalibrationDate())?"":calibrateStatus);//鏍″噯鎬荤粨璁� + model.addAttribute("lastExamineDate",formatDate(examine.getCalibrationDate(),"yyyy-MM-dd"));//鏈�杩戞牳鏌ユ棩鏈� + model.addAttribute("nextExamineDate",formatDate(examine.getNextCalibrationDate(),"yyyy-MM-dd"));//涓嬫鏍告煡鏃ユ湡 + String examineStatus = "0yes".equals(examine.getStatus())?"鍚堟牸":"1no".equals(examine.getStatus())?"涓嶅悎鏍�":"鍏朵粬"; + model.addAttribute("examineStatus",Objects.isNull(examine.getCalibrationDate())?"":examineStatus);//鏍告煡鎬荤粨璁� + model.addAttribute("maintenanceDate",formatDate(deviceMaintenance.getDate(),"yyyy-MM-dd"));//鏈�杩戠淮鎶ゆ棩鏈� + model.addAttribute("nextMaintenanceDate",formatDate(deviceMaintenance.getNextDate(),"yyyy-MM-dd"));//涓嬫缁存姢鏃ユ湡 + String maintenanceType = ""; + if(!Objects.isNull(deviceMaintenance.getMaintenanceType())){ + maintenanceType = 0==deviceMaintenance.getMaintenanceType()?"浣跨敤鍓嶇淮鎶�":"浣跨敤鍚庣淮鎶�"; + } + model.addAttribute("maintenanceType",maintenanceType);//缁存姢鎬荤粨璁� + //娴嬮噺椤圭洰 + String insProduct = ""; + if(StringUtils.isNotBlank(device.getInsProductIds())){ + String[] ids = device.getInsProductIds().split(","); + List<StructureItemParameter> parameters = structureItemParameterMapper.selectBatchIds(Arrays.asList(ids)); + List<String> itemList = parameters.stream().map(StructureItemParameter::getInspectionItem).distinct().collect(Collectors.toList()); + insProduct = String.join(",",itemList); + } + model.addAttribute("insProduct",insProduct);//娴嬮噺椤圭洰 + model.addAttribute("fileName",calibrate.getFileName()); + model.addAttribute("downloadUrl",getIp()+"img/"+calibrate.getSystemFileName()); + } + break; + case "sample": + // 鏌ヨ鏍峰搧淇℃伅 + InsSample insSample = insSampleMapper.selectById(code); + InsOrder insOrder1 = insOrderMapper.selectById(insSample.getInsOrderId()); + List<InsProduct> insProducts = insProductMapper.selectList(new LambdaQueryWrapper<InsProduct>() + .eq(InsProduct::getInsSampleId, insSample.getId())); + String collect = ""; + if(CollectionUtils.isNotEmpty(insProducts)){ +// collect = insProducts.stream().map(item -> { +// String inspectionItem = ""; +// if (Strings.isNotEmpty(item.getInspectionItemSubclass())) { +// inspectionItem = item.getInspectionItemSubclass(); +// } else { +// inspectionItem = item.getInspectionItem(); +// } +// return inspectionItem; +// }).distinct().collect(Collectors.joining(",")); + collect = insProducts.stream().map(InsProduct::getInspectionItem).distinct().collect(Collectors.joining(",")); + } + model.addAttribute("sampleCode",insSample.getSampleCode()); // 鏍峰搧缂栧彿 + model.addAttribute("entrustCode",insOrder1.getEntrustCode()); // 濮旀墭鍗曞彿 + model.addAttribute("model",insSample.getModel()); // 瑙勬牸鍨嬪彿 + model.addAttribute("sample",insSample.getSample()); // 鏍峰搧鍚嶇О + model.addAttribute("inspectionItem",collect); // 妫�娴嬮」鐩� + model.addAttribute("insState",insSample.getInsState()); // 妫�娴嬬姸鎬� + model.addAttribute("isLeave",insOrder1.getIsLeave()); // 鏄惁鐣欐牱 + } + } + } + + /** + * 璁$畻鍚敤鏃堕暱 + * @param activationDate + * @return + */ + public double calcUsedYears(LocalDateTime activationDate) { + if(Objects.isNull(activationDate)){ + return 0; + } + BigDecimal defDays = BigDecimal.valueOf(365); + BigDecimal usedDays = BigDecimal.valueOf(Duration.between(activationDate,LocalDateTime.now()).toDays()); + return usedDays.divide(defDays,2,RoundingMode.HALF_UP).setScale(2,RoundingMode.HALF_UP).doubleValue(); + } + + /** + * 璁$畻璺濈涓嬫鏍″噯鏃ユ湡鐨勫ぉ鏁扮櫨鍒嗘瘮 + * @param startDate + * @param endDate + * @return + */ + public double calcDeviceNextCheckRatio(Date startDate, Date endDate){ + if(Objects.isNull(startDate) || Objects.isNull(endDate)){ + return 0; + } + LocalDateTime startLocalDate = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + LocalDateTime endLocalDate = endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + long totalDays = Duration.between(startLocalDate, endLocalDate).toDays(); + long usedDays = Duration.between(startLocalDate, LocalDateTime.now()).toDays(); + BigDecimal calcVal = BigDecimal.valueOf(usedDays).divide(BigDecimal.valueOf(totalDays),2,RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP); + if(calcVal.compareTo(BigDecimal.ZERO)<0){ + calcVal = BigDecimal.ZERO; + }else if(calcVal.compareTo(BigDecimal.valueOf(100))>0){ + calcVal = BigDecimal.valueOf(100); + } + return calcVal.doubleValue(); + } + + /** + * 鏌ヨ璁惧鏍″噯/鏍告煡璁板綍 + * @param deviceId + * @param type + * @return + */ + public DeviceMetricRecord getDeviceMetricRecord(int deviceId,String type){ + return Optional.ofNullable( + deviceMetricRecordMapper.selectOne(Wrappers.<DeviceMetricRecord>lambdaQuery() + .eq(DeviceMetricRecord::getDeviceId, deviceId) + .eq(DeviceMetricRecord::getType, type) + .orderByDesc(DeviceMetricRecord::getCreateTime) + .last("limit 1"))).orElse(new DeviceMetricRecord()); + } + + /** + * 鏍煎紡鍖栨棩鏈� + * @return + */ + public String formatDate(Date date,String formatter){ + if(Objects.isNull(date)){ + return ""; + } + LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + return localDateTime.format(DateTimeFormatter.ofPattern(formatter)); + } + /** + * 鏍煎紡鍖栨棩鏈� + * @return + */ + public String formatDate(LocalDate date,String formatter){ + if(Objects.isNull(date)){ + return ""; + } + return date.format(DateTimeFormatter.ofPattern(formatter)); + } + + +} diff --git a/cnas-require/src/main/java/com/ruoyi/requier/util/DataAcquisition.java b/cnas-require/src/main/java/com/ruoyi/requier/util/DataAcquisition.java new file mode 100644 index 0000000..6b4a461 --- /dev/null +++ b/cnas-require/src/main/java/com/ruoyi/requier/util/DataAcquisition.java @@ -0,0 +1,792 @@ +package com.ruoyi.requier.util; + +import cn.hutool.core.io.IORuntimeException; +import cn.hutool.http.HttpUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.ruoyi.framework.exception.ErrorException; +import com.ruoyi.framework.util.RedisUtil; +import com.ruoyi.requier.pojo.DataConfig; +import com.ruoyi.requier.pojo.Device; +import org.apache.commons.lang3.StringUtils; + +import javax.script.ScriptEngine; +import javax.script.ScriptEngineManager; +import javax.servlet.http.HttpServletRequest; +import java.io.UnsupportedEncodingException; +import java.math.BigDecimal; +import java.net.URLEncoder; +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +public class DataAcquisition { + + private static final String HTTP = "http://"; + + private static final String GETFILE = ":9527/lims/getFile"; // 鑾峰彇鏂囦欢鎺ュ彛 + + private static final String MOVEFILE = ":9527/lims/moveFile"; // 鏂囦欢绉诲姩鍦板潃 + + private static final String splitIdentifier = "@-@"; // 鑷畾涔夊敮涓�鏍囪瘑鍒嗗壊绗� + + public static final String frequency = "frequency"; + + /** + * 鏁伴噰鍏ュ彛 + * + * @param dataConfig + * @param device + * @return + */ + public static Map<String, Object> dataAcquisitionEntrance(List<DataConfig> dataConfig, Device device, String entrustCode, String sampleCode, String ip, String fiberOpticRibbon) { + /** + * filePath 鏂囦欢閲囬泦璺緞 + * fileExtension 鏂囦欢鍚庣紑 + * entrustCode 濮旀墭缂栧彿鏁版嵁 + * sampleCode 鏍峰搧缂栧彿鏁版嵁 + * mdbEntrustCode mdb鏂囦欢闇�瑕侊細濮旀墭缂栧彿瀛楁 涓轰粈涔堟病鏈夊幓杩欎釜mdb鍓嶇紑鍛紵鍥犱负宸茬粡缁欏鎴风殑閮ㄥ垎鐢佃剳涓婂畨瑁呬簡閲囬泦鍣紝鑰岀敤鎴蜂笉鎺ュ彈閲嶆柊瀹夎閲囬泦鍣紝鎵�浠ュ氨娌℃湁鍘婚櫎 + * mdbSampleCode mdb鏂囦欢闇�瑕侊細鏍峰搧缂栧彿瀛楁 + * fiberOpticRibbonCode 鍏夌氦甯� 瀛楁 + * fiberOpticRibbon 鍏夌氦甯︽暟鎹� + */ + //杞箟鐗规畩绗﹀彿锛岄伩鍏嶈姹傚弬鏁扮己澶� + try { + sampleCode = URLEncoder.encode(sampleCode, "UTF-8"); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + String http = HTTP + ip + GETFILE + + "?filePath=" + device.getCollectUrl() + + "&fileExtension=" + device.getFileType() + + "&entrustCode=" + entrustCode + + "&sampleCode=" + sampleCode + + "&mdbEntrustCode=" + device.getEntrustCode() + + "&mdbSampleCode=" + device.getSampleCode() + + "&dbFileName=" + device.getDbFileName() + + "&fiberOpticRibbonCode=" + device.getFiberOpticRibbon(); + + if (Objects.nonNull(fiberOpticRibbon)) { + http += "&fiberOpticRibbon=" + fiberOpticRibbon.replaceAll("#","%23"); + } + String result = null; + try { + result = HttpUtil.get(http); + } catch (IORuntimeException e) { + throw new ErrorException("鎵�鍦ㄧ數鑴戞湭瀹夎鎴栨湭鍚姩锛歀IMS鏂囦欢閲囬泦鍣紒"); + } + JSONObject jsonObject = JSON.parseObject(result); + if (Objects.equals(jsonObject.get("code"), 1)) { + if (ObjectUtils.isEmpty(jsonObject.get("msg"))) { + throw new ErrorException("鏈煡璇㈠埌鏂囦欢锛佸彲鑳借璺緞锛�" + device.getCollectUrl() + "锛変笅骞舵病鏈夋墍闇�(" + device.getFileType() + ")鏂囦欢锛�"); + } else { + throw new ErrorException(jsonObject.get("msg") + ""); + } + } else { + String data = jsonObject.get("data") + ""; + // 鑰冭檻鍒颁竴涓娴嬮」鍙兘浼氬瓨鍦ㄥ涓暟閲囬厤缃紝鎵�浠ラ渶瑕佽繘琛屽垎缁� + Map<String, List<DataConfig>> userMap = dataConfig.stream() + .peek(i -> i.setInsProductItem( + i.getInspectionItem().equals(i.getInspectionItemSubclass()) ? i.getInspectionItem() + "," : i.getInspectionItem() + "," + i.getInspectionItemSubclass() + )) + .collect(Collectors.groupingBy(DataConfig::getInsProductItem)); + Map<String, Object> map; + switch (device.getFileType()) { + case ".docx": + map = analysisString(data, userMap, device, entrustCode, sampleCode); + break; + case ".xlsx": + map = analysisList(data, userMap, device, entrustCode, sampleCode); + break; + case ".txt": + map = analysisTxt(data, userMap, device, entrustCode, sampleCode); + break; + case ".csv": + map = analysisList(data, userMap, device, entrustCode, sampleCode); + break; + case ".mdb": + map = analysisMdb(data, userMap, device); + break; + case ".db": + map = analysisDb(data, userMap, device); + break; + case ".png": + map = readPngString(data, userMap, device); + break; + default: + map = null; + break; + } + // 濡傛灉瀛樺湪瀛樺偍鍦板潃锛屽垯绉诲姩鍦板潃 + if (ObjectUtils.isNotEmpty(device.getStorageUrl())) { + String s = HTTP + ip + MOVEFILE + "?startFilePath=" + device.getCollectUrl() + "&endFilePath=" + device.getStorageUrl() + "&fileType=" + device.getFileType(); + HttpUtil.get(s); + } + return map; + } + } + + public static Map<String, Object> createFrequency(String entrustCode, String sampleCode,String fiberOpticRibbon, Map<String, Object> map) { + HashSet<String> set = new HashSet<>(); + map.forEach((key, value) -> { + String[] split = key.split(","); + String inspectionItem = split[0]; + System.out.println(value); + // 鍙鏈変竴涓笉涓虹┖灏眘et杩涘幓 + Map map1 = JSONObject.parseObject(JSONObject.toJSONString(value), Map.class); + if (ObjectUtils.isNotEmpty(value) && ObjectUtils.isNotEmpty(map1.get("result"))) { + set.add(inspectionItem); + } + }); + Map<String, Object> result = new HashMap<>(); + for (String inspectionItemKey : set) { + Map<String, Object> hashMap = new HashMap<>(); + map.forEach((key, value) -> { + String[] split = key.split(","); + String inspectionItem = split[0]; + if (inspectionItemKey.equals(inspectionItem)) { + if (split.length > 1) { + hashMap.put(split[1], value); + } else { + hashMap.put(split[0], value); + } + } + }); + String frequency = createKey(entrustCode, sampleCode,fiberOpticRibbon, inspectionItemKey); + hashMap.put("frequency", frequency); + result.put(inspectionItemKey, hashMap); + } + return result; + } + + public static String createKey(String entrustCode, String sampleCode,String fiberOpticRibbon, String inspectionItemKey) { + String key = frequency + ":" + entrustCode + ":" + sampleCode + ":" + inspectionItemKey; + if(StringUtils.isNotBlank(fiberOpticRibbon)){ + key = frequency + ":" + entrustCode + ":" + sampleCode + ":" + fiberOpticRibbon + ":" + inspectionItemKey; + } + boolean b = RedisUtil.hasKey(key); + String frequencyValue; + if (b) { + long incr = RedisUtil.incr(key, 1); + frequencyValue = String.valueOf(incr); + } else { + RedisUtil.set(key, 1); + frequencyValue = "1"; + } + return frequencyValue; + } + + /** + * 闇�瑕侀�氳繃X,Y杞村畾浣� + * + * @param data + * @param dataConfig + * @return + */ + private static Map<String, Object> analysisDb(String data, Map<String, List<DataConfig>> dataConfig, Device device) { + JSONObject jsonObject = JSON.parseObject(data); + Map<String, Object> map = new HashMap<>(); + if (jsonObject.isEmpty()) { + return map; + } + JSONArray dataList = JSONArray.parseArray(jsonObject.get("data").toString()); + dataConfig.forEach((k, v) -> { + AtomicInteger numberOfDataEntries = new AtomicInteger(); + List<Object> list = new ArrayList<>(); + for (int config = 0; config < v.size(); config++) { + String refery = getRefer(v.get(config).getRefery()); + for (int i = 0; i < dataList.size(); i++) { + JSONObject jsonObject1 = JSON.parseObject(dataList.get(i).toString()); + Object o = jsonObject1.get(refery); + if (ObjectUtils.isNotEmpty(o)) { + numberOfDataEntries.addAndGet(1); + list.add(o); + } + } + } + // 鎷兼帴鏁伴噰閰嶇疆 + List<Object> result = new ArrayList<>(); + for (int i = 0; i < numberOfDataEntries.get(); i++) { + String aggregate = ""; + for (int j = 0; j < v.size(); j++) { + int index; + if (j == 0) { + index = i; + } else { + index = numberOfDataEntries.get() + i; + } + aggregate += list.get(index).toString() + ","; + } + int lastIndex = aggregate.lastIndexOf(","); + String substring = aggregate.substring(0, lastIndex); + result.add(substring); + } + // 杩涜鍏紡璁$畻 + Object resultValue = calculationFormula(result, v.get(0), k, device); + map.put(k, resultValue); + }); + return map; + } + + /** + * @param data + * @param dataConfig + * @return + */ + private static Map<String, Object> analysisMdb(String data, Map<String, List<DataConfig>> dataConfig, Device device) { + JSONObject jsonObject = JSON.parseObject(data); + Map<String, Object> map = new HashMap<>(); + if (jsonObject.isEmpty()) { + return map; + } + JSONArray dataList = JSONArray.parseArray(jsonObject.get("data").toString()); + dataConfig.forEach((k, v) -> { + AtomicInteger numberOfDataEntries = new AtomicInteger(); + List<Object> list = new ArrayList<>(); + for (int config = 0; config < v.size(); config++) { + String refery = getRefer(v.get(config).getRefery()); + for (int i = 0; i < dataList.size(); i++) { + JSONObject jsonObject1 = JSON.parseObject(dataList.get(i).toString()); + Object o = jsonObject1.get(refery); + if (ObjectUtils.isNotEmpty(o)) { + numberOfDataEntries.addAndGet(1); + list.add(o); + } + } + } + // 鎷兼帴鏁伴噰閰嶇疆 + List<Object> result = new ArrayList<>(); + for (int i = 0; i < numberOfDataEntries.get(); i++) { + String aggregate = ""; + for (int j = 0; j < v.size(); j++) { + int index; + if (j == 0) { + index = i; + } else { + index = numberOfDataEntries.get() + i; + } + aggregate += list.get(index).toString() + ","; + } + int lastIndex = aggregate.lastIndexOf(","); + String substring = aggregate.substring(0, lastIndex); + result.add(substring); + } + // 杩涜鍏紡璁$畻 + Object resultValue = calculationFormula(result, v.get(0), k, device); + map.put(k, resultValue); + }); + return map; + } + + private static Pattern SPATTERN = Pattern.compile("([-+])?\\d+(\\.\\d+)?"); + + /** + * 鍙渶X杞� + * + * @param data 閲囬泦鍒扮殑鏂囦欢瀛楃涓� + * @param dataConfig 鐢ㄦ埛閰嶇疆濂界殑x,y杞村畾浣嶆暟鎹笌鍙傜収鐗� + * @return + */ + private static Map<String, Object> readPngString(String data, Map<String, List<DataConfig>> dataConfig, Device device) { + Map<String, Object> map = new HashMap<>(); + dataConfig.forEach((k, v) -> { + List<Object> list = new ArrayList<>(); + for (int config = 0; config < v.size(); config++) { + String referx = getRefer(v.get(config).getReferx()); + String result = null; + // 閫氳繃\n灏嗗瓧绗︿覆鍒嗗壊涓鸿 + String[] aColumnY = data.split("\n"); + List<String> list1 = new ArrayList<>(); + // 璇ュ惊鐜緱鍑虹敤鎴烽厤缃殑y杞� + for (int i = 0; i < aColumnY.length; i++) { + String addDataWithSpaces = referx.replaceAll("", " "); + int x = getXOrY(v.get(config).getX(), k, "X"); + if (aColumnY[i].contains(addDataWithSpaces)) { + Matcher matcher = SPATTERN.matcher(aColumnY[i]); + while (matcher.find()) { + String group = matcher.group(); + list1.add(group); + } + } + if (ObjectUtils.isNotEmpty(list1)) { + result = list1.get(x); + } + } + if (ObjectUtils.isNotEmpty(result)) { + list.add(result); + } + } + // 杩涜鍏紡璁$畻 + Object resultValue = calculationFormula(list, v.get(0), k, device); + map.put(k, resultValue); + }); + return map; + } + + /** + * 浠庢枃浠朵腑鎻愬彇鍑烘潵鐨勬枃瀛楋紝濡傛灉鏈夊叕寮忥紝杩涜鍏紡璁$畻锛屽惁鍒欏彇鍒楄〃绗竴涓�� + * + * @param list 鎻愬彇鍑虹殑鏁板瓧 + * @param dataConfig 瀛樺偍鍏紡鐨勫璞� + * @return + */ + private static Object calculationFormula(List<Object> list, DataConfig dataConfig, String insProductItem, Device device) { + if (list.size() == 0) { + Map<String, Object> hashMap = new HashMap<>(); + hashMap.put("equipName", device.getDeviceName()); + hashMap.put("equipValue", device.getManagementNumber()); + hashMap.put("result", null); + return hashMap; + } + ArrayList<Object> listResult = new ArrayList<>(); + Map<String, Object> hashMap = new HashMap<>(); + // 濡傛灉涓嶄负绌猴紝杩涜鍏紡璁$畻 + if (ObjectUtils.isNotEmpty(dataConfig.getFormula())) { + // 鍚﹀垯锛氭病鏈夊叕寮忎唬琛ㄤ笉闇�瑕佽绠楋紝鐩存帴鎻愬彇List閲岄潰鐨勬暟鎹� + if (ObjectUtils.isEmpty(device.getEntrustCode()) && ObjectUtils.isEmpty(device.getSampleCode())) { + String s = calculationFormulaList(list, dataConfig.getFormula()); + listResult.add(s); + } else { + list.forEach(i -> { + List<Object> strings = Arrays.asList(i.toString().split(",")); + String s = calculationFormulaList(strings, dataConfig.getFormula()); + listResult.add(s); + }); + } + } else { + listResult.addAll(list); + } + // 涓轰簡缁欏墠绔仛鏁版嵁鍖哄垎 + if (listResult.size() > 1) { + hashMap.put("result", listResult); + } else { + hashMap.put("result", listResult.get(0).toString()); + } + hashMap.put("equipName", device.getDeviceName()); + hashMap.put("equipValue", device.getManagementNumber()); + return hashMap; + } + + /** + * 瑙f瀽String鏁版嵁 + * + * @param data 閲囬泦鍒扮殑鏂囦欢瀛楃涓� + * @param dataConfig 鐢ㄦ埛閰嶇疆濂界殑x,y杞村畾浣嶆暟鎹笌鍙傜収鐗� + * @return + */ + private static Map<String, Object> analysisTxt(String data, Map<String, List<DataConfig>> dataConfig, + Device device, String entrustCode, String sampleCode) { + Map<String, Object> map = new HashMap<>(); + dataConfig.forEach((k, v) -> { + List<Object> list = new ArrayList<>(); + // 濮旀墭缂栧彿涓庢牱鍝佺紪鍙蜂笉瀛樺湪锛屽畾锛�1銆乊瀹氳寖鍥达紝X瀹氭í鍧愭爣锛�2銆佸彧瀛樺湪Y锛�3銆佸彧瀛樺湪X + if (ObjectUtils.isEmpty(device.getEntrustCode()) && ObjectUtils.isEmpty(device.getSampleCode())) { + list = analyzeData(data, v, k, ","); + // 濮旀墭缂栧彿涓庢牱鍝佺紪鍙峰瓨鍦� + } else if (ObjectUtils.isNotEmpty(device.getEntrustCode()) && ObjectUtils.isNotEmpty(device.getSampleCode())) { + list = analyzeDataEntrustCodAndSampleCode(data, v, k, ",", device, entrustCode, sampleCode); + } + // 杩涜鍏紡璁$畻 + Object resultValue = calculationFormula(list, v.get(0), k, device); + map.put(k, resultValue); + }); + return map; + } + + /** + * @param data 閲囬泦鍒扮殑鏂囦欢瀛楃涓� + * @param dataConfig 鐢ㄦ埛閰嶇疆濂界殑x,y杞村畾浣嶆暟鎹笌鍙傜収鐗� + * @return + */ + private static Map<String, Object> analysisString(String data, Map<String, List<DataConfig>> dataConfig, Device device, + String entrustCode, String sampleCode) { + String processingDataAfterSpaces = data + .replaceAll(" +", splitIdentifier) + .replaceAll("\r", "") + .replaceAll(" ", ""); + Map<String, Object> map = new HashMap<>(); + dataConfig.forEach((k, v) -> { + List<Object> list = new ArrayList<>(); + // 濮旀墭缂栧彿涓庢牱鍝佺紪鍙蜂笉瀛樺湪锛屽畾锛�1銆乊瀹氳寖鍥达紝X瀹氭í鍧愭爣锛�2銆佸彧瀛樺湪Y锛�3銆佸彧瀛樺湪X + if (ObjectUtils.isEmpty(device.getEntrustCode()) && ObjectUtils.isEmpty(device.getSampleCode())) { + list = analyzeData(processingDataAfterSpaces, v, k, splitIdentifier); + // 濮旀墭缂栧彿涓庢牱鍝佺紪鍙峰瓨鍦� + } else if (ObjectUtils.isNotEmpty(device.getEntrustCode()) && ObjectUtils.isNotEmpty(device.getSampleCode())) { + list = analyzeDataEntrustCodAndSampleCode(processingDataAfterSpaces, v, k, splitIdentifier, device, entrustCode, sampleCode); + } + // 杩涜鍏紡璁$畻 + Object resultValue = calculationFormula(list, v.get(0), k, device); + map.put(k, resultValue); + }); + return map; + } + + /** + * 鍙朮锛孻涓や釜瀹氫綅 + * + * @param data 閲囬泦鍒扮殑鏂囦欢瀛楃涓� + * @param dataConfig 鐢ㄦ埛閰嶇疆濂界殑x,y杞村畾浣嶆暟鎹笌鍙傜収鐗� + * @return + */ + public static Map<String, Object> analysisList(String data, Map<String, List<DataConfig>> dataConfig, + Device device, String entrustCode, String sampleCode) { + Map<String, Object> map = new HashMap<>(); + dataConfig.forEach((k, v) -> { + List<Object> list = new ArrayList<>(); + // 濮旀墭缂栧彿涓庢牱鍝佺紪鍙蜂笉瀛樺湪锛屽畾锛�1銆乊瀹氳寖鍥达紝X瀹氭í鍧愭爣锛�2銆佸彧瀛樺湪Y锛�3銆佸彧瀛樺湪X + if (ObjectUtils.isEmpty(device.getEntrustCode()) && ObjectUtils.isEmpty(device.getSampleCode())) { + list = analyzeData(data, v, k, splitIdentifier); + // 濮旀墭缂栧彿涓庢牱鍝佺紪鍙峰瓨鍦� + } else if (ObjectUtils.isNotEmpty(device.getEntrustCode()) && ObjectUtils.isNotEmpty(device.getSampleCode())) { + list = analyzeDataEntrustCodAndSampleCode(data, v, k, splitIdentifier, device, entrustCode, sampleCode); + } + // 杩涜鍏紡璁$畻 + Object resultValue = calculationFormula(list, v.get(0), k, device); + map.put(k, resultValue); + }); + return map; + } + + private static List<Object> analyzeDataEntrustCodAndSampleCode(String data, List<DataConfig> v, String k, String splitIdentifier, + Device device, String entrustCodeValue, String sampleCodeValue) { + entrustCodeValue = entrustCodeValue.replaceAll(" ", ""); + sampleCodeValue = sampleCodeValue.replaceAll(" ", ""); + // 鏈�缁堢粨鏋� + List<Object> list = new ArrayList<>(); + int numberOfDataEntries = 0; + // 鍙杄ntrustCode涓巗ampleCode鎵�鍦ㄤ綅 + for (int config = 0; config < v.size(); config++) { + numberOfDataEntries = 0; + Integer entrustCodeY = null; + Integer sampleCodeY = null; + Integer referYCoordinate = null; + String refery = getRefer(v.get(config).getRefery()); + String entrustCode = getRefer(device.getEntrustCode()); // 濮旀墭缂栧彿瀛楁 + String sampleCode = getRefer(device.getSampleCode()); // 鏍峰搧缂栧彿瀛楁 + if (ObjectUtils.isEmpty(refery)) { + continue; + } + // 鍘婚櫎鎵�鏈夌殑绌烘牸锛岄�氳繃\n灏嗗瓧绗︿覆鍒嗗壊涓鸿 + String[] aColumnY = data.replaceAll(" ", "").split("\n"); + for (int i = 0; i < aColumnY.length; i++) { + // 濡傛灉閫氳繃鍒ゆ柇锛屽畾浣嶅埌Y杞� + if (aColumnY[i].contains(entrustCode) && aColumnY[i].contains(sampleCode)) { + String[] aLine = aColumnY[i].split(splitIdentifier); + for (int j = 0; j < aLine.length; j++) { + if (aLine[j].contains(entrustCode)) { + entrustCodeY = j; + } + if (aLine[j].contains(sampleCode)) { + sampleCodeY = j; + } + if (aLine[j].contains(refery)) { + referYCoordinate = j; + } + } + } + if (ObjectUtils.isNotEmpty(entrustCodeY) && ObjectUtils.isNotEmpty(sampleCodeY) && ObjectUtils.isNotEmpty(referYCoordinate)) { + String[] aLine = aColumnY[i].split(splitIdentifier); + try { + if (aLine[entrustCodeY].contains(entrustCodeValue) && aLine[sampleCodeY].contains(sampleCodeValue)) { + String result = aLine[referYCoordinate]; + // 闃叉璁$畻鍏紡鐨勬椂鍊欏嚭鐜帮細[null] 杩欑鏁版嵁 + if (ObjectUtils.isNotEmpty(result)) { + numberOfDataEntries += 1; + list.add(result); + } + } + } catch (Exception e) { + } + } + } + } + // 鎷兼帴鏁伴噰閰嶇疆 + List<Object> result = new ArrayList<>(); + for (int i = 0; i < numberOfDataEntries; i++) { + String aggregate = ""; + for (int j = 0; j < v.size(); j++) { + int index; + if (j == 0) { + index = i; + } else { + index = numberOfDataEntries + i; + } + aggregate += list.get(index).toString() + ","; + } + int lastIndex = aggregate.lastIndexOf(","); + String substring = aggregate.substring(0, lastIndex); + result.add(substring); + } + return result; + } + + // 鐢变簬鍦ㄦ柟娉曚腑浼氬ぇ閲忕殑鍒ゆ柇锛屾墍浠ュ仛涓�涓柟娉� + private static int getXOrY(String value, String k, String tips) { + try { + return Integer.parseInt(value); + } catch (NumberFormatException e) { + throw new ErrorException(k + "锛氭湭閰嶇疆" + tips + "鍧愭爣杞寸殑鍊硷紒"); + } + } + + // 闃叉鍙傜収鐗╀负绌烘姤閿欙紝杩涜鍒ゆ柇濡傛灉涓虹┖璧嬪�肩┖瀛楃 + private static String getRefer(String refer) { + return ObjectUtils.isNotEmpty(refer) ? refer.replaceAll(" ", "") : ""; + } + + /** + * 濮旀墭缂栧彿涓庢牱鍝佺紪鍙烽兘涓虹┖鎵ц + * + * @param data + * @param v + * @param k + * @param split + * @return + */ + public static List<Object> analyzeData(String data, List<DataConfig> v, String k, String split) { + List<Object> list = new ArrayList<>(); + for (int config = 0; config < v.size(); config++) { + // 鍙栦袱涓敤鎴烽厤缃殑鍙傜収鐗� + String referx = getRefer(v.get(config).getReferx()); + String refery = getRefer(v.get(config).getRefery()); + if (ObjectUtils.isEmpty(refery) && ObjectUtils.isEmpty(referx)) { + continue; + } + // 鏈�缁堢粨鏋� + String result = null; + // 閫氳繃\n灏嗗瓧绗︿覆鍒嗗壊涓鸿 + String[] aColumnY = data.replaceAll(" ", "").split("\n"); + Integer end = null; + // 閲囬泦鏁版嵁锛歒杞� + for (int i = 0; i < aColumnY.length; i++) { + // 濡傛灉Y鍙傜収涓嶄负绌轰笌X鍙傜収涓虹┖鍒欐墽琛岋紝鍚屾椂璇ヨ鍖呭惈Y鍙傜収 + if (ObjectUtils.isNotEmpty(refery) && ObjectUtils.isEmpty(referx) && aColumnY[i].contains(refery)) { + // 鍙朰鍧愭爣鍊� + int y = getXOrY(v.get(config).getY(), k, "Y"); + String[] aLineX = aColumnY[i].split(split); + for (int j = 0; j < aLineX.length; j++) { + if (aLineX[j].contains(refery)) { + String[] split1 = new String[0]; + try { + split1 = aColumnY[i + y].split(split); + } catch (Exception e) { + throw new ErrorException(k + "锛歒杞村畾浣嶈秴鍑猴紒"); + } + try { + result = split1[j]; + } catch (Exception e) { + throw new ErrorException(k + "锛歑杞村畾浣嶈秴鍑猴紒"); + } + } + } + // 濡傛灉Y鍙傜収涓嶄负绌轰笌X鍙傜収涓嶄负绌哄垯鎵ц,姝ゅY瀹氬尯鍩� + } else if (ObjectUtils.isNotEmpty(refery) && ObjectUtils.isNotEmpty(referx)) { + // 鍙杧鐨勫�硷紝闃叉鎶ラ敊 + int x = getXOrY(v.get(config).getX(), k, "X"); + // 鍙朰鍧愭爣鍊� + int y = getXOrY(v.get(config).getY(), k, "Y"); + // 缂撳瓨Y鐨勭粨鏉熷�� + if (ObjectUtils.isEmpty(end) && aColumnY[i].contains(refery)) { + end = i + y; + } + // 鍒ゆ柇鏄惁鍦ㄥ弬鐓х墿涓鸿捣鍒帮紝Y鍧愭爣鍊间负鏈�缁堣寖鍥� + if (ObjectUtils.isNotEmpty(end) && i <= end) { + String[] aLineX = aColumnY[i].split(split); + // 鍙栬鏁版嵁鐨勫崟鍏冩牸鏁版嵁 + for (int j = 0; j < aLineX.length; j++) { + if (aLineX[j].contains(referx)) { + try { + result = aLineX[j + x]; + } catch (Exception e) {} + break; + } + } + } + // 濡傛灉X鍙傜収涓嶄负绌哄悓鏃惰琛屽寘鍚玐鍙傜収锛屽垯鎵ц涓嬮潰鐨勪唬鐮� + } else if (aColumnY[i].contains(referx) && ObjectUtils.isEmpty(refery)) { + String[] aLineX = aColumnY[i].split(split); + // 鍙杧鐨勫�硷紝闃叉鎶ラ敊 + int x = getXOrY(v.get(config).getX(), k, "X"); + // 鍙栬鏁版嵁鐨勫崟鍏冩牸鏁版嵁 + for (int j = 0; j < aLineX.length; j++) { + if (aLineX[j].contains(referx)) { + try { + result = aLineX[j + x]; + } catch (Exception e) {} + } + } + } + } + // 闃叉璁$畻鍏紡鐨勬椂鍊欏嚭鐜帮細[null] 杩欑鏁版嵁 + if (ObjectUtils.isNotEmpty(result)) { + String formatProcessing = getFormatProcessing(result); + list.add(formatProcessing); + } + } + return list; + } + + /** + * + * @param j 妯潗鏍� + * @param x 绾靛潗鏍� + * @param aLineX 琛屾暟鎹� + * @param referx x鍙傜収鐗� + * @param k 妫�楠岄」鐩� + * @return + */ + public static String getCellValue(int x, String[] aLineX, String referx, String k) { + String result = null; + for (int j = 0; j < aLineX.length; j++) { + try { + int xAddY = j + x; + if (aLineX[j].contains(referx)) { + result = aLineX[xAddY]; + } + } catch (Exception e) {} + } + return result; + } + + public static String getFormatProcessing(String value) { + value = value.replaceAll("%", ""); + if (value.contains("=")) { + String[] split = value.split("="); + return split[split.length - 1]; + } else if (value.contains(":")) { + String[] split = value.split(":"); + return split[split.length - 1]; + } else { + return value; + } + } + + public static String getIp(HttpServletRequest request) { + String ipAddress = request.getRemoteAddr(); + // 闃叉鍥炵幆鍦板潃鍙樹负IPv6 + return ipAddress.equals("0:0:0:0:0:0:0:1") ? "127.0.0.1" : ipAddress; + } + + public static String calculationFormulaList(List<Object> list, String formula) { + //棣栧厛灏唋ist杞崲涓篵igdecmic + List<BigDecimal> bigDecimalList = list.stream() + .map(obj -> { + return new BigDecimal((obj).toString()); + }).collect(Collectors.toList()); + + //灏嗕腑鏂囩殑(杞崲鑻辨枃鐨�()) + formula = formula.replace("锛�", "(") + .replace("锛�", ")") + .replace("锛�", ","); + //鐒跺悗鎻愬彇鍏紡 + String strs = formula.substring(0, formula.indexOf("(")); + String upperStr = strs.toUpperCase(); + if (upperStr.matches(".*\\d.*")) { + upperStr = ""; + } + //鐒跺悗鑾峰彇鏈�澶栭潰鎷彿閲岄潰鐨勫��,鍐嶆牴鎹�","鍒嗗壊 + int start = formula.indexOf("("); + int end = -1; + int a = 0; + for (int i = start; i < formula.length(); i++) { + char c = formula.charAt(i); + if (c == '(') { + a++; + } else if (c == ')') { + a--; + if (a == 0) { + end = i; + } + } + } + if (start == -1 || end == -1) { + throw new ErrorException("鍏紡鎷彿涓嶅尮閰�: " + formula); + } + + String argumentsStr = formula.substring(start + 1, end); + List<String> arguments = new ArrayList<>(); + int bracketCount = 0; + StringBuilder currentArgument = new StringBuilder(); + for (char c : argumentsStr.toCharArray()) { + if (c == ',' && bracketCount == 0) { + arguments.add(currentArgument.toString()); + currentArgument.setLength(0); + } else { + if (c == '(') bracketCount++; + if (c == ')') bracketCount--; + currentArgument.append(c); + } + } + arguments.add(currentArgument.toString()); + String[] bracketStrs = arguments.toArray(new String[0]); + List<BigDecimal> results = new ArrayList<>(); + for (String expr : bracketStrs) { + Pattern pattern = Pattern.compile("([A-Z])(\\d+)"); + Matcher matcher = pattern.matcher(expr); + StringBuffer sb = new StringBuffer(); + while (matcher.find()) { + String letter = matcher.group(1); + int index = Integer.parseInt(matcher.group(2)) - 1; // 灏�1-based杞负0-based + if (index < bigDecimalList.size()) { + matcher.appendReplacement(sb, bigDecimalList.get(index).toString()); + } else { + throw new RuntimeException("鍏紡涓殑涓嬫爣 " + index + " 瓒呭嚭鑼冨洿"); + } + } + matcher.appendTail(sb); + + // 璁$畻琛ㄨ揪寮� + ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); + try { + Object result = engine.eval(sb.toString()); + results.add(new BigDecimal(result.toString())); + } catch (Exception e) { + throw new IllegalArgumentException("鏃犳硶璁$畻鍏紡: " + sb, e); + } + } + // 鏍规嵁鍑芥暟鍚嶇О杩涜鐩稿簲璁$畻 + BigDecimal finalResult; + if (upperStr.equals("") || upperStr == null) { + finalResult = results.get(0); + } else { + switch (upperStr) { + case "MAX": + finalResult = results.stream().max(BigDecimal::compareTo) + .orElseThrow(() -> new IllegalArgumentException("鏃犳硶璁$畻MAX鍊�")); + break; + case "MIN": + finalResult = results.stream().min(BigDecimal::compareTo) + .orElseThrow(() -> new IllegalArgumentException("鏃犳硶璁$畻MIN鍊�")); + break; + case "SUM": + finalResult = results.stream().reduce(BigDecimal.ZERO, BigDecimal::add); + break; + case "ABS": + finalResult = results.stream().map(BigDecimal::abs).reduce(BigDecimal.ZERO, BigDecimal::add); + break; + case "AVERAGE": + finalResult = results.stream().reduce(BigDecimal.ZERO, BigDecimal::divide) + .divide(BigDecimal.valueOf(results.size()), 2, BigDecimal.ROUND_HALF_UP); + break; + case "MEDIAN": + int size = results.size(); + if (size % 2 == 1) { + finalResult = results.get(size / 2); + } else { + BigDecimal sum = results.get(size / 2 - 1).add(results.get(size / 2)); + finalResult = sum.divide(BigDecimal.valueOf(2), 2, BigDecimal.ROUND_HALF_UP); + } + break; + default: + throw new UnsupportedOperationException("鏆備笉鏀寔鍑芥暟: " + upperStr); + } + } + + return finalResult.toString(); + // 鍚﹀垯锛氭病鏈夊叕寮忎唬琛ㄤ笉闇�瑕佽绠楋紝鐩存帴鎻愬彇List閲岄潰鐨勬暟鎹� + } +} diff --git a/cnas-require/src/main/resources/mapper/DataConfigMapper.xml b/cnas-require/src/main/resources/mapper/DataConfigMapper.xml new file mode 100644 index 0000000..4e18b71 --- /dev/null +++ b/cnas-require/src/main/resources/mapper/DataConfigMapper.xml @@ -0,0 +1,48 @@ +<?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.requier.mapper.DataConfigMapper"> + + <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 --> + <resultMap id="BaseResultMap" type="com.ruoyi.requier.pojo.DataConfig"> + <id column="id" property="id" /> + <result column="formula" property="formula" /> + <result column="referx" property="referx" /> + <result column="refery" property="refery" /> + <result column="x" property="x" /> + <result column="y" property="y" /> + </resultMap> + + <select id="selectDataConfigList" resultType="com.ruoyi.requier.dto.DeviceConfigDtoPage"> + SELECT d.device_name, + d.file_type, + d.collect_url, + d.storage_url, + d.ip, + d.entrust_code, + d.sample_code, + d.db_file_name, + d.fiber_optic_ribbon, + ip.inspection_item, + if(ip.inspection_item_subclass is not null and ip.inspection_item_subclass != '', + ip.inspection_item_subclass, ip.inspection_item) inspection_item_subclass, + TRIM(BOTH '["]' FROM SUBSTRING_INDEX(REPLACE(ip.sample, '[["', ''), '"]]', 1)) sample, + ddc.formula, + ddc.referx, + ddc.refery, + ddc.x, + ddc.y, + ddc.id, + ip.id structureItemParameterId + FROM device d + left join structure_item_parameter ip on FIND_IN_SET(ip.id, d.ins_product_ids) + left join device_data_config ddc on ddc.device_id = d.id and ddc.structure_item_parameter_id = ip.id + where d.id = #{deviceId} + </select> + + <select id="deleteDataConfig" resultType="integer"> + SELECT ddc.id + FROM device d + left join structure_item_parameter ip on not FIND_IN_SET(ip.id, d.ins_product_ids) + inner join device_data_config ddc on ddc.device_id = d.id and ddc.structure_item_parameter_id = ip.id + </select> +</mapper> diff --git a/cnas-require/src/main/resources/mapper/DeviceMaintenanceMapper.xml b/cnas-require/src/main/resources/mapper/DeviceMaintenanceMapper.xml new file mode 100644 index 0000000..84c3513 --- /dev/null +++ b/cnas-require/src/main/resources/mapper/DeviceMaintenanceMapper.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.requier.mapper.DeviceMaintenanceMapper"> + + <select id="getDeviceMaintenanceParam" resultType="com.ruoyi.requier.pojo.DeviceMaintenance"> + select id,device_id,device_name, device_number,management_number,content,name + ,date from device_maintenance + </select> + +<!-- <select id="getDeviceMaintenancePage" resultType="com.yuanchu.mom.pojo.DeviceMaintenance">--> +<!-- select *--> +<!-- from device_maintenance dm--> +<!-- where dm.device_id = #{deviceId}--> +<!-- </select>--> + + <select id="deviceMaintenanceExport" resultType="com.ruoyi.requier.dto.DeviceMaintenanceExport"> + select id, device_id, device_name, device_number, management_number, content, date, if(maintenance_type = 1, '璁″垝涓淮鎶�', '浣跨敤鍓嶅悗缁存姢'), next_date, name, comments + from device_maintenance dm + where dm.device_id = #{deviceId} + </select> +</mapper> \ No newline at end of file diff --git a/cnas-require/src/main/resources/mapper/DeviceMapper.xml b/cnas-require/src/main/resources/mapper/DeviceMapper.xml new file mode 100644 index 0000000..5f0ad41 --- /dev/null +++ b/cnas-require/src/main/resources/mapper/DeviceMapper.xml @@ -0,0 +1,184 @@ +<?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.requier.mapper.DeviceMapper"> + <select id="selectDeviceParameter" resultType="com.ruoyi.requier.pojo.Device"> + select * from( + select id, + large_category, + date_production, + equipment_manager, + authorized_person, + device_name, + internal_code, + asset_code, + calibration_date, + scrap_time, + acceptance_records, + subclass, + factory_no, + acquisition_date, + accurate_measurement, + specification_model, + device_status, + storage_point, + activation_date, + latest_traceability, + down_time, + maintenance_records, + manufacturer, + detection_type, + procurement_costs, + calibration_certicate, + create_user, + create_time, + update_user, + update_time, + status + from device + ) a + <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''"> + ${ew.customSqlSegment} + </if> + </select> + <select id="selectEquipmentOverview" resultType="com.ruoyi.requier.pojo.Device"> + select * from( + select id, + device_name, + specification_model, + device_status, + create_user, + status, + update_time + from device + ) a + <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''"> + ${ew.customSqlSegment} + </if> + </select> + <select id="authorizedPerson" resultType="com.ruoyi.requier.pojo.Device"> + select id, + authorized_person + from device + </select> + <select id="search" resultType="com.ruoyi.requier.pojo.Device"> + select * + from device + <where> + <if test="deviceName!=null and deviceName!=''"> + and device_name like concat('%',#{deviceName},'%') + </if> + <if test="specificationModel!=null and specificationModel!= ''"> + and specification_model = #{specificationModel} + </if> + <if test="largeCategory!=null"> + and large_category = #{largeCategory} + </if> + <if test="largeCategory == 'null'"> + and (large_category = '' or large_category is null) + </if> + </where> + </select> + + <select id="selectDeviceImage" resultType="com.ruoyi.requier.pojo.Device"> + select (image_upload, create_user, create_time) values (#{image_upload} + , #{createUser} + , #{createTime}) + </select> + <select id="selectDevicePrincipal" resultType="com.ruoyi.requier.pojo.Device"> + select id, + equipment_manager + from device + </select> + + <select id="selectDeviceParameterPage" resultType="com.ruoyi.requier.dto.DeviceDto"> + select * from( + SELECT + d.*, + cmr.calibration_date as last_calibration_date_two, + cmr.next_calibration_date as next_calibration_date_two, + GROUP_CONCAT(distinct inspection_item SEPARATOR ';') AS insProductItem, + u.name , + l.laboratory_name + FROM + device d + LEFT JOIN `user` u ON u.id = d.equipment_manager + LEFT JOIN laboratory l ON l.id = d.subordinate_departments_id + LEFT JOIN device_metric_record cmr ON d.id = cmr.device_id + LEFT JOIN structure_item_parameter sip ON FIND_IN_SET(sip.id, d.ins_product_ids) + <where> + <if test="laboratoryNameIsNull != null and laboratoryNameIsNull == true"> + l.laboratory_name is null + </if> + AND cmr.type = 'calibrate' or cmr.type is null or cmr.type = '' + </where> + GROUP BY + d.id, + u.name, l.laboratory_name + ) a + <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''"> + ${ew.customSqlSegment} + </if> + </select> + + <select id="getInspectionItemSubclass" resultType="map"> + SELECT ip.inspection_item, + if(ip.inspection_item_subclass is not null and ip.inspection_item_subclass != '', + ip.inspection_item_subclass, ip.inspection_item) inspection_item_subclass + FROM ins_product ip + where ip.ins_sample_id = #{id} + </select> + <resultMap id="treeDeviceDto" type="map"> + <result property="label" column="laboratory_name"/> + <result property="value" column="value" /> + <collection property="children" resultMap="storagePointMap" javaType="List"/> + </resultMap> + + <resultMap id="storagePointMap" type="map"> + <result property="value" column="value"/> + <result property="label" column="storage_point"/> + <collection property="children" resultMap="deviceNameMap" javaType="List"/> + </resultMap> + + <resultMap id="deviceNameMap" type="map"> + <result property="value" column="id"/> + <result property="label" column="device_name"/> + </resultMap> + + <select id="treeDevice" resultMap="treeDeviceDto"> + select + d.id, + case when l.laboratory_name is null || l.laboratory_name ='' then '鍏朵粬' else l.laboratory_name end as laboratory_name, + case when d.storage_point is null || d.storage_point ='' then '鍏朵粬' else d.storage_point end as storage_point, + d.device_name, + null as value + from device d + LEFT JOIN laboratory l ON l.id = d.subordinate_departments_id + <where> + <if test="deviceName!=null and deviceName!=''"> + and device_name like concat('%',#{deviceName},'%') + </if> + </where> + order by l.laboratory_name desc, d.storage_point desc + </select> + + <select id="selectDeviceByCode" resultType="com.ruoyi.requier.dto.DeviceDto"> + SELECT d.*, + GROUP_CONCAT(DISTINCT inspection_item SEPARATOR ';') AS ins_product_item, + l.laboratory_name, + u1.NAME equipmentManager_name, + u2.NAME authorized_person_name + FROM device d + LEFT JOIN structure_item_parameter sip ON FIND_IN_SET(sip.id, d.ins_product_ids) + LEFT JOIN laboratory l ON d.subordinate_departments_id = l.id + LEFT JOIN USER u1 ON u1.id = d.equipment_manager + LEFT JOIN USER u2 ON u2.id = d.authorized_person + WHERE d.id = #{id} + + GROUP BY d.id, + l.laboratory_name, + u1.NAME, + u2.NAME + </select> +</mapper> diff --git a/cnas-require/src/main/resources/mapper/InformationNotificationMapper.xml b/cnas-require/src/main/resources/mapper/InformationNotificationMapper.xml new file mode 100644 index 0000000..63f77b4 --- /dev/null +++ b/cnas-require/src/main/resources/mapper/InformationNotificationMapper.xml @@ -0,0 +1,16 @@ +<?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.requier.mapper.InformationNotificationMapper"> + + <select id="getPage" resultType="com.ruoyi.requier.dto.InformationNotificationDto"> + select i.*, u.name senderUser, u2.name consigneeUser + from information_notification i + left join user u on i.sender_id = u.id + left join user u2 on u2.id = i.consignee_id + where i.consignee_id = #{userId} + <if test="messageType != '' and messageType != null"> + and i.message_type = #{messageType} + </if> + order by i.create_time desc + </select> +</mapper> diff --git a/cnas-require/src/main/resources/mapper/PkMasterMapper.xml b/cnas-require/src/main/resources/mapper/PkMasterMapper.xml new file mode 100644 index 0000000..92dff33 --- /dev/null +++ b/cnas-require/src/main/resources/mapper/PkMasterMapper.xml @@ -0,0 +1,19 @@ +<?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.requier.mapper.PkMasterMapper"> + + <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 --> + <resultMap id="BaseResultMap" type="com.ruoyi.requier.pojo.PkMaster"> + <id column="id" property="id" /> + <result column="entrust_code" property="entrustCode" /> + <result column="sample_code" property="sampleCode" /> + <result column="model" property="model" /> + <result column="cycles" property="cycles" /> + <result column="temperature" property="temperature" /> + <result column="number_optical_fibers" property="numberOpticalFibers" /> + <result column="ISID" property="isid" /> + <result column="detection_date" property="detectionDate" /> + <result column="detection_people" property="detectionPeople" /> + </resultMap> + +</mapper> diff --git a/cnas-require/src/main/resources/mapper/PkSlaveMapper.xml b/cnas-require/src/main/resources/mapper/PkSlaveMapper.xml new file mode 100644 index 0000000..61f21e0 --- /dev/null +++ b/cnas-require/src/main/resources/mapper/PkSlaveMapper.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.requier.mapper.PkSlaveMapper"> + + <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 --> + <resultMap id="BaseResultMap" type="com.ruoyi.requier.pojo.PkSlave"> + <id column="id" property="id" /> + <result column="weaken_1310_A" property="weaken1310A" /> + <result column="weaken_1310_B" property="weaken1310B" /> + <result column="weaken_1550_A" property="weaken1550A" /> + <result column="weaken_1550_B" property="weaken1550B" /> + <result column="weaken_1625_A" property="weaken1625A" /> + <result column="weaken_1625_B" property="weaken1625B" /> + <result column="weaken_1383_A" property="weaken1383A" /> + <result column="weaken_1383_B" property="weaken1383B" /> + <result column="weaken_1490_A" property="weaken1490A" /> + <result column="weaken_1490_B" property="weaken1490B" /> + <result column="ins_bushing_id" property="insBushingId" /> + <result column="ins_fibers_id" property="insFibersId" /> + <result column="ins_fiber_id" property="insFiberId" /> + <result column="shift_id" property="shiftId" /> + <result column="create_time" property="createTime" /> + </resultMap> + + <select id="selectList1" resultMap="BaseResultMap"> + select * from device_pk_slave where shift_id=#{isid} + </select> +</mapper> diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/InsBushingService.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/InsBushingService.java new file mode 100644 index 0000000..954b822 --- /dev/null +++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/InsBushingService.java @@ -0,0 +1,21 @@ +package com.ruoyi.inspect.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.inspect.dto.BushingDto; +import com.ruoyi.inspect.pojo.InsBushing; + +import java.util.List; + +/** + * <p> + * 鍏夌氦閰嶇疆鐨勫绠¤〃 鏈嶅姟绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2024-05-30 05:58:16 + */ +public interface InsBushingService extends IService<InsBushing> { + + List<BushingDto> selectBushingBySampleId(Integer sampleId); + +} diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/InsUnPassService.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/InsUnPassService.java new file mode 100644 index 0000000..894ceeb --- /dev/null +++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/InsUnPassService.java @@ -0,0 +1,18 @@ +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.UnPassPageDto; +import com.ruoyi.inspect.pojo.InsUnPass; + +import java.util.Map; + +/** + * @author 鏈变匠鍚� + * @date 2024/5/8 13:00 + */ +public interface InsUnPassService extends IService<InsUnPass> { + + IPage<UnPassPageDto> pageInsUnPass(Page page, UnPassPageDto unPassPageDto); +} \ No newline at end of file diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsBushingServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsBushingServiceImpl.java new file mode 100644 index 0000000..74427cc --- /dev/null +++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsBushingServiceImpl.java @@ -0,0 +1,80 @@ +package com.ruoyi.inspect.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.basic.service.StandardTemplateService; +import com.ruoyi.inspect.dto.BushingDto; +import com.ruoyi.inspect.dto.FibersDto; +import com.ruoyi.inspect.mapper.InsBushingMapper; +import com.ruoyi.inspect.pojo.InsBushing; +import com.ruoyi.inspect.pojo.InsProduct; +import com.ruoyi.inspect.service.InsBushingService; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.*; + +/** + * <p> + * 鍏夌氦閰嶇疆鐨勫绠¤〃 鏈嶅姟瀹炵幇绫� + * </p> + * + * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃 + * @since 2024-05-30 05:58:16 + */ +@Service +@AllArgsConstructor +public class InsBushingServiceImpl extends ServiceImpl<InsBushingMapper, InsBushing> implements InsBushingService { + + private InsBushingMapper insBushingMapper; + + private StandardTemplateService standardTemplateService; + + @Override + public List<BushingDto> selectBushingBySampleId(Integer sampleId) { + List<InsBushing> insBushings = insBushingMapper.selectList(Wrappers.<InsBushing>lambdaQuery().eq(InsBushing::getInsSampleId, sampleId)); + List<BushingDto> bushingDtos = new ArrayList<>(); + for (InsBushing insBushing : insBushings) { + BushingDto bushingDto = JSON.parseObject(JSON.toJSONString(insBushing), BushingDto.class); + bushingDto.setFiber(insBushingMapper.selectFiberByBushingId(bushingDto.getId())); + if(bushingDto.getFiber().isEmpty()){ + bushingDto.setFibers(insBushingMapper.selectFibersByBushingId(insBushing.getId())); + for (FibersDto fibers : bushingDto.getFibers()) { + fibers.setFiber(insBushingMapper.selectFiberByFibersId(fibers.getId())); + } + } + bushingDtos.add(bushingDto); + } + return bushingDtos; + } + + private void getTemplateThing(List<InsProduct> insProducts) { + Set<Integer> set = new HashSet<>(); + Map<Integer, String> map2 = new HashMap<>(); + for (InsProduct product : insProducts) { + if (product.getTemplateId() == null) { + product.setTemplate(new ArrayList<>()); + continue; + } + String thing = null; + if (product.getTemplateId() != null && set.add(product.getTemplateId())) { + map2.put(product.getTemplateId(), standardTemplateService.getStandTempThingById(product.getTemplateId()) + ""); + thing = map2.get(product.getTemplateId()); + } + if (StrUtil.isNotEmpty(thing)) { + JSONObject sheet = JSON.parseObject(JSON.toJSONString(JSON.parseArray(JSON.toJSONString(JSON.parseObject(thing).get("data"))).get(0))); + JSONObject config = JSON.parseObject(JSON.toJSONString(sheet.get("config"))); + List<JSONObject> cellData = JSON.parseArray(JSON.toJSONString(sheet.get("celldata")), JSONObject.class); + Map<String, Object> style = new HashMap<>(); + style.put("rowlen", config.get("rowlen")); + style.put("columnlen", config.get("columnlen")); + product.setTemplate(cellData); + product.setStyle(style); + product.setTemplateName(standardTemplateService.getStandTempNameById(product.getTemplateId())); + } + } + } +} diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsUnPassServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsUnPassServiceImpl.java new file mode 100644 index 0000000..eb9525e --- /dev/null +++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsUnPassServiceImpl.java @@ -0,0 +1,34 @@ +package com.ruoyi.inspect.service.impl; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.utils.QueryWrappers; +import com.ruoyi.inspect.dto.UnPassPageDto; +import com.ruoyi.inspect.mapper.InsUnPassMapper; +import com.ruoyi.inspect.pojo.InsUnPass; +import com.ruoyi.inspect.service.InsUnPassService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; + +/** + * @author 鏈变匠鍚� + * @date 2024/5/8 13:02 + */ +@Service +public class InsUnPassServiceImpl extends ServiceImpl<InsUnPassMapper, InsUnPass> implements InsUnPassService { + + @Resource + private InsUnPassMapper insUnPassMapper; + + @Override + public IPage<UnPassPageDto> pageInsUnPass(Page page, UnPassPageDto unPassPageDto) { + Map<String, Object> map = new HashMap<>(); +// Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("pageInsUnPass"); +// if (map1.get("look") == 1) unPassPageDto.setCreateUser(map1.get("userId")); + return insUnPassMapper.pageInsUnPass(page, QueryWrappers.queryWrappers(unPassPageDto)); + } +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 65178ed..9c059c7 100644 --- a/pom.xml +++ b/pom.xml @@ -389,8 +389,8 @@ <module>ruoyi-admin</module> <module>ruoyi-framework</module> <module>ruoyi-system</module> - <module>ruoyi-quartz</module> - <module>ruoyi-generator</module> +<!-- <module>ruoyi-quartz</module>--> +<!-- <module>ruoyi-generator</module>--> <module>ruoyi-common</module> <module>basic-server</module> <module>inspect-server</module> diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/ExchangeConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/ExchangeConstants.java new file mode 100644 index 0000000..ff983f7 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/ExchangeConstants.java @@ -0,0 +1,7 @@ +package com.ruoyi.common.constant; + +public class ExchangeConstants { + + public final static String WORK_TIME_EXCHANGE = "insert_work_time_exchange"; + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/RouterKeyConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/RouterKeyConstants.java new file mode 100644 index 0000000..4e8de14 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/RouterKeyConstants.java @@ -0,0 +1,13 @@ +package com.ruoyi.common.constant; + +/** + * 宸ユ椂闃熷垪璺敱涓婚敭甯搁噺 + */ +public class RouterKeyConstants { + + public final static String GX_KEY="gx_router_key"; + public final static String CL_KEY="cl_router_key"; + public final static String JX_KEY="jx_router_key"; + public final static String DL_KEY="dl_router_key"; + +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/util/MatrixToImageWriter.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/util/MatrixToImageWriter.java new file mode 100644 index 0000000..f124bc7 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/util/MatrixToImageWriter.java @@ -0,0 +1,68 @@ +package com.ruoyi.framework.util; + +import com.google.zxing.BarcodeFormat; +import com.google.zxing.EncodeHintType; +import com.google.zxing.MultiFormatWriter; +import com.google.zxing.WriterException; +import com.google.zxing.common.BitMatrix; +import com.ruoyi.framework.exception.ErrorException; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.HashMap; +import java.util.Map; + +/** + * 閰嶇疆鍥惧儚鍐欏叆鍣� + * + * @author z1292 + * + */ +public class MatrixToImageWriter { + private final int BLACK = 0xFF000000; + private final int WHITE = 0xFFFFFFFF; + + private BufferedImage toBufferedImage(BitMatrix matrix) { + int width = matrix.getWidth(); + int height = matrix.getHeight(); + BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + for (int x = 0; x < width; x++) { + for (int y = 0; y < height; y++) { + image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE); + } + } + return image; + } + + private void writeToFile(BitMatrix matrix, String format, File file) throws IOException { + BufferedImage image = toBufferedImage(matrix); + if (!ImageIO.write(image, format, file)) { + throw new ErrorException("Could not write an image of format " + format + " to " + file); + } + } + + public String code(String content, String path) { + try { + String codeName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yy_MM_dd&HH_mm_ss"));// 浜岀淮鐮佺殑鍥剧墖鍚� + String imageType = "jpg";// 鍥剧墖绫诲瀷 + MultiFormatWriter multiFormatWriter = new MultiFormatWriter(); + Map<EncodeHintType, Object> hints = new HashMap<>(); + hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); + hints.put(EncodeHintType.MARGIN, 0); + BitMatrix bitMatrix = multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, 400, 400, hints); + File file1 = new File(path, codeName + "." + imageType); + writeToFile(bitMatrix, imageType, file1); + return file1.getPath(); + } catch (WriterException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + throw new ErrorException("浜岀淮鐮佺敓鎴愬け璐�"); + } + +} \ No newline at end of file diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/util/MyUtil.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/util/MyUtil.java new file mode 100644 index 0000000..9c5410f --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/util/MyUtil.java @@ -0,0 +1,119 @@ +package com.ruoyi.framework.util; + +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Objects; +import java.util.Random; +import java.util.StringJoiner; + +@Component +public class MyUtil<T> { + + /** + * 鑷畾涔夎皟璇曞伐鍏风被 + * @return + */ + public static void PrintLog(String str){ + // 绫诲悕 + String className = Thread.currentThread().getStackTrace()[2].getClassName(); + // 鍑芥暟鍚� + String methodName = Thread.currentThread().getStackTrace()[2].getMethodName(); + System.out.println("\033[1;94m" + className + "-->" + methodName + "-->" + str + "\033[0m"); + } + + /** + * 鏃ユ湡宸ュ叿绫� + * @return + */ + public static String MyDateFormat(){ + //鑾峰彇鏃ユ湡 + //瀵� import java.util.Date; 涓嬬殑鍖� + Date date = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + return sdf.format(date); + } + + /** + * 鑾峰彇闅忔満鍔犲瘑鐩� + * @param n 浣嶆暟 + * @return 杩斿洖闅忔満鍔犲瘑鐩� + */ + public static String getSalt(int n) { + char[] chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890!@$%^&*.?".toCharArray(); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < n; i++) { + char c = chars[new Random().nextInt(chars.length)]; + sb.append(c); + } + return sb.toString(); + } + + /** + * 鑾峰彇闅忔満鏁板瓧 + * @param n 浣嶆暟 + * @return 杩斿洖闅忔満鍊� + */ + public static String getNumber(int n) { + char[] chars = "1234567890".toCharArray(); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < n; i++) { + char c = chars[new Random().nextInt(chars.length)]; + sb.append(c); + } + return sb.toString(); + } + + public static String getTimeSixNumberCode(String prefix, String keyName){ + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); + String format = simpleDateFormat.format(new Date()); + String timeStr = format.replace("-", ""); + long incrNum = RedisUtil.incr(keyName, 1); + if(incrNum == 1){ + RedisUtil.expire(keyName, 60 * 60 * 24); + } + String sixIncr = String.format("%06d", incrNum); + return prefix + timeStr + sixIncr; + } + + /** + * 鍒ゆ柇鏄惁涓篹xcel + * @param file + * @return + */ + public static boolean isExcelFile(MultipartFile file) { + if (file.isEmpty()) { + return false; + } + String originalFilename = file.getOriginalFilename(); + if (originalFilename == null) { + return false; + } + String[] parts = originalFilename.split("\\."); + if (parts.length == 0) { + return false; + } + String fileExtension = parts[parts.length - 1].toLowerCase(); + return fileExtension.equals("xls") || fileExtension.equals("xlsx"); + } + + /** + * + * @param delimiter + * @param elements + * @return + */ + public static String joinChars(String delimiter,String... elements){ + Objects.requireNonNull(delimiter); + Objects.requireNonNull(elements); + // Number of elements not likely worth Arrays.stream overhead. + StringJoiner joiner = new StringJoiner(delimiter); + for (String cs: elements) { + joiner.add(Objects.isNull(cs)?"":cs); + } + return joiner.toString(); + } + +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/util/RedisUtil.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/util/RedisUtil.java new file mode 100644 index 0000000..6cfc8f4 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/util/RedisUtil.java @@ -0,0 +1,631 @@ +package com.ruoyi.framework.util; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; + +@Component +public class RedisUtil { + private static RedisTemplate<String, Object> redisTemplate; + public static RedisTemplate<String, Object> getRedisTemplate() { + return redisTemplate; + } + @Autowired + private RedisUtil(RedisConnectionFactory redisConnectionFactory){ + // redisTemplate妯℃澘鍒濆鍖� + redisTemplate = new RedisTemplate<>(); + redisTemplate.setConnectionFactory(redisConnectionFactory); + + // 灏嗗璞″簭鍒楀寲 + ObjectMapper om=new ObjectMapper(); + om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, + ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY); + + // String鐨勫簭鍒楀寲 + StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); + // json搴忓垪鍖栭厤缃� + Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer=new Jackson2JsonRedisSerializer<>(Object.class); + jackson2JsonRedisSerializer.setObjectMapper(om); + //key閲囩敤String鐨勫簭鍒楀寲鏂瑰紡 + redisTemplate.setKeySerializer(stringRedisSerializer); + //hash鐨刱ey涔熼噰鐢⊿tring 鐨勫簭鍒楀寲鏂瑰紡 + redisTemplate.setHashKeySerializer(stringRedisSerializer); + //value鐨勫簭鍒楀寲鏂瑰紡閲囩敤jackson鐨勬柟寮� + redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); +// //hash鐨剉alue搴忓垪鍖栨柟寮忛噰鐢╦ackson + redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); + redisTemplate.afterPropertiesSet(); + } + + // =============================common============================ + /** + * 鎸囧畾缂撳瓨澶辨晥鏃堕棿 + * @param key 閿� + * @param time 鏃堕棿(绉�) + */ + public static boolean expire(String key, long time) { + try { + if (time > 0) { + redisTemplate.expire(key, time, TimeUnit.SECONDS); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 鏍规嵁key 鑾峰彇杩囨湡鏃堕棿 + * @param key 閿� 涓嶈兘涓簄ull + * @return 鏃堕棿(绉�) 杩斿洖0浠h〃涓烘案涔呮湁鏁� + */ + public static long getExpire(String key) { + return redisTemplate.getExpire(key, TimeUnit.SECONDS); + } + + + /** + * 鍒ゆ柇key鏄惁瀛樺湪 + * @param key 閿� + * @return true 瀛樺湪 false涓嶅瓨鍦� + */ + public static boolean hasKey(String key) { + try { + return redisTemplate.hasKey(key); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + + /** + * 鍒犻櫎缂撳瓨 + * @param key 鍙互浼犱竴涓�� 鎴栧涓� + */ +// @SuppressWarnings("unchecked") + public static void del(String... key) { + if (key != null && key.length > 0) { + if (key.length == 1) { + redisTemplate.delete(key[0]); + } else { + redisTemplate.delete(Arrays.asList(key)); +// redisTemplate.delete(CollectionUtils.arrayToList(key)); + } + } + } + + /** + * 妯$硦鍖归厤鍒犻櫎澶氫釜缂撳瓨 + * @param key 鍙互浼犱竴涓�� 鎴栧涓� + */ + public static void delsLike(String key) { + Set<String> keys = redisTemplate.keys(key); + redisTemplate.delete(keys); + } + + /** + * 鑾峰彇骞跺垹闄ょ紦瀛� + * @param key 閿� + * @return 鍊� + */ + public static Object getAndDelete(String key) { + try{ + return key == null ? null : get(key); + }finally { + del(key); + } + } + + // ============================String============================= + + /** + * 鏅�氱紦瀛樿幏鍙� + * @param key 閿� + * @return 鍊� + */ + public static Object get(String key) { + return key == null ? null : redisTemplate.opsForValue().get(key); + } + + /** + * 鏅�氱紦瀛樻斁鍏� + * @param key 閿� + * @param value 鍊� + * @return true鎴愬姛 false澶辫触 + */ + + public static boolean set(String key, Object value) { + try { + redisTemplate.opsForValue().set(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + + /** + * 鏅�氱紦瀛樻斁鍏ュ苟璁剧疆鏃堕棿 + * @param key 閿� + * @param value 鍊� + * @param time 鏃堕棿(绉�) time瑕佸ぇ浜�0 濡傛灉time灏忎簬绛変簬0 灏嗚缃棤闄愭湡 + * @return true鎴愬姛 false 澶辫触 + */ + + public static boolean set(String key, Object value, long time) { + try { + if (time > 0) { + redisTemplate.opsForValue().set(key, value, time, TimeUnit.MINUTES); + } else { + // 鍙慨鏀瑰弬鏁颁笉淇敼ttl + redisTemplate.opsForValue().set(key, value, 0); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + + /** + * 閫掑 + * @param key 閿� + * @param delta 瑕佸鍔犲嚑(澶т簬0) + */ + public static long incr(String key, long delta) { + if (delta < 0) { + throw new RuntimeException("閫掑鍥犲瓙蹇呴』澶т簬0"); + } + return redisTemplate.opsForValue().increment(key, delta); + } + + + /** + * 閫掑噺 + * @param key 閿� + * @param delta 瑕佸噺灏戝嚑(灏忎簬0) + */ + public static long decr(String key, long delta) { + if (delta < 0) { + throw new RuntimeException("閫掑噺鍥犲瓙蹇呴』澶т簬0"); + } + return redisTemplate.opsForValue().increment(key, -delta); + } + + + // ================================Map================================= + + /** + * HashGet + * @param key 閿� 涓嶈兘涓簄ull + * @param item 椤� 涓嶈兘涓簄ull + */ + public static Object hget(String key, String item) { + return redisTemplate.opsForHash().get(key, item); + } + + /** + * 鑾峰彇hashKey瀵瑰簲鐨勬墍鏈夐敭鍊� + * @param key 閿� + * @return 瀵瑰簲鐨勫涓敭鍊� + */ + public static Map<Object, Object> hmget(String key) { + return redisTemplate.opsForHash().entries(key); + } + + /** + * HashSet + * @param key 閿� + * @param map 瀵瑰簲澶氫釜閿�� + */ + public static boolean hmset(String key, Map<String, Object> map) { + try { + redisTemplate.opsForHash().putAll(key, map); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + + /** + * HashSet 骞惰缃椂闂� + * @param key 閿� + * @param map 瀵瑰簲澶氫釜閿�� + * @param time 鏃堕棿(绉�) + * @return true鎴愬姛 false澶辫触 + */ + public static boolean hmset(String key, Map<String, Object> map, long time) { + try { + if (time > 0) { + redisTemplate.opsForHash().putAll(key, map); + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + + /** + * 鍚戜竴寮爃ash琛ㄤ腑鏀惧叆鏁版嵁,濡傛灉涓嶅瓨鍦ㄥ皢鍒涘缓 + * + * @param key 閿� + * @param item 椤� + * @param value 鍊� + * @return true 鎴愬姛 false澶辫触 + */ + public static boolean hset(String key, String item, Object value) { + try { + redisTemplate.opsForHash().put(key, item, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 鍚戜竴寮爃ash琛ㄤ腑鏀惧叆鏁版嵁,濡傛灉涓嶅瓨鍦ㄥ皢鍒涘缓 + * + * @param key 閿� + * @param item 椤� + * @param value 鍊� + * @param time 鏃堕棿(绉�) 娉ㄦ剰:濡傛灉宸插瓨鍦ㄧ殑hash琛ㄦ湁鏃堕棿,杩欓噷灏嗕細鏇挎崲鍘熸湁鐨勬椂闂� + * @return true 鎴愬姛 false澶辫触 + */ + public static boolean hset(String key, String item, Object value, long time) { + try { + if (time > 0) { + redisTemplate.opsForHash().put(key, item, value); + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 鍒犻櫎hash琛ㄤ腑鐨勫�� + * + * @param key 閿� 涓嶈兘涓簄ull + * @param item 椤� 鍙互浣垮涓� 涓嶈兘涓簄ull + */ + public static void hdel(String key, Object... item) { + redisTemplate.opsForHash().delete(key, item); + } + + + /** + * 鍒ゆ柇hash琛ㄤ腑鏄惁鏈夎椤圭殑鍊� + * + * @param key 閿� 涓嶈兘涓簄ull + * @param item 椤� 涓嶈兘涓簄ull + * @return true 瀛樺湪 false涓嶅瓨鍦� + */ + public static boolean hHasKey(String key, String item) { + return redisTemplate.opsForHash().hasKey(key, item); + } + + + /** + * hash閫掑 濡傛灉涓嶅瓨鍦�,灏变細鍒涘缓涓�涓� 骞舵妸鏂板鍚庣殑鍊艰繑鍥� + * + * @param key 閿� + * @param item 椤� + * @param by 瑕佸鍔犲嚑(澶т簬0) + */ + public static double hincr(String key, String item, double by) { + return redisTemplate.opsForHash().increment(key, item, by); + } + + + /** + * hash閫掑噺 + * + * @param key 閿� + * @param item 椤� + * @param by 瑕佸噺灏戣(灏忎簬0) + */ + public static double hdecr(String key, String item, double by) { + return redisTemplate.opsForHash().increment(key, item, -by); + } + + + // ============================set============================= + + /** + * 鏍规嵁key鑾峰彇Set涓殑鎵�鏈夊�� + * @param key 閿� + */ + public static Set<Object> sGet(String key) { + try { + return redisTemplate.opsForSet().members(key); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + + /** + * 鏍规嵁value浠庝竴涓猻et涓煡璇�,鏄惁瀛樺湪 + * + * @param key 閿� + * @param value 鍊� + * @return true 瀛樺湪 false涓嶅瓨鍦� + */ + public static boolean sHasKey(String key, Object value) { + try { + return redisTemplate.opsForSet().isMember(key, value); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + + /** + * 灏嗘暟鎹斁鍏et缂撳瓨 + * + * @param key 閿� + * @param values 鍊� 鍙互鏄涓� + * @return 鎴愬姛涓暟 + */ + public static long sSet(String key, Object... values) { + try { + return redisTemplate.opsForSet().add(key, values); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + + /** + * 灏唖et鏁版嵁鏀惧叆缂撳瓨 + * + * @param key 閿� + * @param time 鏃堕棿(绉�) + * @param values 鍊� 鍙互鏄涓� + * @return 鎴愬姛涓暟 + */ + public static long sSetAndTime(String key, long time, Object... values) { + try { + Long count = (long)values.length; + if (time > 0) { + count = redisTemplate.opsForSet().add(key, values); + expire(key, time); + } + return count; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + + /** + * 鑾峰彇set缂撳瓨鐨勯暱搴� + * + * @param key 閿� + */ + public static long sGetSetSize(String key) { + try { + return redisTemplate.opsForSet().size(key); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + + /** + * 绉婚櫎鍊间负value鐨� + * + * @param key 閿� + * @param values 鍊� 鍙互鏄涓� + * @return 绉婚櫎鐨勪釜鏁� + */ + + public static long setRemove(String key, Object... values) { + try { + return redisTemplate.opsForSet().remove(key, values); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + // ===============================list================================= + + /** + * 鑾峰彇list缂撳瓨鐨勫唴瀹� + * + * @param key 閿� + * @param start 寮�濮� + * @param end 缁撴潫 0 鍒� -1浠h〃鎵�鏈夊�� + */ + public static List<Object> lGet(String key, long start, long end) { + try { + return redisTemplate.opsForList().range(key, start, end); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + + /** + * 鑾峰彇list缂撳瓨鐨勯暱搴� + * + * @param key 閿� + */ + public static long lGetListSize(String key) { + try { + return redisTemplate.opsForList().size(key); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + + /** + * 閫氳繃绱㈠紩 鑾峰彇list涓殑鍊� + * + * @param key 閿� + * @param index 绱㈠紩 index>=0鏃讹紝 0 琛ㄥご锛�1 绗簩涓厓绱狅紝渚濇绫绘帹锛沬ndex<0鏃讹紝-1锛岃〃灏撅紝-2鍊掓暟绗簩涓厓绱狅紝渚濇绫绘帹 + */ + public static Object lGetIndex(String key, long index) { + try { + return redisTemplate.opsForList().index(key, index); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + + /** + * 灏唋ist鏀惧叆缂撳瓨 + * + * @param key 閿� + * @param value 鍊� + */ + public static boolean lSet(String key, Object value) { + try { + redisTemplate.opsForList().rightPush(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + + /** + * 灏唋ist鏀惧叆缂撳瓨 + * @param key 閿� + * @param value 鍊� + * @param time 鏃堕棿(绉�) + */ + public static boolean lSet(String key, Object value, long time) { + try { + if (time > 0) { + redisTemplate.opsForList().rightPush(key, value); + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + + } + + + /** + * 灏唋ist鏀惧叆缂撳瓨 + * + * @param key 閿� + * @param value 鍊� + * @return true 瀛樻斁鎴愬姛 false瀛樻斁澶辫触 + */ + public static boolean lSet(String key, List<Object> value) { + try { + redisTemplate.opsForList().rightPushAll(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + + } + + + /** + * 灏唋ist鏀惧叆缂撳瓨 + * + * @param key 閿� + * @param value 鍊� + * @param time 鏃堕棿(绉�) + * @return true 瀛樻斁鎴愬姛 false瀛樻斁澶辫触 + */ + public static boolean lSet(String key, List<Object> value, long time) { + try { + if (time > 0) { + redisTemplate.opsForList().rightPushAll(key, value); + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + + /** + * 鏍规嵁绱㈠紩淇敼list涓殑鏌愭潯鏁版嵁 + * + * @param key 閿� + * @param index 绱㈠紩 + * @param value 鍊� + * @return true 瀛樻斁鎴愬姛 false瀛樻斁澶辫触 + */ + + public static boolean lUpdateIndex(String key, long index, Object value) { + try { + redisTemplate.opsForList().set(key, index, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + + /** + * 绉婚櫎N涓�间负value + * + * @param key 閿� + * @param count 绉婚櫎澶氬皯涓� + * @param value 鍊� + * @return 绉婚櫎鐨勪釜鏁� + */ + + public static long lRemove(String key, long count, Object value) { + try { + return redisTemplate.opsForList().remove(key, count, value); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } +} + diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysPasswordService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysPasswordService.java index 6728c7b..b800bda 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysPasswordService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysPasswordService.java @@ -24,7 +24,7 @@ @Autowired private RedisCache redisCache; - @Value(value = "${user.password.maxRetryCount}") + @Value(value = "10") private int maxRetryCount; @Value(value = "${user.password.lockTime}") -- Gitblit v1.9.3