From 4c64a8f71dbbd65e72864fcefb8578958e4dda51 Mon Sep 17 00:00:00 2001
From: zhuo <2089219845@qq.com>
Date: 星期二, 18 二月 2025 14:35:26 +0800
Subject: [PATCH] 检验任务移植
---
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderFileMapper.java | 20
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsProductResultMapper.java | 29
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderDeviceRecordMapper.java | 32
inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderDeviceRecordService.java | 11
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderFactoryVerifyItemServiceImpl.java | 19
inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderFileService.java | 16
inspect-server/src/main/java/com/ruoyi/inspect/service/InsUnqualifiedRetestProductService.java | 15
inspect-server/src/main/java/com/ruoyi/inspect/dto/UnPassPageDto.java | 15
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderStandardTemplateMapper.java | 17
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderFileServiceImpl.java | 20
inspect-server/src/main/resources/mapper/InsOrderFileMapper.xml | 15
inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderPlanService.java | 123 +
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderStandardTemplateServiceImpl.java | 19
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsUnPassServiceImpl.java | 31
performance-server/src/main/resources/mapper/PerformanceShiftMapper.xml | 6
inspect-server/src/main/java/com/ruoyi/inspect/service/InsUnPassService.java | 18
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderFactoryVerifyMapper.java | 17
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java | 4295 ++++++++++++++++++++++++++++++++++++++++++++++++
inspect-server/src/main/java/com/ruoyi/inspect/dto/InsOrderPlanProductDto.java | 33
inspect-server/src/main/java/com/ruoyi/inspect/controller/InsOrderPlanController.java | 271 +++
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsUnPassMapper.java | 15
inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderStandardTemplateService.java | 15
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsUnqualifiedRetestProductServiceImpl.java | 19
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsUnqualifiedRetestResultMapper.java | 17
inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderFactoryVerifyItemService.java | 15
inspect-server/src/main/resources/mapper/InsOrderDeviceRecordMapper.xml | 23
inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderFactoryVerifyItemMapper.java | 17
inspect-server/src/main/resources/mapper/InsUnPassMapper.xml | 14
inspect-server/src/main/java/com/ruoyi/inspect/dto/InsOrderDeviceRecordDto.java | 16
inspect-server/src/main/resources/mapper/InsProductResultMapper.xml | 40
inspect-server/src/main/java/com/ruoyi/inspect/dto/EnterFactoryReport.java | 33
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderDeviceRecordServiceImpl.java | 15
32 files changed, 5,260 insertions(+), 1 deletions(-)
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/controller/InsOrderPlanController.java b/inspect-server/src/main/java/com/ruoyi/inspect/controller/InsOrderPlanController.java
new file mode 100644
index 0000000..d61e1f9
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/controller/InsOrderPlanController.java
@@ -0,0 +1,271 @@
+package com.ruoyi.inspect.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.inspect.dto.InsOrderPlanDTO;
+import com.ruoyi.inspect.dto.InsOrderPlanProductDto;
+import com.ruoyi.inspect.dto.InsProductBindingDto;
+import com.ruoyi.inspect.pojo.InsOrder;
+import com.ruoyi.inspect.pojo.InsOrderFactoryVerify;
+import com.ruoyi.inspect.pojo.InsOrderFile;
+import com.ruoyi.inspect.pojo.InsProduct;
+import com.ruoyi.inspect.service.InsOrderFileService;
+import com.ruoyi.inspect.service.InsOrderPlanService;
+import com.ruoyi.inspect.service.InsProductService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 妫�楠屼换鍔�-鎺у埗灞�
+ */
+@RestController
+@RequestMapping("/insOrderPlan")
+@Api(tags = "妫�楠屼换鍔�")
+@AllArgsConstructor
+public class InsOrderPlanController {
+
+ private InsOrderPlanService insOrderPlanService;
+
+ private InsOrderFileService insOrderFileService;
+
+ private InsProductService insProductService;
+
+
+ @ApiOperation(value = "鑾峰彇妫�楠屼换鍔″垪琛�")
+ @GetMapping("/selectInsOrderPlanList")
+ public Result selectInsOrderPlanList(Page page, InsOrderPlanDTO insOrderPlanDTO){
+ return Result.success(insOrderPlanService.selectInsOrderPlanList(page, insOrderPlanDTO));
+ }
+
+ @ApiOperation(value = "妫�楠屽崟璇︽儏-浠诲姟鍒囨崲")
+ @GetMapping("/inspectionOrderDetailsTaskSwitching")
+ public Result inspectionOrderDetailsTaskSwitching(Page page, InsOrderPlanDTO insOrderPlanDTO) throws Exception {
+ return Result.success(insOrderPlanService.inspectionOrderDetailsTaskSwitching(page, insOrderPlanDTO));
+ }
+
+ @ApiOperation(value = "璁ら浠诲姟璁″垝")
+ @PostMapping("/claimInsOrderPlan")
+ public Result claimInsOrderPlan(@RequestBody InsOrderPlanDTO data) {
+ return Result.success(insOrderPlanService.claimInsOrderPlan(data));
+ }
+
+
+ @ApiOperation(value = "鎵ц妫�楠屾搷浣�")
+ @PostMapping("/doInsOrder")
+ public Result<?> doInsOrder(Integer id, String laboratory) {
+ return Result.success(insOrderPlanService.doInsOrder(id, laboratory));
+ }
+
+ @PostMapping("/getInsProduct")
+ @ApiOperation("鑾峰彇妫�楠岄」鐩拰妯℃澘鍐呭")
+ public Result<?> getInsProduct(InsOrderPlanProductDto insOrderPlanProductDto) {
+ return Result.success(insOrderPlanService.getInsProduct(insOrderPlanProductDto));
+ }
+
+
+ @ApiOperation(value = "浠诲姟浜ゆ帴")
+ @PostMapping("/upPlanUser")
+ public Result<?> upPlanUser(Integer userId, Integer orderId, String sonLaboratory) {
+ return Result.success(insOrderPlanService.upPlanUser(userId, orderId, sonLaboratory));
+ }
+
+ @ApiOperation(value = "鍒ゆ柇浜ゆ帴鐨勮瘯楠屽")
+ @PostMapping("/upPlanUser2")
+ public Result<?> upPlanUser2(Integer orderId) {
+ return Result.success(insOrderPlanService.upPlanUser2(orderId));
+ }
+
+
+ @ApiOperation(value = "澶嶆牳妫�楠屼换鍔�")
+ @PostMapping("/verifyPlan")
+ public Result<?> verifyPlan(Integer orderId, String laboratory, Integer type, String tell, Integer userId) {
+ return Result.success(insOrderPlanService.rawMaterialVerifyPlan(orderId, laboratory, type, tell, userId));
+ }
+
+ @ApiOperation(value = "鏍¢獙妫�楠屼换鍔℃彁浜�")
+ @PostMapping("/checkSubmitPlan")
+ public Result<?> checkSubmitPlan(Integer orderId, String laboratory) {
+ return Result.success(insOrderPlanService.checkSubmitPlan(orderId, laboratory));
+ }
+
+
+ @ApiOperation(value = "妫�楠屼换鍔℃彁浜�")
+ @PostMapping("/submitPlan")
+ public Result<?> submitPlan(Integer orderId, String laboratory, Integer verifyUser, String entrustCode) {
+ int num = insOrderPlanService.submitPlan(orderId, laboratory, verifyUser, entrustCode);
+ return num == 1 ? Result.success() : Result.fail("鎻愪氦澶辫触锛岄儴鍒嗛」鐩繕鏈繘琛屾楠�");
+ }
+
+
+ /**
+ *
+ * @param param 妯℃澘鍐呭
+ * @param currentTable 褰撳墠妯℃澘id
+ * @param sampleId 褰撳墠鏍峰搧id
+ * @param orderId 褰撳墠璁㈠崟id
+ * @param sonLaboratory 瀛愯瘯楠屽
+ * @return
+ */
+ @ApiOperation(value = "淇濆瓨妫�楠屽唴瀹�")
+ @PostMapping("/saveInsContext")
+ public Result<?> saveInsContext(String param, Integer currentTable, Integer sampleId, Integer orderId, String sonLaboratory) {
+ Map<String, Object> param2 = JSON.parseObject(param, Map.class);
+ insOrderPlanService.saveInsContext(param2, currentTable, sampleId, orderId, sonLaboratory);
+ return Result.success();
+ }
+
+ @ApiOperation(value = "鏌ョ湅妫�楠屽崟涓嬬殑闄勪欢鍒楄〃")
+ @GetMapping("/getFileList")
+ public Result<?> getFileList(Page page, InsOrderFile insOrderFile) throws Exception {
+ return Result.success(insOrderPlanService.getFileList(page, insOrderFile));
+ }
+
+
+ @ApiOperation(value = "涓婁紶闄勪欢")
+ @PostMapping("/uploadFile")
+ public Result<?> taskUploadFile(Integer orderId, MultipartFile file) {
+ return Result.success(insOrderPlanService.uploadFile(orderId, file));
+ }
+
+
+ @ApiOperation(value = "鍒犻櫎闄勪欢")
+ @PostMapping("/delfile")
+ public Result<?> delfile(Integer id) {
+ return Result.success(insOrderFileService.removeById(id));
+ }
+
+
+ @ApiOperation(value = "涓嬭浇闄勪欢")
+ @GetMapping("/downFile")
+ public Result<?> downFile(Integer id) {
+ InsOrderFile insOrderFile = insOrderFileService.getById(id);
+ HashMap<String, Object> map = new HashMap<>();
+ map.put("type", insOrderFile.getType());
+ map.put("fileUrl", insOrderFile.getFileUrl());
+ return Result.success(map);
+ }
+
+ @ApiOperation(value = "濉啓娓╁害涓庢箍搴�")
+ @PostMapping("/write")
+ public Result<?> write(@RequestBody InsOrder insOrder) {
+ return Result.success(insProductService.write(insOrder));
+ }
+
+
+ @ApiOperation(value = "鐢电紗閰嶇疆,鏌ョ湅閰嶇疆鏍囪瘑")
+ @PostMapping("/getCableTag")
+ public Result<?> getCableTag(Integer id, String laboratory) {
+ return Result.success(insOrderPlanService.getCableTag(id, laboratory));
+ }
+
+ @ApiOperation(value = "鍘熸潗鏂�,鏌ョ湅閰嶇疆鏍囪瘑")
+ @PostMapping("/getRawMaterialTag")
+ public Result<?> getRawMaterialTag(Integer id, String laboratory) {
+ return Result.success(insOrderPlanService.getRawMaterialTag(id, laboratory));
+ }
+
+ @ApiOperation(value = "鏌ョ湅閲嶅鏍囪瘑")
+ @PostMapping("/getRepetitionTag")
+ public Result<?> getRepetitionTag(Integer id, String laboratory, String cableTag) {
+ return Result.success(insOrderPlanService.getRepetitionTag(id, laboratory, cableTag));
+ }
+
+ @ApiOperation("鑾峰彇涓嶅悎鏍兼暟鎹�")
+ @PostMapping("/getInsProductUnqualified")
+ public Result<?> getInsProductUnqualified(InsOrderPlanProductDto insOrderPlanProductDto) {
+ return Result.success(insOrderPlanService.getInsProductUnqualified(insOrderPlanProductDto));
+ }
+
+ @ApiOperation("鏂板涓嶅悎鏍煎娴嬩俊鎭�")
+ @PostMapping("/addUnqualifiedRetest")
+ public Result<?> addDisqualificationRetest(@RequestBody Map<String, Object> params) {
+ // 鑾峰彇妫�楠屽璞$殑id
+ List<Integer> ids = (List<Integer>) params.get("ids");
+ return Result.success(insOrderPlanService.addDisqualificationRetest(ids));
+ }
+
+ @ApiOperation("鑾峰彇涓嶅悎鏍煎娴嬫暟鎹�")
+ @PostMapping("/getInsProductUnqualifiedRetest")
+ public Result<?> getInsProductUnqualifiedRetest(Integer id, Integer type, String laboratory, String cableTag, String rawMaterialTag, String retestTag) {
+ return Result.success(insOrderPlanService.getInsProductUnqualifiedRetest(id, type, laboratory, cableTag, rawMaterialTag, retestTag));
+ }
+
+ /**
+ *
+ * @param param 妯℃澘鍐呭
+ * @param currentTable 褰撳墠妯℃澘id
+ * @param sampleId 褰撳墠鏍峰搧id
+ * @param orderId 褰撳墠璁㈠崟id
+ * @param sonLaboratory 瀛愯瘯楠屽
+ * @return
+ */
+ @ApiOperation(value = "淇濆瓨涓嶅悎鏍煎娴嬫楠屽唴瀹�")
+ @PostMapping("/saveUnqualifiedContext")
+ public Result<?> saveUnqualifiedContext(String param, Integer currentTable, Integer sampleId, Integer orderId, String sonLaboratory) {
+ Map<String, Object> param2 = JSON.parseObject(param, Map.class);
+ insOrderPlanService.saveUnqualifiedContext(param2, currentTable, sampleId, orderId, sonLaboratory);
+ return Result.success();
+ }
+
+ @ApiOperation(value = "鏌ヨ鍘熸潗鏂欒繘璐ч獙璇�")
+ @GetMapping("/getFactoryVerify")
+ public Result<?> getFactoryVerify(Integer insOrderId) {
+ return Result.success(insOrderPlanService.getFactoryVerify(insOrderId));
+ }
+
+
+
+ @ApiOperation(value = "淇濆瓨鍘熸潗鏂欒繘璐ч獙璇�")
+ @PostMapping("/addFactoryVerify")
+ public Result<?> addFactoryVerify(@RequestBody InsOrderFactoryVerify factoryVerify) {
+ return Result.success(insOrderPlanService.addFactoryVerify(factoryVerify));
+ }
+
+
+ @ApiOperation(value = "淇敼妫�楠岄」鍐呭")
+ @PostMapping("/updateProductOnPlan")
+ public Result<?> updateProductOnPlan(@RequestBody InsProduct insProduct) {
+ insProductService.updateById(insProduct);
+ return Result.success();
+ }
+
+
+ @ApiOperation(value = "鏍规嵁妫�楠岄」id鏌ヨ妫�楠岄」鏍戜俊鎭�")
+ @GetMapping("/getProductTreeByProductId")
+ public Result<List<InsProduct>> getProductTreeByProductId(Integer productId) {
+ return Result.success(insProductService.getProductTreeByProductId(productId));
+ }
+
+
+
+ @ApiOperation(value = "鐗规畩妫�楠岄」缁戝畾")
+ @PostMapping("/bindingProductTreeByProductId")
+ public Result<?> bindingProductTreeByProductId(@RequestBody InsProductBindingDto insProductBindingDto) {
+ return Result.success(insProductService.bindingProductTreeByProductId(insProductBindingDto));
+ }
+
+
+ @ApiOperation(value = "鐗规畩妫�楠岄」缁戝畾鏌ヨ")
+ @GetMapping("/getBindingProductByProductId")
+ public Result<List<InsProduct>> getBindingProductByProductId(Integer productId) {
+ return Result.success(insProductService.list(Wrappers.<InsProduct>lambdaQuery()
+ .eq(InsProduct::getBindingProductId, productId)));
+ }
+
+
+
+ @ApiOperation(value = "鍒犻櫎鐗规畩妫�楠岄」缁戝畾淇℃伅")
+ @GetMapping("/delProductTreeByProductId")
+ public Result<?> delProductTreeByProductId(Integer productId) {
+ return Result.success(insProductService.removeBindingProductTree(productId));
+ }
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/EnterFactoryReport.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/EnterFactoryReport.java
new file mode 100644
index 0000000..3a5456d
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/EnterFactoryReport.java
@@ -0,0 +1,33 @@
+package com.ruoyi.inspect.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/8/12
+ */
+@Data
+public class EnterFactoryReport {
+
+ @ApiModelProperty("鏉愭枡鍚嶇О")
+ private String sample;
+
+ @ApiModelProperty("鍒拌揣鏁伴噺")
+ private String qtyArrived;
+
+ @ApiModelProperty("鎶芥鏁伴噺")
+ private String quantity;
+
+ @ApiModelProperty("瑙勬牸鍨嬪彿")
+ private String partDesc;
+
+ @ApiModelProperty("鏉愭枡鍘傚")
+ private String supplierName;
+
+ @ApiModelProperty("鎵瑰彿")
+ private String lotBatchNo;
+
+ @ApiModelProperty("妫�娴嬬紪鍙�")
+ private String code;
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/InsOrderDeviceRecordDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/InsOrderDeviceRecordDto.java
new file mode 100644
index 0000000..18eafe9
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/InsOrderDeviceRecordDto.java
@@ -0,0 +1,16 @@
+package com.ruoyi.inspect.dto;
+
+import com.ruoyi.inspect.pojo.InsOrderDeviceRecord;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/12/22
+ */
+@Data
+public class InsOrderDeviceRecordDto extends InsOrderDeviceRecord {
+
+ @ApiModelProperty("璁惧缂栧彿")
+ private String managementNumber;
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/InsOrderPlanProductDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/InsOrderPlanProductDto.java
new file mode 100644
index 0000000..dc7d89f
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/InsOrderPlanProductDto.java
@@ -0,0 +1,33 @@
+package com.ruoyi.inspect.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 妫�楠屼换鍔℃楠岄」鏌ヨ鏉′欢
+ *
+ * @Author zhuo
+ * @Date 2024/11/29
+ */
+@Data
+public class InsOrderPlanProductDto {
+
+ @ApiModelProperty("鏍峰搧id")
+ private Integer id;
+
+ @ApiModelProperty("绫诲瀷")
+ private Integer type;
+
+ @ApiModelProperty("璇曢獙瀹�")
+ private String laboratory;
+
+ @ApiModelProperty("鐢电紗閰嶇疆鏍囪瘑")
+ private String cableTag;
+
+ @ApiModelProperty("鍘熸潗鏂欐壒娆℃爣璇�")
+ private String rawMaterialTag;
+
+ @ApiModelProperty("鎴愬搧涓嬪崟閲嶅鏍囪瘑")
+ private String repetitionTag;
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/dto/UnPassPageDto.java b/inspect-server/src/main/java/com/ruoyi/inspect/dto/UnPassPageDto.java
new file mode 100644
index 0000000..96111a8
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/dto/UnPassPageDto.java
@@ -0,0 +1,15 @@
+package com.ruoyi.inspect.dto;
+
+import com.ruoyi.inspect.pojo.InsUnPass;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author 鏈变匠鍚�
+ * @date 2024/5/8 12:38
+ */
+@Data
+public class UnPassPageDto extends InsUnPass implements Serializable {
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderDeviceRecordMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderDeviceRecordMapper.java
new file mode 100644
index 0000000..258dd57
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderDeviceRecordMapper.java
@@ -0,0 +1,32 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.inspect.dto.InsOrderDeviceRecordDto;
+import com.ruoyi.inspect.pojo.InsOrderDeviceRecord;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * cnas璁惧浣跨敤璁板綍琛�(DeviceRecord)$desc
+ *
+ * @author makejava
+ * @since 2024-12-21 11:11:01
+ */
+public interface InsOrderDeviceRecordMapper extends BaseMapper<InsOrderDeviceRecord> {
+
+ /**
+ * 鏌ヨ璁惧浣跨敤璁板綍
+ * @param insOrderId
+ * @return
+ */
+ List<InsOrderDeviceRecordDto> selectDeviceNumber(Integer insOrderId);
+
+ /**
+ * 鏍规嵁缂栧彿鏌ヨ璁惧id
+ * @param deviceNumbers
+ * @return
+ */
+ List<Integer> selectDeviceIdsByNumbers(Set<String> deviceNumbers);
+}
+
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderFactoryVerifyItemMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderFactoryVerifyItemMapper.java
new file mode 100644
index 0000000..a858ab1
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderFactoryVerifyItemMapper.java
@@ -0,0 +1,17 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.inspect.pojo.InsOrderFactoryVerifyItem;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 鍘熸潗鏂欏巶瀹惰繘璐ч獙璇佹楠岄」
+ *
+ * @author zhuo
+ * @since 2024-09-26
+ */
+@Mapper
+public interface InsOrderFactoryVerifyItemMapper extends BaseMapper<InsOrderFactoryVerifyItem> {
+
+}
+
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderFactoryVerifyMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderFactoryVerifyMapper.java
new file mode 100644
index 0000000..5012c04
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderFactoryVerifyMapper.java
@@ -0,0 +1,17 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.inspect.pojo.InsOrderFactoryVerify;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 鍘熸潗鏂欏巶瀹惰繘璐ч獙璇�
+ *
+ * @author zhuo
+ * @since 2024-09-26
+ */
+@Mapper
+public interface InsOrderFactoryVerifyMapper extends BaseMapper<InsOrderFactoryVerify> {
+
+}
+
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderFileMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderFileMapper.java
new file mode 100644
index 0000000..8bd5432
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderFileMapper.java
@@ -0,0 +1,20 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.inspect.pojo.InsOrderFile;
+
+/**
+ * <p>
+ * 妫�楠屽崟涓嬬殑闄勪欢鍒楄〃 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-06-06 10:08:21
+ */
+public interface InsOrderFileMapper extends BaseMapper<InsOrderFile> {
+
+ IPage<InsOrderFile> getFileList(Page page, QueryWrapper<InsOrderFile> ew, Integer insOrderId);
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderStandardTemplateMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderStandardTemplateMapper.java
new file mode 100644
index 0000000..2864f73
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsOrderStandardTemplateMapper.java
@@ -0,0 +1,17 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.inspect.pojo.InsOrderStandardTemplate;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 璁㈠崟鏍囧噯妯℃澘澶嶅埗
+ *
+ * @author zhuo
+ * @since 2024-11-05
+ */
+@Mapper
+public interface InsOrderStandardTemplateMapper extends BaseMapper<InsOrderStandardTemplate> {
+
+}
+
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsProductResultMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsProductResultMapper.java
new file mode 100644
index 0000000..6ce0f27
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsProductResultMapper.java
@@ -0,0 +1,29 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.inspect.pojo.InsProductResult;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @author Administrator
+ * @description 閽堝琛ㄣ�恑ns_product_result(妫�楠岄」鐩殑缁撴灉)銆戠殑鏁版嵁搴撴搷浣淢apper
+ * @createDate 2024-03-28 10:29:37
+ * @Entity com.yuanchu.mom.pojo.InsProductResult
+ */
+public interface InsProductResultMapper extends BaseMapper<InsProductResult> {
+
+ List<InsProductResult> selDetail(@Param("ips") List<Integer> ips);
+
+ /**
+ * 鏍规嵁璁㈠崟id鏌ヨ妫�楠岀粨鏋�
+ * @param orderId
+ * @return
+ */
+ List<InsProductResult> selectResultByOrderId(Integer orderId);
+}
+
+
+
+
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsUnPassMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsUnPassMapper.java
new file mode 100644
index 0000000..d818dd2
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsUnPassMapper.java
@@ -0,0 +1,15 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ruoyi.inspect.dto.UnPassPageDto;
+import com.ruoyi.inspect.pojo.InsUnPass;
+
+/**
+ * @author 鏈变匠鍚�
+ * @date 2024/5/8 13:05
+ */
+public interface InsUnPassMapper extends BaseMapper<InsUnPass> {
+ IPage<UnPassPageDto> pageInsUnPass(IPage<UnPassPageDto> page, QueryWrapper<UnPassPageDto> ew);
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsUnqualifiedRetestResultMapper.java b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsUnqualifiedRetestResultMapper.java
new file mode 100644
index 0000000..0a6caba
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/mapper/InsUnqualifiedRetestResultMapper.java
@@ -0,0 +1,17 @@
+package com.ruoyi.inspect.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.inspect.pojo.InsUnqualifiedRetestResult;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 涓嶅悎鏍煎娴嬫楠岄」鐩殑缁撴灉
+ *
+ * @author zhuo
+ * @since 2024-09-03
+ */
+@Mapper
+public interface InsUnqualifiedRetestResultMapper extends BaseMapper<InsUnqualifiedRetestResult> {
+
+}
+
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderDeviceRecordService.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderDeviceRecordService.java
new file mode 100644
index 0000000..84c047a
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderDeviceRecordService.java
@@ -0,0 +1,11 @@
+package com.ruoyi.inspect.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.inspect.pojo.InsOrderDeviceRecord;
+
+/**
+ * @Author zhuo
+ * @Date 2024/12/22
+ */
+public interface InsOrderDeviceRecordService extends IService<InsOrderDeviceRecord> {
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderFactoryVerifyItemService.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderFactoryVerifyItemService.java
new file mode 100644
index 0000000..6b87d14
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderFactoryVerifyItemService.java
@@ -0,0 +1,15 @@
+package com.ruoyi.inspect.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.inspect.pojo.InsOrderFactoryVerifyItem;
+
+/**
+ * 鍘熸潗鏂欏巶瀹惰繘璐ч獙璇佹楠岄」
+ *
+ * @author zhuo
+ * @since 2024-09-26
+ */
+public interface InsOrderFactoryVerifyItemService extends IService<InsOrderFactoryVerifyItem> {
+
+}
+
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderFileService.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderFileService.java
new file mode 100644
index 0000000..c4f52aa
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderFileService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.inspect.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.inspect.pojo.InsOrderFile;
+
+/**
+ * <p>
+ * 妫�楠屽崟涓嬬殑闄勪欢鍒楄〃 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-06-06 10:08:21
+ */
+public interface InsOrderFileService extends IService<InsOrderFile> {
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderPlanService.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderPlanService.java
new file mode 100644
index 0000000..ce749a6
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderPlanService.java
@@ -0,0 +1,123 @@
+package com.ruoyi.inspect.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.InsOrderPlanProductDto;
+import com.ruoyi.inspect.pojo.InsOrderFactoryVerify;
+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 java.util.List;
+import java.util.Map;
+
+/**
+ * 妫�楠屼换鍔�-涓氬姟灞�
+ */
+public interface InsOrderPlanService {
+ 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);
+
+ Map<String, Object> doInsOrder(Integer id, String laboratory);
+
+ int upPlanUser(Integer userId, Integer orderId,String sonLaboratory);
+
+ int submitPlan(Integer orderId, String laboratory, Integer verifyUser, String entrustCode);
+
+ List<InsProduct> getInsProduct(InsOrderPlanProductDto insOrderPlanProductDto);
+
+ List<String> checkSubmitPlan(Integer orderId, String laboratory);
+
+ IPage<InsOrderFile> getFileList(Page page, InsOrderFile insOrderFile);
+
+ int uploadFile(Integer orderId, MultipartFile file);
+
+
+ List<String> upPlanUser2(Integer orderId);
+
+ int rawMaterialVerifyPlan(Integer orderId, String laboratory, Integer type, String tell, Integer userId);
+
+ /**
+ * 鐢电紗閰嶇疆. 鏌ョ湅鏍囪瘑
+ * @param id
+ * @param laboratory
+ * @return
+ */
+ List<Map<String, Object>> getCableTag(Integer id, String laboratory);
+
+ /**
+ * 鍘熸潗鏂欐煡鐪嬫爣璇�
+ * @param id
+ * @param laboratory
+ * @return
+ */
+ List<Map<String, Object>> getRawMaterialTag(Integer id, String laboratory);
+
+ /**
+ * 鏌ョ湅閲嶅鏍囪瘑
+ * @param id
+ * @param laboratory
+ * @return
+ */
+ List<Map<String, Object>> getRepetitionTag(Integer id, String laboratory, String cableTag);
+
+ /**
+ * 鑾峰彇涓嶅悎鏍兼暟鎹�
+ * @return
+ */
+ List<InsProduct> getInsProductUnqualified(InsOrderPlanProductDto insOrderPlanProductDto);
+
+ /**
+ * 鏂板涓嶅悎鏍煎娴嬪唴瀹圭粰
+ * @param ids
+ * @return
+ */
+ boolean addDisqualificationRetest(List<Integer> ids);
+
+ /**
+ * 鑾峰彇涓嶅悎鏍煎娴嬫暟鎹�
+ * @param id
+ * @param type
+ * @param laboratory
+ * @param cableTag
+ * @param rawMaterialTag
+ * @param retestTag
+ * @return
+ */
+ List<InsProduct> getInsProductUnqualifiedRetest(Integer id, Integer type, String laboratory, String cableTag, String rawMaterialTag, String retestTag);
+
+ /**
+ * 淇濆瓨涓嶅悎鏍煎娴嬫楠屽唴瀹�
+ */
+ void saveUnqualifiedContext(Map<String, Object> insContext,Integer currentTable,Integer currentSampleId,Integer orderId,String sonLaboratory);
+
+ /**
+ * 鏌ヨ鍘熸潗鏂欒繘璐ч獙璇�
+ * @param insOrderId
+ * @return
+ */
+ InsOrderFactoryVerify getFactoryVerify(Integer insOrderId);
+
+ /**
+ * 淇濆瓨鍘熸潗鏂欒繘璐ч獙璇�
+ * @param factoryVerify
+ * @return
+ */
+ boolean addFactoryVerify(InsOrderFactoryVerify factoryVerify);
+
+
+ /**
+ * 鐢熸垚pd涓存椂
+ * @param path
+ * @return
+ */
+ String wordToPdfTemp(String path);
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderStandardTemplateService.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderStandardTemplateService.java
new file mode 100644
index 0000000..5ec6807
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/InsOrderStandardTemplateService.java
@@ -0,0 +1,15 @@
+package com.ruoyi.inspect.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.inspect.pojo.InsOrderStandardTemplate;
+
+/**
+ * 璁㈠崟鏍囧噯妯℃澘澶嶅埗
+ *
+ * @author zhuo
+ * @since 2024-11-05
+ */
+public interface InsOrderStandardTemplateService extends IService<InsOrderStandardTemplate> {
+
+}
+
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..fd63ba1
--- /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);
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/InsUnqualifiedRetestProductService.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/InsUnqualifiedRetestProductService.java
new file mode 100644
index 0000000..6a13254
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/InsUnqualifiedRetestProductService.java
@@ -0,0 +1,15 @@
+package com.ruoyi.inspect.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.inspect.pojo.InsUnqualifiedRetestProduct;
+
+/**
+ * 涓嶅悎鏍兼楠岄」鐩娴�
+ *
+ * @author zhuo
+ * @since 2024-09-03
+ */
+public interface InsUnqualifiedRetestProductService extends IService<InsUnqualifiedRetestProduct> {
+
+}
+
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderDeviceRecordServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderDeviceRecordServiceImpl.java
new file mode 100644
index 0000000..4d8b71e
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderDeviceRecordServiceImpl.java
@@ -0,0 +1,15 @@
+package com.ruoyi.inspect.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.inspect.mapper.InsOrderDeviceRecordMapper;
+import com.ruoyi.inspect.pojo.InsOrderDeviceRecord;
+import com.ruoyi.inspect.service.InsOrderDeviceRecordService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Author zhuo
+ * @Date 2024/12/22
+ */
+@Service
+public class InsOrderDeviceRecordServiceImpl extends ServiceImpl<InsOrderDeviceRecordMapper, InsOrderDeviceRecord> implements InsOrderDeviceRecordService {
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderFactoryVerifyItemServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderFactoryVerifyItemServiceImpl.java
new file mode 100644
index 0000000..9a27146
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderFactoryVerifyItemServiceImpl.java
@@ -0,0 +1,19 @@
+package com.ruoyi.inspect.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.inspect.mapper.InsOrderFactoryVerifyItemMapper;
+import com.ruoyi.inspect.pojo.InsOrderFactoryVerifyItem;
+import com.ruoyi.inspect.service.InsOrderFactoryVerifyItemService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 鍘熸潗鏂欏巶瀹惰繘璐ч獙璇佹楠岄」
+ *
+ * @author zhuo
+ * @since 2024-09-26
+ */
+@Service
+public class InsOrderFactoryVerifyItemServiceImpl extends ServiceImpl<InsOrderFactoryVerifyItemMapper, InsOrderFactoryVerifyItem> implements InsOrderFactoryVerifyItemService {
+
+}
+
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderFileServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderFileServiceImpl.java
new file mode 100644
index 0000000..63ed243
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderFileServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.inspect.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.inspect.mapper.InsOrderFileMapper;
+import com.ruoyi.inspect.pojo.InsOrderFile;
+import com.ruoyi.inspect.service.InsOrderFileService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 妫�楠屽崟涓嬬殑闄勪欢鍒楄〃 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-06-06 10:08:21
+ */
+@Service
+public class InsOrderFileServiceImpl extends ServiceImpl<InsOrderFileMapper, InsOrderFile> implements InsOrderFileService {
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java
new file mode 100644
index 0000000..1f39ef1
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java
@@ -0,0 +1,4295 @@
+package com.ruoyi.inspect.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.aspose.words.License;
+import com.aspose.words.SaveFormat;
+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.BorderStyle;
+import com.deepoove.poi.data.style.Style;
+import com.deepoove.poi.data.style.TableStyle;
+import com.deepoove.poi.util.TableTools;
+import com.deepoove.poi.util.UnitUtils;
+import com.ruoyi.basic.mapper.IfsInventoryQuantityMapper;
+import com.ruoyi.basic.pojo.IfsInventoryQuantity;
+import com.ruoyi.basic.pojo.StandardTemplate;
+import com.ruoyi.basic.service.StandardTemplateService;
+import com.ruoyi.common.constant.InsOrderTypeConstants;
+import com.ruoyi.common.core.domain.entity.Custom;
+import com.ruoyi.common.core.domain.entity.InformationNotification;
+import com.ruoyi.common.core.domain.entity.SysDictData;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.DateImageUtil;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.WxCpUtils;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.inspect.dto.*;
+import com.ruoyi.inspect.mapper.*;
+import com.ruoyi.inspect.pojo.*;
+import com.ruoyi.inspect.service.*;
+import com.ruoyi.inspect.vo.InsOrderPlanTaskSwitchVo;
+import com.ruoyi.inspect.vo.InsOrderPlanVO;
+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.service.AuxiliaryOutputWorkingHoursService;
+import com.ruoyi.system.mapper.CustomMapper;
+import com.ruoyi.system.mapper.UserMapper;
+import com.ruoyi.system.service.ISysDictTypeService;
+import com.ruoyi.system.service.InformationNotificationService;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.xwpf.usermodel.*;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.mock.web.MockMultipartFile;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.*;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+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.util.*;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+/**
+ * 妫�楠屼换鍔�-涓氬姟瀹炵幇灞�
+ */
+@Service
+public class InsOrderPlanServiceImpl extends ServiceImpl<InsOrderMapper, InsOrder> implements InsOrderPlanService {
+
+ @Resource
+ private InsSampleMapper insSampleMapper;
+ @Resource
+ private InsSampleUserMapper insSampleUserMapper;
+ @Resource
+ private InsOrderMapper insOrderMapper;
+ @Resource
+ private InsOrderService insOrderService;
+ @Resource
+ private StandardTemplateService standardTemplateService;
+ @Resource
+ private InsOrderStateMapper insOrderStateMapper;
+ @Resource
+ private InsProductMapper insProductMapper;
+ @Resource
+ private ShiftTimeMapper shiftTimeMapper;
+ @Resource
+ private PerformanceShiftMapper performanceShiftMapper;
+ @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
+ private AuxiliaryOutputWorkingHoursMapper auxiliaryOutputWorkingHoursMapper;
+ @Resource
+ private AuxiliaryOutputWorkingHoursService auxiliaryOutputWorkingHoursService;
+ @Resource
+ private InformationNotificationService informationNotificationService;
+ @Resource
+ private UserMapper userMapper;
+ @Resource
+ private CustomMapper customMapper;
+ @Value("${file.path}")
+ private String imgUrl;
+
+ @Resource
+ private InsOrderFileMapper insOrderFileMapper;
+ @Resource
+ private IfsInventoryQuantityMapper ifsInventoryQuantityMapper;
+ @Resource
+ private InsReportService insReportService;
+ @Resource
+ private InsUnqualifiedRetestProductMapper insUnqualifiedRetestProductMapper;
+ @Resource
+ private InsUnqualifiedRetestProductService insUnqualifiedRetestProductService;
+ @Resource
+ private InsUnqualifiedRetestResultMapper insUnqualifiedRetestResultMapper;
+ @Resource
+ private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+ @Resource
+ private InsOrderFactoryVerifyMapper insOrderFactoryVerifyMapper;
+ @Resource
+ private InsOrderFactoryVerifyItemService insOrderFactoryVerifyItemService;
+ @Value("${file.licenseUrl}")
+ private String licenseUrl;
+ @Resource
+ private SpotCheckQuarterItemMapper spotCheckQuarterItemMapper;
+ @Resource
+ private InsOrderStandardTemplateService insOrderStandardTemplateService;
+ @Resource
+ private InsOrderDeviceRecordMapper insOrderDeviceRecordMapper;
+ @Resource
+ private InsOrderDeviceRecordService insOrderDeviceRecordService;
+ @Resource
+ private ISysDictTypeService iSysDictTypeService;
+
+
+ @Override
+ public IPage<InsOrderPlanVO> selectInsOrderPlanList(Page page, InsOrderPlanDTO insOrderPlanDTO) {
+ // todo: 浠呯湅鑷繁鎴栬�呭疄楠屽
+ //鑾峰彇褰撳墠浜烘墍灞炲疄楠屽id
+
+ String laboratory = null;
+
+ String userName = null;
+ Integer userId = null;
+ if (ObjectUtil.isNotEmpty(insOrderPlanDTO.getUserId())) {
+ userId = SecurityUtils.getUserId().intValue();
+ userName = userMapper.selectById(userId).getName();
+ insOrderPlanDTO.setUserId(null);
+ }
+ Integer isCheck = insOrderPlanDTO.getIsCheck();
+ insOrderPlanDTO.setIsCheck(null);
+ String sonLaboratory = insOrderPlanDTO.getSonLaboratory();//璇曢獙瀹�
+ IPage<InsOrderPlanVO> insOrderPage = insSampleMapper.findInsSampleAndOrder(page,
+ QueryWrappers.queryWrappers(insOrderPlanDTO),
+ userName,
+ userId,
+ sonLaboratory,
+ laboratory,
+ isCheck);
+ return insOrderPage;
+ }
+
+ @Override
+ public IPage<InsOrderPlanTaskSwitchVo> inspectionOrderDetailsTaskSwitching(Page page, InsOrderPlanDTO insOrderPlanDTO) {
+
+ Integer userId = SecurityUtils.getUserId().intValue();
+ User user = userMapper.selectById(userId);//褰撳墠鐧诲綍鐨勪汉
+ // todo: 浠呯湅鑷繁鎴栬�呭疄楠屽
+ //鑾峰彇褰撳墠浜烘墍灞炲疄楠屽id
+ String departLimsId = user.getDepartLimsId();
+ String laboratory = null;
+
+ 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);
+ if (BeanUtil.isEmpty(order.getInsTime())) {
+ insOrder.setInsTime(LocalDateTime.now());
+ insOrderMapper.updateById(insOrder);
+ 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);
+ map.put("sampleProduct", list);
+
+ // 鏌ヨ鍘傚瀵嗗害
+ String supplierDensity = "";
+ SampleProductDto sampleProductDto = list.get(0);
+
+ // 鍒ゆ柇鏈夋病鏈夌粦瀹氬瀷鍙�
+ String modelValue = insSampleMapper.selectSupplierDensityModel(sampleProductDto.getSample(),
+ order.getProduction(),
+ sampleProductDto.getModel());
+ if (StringUtils.isNotBlank(modelValue)) {
+ supplierDensity = modelValue;
+ } else {
+ supplierDensity = insSampleMapper.selectSupplierDensity(sampleProductDto.getSample(),
+ order.getProduction());
+ }
+ map.put("supplierDensity", supplierDensity);
+ return map;
+ }
+
+ @Override
+ public List<InsProduct> getInsProduct(InsOrderPlanProductDto dto) {
+ List<InsProduct> insProducts = new ArrayList<>();
+ switch (dto.getType()) {
+ case 0:
+ insProducts = insSampleMapper.getInsProduct1(dto.getId(), dto.getLaboratory(), dto.getCableTag(), dto.getRepetitionTag(), null);
+ //鏍峰搧
+ break;
+ case 4:
+ //鐢电紗閰嶇疆
+ insProducts = insSampleMapper.getInsProduct1(dto.getId(), dto.getLaboratory(), dto.getCableTag(), dto.getRepetitionTag(), null);
+ break;
+ case 5:
+ //鍘熸潗鏂欎笅鍗�
+ insProducts = insSampleMapper.getInsProduct6(dto.getId(), dto.getLaboratory(), dto.getRawMaterialTag(), null);
+ break;
+ }
+ if (BeanUtil.isEmpty(insProducts)) {
+ return null;
+ }
+ // 鏌ヨ璁㈠崟Id
+ InsOrder order = insOrderMapper.selectFirstSubmit(dto.getId());
+ getTemplateThing(order, insProducts);
+ return insProducts;
+ }
+
+ @Override
+ public List<String> checkSubmitPlan(Integer orderId, String laboratory) {
+ 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(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)
+ .eq(InsProduct::getInsResult, 0));
+
+ // 杩囨护鍒ゆ柇鏄湁澶嶆祴鐨勫�兼槸鍚堟牸鐨�
+ List<InsProduct> productList = insProducts.stream().filter(insProduct -> {
+ // 鏌ヨ涓嶅悎鏍煎娴�
+ Long count = insUnqualifiedRetestProductMapper.selectCount(Wrappers.<InsUnqualifiedRetestProduct>lambdaQuery()
+ .eq(InsUnqualifiedRetestProduct::getInsProductId, insProduct.getId())
+ .ne(InsUnqualifiedRetestProduct::getInsResult, 0));
+ if (count != 2) {
+ return true;
+ }
+ return false;
+ }).collect(Collectors.toList());
+ if (productList.size() > 0) {
+ collect = productList.stream().map(insProduct -> {
+ return insProduct.getInspectionItem() + "-" + insProduct.getInspectionItemSubclass();
+ }).collect(Collectors.toList());
+ }
+ 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 = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + 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 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
+ @Transactional(rollbackFor = Exception.class)
+ public void saveInsContext(Map<String, Object> insContext, Integer currentTable, Integer currentSampleId, Integer orderId, String sonLaboratory) {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ InsSample insSample = insSampleMapper.selectById(currentSampleId);
+ 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));
+ }
+ }
+ //妫�楠屽��
+ 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<>();
+ map.put("v", JSON.parseObject(JSON.toJSONString(insValue.get("v"))).get("v"));
+ 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(JSON.parseObject(JSON.toJSONString(insValue.get("v"))).get("v").toString())) {
+ map.put("u", userId + "");
+ } else {
+ map.put("u", insValue.get("u"));
+ }
+ iv.add(map);
+ } catch (Exception e) {
+ }
+ }
+ newResult.setInsValue(JSON.toJSONString(iv));
+ }
+ //璁$畻鍊�
+ 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", JSON.parseObject(JSON.toJSONString(comValue.get("v"))).get("v"));
+ 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(o.equals("") ? null : (o.toString()));
+ }
+ } 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));
+ } catch (Exception e) {
+ insProduct.setInsResult(2);//寰呭畾
+ }
+ 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);
+ }
+
+ insProduct.setUpdateUser(userId);
+ insProductMapper.updateById(insProduct);
+ insProductUserMapper.insert(new InsProductUser(null, userId, LocalDateTime.now(), insProduct.getId()));
+
+ insSample.setInsState(1);
+ Long l = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
+ .eq(InsProduct::getInsSampleId, insSample.getId()));
+ Long l1 = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
+ .eq(InsProduct::getInsSampleId, insSample.getId())
+ .and(wrapper -> wrapper
+ .isNotNull(InsProduct::getInsResult)
+ .or()
+ .ne(InsProduct::getInsResult, 2)
+ ));
+ if (Objects.equals(l, l1)) {
+ insSample.setInsState(2);
+ }
+ insSampleMapper.updateById(insSample);
+ /*鏍¢獙涓�涓媟esult琛�*/
+ List<InsProductResult> insProductResults = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery()
+ .eq(InsProductResult::getInsProductId, product.getId()));
+ if (insProductResults.size() > 1) {
+ for (int i = 1; i < insProductResults.size(); i++) {
+ insProductResultMapper.deleteById(insProductResults.get(i));
+ }
+ }
+
+ //鏌ヨ妫�楠屽崟淇℃伅
+ // 娣诲姞宸ユ椂
+ InsProduct finalInsProduct = insProductMapper.selectById(product.getId());
+ threadPoolTaskExecutor.execute(() -> {
+ InsOrder insOrder = insOrderMapper.selectById(insSample.getInsOrderId());
+ this.addAuxiliary(userId, finalInsProduct, insOrder);
+ });
+ }
+ });
+ 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));
+ }
+ }
+
+
+ // 娣诲姞璁惧璁板綍
+ threadPoolTaskExecutor.execute(() -> {
+ InsOrder order = insOrderMapper.selectById(insSample.getInsOrderId());
+ User user = userMapper.selectById(userId);
+ // 鏌ヨ璁惧浣跨敤璁板綍鏌ヨ璇ヨ鍗曠殑浣跨敤璁板綍
+ List<InsOrderDeviceRecordDto> deviceRecordDtoList = insOrderDeviceRecordMapper.selectDeviceNumber(insSample.getInsOrderId());
+ Set<String> recordCodeset = deviceRecordDtoList.stream().map(InsOrderDeviceRecordDto::getManagementNumber).collect(Collectors.toSet());
+
+ // 鑾峰彇璁㈠崟璁惧缂栧彿
+ List<InsProductResult> resultList = insProductResultMapper.selectResultByOrderId(insSample.getInsOrderId());
+ Set<String> deviceCodeSet = new HashSet<>();
+ for (InsProductResult result : resultList) {
+ // 娣诲姞璁惧缂栧彿
+ List<JSONObject> jsonObjects = JSON.parseArray(result.getEquipValue(), JSONObject.class);
+ for (JSONObject jsonObject : jsonObjects) {
+ if (!"".equals(jsonObject.get("v") + "")) {
+ List<String> v = StrUtil.split(jsonObject.get("v") + "", "锛�");
+ deviceCodeSet.addAll(v);
+ }
+ }
+ }
+ // 1.鍒ゆ柇鏄惁鏈夋病鏈夋坊鍔犵殑浣跨敤璁板綍
+ Set<String> orderDeviceNumbers = getDeviceDifference(deviceCodeSet, recordCodeset);
+ // 娣诲姞浣跨敤璁板綍, 鏍规嵁缂栧彿鏌ヨ璁惧id
+ if (CollectionUtils.isNotEmpty(orderDeviceNumbers)) {
+ List<Integer> orderDeviceIds = insOrderDeviceRecordMapper.selectDeviceIdsByNumbers(orderDeviceNumbers);
+ List<InsOrderDeviceRecord> collect = orderDeviceIds.stream().map(deviceId -> {
+ InsOrderDeviceRecord insOrderDeviceRecord = new InsOrderDeviceRecord();
+ insOrderDeviceRecord.setInsOrderId(insSample.getInsOrderId());
+ insOrderDeviceRecord.setDeviceId(deviceId);
+ insOrderDeviceRecord.setSampleCode(order.getEntrustCode());
+ insOrderDeviceRecord.setUseBefore(1);
+ insOrderDeviceRecord.setUseAfter(1);
+ insOrderDeviceRecord.setUsePerson(user.getName());
+ insOrderDeviceRecord.setUsePersonId(user.getId());
+ return insOrderDeviceRecord;
+ }).collect(Collectors.toList());
+
+ insOrderDeviceRecordService.saveBatch(collect);
+
+ }
+
+ // 2.鍒ゆ柇鏄惁鍙栨秷浜嗚澶囦娇鐢�
+ Set<String> repoprNumbers = getDeviceDifference(recordCodeset, deviceCodeSet);
+ if (CollectionUtils.isNotEmpty(repoprNumbers)) {
+ List<Integer> reportDeviceIds = insOrderDeviceRecordMapper.selectDeviceIdsByNumbers(repoprNumbers);
+ insOrderDeviceRecordMapper.delete(Wrappers.<InsOrderDeviceRecord>lambdaQuery()
+ .in(InsOrderDeviceRecord::getDeviceId, reportDeviceIds)
+ .eq(InsOrderDeviceRecord::getInsOrderId, insSample.getInsOrderId()));
+ }
+ });
+ }
+
+ private static Set<String> getDeviceDifference(Set<String> number1, Set<String> number2) {
+ return number1.stream().filter(s1 -> number2.stream().noneMatch(s2 -> s1.equals(s2)))
+ .collect(Collectors.toSet());
+ }
+
+
+ //浜ゆ帴
+ @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 void getTemplateThing(InsOrder order, List<InsProduct> insProducts) {
+ Set<Integer> set = new HashSet<>();
+ // 鏌ヨ璁㈠崟鐘舵�佸垽鏂槸鍚︽槸鏌ュ巻鍙叉ā鏉�
+ if (order.getIsFirstSubmit() != null && order.getIsFirstSubmit().equals(1)) {
+ InsOrderState insOrderState = insOrderStateMapper.selectOne(Wrappers.<InsOrderState>lambdaQuery()
+ .eq(InsOrderState::getInsOrderId, order.getId())
+ .last("limit 1"));
+ if (insOrderState != null && (!insOrderState.getInsState().equals(3) || !insOrderState.getInsState().equals(5))) {
+ for (InsProduct product : insProducts) {
+ if (product.getTemplateId() == null) {
+ product.setTemplate(new ArrayList<>());
+ continue;
+ }
+ String thing = null;
+ if (product.getTemplateId() != null && set.add(product.getTemplateId())) {
+ // 鏌ヨ鍘嗗彶妯℃澘
+ InsOrderStandardTemplate one = insOrderStandardTemplateService.getOne(Wrappers.<InsOrderStandardTemplate>lambdaQuery()
+ .eq(InsOrderStandardTemplate::getTemplateId, product.getTemplateId())
+ .eq(InsOrderStandardTemplate::getInsOrderId, order.getId()));
+ thing = one.getThing();
+ 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(one.getName());
+ }
+ }
+ }
+ }
+ }
+ for (InsProduct product : insProducts) {
+ if (product.getTemplateId() == null) {
+ product.setTemplate(new ArrayList<>());
+ continue;
+ }
+ String thing = null;
+ if (product.getTemplateId() != null && set.add(product.getTemplateId())) {
+ long begin = System.currentTimeMillis();
+ thing = standardTemplateService.getStandTempThingById(product.getTemplateId());
+ long end = System.currentTimeMillis();
+ System.out.println("=========鏃堕棿====" + (end - begin));
+ }
+ 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);
+ long begin = System.currentTimeMillis();
+ product.setTemplateName(standardTemplateService.getStandTempNameById(product.getTemplateId()));
+ long end = System.currentTimeMillis();
+ System.out.println("=========鏃堕棿22222====" + (end - begin));
+ }
+ }
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public int submitPlan(Integer orderId, String laboratory, Integer verifyUser, String entrustCode) {
+ InsOrder order = insOrderMapper.selectById(orderId);
+ // 鍒ゆ柇鏄惁鏈夐噸澶嶇紪鍙�, 鏈夐噸澶嶇紪鍙峰仛鎻愰啋
+ Long codeCount = insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery()
+ .ne(InsOrder::getState, -1)
+ .ne(InsOrder::getIfsInventoryId, order.getIfsInventoryId())
+ .eq(InsOrder::getEntrustCode, order.getEntrustCode()));
+ if (codeCount > 0) {
+ throw new ErrorException("褰撳墠缂栧彿鏈夐噸澶�, 璇峰厛鍘讳慨鏀归噸澶嶇紪鍙�");
+ }
+
+ // 鍒ゆ柇璇ヨ鍗曟槸鍚︽槸绗竴娆$敓浜�
+ if (!(order.getIsFirstSubmit() != null && order.getIsFirstSubmit().equals(1))) {
+ insOrderMapper.update(null, Wrappers.<InsOrder>lambdaUpdate()
+ .eq(InsOrder::getId, orderId)
+ .set(InsOrder::getIsFirstSubmit, 1)
+ .set(InsOrder::getFirstSubmitDate, LocalDateTime.now()));
+ }
+
+ 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)
+ .ne(InsProduct::getIsBinding, 1));
+ insProducts.addAll(insProductMapper.selectFiberInsProduct(ids, laboratory));
+ if (insProducts.size() > 0) {
+ String str = "";
+ int count = 0;
+ for (InsProduct product : insProducts) {
+ count++;
+ str += "<br/>" + count + "锛�" + product.getInspectionItem() + " " + product.getInspectionItemSubclass() + "<br/>";
+
+ }
+ 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();
+ String userName = insProductMapper.selectUserById(userId).get("name");
+
+ // 鏌ヨ鍙戦�佷汉淇℃伅
+ String sendUserAccount = insProductMapper.selectUserById(verifyUser).get("account");
+
+
+ InformationNotification info = new InformationNotification();
+ info.setCreateUser(userName);
+ info.setMessageType("2");
+ info.setTheme("澶嶆牳閫氱煡");
+ info.setContent("鎮ㄦ湁涓�鏉℃楠屼换鍔″緟澶嶆牳娑堟伅, 缂栧彿:" + order.getEntrustCode());
+ info.setSenderId(userId);
+ info.setConsigneeId(verifyUser);
+ info.setViewStatus(false);
+ info.setJumpPath("b1-inspect-orderPlan-review");
+ 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;
+ });
+ // todo: 鍒犻櫎鏁伴噰閲囬泦娆℃暟
+// String key = "frequency" + ":" + entrustCode + ":*";
+// RedisUtil.delsLike(key);
+
+ // 鎻愪氦鐢熸垚鎶ュ憡
+ this.generateReport(orderId);
+
+ // 娣诲姞涓存椂pdf鐢熸垚鍦板潃
+ InsReport report = insReportMapper.selectOne(Wrappers.<InsReport>lambdaQuery()
+ .eq(InsReport::getInsOrderId, orderId));
+ String tempUrlPdf = this.wordToPdfTemp(report.getUrl().replace("/word", wordUrl));
+ report.setTempUrlPdf("/word/" + tempUrlPdf);
+ insReportMapper.updateById(report);
+
+ // 鏌ヨ璁㈠崟
+ InsSample insSample = insSampleMapper.selectOne(Wrappers.<InsSample>lambdaQuery()
+ .eq(InsSample::getInsOrderId, orderId)
+ .last("limit 1"));
+ // 鏌ヨ鍘熸潗鏂�
+ IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(order.getIfsInventoryId());
+
+ // 鍒犻櫎鍘熸湰妯℃澘
+ insOrderStandardTemplateService.remove(Wrappers.<InsOrderStandardTemplate>lambdaQuery()
+ .eq(InsOrderStandardTemplate::getInsOrderId, orderId));
+ // 澶嶅埗妯℃澘
+ Set<Integer> set = new HashSet<>();
+ List<InsProduct> insProductList = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
+ .in(InsProduct::getInsSampleId, ids)
+ .select(InsProduct::getTemplateId));
+
+ for (InsProduct product : insProductList) {
+ // 鏌ヨ妯℃澘id
+ if (product.getTemplateId() != null && set.add(product.getTemplateId())) {
+ StandardTemplate standardTemplate = standardTemplateService.getById(product.getTemplateId());
+ if (standardTemplate != null) {
+ InsOrderStandardTemplate insOrderStandardTemplate = new InsOrderStandardTemplate();
+ insOrderStandardTemplate.setInsOrderId(orderId);
+ insOrderStandardTemplate.setTemplateId(standardTemplate.getId());
+ insOrderStandardTemplate.setNumber(standardTemplate.getNumber());
+ insOrderStandardTemplate.setName(standardTemplate.getName());
+ insOrderStandardTemplate.setThing(standardTemplate.getThing());
+ insOrderStandardTemplateService.save(insOrderStandardTemplate);
+ }
+ }
+ }
+
+
+ // todo: 鎴愬搧鎶芥牱娣诲姞鍚堟牸鐘舵��
+ // 鍒ゆ柇鏄惁鏈夋娊鏍蜂俊鎭�
+ if (order.getQuarterItemId() != null) {
+ // 鍒ゆ柇鏄惁鏈変笉鍚堟牸
+ Long unqualifiedCount = 0L;
+ if (CollectionUtils.isNotEmpty(insSamples)) {
+ unqualifiedCount = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
+ .in(InsProduct::getInsSampleId, insSamples.stream().map(InsSample::getId).collect(Collectors.toList()))
+ .eq(InsProduct::getInsResult, 0));
+
+ // 鍒ゆ柇濡傛灉鏈変笉鍚堟牸鐨勬楠岄」, 鍒ゆ柇鏈夋病鏈夋楠岄」澶嶆祴, 澶嶆牳鍚堟牸涔熺畻鍚堟牸閫氳繃
+ if (!unqualifiedCount.equals(0L)) {
+ List<InsProduct> productList = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
+ .in(InsProduct::getInsSampleId, insSamples.stream().map(InsSample::getId).collect(Collectors.toList()))
+ .eq(InsProduct::getInsResult, 0));
+
+ boolean flag = true;
+ for (InsProduct insProduct : productList) {
+ Long unqualifiedProductCount = insUnqualifiedRetestProductMapper.selectCount(Wrappers.<InsUnqualifiedRetestProduct>lambdaQuery()
+ .eq(InsUnqualifiedRetestProduct::getInsProductId, insProduct.getId())
+ .ne(InsUnqualifiedRetestProduct::getInsResult, 0));
+ if (unqualifiedProductCount != 2) {
+ flag = false;
+ }
+ }
+ if (flag) {
+ unqualifiedCount = 0L;
+ }
+ }
+ }
+ spotCheckQuarterItemMapper.update(null, Wrappers.<SpotCheckQuarterItem>lambdaUpdate()
+ .eq(SpotCheckQuarterItem::getQuarterItemId, order.getQuarterItemId())
+ .set(SpotCheckQuarterItem::getResult, unqualifiedCount.equals(0L) ? "鍚堟牸" : "涓嶅悎鏍�"));
+
+ }
+
+ // 鍙戦�佷紒涓氬井淇¢�氱煡
+ threadPoolTaskExecutor.execute(() -> {
+ String message = "";
+ message += "妫�楠屼换鍔″鏍搁�氱煡";
+ message += "\n鎻愪氦浜�: " + userName;
+ message += "\n濮旀墭缂栧彿: " + order.getEntrustCode();
+ message += "\n鏍峰搧鍚嶇О: " + insSample.getModel();
+ message += "\n瑙勬牸鍨嬪彿: " + order.getPartDetail();
+ if (ifsInventoryQuantity != null) {
+ message += "\n鎵规鍙�: " + ifsInventoryQuantity.getUpdateBatchNo();
+ }
+ //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡 鎻愪氦澶嶆牳
+ try {
+ WxCpUtils.inform(sendUserAccount, message, null);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ });
+
+ // ifs绉诲簱
+ if (ifsInventoryQuantity != null) {
+ // 鐧昏妫�楠岀粨鏋�
+ // 鍒ゆ柇鏄惁鏈変笉鍚堟牸, 鏈変笉鍚堟牸涓嶈兘绉诲簱
+ // todo: ifs绉诲簱
+ insReportService.isRawMaterial(order);
+ } else {
+ // 淇敼鎴愬搧鐘舵��
+ // 鍒ゆ柇鏄惁鏈変笉鍚堟牸
+ Long unqualifiedCount = insReportService.getUnqualifiedCount(order);
+ if (unqualifiedCount.equals(0L)) {
+ insOrderMapper.update(null, Wrappers.<InsOrder>lambdaUpdate()
+ .eq(InsOrder::getId, order.getId())
+ .set(InsOrder::getInsResult, 1));
+ } else {
+ insOrderMapper.update(null, Wrappers.<InsOrder>lambdaUpdate()
+ .eq(InsOrder::getId, order.getId())
+ .set(InsOrder::getInsResult, 0));
+ }
+ }
+
+ return 1;
+ }
+
+ public int pxToCm(int px) {
+ return px / 9;
+ }
+
+ // 鑾峰彇涓や釜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;
+ }
+
+ 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 "鏈煡";
+ }
+ }
+
+
+ /**
+ * 妫�楠屼换鍔″鏍�
+ * @param orderId
+ * @param laboratory
+ * @param type
+ * @param tell
+ * @return
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public int rawMaterialVerifyPlan(Integer orderId, String laboratory, Integer type, String tell, Integer userId) {
+ Integer 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().intValue()));
+ Long count = insOrderStateMapper.selectCount(Wrappers.<InsOrderState>lambdaQuery()
+ .eq(InsOrderState::getInsOrderId, orderId)
+ .ne(InsOrderState::getInsState, 5));
+ InsReport report = insReportMapper.selectOne(Wrappers.<InsReport>lambdaQuery()
+ .eq(InsReport::getInsOrderId, orderId));
+ // 鏌ヨ璁㈠崟
+ InsOrder order = insOrderMapper.selectById(orderId);
+ if (count == 0 && num == 5) {
+ // 淇敼鎶ュ憡鐘舵��
+ insReportMapper.update(null, Wrappers.<InsReport>lambdaUpdate()
+ .eq(InsReport::getInsOrderId, orderId)
+ .set(InsReport::getIsPass, 1));
+
+ // 淇敼璁㈠崟鐘舵��
+ insOrderMapper.update(null, Wrappers.<InsOrder>lambdaUpdate()
+ .eq(InsOrder::getId, orderId)
+ .set(InsOrder::getInsState, 5));
+
+ //鐢熸垚鍘熸潗鏂欒繘璐ч獙璇佸師濮嬭褰曞埌闄勪欢閲�
+ if (order.getTypeSource() != null && order.getTypeSource().equals(1)) {
+ this.reportFactoryVerify(orderId, userId, report.getWriteUserId());
+ }
+
+ // 鏌ヨ妫�楠屼换鍔$殑妫�楠屼换鍔�
+ // 鎶ュ憡鐩栦笂鎵瑰噯浜�
+ insReportService.writeReport(report.getId(), userId, report.getWriteUserId());
+
+ // 妫�楠屼汉
+ String userName = insProductMapper.selectUserById(report.getWriteUserId()).get("name");
+
+ // 澶嶆牳浜�
+ Integer checkUserId = SecurityUtils.getUserId().intValue();
+ String chenkUserName = insProductMapper.selectUserById(checkUserId).get("name");
+
+ // 瀹℃牳浜�
+ String sendUserAccount = insProductMapper.selectUserById(userId).get("account");
+
+ // 鍙戦�佷紒涓氬井淇¢�氱煡(閫氱煡瀹℃牳浜哄鎵�)
+ threadPoolTaskExecutor.execute(() -> {
+
+ InsSample insSample = insSampleMapper.selectOne(Wrappers.<InsSample>lambdaQuery()
+ .eq(InsSample::getInsOrderId, orderId)
+ .last("limit 1"));
+ // 鏌ヨ鍘熸潗鏂�
+ IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(order.getIfsInventoryId());
+
+ String message = "";
+ message += "鎶ュ憡缂栧埗瀹℃壒閫氱煡";
+ message += "\n妫�楠屼汉: " + userName;
+ message += "\n澶嶆牳浜�: " + chenkUserName;
+ message += "\n濮旀墭缂栧彿: " + order.getEntrustCode();
+ message += "\n鏍峰搧鍚嶇О: " + insSample.getModel();
+ message += "\n瑙勬牸鍨嬪彿: " + order.getPartDetail();
+ if (ifsInventoryQuantity != null) {
+ message += "\n鐢熶骇鍘傚: " + ifsInventoryQuantity.getSupplierName();
+ message += "\n鎵规鍙�: " + ifsInventoryQuantity.getUpdateBatchNo();
+ }
+ //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡 鎻愪氦澶嶆牳
+ try {
+ WxCpUtils.inform(sendUserAccount, message, null);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ });
+
+
+ } else {
+ //澶嶆牳涓嶉�氳繃灏嗘妸澶嶆牳鐨勮礋璐d汉鍘绘帀
+ Integer id = insSampleUserMapper.selectOne(Wrappers.<InsSampleUser>lambdaQuery().eq(InsSampleUser::getInsSampleId, orderId).orderByDesc(InsSampleUser::getId).last("limit 1")).getId();
+ insSampleUserMapper.deleteById(id);
+
+ // 褰撳墠瀹℃牳浜�
+ Integer currentUserId = SecurityUtils.getUserId().intValue();
+ String userName = insProductMapper.selectUserById(currentUserId).get("name");
+
+ // 鍙戦�佹秷鎭殑浜�
+ // 鏌ヨ鍙戦�佷汉淇℃伅
+ String sendUserAccount = insProductMapper.selectUserById(report.getWriteUserId()).get("account");
+
+ // 鍙戦�佷紒涓氬井淇¢�氱煡(妫�楠屼换鍔¢��鍥�)
+ threadPoolTaskExecutor.execute(() -> {
+ // 鏌ヨ璁㈠崟
+ InsSample insSample = insSampleMapper.selectOne(Wrappers.<InsSample>lambdaQuery()
+ .eq(InsSample::getInsOrderId, orderId)
+ .last("limit 1"));
+ // 鏌ヨ鍘熸潗鏂�
+ IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(order.getIfsInventoryId());
+
+ String message = "";
+ message += "妫�楠屼换鍔″鏍搁��鍥為�氱煡";
+ message += "\n澶嶆牳浜�: " + userName;
+ message += "\n濮旀墭缂栧彿: " + order.getEntrustCode();
+ message += "\n鏍峰搧鍚嶇О: " + insSample.getModel();
+ message += "\n瑙勬牸鍨嬪彿: " + order.getPartDetail();
+ if (ifsInventoryQuantity != null) {
+ message += "\n鎵规鍙�: " + ifsInventoryQuantity.getUpdateBatchNo();
+ }
+ message += "\n閫�鍥炲師鍥�: " + tell;
+ //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡 鎻愪氦澶嶆牳
+ try {
+ WxCpUtils.inform(sendUserAccount, message, null);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ });
+ }
+ return 1;
+ }
+
+ /**
+ * 鐢熸垚鎶ュ憡
+ * @param orderId
+ */
+ private void generateReport(Integer orderId) {
+ 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)
+ .ne(InsProduct::getIsBinding, 1));
+ List<Integer> results = insProducts.stream().map(InsProduct::getInsResult).filter(str -> str != null).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());
+ 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);
+ // 鎶芥鍙樻垚濮旀墭妫�楠�
+ if (insOrder.getOrderType().equals(InsOrderTypeConstants.SPOT_CHECK)) {
+ insOrder.setOrderType(InsOrderTypeConstants.CUSTOMER_ORDERED);
+ }
+
+ // 鍒ゆ柇鏄ぇ鎶ュ憡杩樻槸灏忔姤鍛� 杩涘巶灏忔姤鍛�, 鍏朵粬閮芥槸澶ф姤鍛�
+ if (insOrder.getOrderType().equals(InsOrderTypeConstants.ENTER_THE_FACTORY)) {
+ // 鐢熸垚灏忔姤鍛�
+ addSmallReport(orderId, insOrder, insSamples);
+ } else {
+ //鐢熸垚澶ф姤鍛�
+ addBitReport(orderId, insOrder);
+ }
+
+ }
+
+
+ /**
+ * 鐢电紗閰嶇疆, 鏌ョ湅閰嶇疆鏍囪瘑
+ * @param id
+ * @param laboratory
+ * @return
+ */
+ @Override
+ public List<Map<String, Object>> getCableTag(Integer id, String laboratory) {
+ return insSampleMapper.getCableTag(id, laboratory);
+ }
+
+ /**
+ * 鍘熸潗鏂欐煡鐪嬫爣璇�
+ * @param id
+ * @param laboratory
+ * @return
+ */
+ @Override
+ public List<Map<String, Object>> getRawMaterialTag(Integer id, String laboratory) {
+ return insSampleMapper.getRawMaterialTag(id, laboratory);
+ }
+
+ /**
+ * 鏌ョ湅閲嶅鏍囪瘑
+ * @param id
+ * @param laboratory
+ * @return
+ */
+ @Override
+ public List<Map<String, Object>> getRepetitionTag(Integer id, String laboratory, String cableTag) {
+ return insSampleMapper.getRepetitionTag(id, laboratory, cableTag);
+ }
+
+ /**
+ * 鑾峰彇涓嶅悎鏍兼暟鎹�
+ * @return
+ */
+ @Override
+ public List<InsProduct> getInsProductUnqualified(InsOrderPlanProductDto dto) {
+ List<InsProduct> insProducts = new ArrayList<>();
+ switch (dto.getType()) {
+ case 0:
+ //鏍峰搧
+ insProducts = insSampleMapper.getInsProduct1(dto.getId(), dto.getLaboratory(), dto.getCableTag(), dto.getRepetitionTag(), "1");
+ break;
+ case 4:
+ //鐢电紗閰嶇疆
+ insProducts = insSampleMapper.getInsProduct1(dto.getId(), dto.getLaboratory(), dto.getCableTag(), dto.getRepetitionTag(), "1");
+ break;
+ case 5:
+ //鍘熸潗鏂欎笅鍗�
+ insProducts = insSampleMapper.getInsProduct6(dto.getId(), dto.getLaboratory(), dto.getRawMaterialTag(), "1");
+ break;
+ }
+ return insProducts;
+ }
+
+ /**
+ * 鏂板涓嶅悎鏍煎娴嬪唴瀹�
+ * @param ids
+ * @return
+ */
+ @Override
+ public boolean addDisqualificationRetest(List<Integer> ids) {
+ // 鍒ゆ柇涔嬪墠鏄惁娣诲姞杩�
+ Long count = insUnqualifiedRetestProductMapper.selectCount(Wrappers.<InsUnqualifiedRetestProduct>lambdaQuery()
+ .in(InsUnqualifiedRetestProduct::getInsProductId, ids));
+ if (count > 0) {
+ throw new ErrorException("鏈夋楠岄」妫�娣诲姞杩囧娴嬩俊鎭�");
+ }
+
+ // 鏌ヨ涓嶅悎鏍煎唴瀹�
+ List<InsUnqualifiedRetestProduct> list = insUnqualifiedRetestProductMapper.selectRetestProduct(ids);
+ // 鏂板涓嶅悎鏍煎唴瀹�
+ insUnqualifiedRetestProductService.saveBatch(list);
+ list.forEach(insUnqualifiedRetestProduct -> {
+ insUnqualifiedRetestProduct.setRetestTag("2");
+ insUnqualifiedRetestProduct.setId(null);
+ });
+ insUnqualifiedRetestProductService.saveBatch(list);
+ return true;
+ }
+
+ @Override
+ public List<InsProduct> getInsProductUnqualifiedRetest(Integer id, Integer type, String laboratory, String cableTag, String rawMaterialTag, String retestTag) {
+
+ List<InsProduct> insProducts = new ArrayList<>();
+ switch (type) {
+ case 0:
+ //鏍峰搧
+ insProducts = insUnqualifiedRetestProductMapper.getInsProductUnqualifiedRetest1(id, laboratory, retestTag);
+ break;
+ case 4:
+ //鐢电紗閰嶇疆
+ insProducts = insUnqualifiedRetestProductMapper.getInsProductUnqualifiedRetest5(id, laboratory, cableTag, retestTag);
+ break;
+ case 5:
+ //鍘熸潗鏂欎笅鍗�
+ insProducts = insUnqualifiedRetestProductMapper.getInsProductUnqualifiedRetest6(id, laboratory, rawMaterialTag, retestTag);
+ break;
+ }
+ if (BeanUtil.isEmpty(insProducts)) {
+ return null;
+ }
+ InsOrder order = insOrderMapper.selectFirstSubmit(id);
+ getTemplateThing(order, Collections.unmodifiableList(insProducts));
+ return insProducts;
+ }
+
+
+ /**
+ * 淇濆瓨涓嶅悎鏍煎娴嬫楠屽唴瀹�
+ * @param currentTable
+ * @param orderId
+ * @param sonLaboratory
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void saveUnqualifiedContext(Map<String, Object> insContext, Integer currentTable, Integer currentSampleId, Integer orderId, String sonLaboratory) {
+ Integer userId = SecurityUtils.getUserId().intValue();
+ insContext.forEach((k, v) -> {
+ JSONObject jo = JSON.parseObject(JSON.toJSONString(v));
+ InsUnqualifiedRetestProduct insProduct = new InsUnqualifiedRetestProduct();
+ insProduct.setId(Integer.parseInt(k));
+ InsUnqualifiedRetestProduct product = insUnqualifiedRetestProductMapper.selectById(insProduct.getId());
+ if (currentTable.equals(product.getTemplateId()) && currentSampleId.equals(product.getInsSampleId())) {
+ List<InsUnqualifiedRetestResult> oldResults = insUnqualifiedRetestResultMapper.selectList(Wrappers.<InsUnqualifiedRetestResult>lambdaQuery()
+ .eq(InsUnqualifiedRetestResult::getRetestProductId, insProduct.getId()));
+ InsUnqualifiedRetestResult newResult = new InsUnqualifiedRetestResult();
+ if (CollectionUtils.isNotEmpty(oldResults)) {
+ BeanUtil.copyProperties(oldResults.get(0), newResult);
+ }
+ newResult.setRetestProductId(Integer.parseInt(k));
+
+ if (oldResults.size() > 1) {
+ for (int i = 1; i < oldResults.size(); i++) {
+ insUnqualifiedRetestResultMapper.deleteById(oldResults.get(i));
+ }
+ }
+
+ //妫�楠屽��
+ 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<>();
+ map.put("v", JSON.parseObject(JSON.toJSONString(insValue.get("v"))).get("v"));
+ 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(JSON.parseObject(JSON.toJSONString(insValue.get("v"))).get("v").toString())) {
+ map.put("u", userId + "");
+ } else {
+ map.put("u", insValue.get("u"));
+ }
+ iv.add(map);
+ } catch (Exception e) {
+ }
+ }
+ newResult.setInsValue(JSON.toJSONString(iv));
+ }
+ //璁$畻鍊�
+ 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("v", JSON.parseObject(JSON.toJSONString(comValue.get("v"))).get("v"));
+ 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(o.equals("") ? null : (o.toString()));
+ }
+ } 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));
+ } catch (Exception e) {
+ insProduct.setInsResult(2);//寰呭畾
+ }
+ if (Objects.isNull(newResult.getId())) {
+ newResult.setCreateUser(userId);
+ newResult.setUpdateUser(userId);
+ insUnqualifiedRetestResultMapper.insert(newResult);
+ } else {
+ newResult.setUpdateUser(userId);
+ newResult.setUpdateTime(LocalDateTime.now());
+ insUnqualifiedRetestResultMapper.updateById(newResult);
+ }
+
+ insProduct.setUpdateUser(userId);
+ insUnqualifiedRetestProductMapper.updateById(insProduct);
+ insProductUserMapper.insert(new InsProductUser(null, userId, LocalDateTime.now(), insProduct.getId()));
+
+
+ InsSample insSample = insSampleMapper.selectById(insProductMapper.selectById(insProduct.getId()).getInsSampleId());
+ insSample.setInsState(1);
+ Long l = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
+ .eq(InsProduct::getInsSampleId, insSample.getId()));
+ Long l1 = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
+ .eq(InsProduct::getInsSampleId, insSample.getId())
+ .and(wrapper -> wrapper
+ .isNotNull(InsProduct::getInsResult)
+ .or()
+ .ne(InsProduct::getInsResult, 2)
+ ));
+ if (Objects.equals(l, l1)) {
+ insSample.setInsState(2);
+ }
+ insSampleMapper.updateById(insSample);
+ /*鏍¢獙涓�涓媟esult琛�*/
+ List<InsUnqualifiedRetestResult> insProductResults = insUnqualifiedRetestResultMapper.selectList(Wrappers.<InsUnqualifiedRetestResult>lambdaQuery()
+ .eq(InsUnqualifiedRetestResult::getRetestProductId, insProduct.getId()));
+ if (insProductResults.size() > 1) {
+ for (int i = 1; i < insProductResults.size(); i++) {
+ insUnqualifiedRetestResultMapper.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));
+ }
+ }
+ }
+
+ /**
+ * 鏌ヨ杩涜揣鍘熷璁板綍
+ * @param insOrderId
+ * @return
+ */
+ @Override
+ public InsOrderFactoryVerify getFactoryVerify(Integer insOrderId) {
+ InsOrderFactoryVerify insOrderFactoryVerify = insOrderFactoryVerifyMapper.selectOne(Wrappers.<InsOrderFactoryVerify>lambdaQuery()
+ .eq(InsOrderFactoryVerify::getInsOrderId, insOrderId)
+ .last("limit 1"));
+ // 鍒ゆ柇鏌ヨ鏌ヨ鏄惁涓虹┖
+ if (insOrderFactoryVerify == null) {
+ insOrderFactoryVerify = new InsOrderFactoryVerify();
+ // 鏌ヨ涓嬪崟
+ InsOrder order = insOrderMapper.selectById(insOrderId);
+ // 鏌ヨ妫�楠岄」鐩〃
+ List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery()
+ .eq(InsSample::getInsOrderId, insOrderId));
+
+ //鏌ヨ瑙勬牸淇″彿
+ List<String> insSamplemodel = insSamples.stream().map(insSample -> insSample.getModel()).collect(Collectors.toList());
+ String model = CollUtil.join(insSamplemodel, ",");
+
+ // 鏌ヨ鍘熸潗鏂欎俊鎭�
+ IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(order.getIfsInventoryId());
+ if (ifsInventoryQuantity == null) {
+ throw new ErrorException("缂哄皯鍘熸潗鏂欎俊鎭�");
+ }
+
+ // 妫�楠岀紪鍙�
+ insOrderFactoryVerify.setEntrustCode(order.getEntrustCode());
+ // 鏉愭枡鍘傚
+ insOrderFactoryVerify.setSupplierName(ifsInventoryQuantity.getSupplierName());
+ // 鍒拌揣鏃ユ湡
+ insOrderFactoryVerify.setDeclareDate(ifsInventoryQuantity.getDeclareDate());
+ // 鏉愭枡鍚嶇О
+ insOrderFactoryVerify.setSample(order.getSample());
+ // 瑙勬牸鍨嬪彿
+ insOrderFactoryVerify.setModel(model);
+ // 鏉愭枡鎵瑰彿
+ insOrderFactoryVerify.setUpdateBatchNo(ifsInventoryQuantity.getUpdateBatchNo());
+
+ insOrderFactoryVerify.setInsOrderId(insOrderId);
+
+ return insOrderFactoryVerify;
+ }
+
+ // 鏌ヨ楠岃瘉椤圭洰
+ List<InsOrderFactoryVerifyItem> verifyItems = insOrderFactoryVerifyItemService.list(Wrappers.<InsOrderFactoryVerifyItem>lambdaQuery()
+ .eq(InsOrderFactoryVerifyItem::getFactoryVerifyId, insOrderFactoryVerify.getFactoryVerifyId())
+ .orderByAsc(InsOrderFactoryVerifyItem::getSort));
+ insOrderFactoryVerify.setFactoryVerifyItemList(verifyItems);
+ return insOrderFactoryVerify;
+ }
+
+ /**
+ * 淇濆瓨鍘熸潗鏂欒繘璐ч獙璇�
+ * @param factoryVerify
+ * @return
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public boolean addFactoryVerify(InsOrderFactoryVerify factoryVerify) {
+ if (factoryVerify.getInsOrderId() == null) {
+ throw new ErrorException("缂哄皯璁㈠崟Id");
+ }
+
+ // 鍒ゆ柇鏄柊澧炶繕鏄慨鏀�
+ if (factoryVerify.getFactoryVerifyId() == null) {
+ // 鍒ゆ柇涔嬪墠鏄惁娣诲姞杩�
+ Long count = insOrderFactoryVerifyMapper.selectCount(Wrappers.<InsOrderFactoryVerify>lambdaQuery()
+ .eq(InsOrderFactoryVerify::getInsOrderId, factoryVerify.getInsOrderId()));
+ if (count > 0) {
+ throw new ErrorException("鍘熸潗鏂欒繘璐ч獙璇佽褰曢噸澶嶆坊鍔�");
+ }
+
+ // 鏂板
+ insOrderFactoryVerifyMapper.insert(factoryVerify);
+
+ for (InsOrderFactoryVerifyItem item : factoryVerify.getFactoryVerifyItemList()) {
+ item.setFactoryVerifyId(factoryVerify.getFactoryVerifyId());
+ }
+
+ // 鎵归噺娣诲姞
+ insOrderFactoryVerifyItemService.saveBatch(factoryVerify.getFactoryVerifyItemList());
+
+ } else {
+ // 缂栬緫
+ insOrderFactoryVerifyMapper.updateById(factoryVerify);
+
+ // 鍒犻櫎鍘熸湰楠岃瘉椤圭洰
+ insOrderFactoryVerifyItemService.remove(Wrappers.<InsOrderFactoryVerifyItem>lambdaQuery()
+ .eq(InsOrderFactoryVerifyItem::getFactoryVerifyId, factoryVerify.getFactoryVerifyId()));
+
+ for (InsOrderFactoryVerifyItem item : factoryVerify.getFactoryVerifyItemList()) {
+ item.setFactoryVerifyId(factoryVerify.getFactoryVerifyId());
+ }
+
+ insOrderFactoryVerifyItemService.saveBatch(factoryVerify.getFactoryVerifyItemList());
+ }
+
+ return true;
+ }
+
+ /***************************************************** 灏忔姤鍛� ***************************************************************************/
+
+ /**
+ * 灏忔姤鍛婄敓鎴�
+ * @param orderId
+ * @param insOrder
+ * @param insSamples
+ */
+ private void addSmallReport(Integer orderId, InsOrder insOrder, List<InsSample> insSamples) {
+ InsReport insReport = new InsReport();
+ AtomicReference<String> resultCh = new AtomicReference<>("");
+ insReport.setCode(insOrder.getEntrustCode());
+ insReport.setInsOrderId(orderId);
+ InsSample insSample = insSamples.get(0);
+ // 濉厖鍩虹鏁版嵁
+ EnterFactoryReport enterFactoryReport = new EnterFactoryReport();
+ enterFactoryReport.setCode(insOrder.getEntrustCode());
+ enterFactoryReport.setSample(insOrder.getSample());
+ // 鑾峰彇ifs鏁版嵁
+ IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(insOrder.getIfsInventoryId());
+ enterFactoryReport.setQtyArrived(ifsInventoryQuantity.getQtyArrived() == null ? "" :
+ ifsInventoryQuantity.getQtyArrived().stripTrailingZeros().toPlainString() + ifsInventoryQuantity.getBuyUnitMeas());
+ enterFactoryReport.setQuantity(insOrder.getTestQuantity());
+ enterFactoryReport.setPartDesc(insOrder.getPartDetail());
+ enterFactoryReport.setSupplierName("**********");
+ enterFactoryReport.setLotBatchNo(ifsInventoryQuantity.getUpdateBatchNo());
+
+ // 妫�娴嬩緷鎹�
+ Set<String> standardMethod = new HashSet<>();
+ StringBuilder standardMethod2 = new StringBuilder();
+ standardMethod.add(baseMapper.getStandardMethodCode(insSample.getStandardMethodListId()));
+ for (String s : standardMethod) {
+ standardMethod2.append("銆�").append(s);
+ }
+ standardMethod2.replace(0, 1, "");
+ // todo: 妫�娴嬬被鍨�
+// List<SysDictData> sysDictData = iSysDictTypeService.selectDictDataByName("");
+ String orderType = null;
+
+ List<RowRenderData> rows = new ArrayList<>();
+ List<TextRenderData> text = new ArrayList<>();
+ RowRenderData rowRenderData = null;
+
+ // 鏌ヨ妫�楠屽唴瀹�
+ List<SampleProductExportDto> sampleProductDto2s = insOrderMapper.selectSampleBySampleId(insSamples.stream()
+ .map(InsSample::getId).collect(Collectors.toList()));
+
+ // 鏍煎紡鍖栦慨鏀规楠岄」
+ this.formatProducts(sampleProductDto2s);
+
+ List<SampleProductExportDto> sampleList = new ArrayList<>();
+ Integer max = insSamples.stream().mapToInt(InsSample::getQuantity).sum();
+
+ // 杞垚Mpa杩涜鎺掑簭
+ Map<String, List<SampleProductExportDto>> sortedMap = sampleProductDto2s.stream()
+ .filter(sampleProductDto2 -> StringUtils.isNotBlank(sampleProductDto2.getInspectionItem()))
+ .collect(Collectors.groupingBy(SampleProductExportDto::getInspectionItem));
+ List<Map.Entry<String, List<SampleProductExportDto>>> entries = new ArrayList<>(sortedMap.entrySet());
+ entries.sort((o1, o2) -> (o1.getValue().get(0).getSort() == null ? 0 : o1.getValue().get(0).getSort())
+ - (o2.getValue().get(0).getSort() == null ? 0 : o2.getValue().get(0).getSort()));
+ // 鍒涘缓涓�涓� LinkedHashMap 鏉ヤ繚鎸佹彃鍏ラ『搴�
+ Map<String, List<SampleProductExportDto>> item = new LinkedHashMap<>();
+ for (Map.Entry<String, List<SampleProductExportDto>> entry : entries) {
+ item.put(entry.getKey(), entry.getValue());
+ }
+
+ AtomicInteger finalIndex = new AtomicInteger(1);
+ item.forEach((s, sampleProductDtoInside) -> {
+ // 娣诲姞妫�楠岄」
+ SampleProductExportDto dto2 = new SampleProductExportDto();
+ // 鍒ゆ柇鏄惁鏈夎嫳鏂囧悕绉�
+ SampleProductExportDto temp = sampleProductDtoInside.get(0);
+
+ // 鍒ゆ柇鏄惁鏈夋楠屽瓙椤�,娌℃湁灏辨妸妫�楠屽弬鏁板~鍏�
+ dto2.setIndex(Integer.toString(finalIndex.get()));
+ if (StringUtils.isBlank(temp.getInspectionItemSubclass())) {
+ // 澶勭悊闆嗗悎
+ Map<String, SampleProductExportDto> map = new LinkedHashMap<>();
+ for (SampleProductExportDto productDto2 : sampleProductDtoInside) {
+ String productName = productDto2.getInspectionItemClass() + productDto2.getInspectionItem();
+ if (map.containsKey(productName)) {
+ // 濡傛灉鍚嶇О宸茬粡瀛樺湪锛屾坊鍔� lastValue 鍊煎埌 lastValueList 鍒楄〃
+ map.get(productName)
+ .getLastValueList()
+ .add(productDto2.getLastValue());
+ map.get(productName)
+ .getInsResultList()
+ .add(productDto2.getInsResult());
+ } else {
+ // 濡傛灉鍚嶇О涓嶅瓨鍦紝鐩存帴鏀惧叆 map
+ productDto2.setLastValueList(new ArrayList<>()); // 妫�楠屽唴瀹�
+ productDto2.getLastValueList().add(productDto2.getLastValue());
+ productDto2.setInsResultList(new ArrayList<>()); // 缁撴灉
+ productDto2.getInsResultList().add(productDto2.getInsResult());
+
+ map.put(productName, productDto2);
+ }
+ }
+ List<SampleProductExportDto> result = new ArrayList<>(map.values());
+
+ //娣诲姞妫�楠屽瓙椤�
+ SampleProductExportDto temp2 = result.get(0);
+ if (StringUtils.isNotBlank(temp2.getRadius())) {
+ s = s + "(" + temp2.getRadius() + ")";
+ }
+ // 鍒ゆ柇鏈夋病鏈夋潯浠跺瓧娈垫湁闇�瑕佹嫾鎺ュ埌鍚嶇О鍚庨潰
+ temp2.setInspectionName(s);
+ temp2.setIndex(Integer.toString(finalIndex.get()));
+ sampleList.add(temp2);
+ } else {
+ dto2.setInspectionName(s);
+ // 濉厖鍒拌姹�
+ if (StringUtils.isNotBlank(temp.getRadius())) {
+ dto2.setTell("(" + temp.getRadius() + ")");
+ }
+ sampleList.add(dto2);
+
+ // 澶勭悊闆嗗悎
+ Map<String, SampleProductExportDto> map = new LinkedHashMap<>();
+ for (SampleProductExportDto productDto2 : sampleProductDtoInside) {
+ String productName = productDto2.getInspectionItemClass() + productDto2.getInspectionItem() + productDto2.getInspectionItemSubclass();
+ if (map.containsKey(productName)) {
+ // 濡傛灉鍚嶇О宸茬粡瀛樺湪锛屾坊鍔� lastValue 鍊煎埌 lastValueList 鍒楄〃
+ map.get(productName)
+ .getLastValueList()
+ .add(productDto2.getLastValue());
+ map.get(productName)
+ .getInsResultList()
+ .add(productDto2.getInsResult());
+ } else {
+ // 濡傛灉鍚嶇О涓嶅瓨鍦紝鐩存帴鏀惧叆 map
+ productDto2.setLastValueList(new ArrayList<>()); // 妫�楠屽唴瀹�
+ productDto2.getLastValueList().add(productDto2.getLastValue());
+ productDto2.setInsResultList(new ArrayList<>()); // 缁撴灉
+ productDto2.getInsResultList().add(productDto2.getInsResult());
+
+ map.put(productName, productDto2);
+ }
+ }
+ List<SampleProductExportDto> result = new ArrayList<>(map.values());
+ //娣诲姞妫�楠屽瓙椤�
+ for (SampleProductExportDto productDto2 : result) {
+ productDto2.setInspectionName("--" + productDto2.getInspectionItemSubclass());
+ sampleList.add(productDto2);
+ }
+ }
+ finalIndex.incrementAndGet();
+ });
+
+ // 娣诲姞灏忔姤鍛婅〃澶�
+ text = addSmallHead(text, max, rows);
+
+
+ // 涓棿妫�娴嬪�兼坊鍔�
+ for (int i = 0; i < sampleList.size(); i++) {
+ SampleProductExportDto sample = sampleList.get(i);
+
+ // 搴忓彿
+ TextRenderData middleRenderData1 = new TextRenderData();
+ middleRenderData1.setText(sample.getIndex());
+ Style middleStyle1 = new Style();
+ middleStyle1.setFontFamily("瀹嬩綋");
+ middleStyle1.setColor("000000");
+ middleRenderData1.setStyle(middleStyle1);
+ text.add(middleRenderData1);
+
+ // 妫�楠岄」鐩�
+ TextRenderData middleRenderData2 = new TextRenderData();
+ middleRenderData2.setText(sample.getInspectionName());
+ Style middleStyle2 = new Style();
+ middleStyle2.setFontFamily("瀹嬩綋");
+ middleStyle2.setColor("000000");
+ middleRenderData2.setStyle(middleStyle2);
+ text.add(middleRenderData2);
+
+ // 鍗曚綅
+ TextRenderData middleRenderData4 = new TextRenderData();
+ middleRenderData4.setText(sample.getUnit());
+ Style middleStyle4 = new Style();
+ middleStyle4.setFontFamily("瀹嬩綋");
+ middleStyle4.setColor("000000");
+ middleRenderData4.setStyle(middleStyle4);
+ text.add(middleRenderData4);
+
+ //鏍囧噯瑕佹眰
+ TextRenderData middleRenderData5 = new TextRenderData();
+ middleRenderData5.setText(sample.getTell());
+ Style middleStyle5 = new Style();
+ middleStyle5.setFontFamily("瀹嬩綋");
+ middleStyle5.setColor("000000");
+ middleRenderData5.setStyle(middleStyle5);
+ text.add(middleRenderData5);
+
+ // 妫�楠岀粨鏋�
+ boolean isMore = false;
+ if (CollectionUtils.isNotEmpty(sample.getLastValueList())
+ && sample.getLastValueList().size() == max) {
+ // 鍒ゆ柇鏄惁鏄瑙�, 澶栬鍏ㄩ儴鍚堟牸鐨勮瘽闇�瑕佸悎骞�
+ if (sample.getInspectionItem().contains("澶栬")) {
+ // 鍒ゅ畾缁撴灉
+ boolean falg = false;
+ if (CollectionUtils.isNotEmpty(sample.getLastValueList())) {
+ // 鍒ゆ柇鏄惁鏈変竴涓敊璇�
+ if (sample.getInsResultList().stream().anyMatch(s -> s.equals(2))) {
+ falg = true;
+ } else {
+ boolean error = sample.getInsResultList().stream().anyMatch(s -> s.equals(0));
+ if (!error) {
+ falg = true;
+ }
+ }
+ } else {
+ if (!sample.getInsResult().equals(2)) {
+ falg = true;
+ }
+ }
+ if (falg) {
+ for (int j = 0; j < max; j++) {
+ TextRenderData middleRenderData6 = new TextRenderData();
+ middleRenderData6.setText((StringUtils.isNotEmpty(sample.getLastValue()) ?
+ sample.getLastValue() : "")
+ + "鈭�" + (50 + i));
+ Style middleStyle6 = new Style();
+ middleStyle6.setFontFamily("瀹嬩綋");
+ middleStyle6.setColor("000000");
+ middleRenderData6.setStyle(middleStyle6);
+ text.add(middleRenderData6);
+ }
+ } else {
+ for (String s : sample.getLastValueList()) {
+ TextRenderData middleRenderData6 = new TextRenderData();
+ middleRenderData6.setText(s);
+ Style middleStyle6 = new Style();
+ middleStyle6.setFontFamily("瀹嬩綋");
+ middleStyle6.setColor("000000");
+ middleRenderData6.setStyle(middleStyle6);
+ text.add(middleRenderData6);
+ }
+ }
+ } else {
+ for (String s : sample.getLastValueList()) {
+ TextRenderData middleRenderData6 = new TextRenderData();
+ middleRenderData6.setText(s);
+ Style middleStyle6 = new Style();
+ middleStyle6.setFontFamily("瀹嬩綋");
+ middleStyle6.setColor("000000");
+ middleRenderData6.setStyle(middleStyle6);
+ text.add(middleRenderData6);
+ }
+ }
+ } else {
+ for (int j = 0; j < max; j++) {
+ TextRenderData middleRenderData6 = new TextRenderData();
+ middleRenderData6.setText((StringUtils.isNotEmpty(sample.getLastValue()) ?
+ sample.getLastValue() : "")
+ + "鈭�" + (7 + i));
+ Style middleStyle6 = new Style();
+ middleStyle6.setFontFamily("瀹嬩綋");
+ middleStyle6.setColor("000000");
+ middleRenderData6.setStyle(middleStyle6);
+ text.add(middleRenderData6);
+ }
+ }
+
+
+ // 鍒ゅ畾缁撴灉
+ String result = "";
+ if (sample.getInsResult() != null) {
+ switch (sample.getInsResult()) {
+ case 1:
+ result = "鈭�";
+ break;
+ case 2:
+ result = "脳";
+ break;
+ case 3:
+ result = "-";
+ break;
+ }
+ }
+ if (CollectionUtils.isNotEmpty(sample.getLastValueList())) {
+ // 鍒ゆ柇鏄惁鏈変竴涓敊璇�
+ if (sample.getInsResultList().stream().anyMatch(s -> s.equals(3))) {
+ result = "-";
+ } else {
+ boolean error = sample.getInsResultList().stream().anyMatch(s -> s.equals(0));
+ if (error) {
+ List<String> collect = new ArrayList<>();
+ int index = 1;
+ for (Integer count : sample.getInsResultList()) {
+ String type;
+ if (count.equals(0)) {
+ // 娣诲姞涓嶅悎鏍兼弿杩�
+ String item1 = (max == 1 ? "" : "绗�" + Integer.toString(index) + "娆�")
+ + sample.getInspectionItem()
+ + (StringUtils.isBlank(sample.getInspectionItemSubclass()) ? "" : "" + sample.getInspectionItemSubclass());
+ if (resultCh.get().equals("")) {
+ resultCh.set(resultCh.get() + item1);
+ } else {
+ resultCh.set(resultCh.get() + "銆�" + item1);
+ }
+ type = "脳";
+ } else {
+ type = "鈭�";
+ }
+ collect.add(type);
+ index++;
+ }
+ result = CollUtil.join(collect, " ");
+ } else {
+ result = "鈭�";
+ }
+ }
+ }
+
+ TextRenderData middleRenderData7 = new TextRenderData();
+ middleRenderData7.setText(result);
+ Style middleStyle7 = new Style();
+ middleStyle7.setFontFamily("瀹嬩綋");
+ middleStyle7.setColor("000000");
+ middleRenderData7.setStyle(middleStyle7);
+ text.add(middleRenderData7);
+
+ TextRenderData[] text2 = text.toArray(new TextRenderData[0]);
+ rowRenderData = Rows.of(text2).center().rowAtleastHeight(1).create();
+ // 0.8鍘樼背
+ double centimeters = 0.8;
+ int twips = UnitUtils.cm2Twips(centimeters);
+ rowRenderData.getRowStyle().setHeight(twips);
+ rows.add(rowRenderData);
+ text = new ArrayList<>();
+ }
+
+ TableRenderData tableRenderData = new TableRenderData();
+ tableRenderData.setRows(rows);
+
+ //璁剧疆鏍峰紡
+ TableStyle tableStyle = new TableStyle();
+ for (int i = 1; i <= max; i++) {
+ // 鏍规嵁鍑忓帇閭g粨鏋滀釜鏁颁慨鏀归暱搴�
+ switch (i) {
+ case 1:
+ tableStyle.setColWidths(new int[]{650, 2900, 850, 2300, 2100, 1200});
+ break;
+ case 2:
+ tableStyle.setColWidths(new int[]{650, 2700, 850, 2200, 1200, 1200, 1200});
+ break;
+ case 3:
+ tableStyle.setColWidths(new int[]{650, 2700, 850, 1600, 1000, 1000, 1000, 1200});
+ break;
+ case 4:
+ tableStyle.setColWidths(new int[]{650, 2400, 850, 1500, 850, 850, 850, 850, 1200});
+ break;
+ case 5:
+ tableStyle.setColWidths(new int[]{650, 2200, 850, 1350, 750, 750, 750, 750, 750, 1200});
+ break;
+ }
+ }
+ tableStyle.setWidth("10000");
+ tableStyle.setAlign(TableRowAlign.CENTER);
+ BorderStyle borderStyle = new BorderStyle();
+ borderStyle.setColor("000000");
+ borderStyle.setType(XWPFTable.XWPFBorderType.SINGLE);
+ borderStyle.setSize(4);
+ tableStyle.setLeftBorder(borderStyle);
+ tableStyle.setRightBorder(borderStyle);
+ tableStyle.setInsideHBorder(borderStyle); // 璁剧疆姘村钩鍐呰竟妗�
+ tableStyle.setInsideVBorder(borderStyle);
+ tableRenderData.setTableStyle(tableStyle);
+
+ if (!resultCh.get().equals("")) {
+ resultCh.set("缁忔楠岋紝" + resultCh.get() + "鎵�妫�椤圭洰涓嶅悎鏍硷紝鍏朵綑鎵�妫�椤圭洰鍧囧悎鏍笺��");
+ } else {
+ resultCh.set("缁忔楠屾鎵�" + enterFactoryReport.getSample() + "鍚勯」鐩潎绗﹀悎妫�楠岃鑼冭姹傘��");
+ }
+
+ ConfigureBuilder builder = Configure.builder();
+ builder.useSpringEL(true);
+ // 鑾峰彇褰撳墠鏃堕棿
+ LocalDate currentDate = LocalDate.now();
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+ String formattedDate = currentDate.format(formatter);
+
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/small-report-template.docx");
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
+ new HashMap<String, Object>() {{
+ put("report", enterFactoryReport);
+ put("standardMethod", standardMethod2.toString().equals("null") ? "" : standardMethod2);
+ put("orderType", orderType);
+ put("table", tableRenderData);
+ put("resultCh", resultCh);
+ put("writeUrl", null);
+ put("examineUrl", null);
+ put("ratifyUrl", null);
+ put("writeDateUrl", null);
+ put("examineDateUrl", null);
+ put("ratifyDateUrl", null);
+ put("seal1", null);
+ }});
+ try {
+ String name = insReport.getCode().replace("/", "") + "-J.docx";
+ template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
+ insReport.setUrl("/word/" + name);
+ insReport.setIsPass(0);
+ insReport.setWriteUserId(SecurityUtils.getUserId().intValue());//鎻愪氦浜�
+ insReport.setWriteTime(LocalDateTime.now());//鎻愪氦鏃堕棿
+ // 鏌ヨ鎶ュ憡, 鍒ゆ柇涔嬪墠鏄惁娣诲姞杩�, 娣诲姞杩囧垹闄�
+ insReportMapper.delete(Wrappers.<InsReport>lambdaQuery()
+ .eq(InsReport::getInsOrderId, insOrder.getId()));
+ insReportMapper.insert(insReport);
+
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ // 淇敼鎹㈣鍜屽悎骞堕棶棰�
+ updaeMerge(insReport, null, true);
+ }
+
+ /**
+ * 娣诲姞灏忓疂琛ㄥご
+ * @param text
+ * @param max
+ * @param rows
+ * @return
+ */
+ private static List<TextRenderData> addSmallHead(List<TextRenderData> text, Integer max, List<RowRenderData> rows) {
+ RowRenderData rowRenderData;
+// // 澶�
+ TextRenderData headRenderData1 = new TextRenderData();
+ headRenderData1.setText("搴忓彿");
+ Style headStyle1 = new Style();
+ headStyle1.setFontFamily("瀹嬩綋");
+ headStyle1.setColor("000000");
+ headRenderData1.setStyle(headStyle1);
+ text.add(headRenderData1);
+
+ TextRenderData headRenderData2 = new TextRenderData();
+ headRenderData2.setText("妫�楠岄」鐩�");
+ Style headStyle2 = new Style();
+ headStyle2.setFontFamily("瀹嬩綋");
+ headStyle2.setColor("000000");
+ headRenderData2.setStyle(headStyle2);
+ text.add(headRenderData2);
+
+ TextRenderData headRenderData4 = new TextRenderData();
+ headRenderData4.setText("鍗曚綅");
+ Style headStyle4 = new Style();
+ headStyle4.setFontFamily("瀹嬩綋");
+ headStyle4.setColor("000000");
+ headRenderData4.setStyle(headStyle4);
+ text.add(headRenderData4);
+
+ TextRenderData headRenderData5 = new TextRenderData();
+ headRenderData5.setText("鏍囧噯瑕佹眰");
+ Style headStyle5 = new Style();
+ headStyle5.setFontFamily("瀹嬩綋");
+ headStyle5.setColor("000000");
+ headRenderData5.setStyle(headStyle5);
+ text.add(headRenderData5);
+
+ for (int i = 0; i < max; i++) {
+ TextRenderData headRenderData6 = new TextRenderData();
+ headRenderData6.setText("妫�楠岀粨鏋溾垜6");
+ Style headStyle6 = new Style();
+ headStyle6.setFontFamily("瀹嬩綋");
+ headStyle6.setColor("000000");
+ headRenderData6.setStyle(headStyle6);
+ text.add(headRenderData6);
+ }
+ TextRenderData headRenderData7 = new TextRenderData();
+ headRenderData7.setText("鍗曢」鍒ゆ柇");
+ Style headStyle7 = new Style();
+ headStyle7.setFontFamily("瀹嬩綋");
+ headStyle7.setColor("000000");
+ headRenderData7.setStyle(headStyle7);
+ text.add(headRenderData7);
+
+ TextRenderData[] text3 = text.toArray(new TextRenderData[0]);
+ rowRenderData = Rows.of(text3).center().rowAtleastHeight(1).create();
+ rows.add(rowRenderData);
+ text = new ArrayList<>();
+
+ // 绗簩琛�(鍙兘娌℃湁)
+ if (max > 1) {
+ TextRenderData tagRenderData1 = new TextRenderData();
+ tagRenderData1.setText("");
+ Style tagStyle1 = new Style();
+ tagStyle1.setFontFamily("瀹嬩綋");
+ tagStyle1.setColor("000000");
+ tagRenderData1.setStyle(tagStyle1);
+ text.add(tagRenderData1);
+
+ TextRenderData tagRenderData2 = new TextRenderData();
+ tagRenderData2.setText("鏍囪瘑");
+ Style tagStyle2 = new Style();
+ tagStyle2.setFontFamily("瀹嬩綋");
+ tagStyle2.setColor("000000");
+ tagRenderData2.setStyle(tagStyle2);
+ text.add(tagRenderData2);
+
+ TextRenderData tagRenderData4 = new TextRenderData();
+ tagRenderData4.setText("");
+ Style tagStyle4 = new Style();
+ tagStyle4.setFontFamily("瀹嬩綋");
+ tagStyle4.setColor("000000");
+ tagRenderData4.setStyle(tagStyle4);
+ text.add(tagRenderData4);
+
+ TextRenderData tagRenderData5 = new TextRenderData();
+ tagRenderData5.setText("");
+ Style tagStyle5 = new Style();
+ tagStyle5.setFontFamily("瀹嬩綋");
+ tagStyle5.setColor("000000");
+ tagRenderData5.setStyle(tagStyle5);
+ text.add(tagRenderData5);
+
+ for (int i = 0; i < max; i++) {
+ TextRenderData tagRenderData6 = new TextRenderData();
+ tagRenderData6.setText("鏍囪瘑" + (i + 1));
+ Style tagStyle6 = new Style();
+ tagStyle6.setFontFamily("瀹嬩綋");
+ tagStyle6.setColor("000000");
+ tagRenderData6.setStyle(tagStyle6);
+ text.add(tagRenderData6);
+ }
+ TextRenderData tagRenderData7 = new TextRenderData();
+ tagRenderData7.setText("");
+ Style tagStyle7 = new Style();
+ tagStyle7.setFontFamily("瀹嬩綋");
+ tagStyle7.setColor("000000");
+ tagRenderData7.setStyle(tagStyle7);
+ text.add(tagRenderData7);
+
+ TextRenderData[] text4 = text.toArray(new TextRenderData[0]);
+ rowRenderData = Rows.of(text4).center().rowAtleastHeight(1).create();
+ rows.add(rowRenderData);
+ text = new ArrayList<>();
+
+
+ }
+
+ return text;
+ }
+
+ /***************************************************** 澶ф姤鍛� ***************************************************************************/
+
+ /**
+ * 鍒涘缓澶ф姤鍛�
+ * @param orderId
+ * @param insOrder
+ * @param
+ */
+ private void addBitReport(Integer orderId, InsOrder insOrder) {
+ Map<String, String> user = insProductMapper.selectUserById(insOrder.getUserId());
+ //samples鏄笉鍖呮嫭甯︽湁"/"鐨勬牱鍝�
+ List<SampleProductDto> samples = insSampleMapper.selectSampleProductListByOrderId(orderId);
+ 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<>();
+ // 鏌ヨ妫�楠岄」鏁伴噺
+ AtomicInteger productSize = new AtomicInteger();
+ String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
+ List<String> resultChList = new ArrayList<>();
+ List<String> resultEnList = new ArrayList<>();
+ // 鍒ゆ柇鏄惁鏄彧鏈変竴涓牱鍝�
+ boolean isOneSample = samples.size() == 1 ? true : false;
+ /*鍩虹鎶ュ憡(鏍规嵁缁樺埗鐨勫師濮嬭褰曟ā鐗堝舰鎴�)*/
+ samples.forEach(a -> {
+ Map<Integer, String> map2 = new HashMap<>();
+ models.add(a.getModel());
+ String standardMethodCode = baseMapper.getStandardMethodCode(a.getStandardMethodListId());
+ if (StrUtil.isNotBlank(a.getSpecialStandardMethod())) {
+ standardMethodCode = standardMethodCode + "+" + a.getSpecialStandardMethod();
+ }
+ standardMethod.add(standardMethodCode);
+ for (InsProduct b : a.getInsProduct()) {
+ if (b.getInsProductResult() != null) {
+ List<JSONObject> jsonObjects = JSON.parseArray(b.getInsProductResult().getEquipValue(), JSONObject.class);
+ for (JSONObject jsonObject : jsonObjects) {
+ if (!"".equals(jsonObject.get("v") + "")) {
+ List<String> v = StrUtil.split(jsonObject.get("v") + "", "锛�");
+ deviceSet.addAll(v);
+ }
+ }
+ }
+ }
+ // 鏀舵牱鏃ユ湡
+ List<RowRenderData> rows = new ArrayList<>();
+ List<TextRenderData> text = new ArrayList<>();
+ RowRenderData rowRenderData = null;
+
+ InsSample insSamples = null;
+ int max = 1;
+ List<String> cableTags = new ArrayList<>();
+ // 鍒ゆ柇鏄惁涓哄師鏉愭枡
+ if (insOrder.getTypeSource() != null && insOrder.getTypeSource().equals(1)) {
+
+ InsOrder one = insOrderService.getOne(Wrappers.<InsOrder>lambdaQuery()
+ .eq(InsOrder::getIfsInventoryId, insOrder.getIfsInventoryId())
+ .eq(InsOrder::getOrderType, InsOrderTypeConstants.ENTER_THE_FACTORY)
+ .ne(InsOrder::getState, -1)
+ .last("limit 1"));
+ // 鍒ゆ柇涔嬪墠鏄惁鏈夎繘鍘傛楠�
+ if (one != null) {
+ insSamples = insSampleMapper.selectOne(Wrappers.<InsSample>lambdaQuery()
+ .eq(InsSample::getInsOrderId, one.getId())
+ .last("limit 1"));
+ }
+
+ max = a.getQuantity();
+ // 瀛e害妫�楠岄渶瑕佽繘鍘傛楠岀殑璁惧
+ // 鏌ヨ鏄惁鏈夎繘鍘傛楠�
+ InsOrder order = insOrderMapper.selectOne(Wrappers.<InsOrder>lambdaQuery()
+ .eq(InsOrder::getIfsInventoryId, insOrder.getIfsInventoryId())
+ .ne(InsOrder::getState, -1)
+ .eq(InsOrder::getOrderType, InsOrderTypeConstants.ENTER_THE_FACTORY)
+ .ne(InsOrder::getId, insOrder.getId())
+ .last("limit 1"));
+ if (order != null) {
+ List<SampleProductDto> sampleProductDtos = insSampleMapper.selectSampleProductListByOrderId(order.getId());
+ for (InsProduct b : sampleProductDtos.get(0).getInsProduct()) {
+ if (b.getInsProductResult() != null) {
+ List<JSONObject> jsonObjects = JSON.parseArray(b.getInsProductResult().getEquipValue(), JSONObject.class);
+ for (JSONObject jsonObject : jsonObjects) {
+ if (!"".equals(jsonObject.get("v") + "")) {
+ List<String> v = StrUtil.split(jsonObject.get("v") + "", "锛�");
+ deviceSet.addAll(v);
+ }
+ }
+ }
+ }
+ }
+ insOrder.setSampleView(insOrder.getSample());
+ String sampleViewEn = insSampleMapper.getSampleEn(insOrder.getSample());
+ if (StringUtils.isBlank(sampleViewEn)) {
+ sampleViewEn = insSampleMapper.getSampleEnByObject(insOrder.getSample());
+ }
+ insOrder.setSampleViewEn(sampleViewEn);
+ } else {
+ // 鑾峰緱鎵归噺妫�楠岀殑鎬绘暟
+ max = insOrderMapper.selectSampleMax(a.getId());
+ cableTags = insOrderMapper.selectSampleCableTag(a.getId());
+ }
+
+ // 琛ㄥご娣诲姞
+ addHead(a, text, rowRenderData, rows, max, cableTags);
+ text = new ArrayList<>();
+
+ // 娣诲姞妫�娴嬪��
+ productSize.set(addTestValue(a, text, rowRenderData, rows, max, resultChList, resultEnList, insSamples, cableTags, isOneSample));
+ text = new ArrayList<>();
+
+ // 缁撳熬娣诲姞
+ addEnding(text, rowRenderData, rows, max);
+ text = new ArrayList<>();
+
+ List<TableRenderData> tables1 = new ArrayList<>();
+ TableRenderData tableRenderData = new TableRenderData();
+ tableRenderData.setRows(new ArrayList<>());
+ double totalHeight = 0.0; // 鐢ㄤ簬璺熻釜褰撳墠琛ㄦ牸鐨勬�昏楂�
+ double heightThreshold = 9300.0; // 闃堝�硷紝
+ List<RowRenderData> firstTwoRows = new ArrayList<>(); // 淇濆瓨鍓嶄袱琛屼互渚垮鍒跺埌鏂拌〃鏍�
+ List<RowRenderData> endTwoRows = new ArrayList<>(); // 淇濆瓨鏈�鍚庝竴琛屼互渚垮鍒跺埌鏂拌〃鏍�
+ // 淇濆瓨鍓嶄袱琛屼互渚垮鍒跺埌鏂拌〃鏍�
+ firstTwoRows.add(rows.get(0));
+ firstTwoRows.add(rows.get(1));
+ // 淇濆瓨鏈�鍚庝竴琛�
+ endTwoRows.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, max);
+ }
+ totalHeight += rowHeight; // 鏇存柊鎬昏楂�
+ if (totalHeight >= heightThreshold) {
+ // 鍒涘缓鏂拌〃鏍煎苟澶嶅埗鍓嶄袱琛�
+ TableRenderData newTableRenderData = new TableRenderData();
+ newTableRenderData.setRows(new ArrayList<>(firstTwoRows));
+ //璁剧疆鏍峰紡
+ TableStyle tableStyle = new TableStyle();
+ for (int i = 1; i <= max; i++) {
+ // 鏍规嵁鍑忓帇閭g粨鏋滀釜鏁颁慨鏀归暱搴�
+ switch (i) {
+ case 1:
+ tableStyle.setColWidths(new int[]{650, 2000, 2000, 850, 2200, 2100, 1200});
+ break;
+ case 2:
+ tableStyle.setColWidths(new int[]{650, 1400, 1400, 850, 2100, 1200, 1200, 1200});
+ break;
+ case 3:
+ tableStyle.setColWidths(new int[]{650, 1400, 1400, 850, 1500, 1000, 1000, 1000, 1200});
+ break;
+ case 4:
+ tableStyle.setColWidths(new int[]{650, 1200, 1200, 850, 1400, 850, 850, 850, 850, 1200});
+ break;
+ case 5:
+ tableStyle.setColWidths(new int[]{650, 1100, 1100, 850, 1350, 750, 750, 750, 750, 750, 1200});
+ break;
+ }
+ }
+ 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 = rowHeight;
+ }
+ tableRenderData.getRows().add(row);
+ }
+ if (!tableRenderData.getRows().isEmpty() && tableRenderData.getRows().size() != 3) {
+ //璁剧疆鏍峰紡
+ TableStyle tableStyle = new TableStyle();
+ for (int i = 1; i <= max; i++) {
+ // 鏍规嵁鍑忓帇閭g粨鏋滀釜鏁颁慨鏀归暱搴�
+ switch (i) {
+ case 1:
+ tableStyle.setColWidths(new int[]{650, 2000, 2000, 850, 2200, 2100, 1200});
+ break;
+ case 2:
+ tableStyle.setColWidths(new int[]{650, 1400, 1400, 850, 2100, 1200, 1200, 1200});
+ break;
+ case 3:
+ tableStyle.setColWidths(new int[]{650, 1400, 1400, 850, 1500, 1000, 1000, 1000, 1200});
+ break;
+ case 4:
+ tableStyle.setColWidths(new int[]{650, 1200, 1200, 850, 1400, 850, 850, 850, 850, 1200});
+ break;
+ case 5:
+ tableStyle.setColWidths(new int[]{650, 1100, 1100, 850, 1350, 750, 750, 750, 750, 750, 1200});
+ break;
+ }
+ }
+ 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);
+ });
+
+ });
+
+ 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<Map<String, String>> deviceList = null;
+ if (deviceSet.size() != 0) {
+ deviceList = insOrderMapper.selectDeviceList(deviceSet);
+ }
+ Map<String, String> codeStr = new HashMap<>();
+ codeStr.put("鎶ュ憡缂栧彿", insReport.getCode());
+ codeStr.put("鏍峰搧鍚嶇О", insOrder.getSample());
+ codeStr.put("瑙勬牸鍨嬪彿", samples.get(0).getModel());
+ codeStr.put("鍙戞斁鏃ユ湡", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+
+ String modelStr = CollUtil.join(models, "\n");
+ String finalModelStr = modelStr;
+
+ // todo: 鏌ヨ瀛楀吀
+ String orderType = null;
+ String formType = null;
+
+ // 鏍峰搧鐘舵��
+ String sampleStatus = null;
+
+ ConfigureBuilder builder = Configure.builder();
+ builder.useSpringEL(true);
+ List<Map<String, String>> finalDeviceList = deviceList;
+ Integer userId = insSampleUserMapper.selectOne(Wrappers.<InsSampleUser>lambdaQuery().eq(InsSampleUser::getInsSampleId, orderId).last("limit 1")).getUserId();
+ Custom custom = customMapper.selectById(insOrder.getCompanyId());
+
+ // 鏌ヨ鍒ゆ柇鏄惁鏈変笉鍒ゅ畾椤圭洰,鍜屽叏閮芥槸鍒ゅ畾椤�
+ int judgeType = insProductMapper.selectNoJudge(insOrder.getId());
+ String resultCh = "";
+ String resultEn = "";
+ for (String reference : resultChList) {
+ resultCh = resultCh + reference;
+ }
+ for (String reference : resultEnList) {
+ resultEn = resultEn + reference;
+ }
+ switch (judgeType) {
+ // 娌℃湁涓嶅垽瀹氶」鐩�
+ case 1:
+ if (StringUtils.isNotBlank(resultCh)) {
+ resultCh = "渚濇嵁濮旀墭瑕佹眰锛�" + resultCh + "鎵�妫�椤圭洰涓嶅悎鏍硷紝鍏朵綑鎵�妫�椤圭洰鍧囧悎鏍笺��";
+ resultEn = "According to commissioned requirements," + resultEn + " these inspected items do not meet the requirements, all other inspected items meet the requirements.";
+ } else {
+ resultCh = "渚濇嵁濮旀墭瑕佹眰锛屾墍妫�椤圭洰鍧囩鍚堣姹傘��";
+ resultEn = "According to commissioned requirements, all the tested items meet the requirements.";
+ }
+ break;
+ // 瀛樺湪涓嶅垽瀹氶」鐩�
+ case 2:
+ if (StringUtils.isNotBlank(resultCh)) {
+ resultCh = "渚濇嵁濮旀墭瑕佹眰锛�" + resultCh + "鎵�妫�椤圭洰涓嶅悎鏍硷紝鍏朵綑鎵�妫�椤圭洰闄や笉鍒ゅ畾澶栧潎绗﹀悎瑕佹眰銆�";
+ resultEn = "According to commissioned requirements," + resultEn + " these inspected items do not meet the requirements, all the inspected items meet the requirements except that they are not judged.";
+ } else {
+ resultCh = "渚濇嵁濮旀墭瑕佹眰锛屾墍妫�椤圭洰闄や笉鍒ゅ畾澶栧潎绗﹀悎瑕佹眰銆�";
+ resultEn = "According to commissioned requirements, all the tested items meet the requirements.";
+ }
+ break;
+ // 閮芥槸涓嶅垽瀹氶」鐩�
+ case 3:
+ resultCh = "渚濇嵁濮旀墭瑕佹眰锛屾墍妫�椤圭洰鍧囦笉鍒ゅ畾銆�";
+ resultEn = "According to commissioned requirements, the items examined are not judged.";
+ break;
+ }
+
+ /*鑾峰彇闄勪欢鍥剧墖绫诲瀷*/
+ 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("/");
+ }
+
+ // 鎶芥牱鏃ユ湡
+ // 鎴愬搧鏄娊鏍锋椂闂�
+ LocalDateTime sendTime = insOrder.getSendTime();
+ if (insOrder.getTypeSource() != null && insOrder.getTypeSource().equals(1)) {
+ // 鍘熸潗鏂欐敹鏍锋棩鏈熸槸鎶ユ鏃ユ湡
+ IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(insOrder.getIfsInventoryId());
+ sendTime = ifsInventoryQuantity.getDeclareDate();
+ }
+
+ // 妫�楠屾椂闂� 鎶芥牱鏃堕棿-鎻愪氦鏃堕棿
+ LocalDateTime now = LocalDateTime.now();
+ // 鎻愪氦鏃堕棿
+ LocalDateTime submitTime = LocalDateTime.now();
+ // 鍒ゆ柇鏄惁鏈夋彁浜ゆ椂闂�
+ if (insOrder.getFirstSubmitDate() != null) {
+ submitTime = insOrder.getFirstSubmitDate();
+ }
+
+ String insTime = insOrder.getSendTime().format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�")) + "-"
+ + submitTime.format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�"));
+
+ String insTimeEn = monthNames[insOrder.getSendTime().getMonthValue() - 1] + " " + insOrder.getSendTime().format(DateTimeFormatter.ofPattern("dd, yyyy")) + "-"
+ + monthNames[submitTime.getMonthValue() - 1] + " " + submitTime.format(DateTimeFormatter.ofPattern("dd, yyyy"));
+
+ //妫�楠岄」鐩殑鐜
+ String environment = "";
+ environment = (ObjectUtils.isNotEmpty(insOrder.getTemperature()) ? insOrder.getTemperature() + "鈩� " : "") + (ObjectUtils.isNotEmpty(insOrder.getHumidity()) ? insOrder.getHumidity() + "%" : "");
+ String finalEnvironment = environment;
+ LocalDateTime finalSendTime = sendTime;
+
+ String finalResultCh = resultCh;
+ String finalResultEn = resultEn;
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/report-template.docx");
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
+ new HashMap<String, Object>() {{
+ put("order", insOrder);
+ put("report", insReport);
+ put("environment", finalEnvironment);
+ put("custom", custom);
+ put("sampleSize", insOrder.getTestQuantity());
+ put("tables", tables);
+ put("tableSize", tables.size() + 1);
+ put("standardMethod", (standardMethod2.toString().equals("null") ? "" : standardMethod2));
+ put("deviceList", finalDeviceList);
+ put("twoCode", null);
+ put("models", finalModelStr);
+ put("productSize", productSize.get());
+ put("createTime", now.format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�")));
+ put("createTimeEn", monthNames[now.getMonthValue() - 1] + " " + now.format(DateTimeFormatter.ofPattern("dd, yyyy")));
+ put("insTime", insTime);
+ put("insTimeEn", insTimeEn);
+ put("writeUrl", null);
+ put("insUrl", null);
+ put("images", images);
+ put("examineUrl", null);
+ put("ratifyUrl", null);
+ put("orderType", orderType);
+ put("getTime", finalSendTime.format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�")));
+ put("getTimeEn", monthNames[finalSendTime.getMonthValue() - 1] + " " + finalSendTime.format(DateTimeFormatter.ofPattern("dd, yyyy")));
+ put("seal1", null);
+ put("seal2", null);
+ put("formTypeCh", formType);
+ put("formTypeEn", insOrder.getFormType());
+ put("resultCh", finalResultCh);
+ put("resultEn", finalResultEn);
+ put("sampleStatus", sampleStatus);
+ }});
+ try {
+ String name = insReport.getCode().replace("/", "") + ".docx";
+ template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
+ insReport.setUrl("/word/" + name);
+ insReport.setWriteUserId(SecurityUtils.getUserId().intValue());//鎻愪氦浜�
+ insReport.setWriteTime(LocalDateTime.now());//鎻愪氦鏃堕棿
+ // 鏌ヨ鎶ュ憡, 鍒ゆ柇涔嬪墠鏄惁娣诲姞杩�, 娣诲姞杩囧垹闄�
+ insReportMapper.delete(Wrappers.<InsReport>lambdaQuery()
+ .eq(InsReport::getInsOrderId, insOrder.getId()));
+ insReportMapper.insert(insReport);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ // 淇敼鎹㈣鍜屽悎骞堕棶棰�
+ updaeMerge(insReport, deviceList, false);
+ }
+
+ /**
+ * 璋冩暣楂樺害
+ * @param row
+ * @param rowHeight
+ * @return
+ */
+ private static double adjustRowHeight(RowRenderData row, double rowHeight, int max) {
+ // 鏍规嵁妫�楠岄」鐩悕绉拌繘琛岄珮搴﹁皟鏁�
+ TextRenderData renderData = (TextRenderData) row.getCells().get(1).getParagraphs().get(0).getContents().get(0);
+ String dataText = renderData.getText();
+ TextRenderData valueData = (TextRenderData) row.getCells().get(5).getParagraphs().get(0).getContents().get(0);
+ String valueText = valueData.getText();
+ // 鑾峰彇妫�娴嬪唴瀹瑰垽鏂槸鍚﹁秴鍑�
+ if (StringUtils.isNotBlank(dataText) && dataText.contains("@")) {
+ double number = 1;
+ double chinaLength = 0;
+ double englishLength = 0;
+ double valueLength = 0;
+ // 鏍规嵁绾胯姱涓暟鍒ゆ柇璺濈
+ switch (max) {
+ case 1:
+ chinaLength = 15;
+ englishLength = 30;
+ valueLength = 8;
+ break;
+ case 2:
+ chinaLength = 13;
+ englishLength = 25;
+ valueLength = 6;
+ break;
+ case 3:
+ chinaLength = 13;
+ englishLength = 25;
+ valueLength = 4;
+ break;
+ case 4:
+ chinaLength = 13;
+ englishLength = 23;
+ valueLength = 3;
+ break;
+ case 5:
+ chinaLength = 12;
+ englishLength = 22;
+ valueLength = 2;
+ break;
+ }
+ // 鏍规嵁@绗﹀彿鎴彇涓嫳鏂�
+ String[] split = dataText.split("@");
+ // 鏂囧瓧鍊嶆暟
+ double chinaMultiple = (Math.ceil(split[0].length() / chinaLength)) - 1;
+
+ // 鑻辨枃鍊嶆暟
+ double 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;
+ }
+
+ /**
+ * 鍚堝苟鍗曞厓鏍�
+ * @param insReport
+ * @param deviceList
+ */
+ private void updaeMerge(InsReport insReport, List<Map<String, String>> deviceList, boolean isSmall) {
+ // 澶勭悊鍚堝苟鍗曞厓鏍肩殑闂
+ String path = wordUrl + insReport.getUrl().replaceFirst("/word", "");
+ try {
+ // 鑾峰彇鏂囨。涓殑鎵�鏈夎〃鏍�
+ FileInputStream stream = new FileInputStream(path);
+ XWPFDocument document = new XWPFDocument(stream);
+ List<XWPFTable> xwpfTables = document.getTables();
+ // 閬嶅巻琛ㄦ牸锛屼絾璺宠繃绗竴涓〃鏍硷紙濡傛灉deviceList涓簄ull锛屽垯棰濆璺宠繃绗簩涓級
+ for (int i = 1; i < xwpfTables.size() - (deviceList == null ? 1 : 2); i++) {
+ // 鍒涘缓涓�涓狧ashSet鏉ュ瓨鍌ㄥ敮涓�鐨勫瓧绗︿覆锛堣繖閲屽熀浜�"鈭�"鍒嗗壊鍚庣殑绗簩閮ㄥ垎锛�
+ Set<String> set1 = new HashSet<>();
+ // 鍒涘缓涓�涓狧ashMap鏉ュ瓨鍌ㄦ瘡涓敮涓�瀛楃涓插強鍏跺搴旂殑鍗曞厓鏍间綅缃俊鎭�
+ 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("鈭�");
+ // 濡傛灉鍒嗗壊鍚庣殑绗簩閮ㄥ垎鏄柊鐨勶紙鍗充箣鍓嶆湭鍑虹幇杩囷級锛屽垯娣诲姞鍒皊et1骞跺垱寤轰綅缃俊鎭痬ap
+ 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);
+ }
+ }
+ // 鍒ゆ柇灏忛珮鎶ュ憡杩樻槸澶ф姤鍛�
+ if (isSmall) {
+ // 鑾峰彇鍗曞厓鏍�
+ XWPFTableCell cell = xwpfTables.get(i).getRows().get(j).getTableCells().get(k);
+ XWPFParagraph paragraph = cell.getParagraphArray(0);
+ String originalText = paragraph.getText();
+ String newText = originalText.split("鈭�")[0];
+ List<XWPFRun> runs = paragraph.getRuns();
+ for (XWPFRun run : runs) {
+ run.setText("", 0); // 娓呯┖ run 涓殑鏂囨湰
+ }
+ if (!runs.isEmpty()) {
+ XWPFRun run = runs.get(0);
+ run.setText(newText);
+
+ // 澶嶅埗鏍峰紡
+ run.setFontFamily(paragraph.getRuns().get(0).getFontFamily());
+ run.setFontSize(paragraph.getRuns().get(0).getFontSize());
+ run.setBold(paragraph.getRuns().get(0).isBold());
+ run.setItalic(paragraph.getRuns().get(0).isItalic());
+ run.setUnderline(paragraph.getRuns().get(0).getUnderline());
+ run.setColor(paragraph.getRuns().get(0).getColor());
+ }
+
+ cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
+ paragraph.setAlignment(ParagraphAlignment.CENTER);
+ } else {
+ // 绉婚櫎鍖呭惈"鈭�"鐨勬钀斤紝骞堕噸鏂拌缃崟鍏冩牸鏂囨湰鍜屾牱寮�
+ 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());
+ }
+
+ 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("@")) {
+ if (isSmall) {
+ // 鑾峰彇鍘熸湁娈佃惤鐨勭涓�涓� XWPFRun
+ String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText();
+ XWPFParagraph oldParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getParagraphs().get(0);
+ XWPFRun oldRun = oldParagraph.getRuns().get(0);
+ // 淇濆瓨鍘熸湁鏍峰紡
+ String fontFamily = oldRun.getFontFamily();
+ int fontSize = oldRun.getFontSize();
+ boolean isBold = oldRun.isBold();
+ boolean isItalic = oldRun.isItalic();
+ boolean isUnderline = oldRun.getUnderline() != UnderlinePatterns.NONE;
+ // 鍒犻櫎鍘熸湁娈佃惤
+ xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+ // 娣诲姞鏂版钀�
+ XWPFParagraph newParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph();
+ XWPFRun newRun = newParagraph.createRun();
+ // 搴旂敤淇濆瓨鐨勬牱寮�
+ newRun.setFontFamily(fontFamily);
+ newRun.setFontSize(fontSize);
+ newRun.setBold(isBold);
+ newRun.setItalic(isItalic);
+ if (isUnderline) {
+ newRun.setUnderline(UnderlinePatterns.SINGLE);
+ }
+ // 璁剧疆鏂版枃鏈�
+ String[] split = text.split("@");
+ newRun.setText(split[0]);
+ if (split.length > 1) {
+ newRun.addBreak();
+ newRun.setText(split[1]);
+ }
+ // 璁剧疆娈佃惤瀵归綈鏂瑰紡
+ newParagraph.setAlignment(ParagraphAlignment.CENTER);
+ } else {
+ 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[0]);
+ if (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);
+ }
+ }
+
+
+ /**
+ * 娣诲姞鎶ュ憡琛ㄥご
+ * @param sample
+ * @param text
+ * @param rowRenderData
+ * @param rows
+ * @param max
+ * @param cableTags 绾胯姱棰滆壊
+ */
+ private static void addHead(SampleProductDto sample, List<TextRenderData> text, RowRenderData rowRenderData, List<RowRenderData> rows, int max, List<String> cableTags) {
+ // 绗竴琛�
+ TextRenderData firstRenderData1 = new TextRenderData();
+ firstRenderData1.setText("鏍峰搧缂栧彿@Sample No.鈭�1");
+ Style firstStyle1 = new Style();
+ firstStyle1.setFontFamily("瀹嬩綋");
+ firstStyle1.setColor("000000");
+ firstRenderData1.setStyle(firstStyle1);
+ text.add(firstRenderData1);
+
+ TextRenderData firstRenderData2 = new TextRenderData();
+ firstRenderData2.setText("鏍峰搧缂栧彿@Sample No.鈭�1");
+ Style firstStyle2 = new Style();
+ firstStyle2.setFontFamily("瀹嬩綋");
+ firstStyle2.setColor("000000");
+ firstRenderData2.setStyle(firstStyle2);
+ text.add(firstRenderData2);
+
+ TextRenderData firstRenderData3 = new TextRenderData();
+ firstRenderData3.setText(sample.getSampleCode() + "鈭�2");
+ Style firstStyle3 = new Style();
+ firstStyle3.setFontFamily("瀹嬩綋");
+ firstStyle3.setColor("000000");
+ firstRenderData3.setStyle(firstStyle3);
+ text.add(firstRenderData3);
+
+ TextRenderData firstRenderData4 = new TextRenderData();
+ firstRenderData4.setText(sample.getSampleCode() + "鈭�2");
+ Style firstStyle4 = new Style();
+ firstStyle4.setFontFamily("瀹嬩綋");
+ firstStyle4.setColor("000000");
+ firstRenderData4.setStyle(firstStyle4);
+ text.add(firstRenderData4);
+
+
+ // 鍒ゆ柇寰幆鏉′欢
+
+ if (max <= 2) {
+ for (int i = 0; i < max; i++) {
+ TextRenderData firstRenderData5 = new TextRenderData();
+ firstRenderData5.setText("瑙勬牸鍨嬪彿@Type鈭�3");
+ Style firstStyle5 = new Style();
+ firstStyle5.setFontFamily("瀹嬩綋");
+ firstStyle5.setColor("000000");
+ firstRenderData4.setStyle(firstStyle5);
+ text.add(firstRenderData5);
+ }
+ for (int i = 0; i < 2; i++) {
+ TextRenderData firstRenderData6 = new TextRenderData();
+ firstRenderData6.setText(sample.getModel() + "鈭�4");
+ Style firstStyle6 = new Style();
+ firstStyle6.setFontFamily("瀹嬩綋");
+ firstStyle6.setColor("000000");
+ firstRenderData6.setStyle(firstStyle6);
+ text.add(firstRenderData6);
+ }
+ } else {
+ for (int i = 0; i < 2; i++) {
+ TextRenderData firstRenderData5 = new TextRenderData();
+ firstRenderData5.setText("瑙勬牸鍨嬪彿@Type鈭�3");
+ Style firstStyle5 = new Style();
+ firstStyle5.setFontFamily("瀹嬩綋");
+ firstStyle5.setColor("000000");
+ firstRenderData4.setStyle(firstStyle5);
+ text.add(firstRenderData5);
+ }
+ for (int i = 0; i < max; i++) {
+ TextRenderData firstRenderData6 = new TextRenderData();
+ firstRenderData6.setText(sample.getModel() + "鈭�4");
+ Style firstStyle6 = new Style();
+ firstStyle6.setFontFamily("瀹嬩綋");
+ firstStyle6.setColor("000000");
+ firstRenderData6.setStyle(firstStyle6);
+ text.add(firstRenderData6);
+ }
+
+ }
+ TextRenderData[] text2 = text.toArray(new TextRenderData[0]);
+ rowRenderData = Rows.of(text2).center().rowAtleastHeight(1).create();
+ rows.add(rowRenderData);
+ text = new ArrayList<>();
+
+ // 绗簩琛�
+ TextRenderData headRenderData1 = new TextRenderData();
+ headRenderData1.setText("搴忓彿@NO.");
+ Style headStyle1 = new Style();
+ headStyle1.setFontFamily("瀹嬩綋");
+ headStyle1.setColor("000000");
+ headRenderData1.setStyle(headStyle1);
+ text.add(headRenderData1);
+
+ TextRenderData headRenderData2 = new TextRenderData();
+ headRenderData2.setText("妫�楠岄」鐩瓳Test item鈭�5");
+ Style headStyle2 = new Style();
+ headStyle2.setFontFamily("瀹嬩綋");
+ headStyle2.setColor("000000");
+ headRenderData2.setStyle(headStyle2);
+ text.add(headRenderData2);
+
+ TextRenderData headRenderData3 = new TextRenderData();
+ headRenderData3.setText("妫�楠岄」鐩瓳Test item鈭�5");
+ Style headStyle3 = new Style();
+ headStyle3.setFontFamily("瀹嬩綋");
+ headStyle3.setColor("000000");
+ headRenderData3.setStyle(headStyle3);
+ text.add(headRenderData3);
+
+ TextRenderData headRenderData4 = new TextRenderData();
+ headRenderData4.setText("鍗曚綅@Unit");
+ Style headStyle4 = new Style();
+ headStyle4.setFontFamily("瀹嬩綋");
+ headStyle4.setColor("000000");
+ headRenderData4.setStyle(headStyle4);
+ text.add(headRenderData4);
+
+ TextRenderData headRenderData5 = new TextRenderData();
+ headRenderData5.setText("鏍囧噯瑕佹眰@Requirement");
+ Style headStyle5 = new Style();
+ headStyle5.setFontFamily("瀹嬩綋");
+ headStyle5.setColor("000000");
+ headRenderData5.setStyle(headStyle5);
+ text.add(headRenderData5);
+
+ for (int i = 0; i < max; i++) {
+ TextRenderData headRenderData6 = new TextRenderData();
+ headRenderData6.setText("妫�楠岀粨鏋淍Test result鈭�6");
+ Style headStyle6 = new Style();
+ headStyle6.setFontFamily("瀹嬩綋");
+ headStyle6.setColor("000000");
+ headRenderData6.setStyle(headStyle6);
+ text.add(headRenderData6);
+ }
+ TextRenderData headRenderData7 = new TextRenderData();
+ headRenderData7.setText("缁撹@Conclusion");
+ Style headStyle7 = new Style();
+ headStyle7.setFontFamily("瀹嬩綋");
+ headStyle7.setColor("000000");
+ headRenderData7.setStyle(headStyle7);
+ text.add(headRenderData7);
+
+ TextRenderData[] text3 = text.toArray(new TextRenderData[0]);
+ rowRenderData = Rows.of(text3).center().rowAtleastHeight(1).create();
+ rows.add(rowRenderData);
+ text = new ArrayList<>();
+
+ // 绾胯姱棰滆壊
+ if (CollectionUtils.isNotEmpty(cableTags)) {
+ TextRenderData cableRenderData1 = new TextRenderData();
+ cableRenderData1.setText("");
+ Style cableStyle1 = new Style();
+ cableStyle1.setFontFamily("瀹嬩綋");
+ cableStyle1.setColor("000000");
+ cableRenderData1.setStyle(cableStyle1);
+ text.add(cableRenderData1);
+
+ TextRenderData cableRenderData2 = new TextRenderData();
+ cableRenderData2.setText("缁濈紭绾胯姱棰滆壊鍜屾爣蹇桜Insulation core color and mark鈭�200");
+ Style cableStyle2 = new Style();
+ cableStyle2.setFontFamily("瀹嬩綋");
+ cableStyle2.setColor("000000");
+ cableRenderData2.setStyle(cableStyle2);
+ text.add(cableRenderData2);
+
+ TextRenderData cableRenderData3 = new TextRenderData();
+ cableRenderData3.setText("缁濈紭绾胯姱棰滆壊鍜屾爣蹇桜Insulation core color and mark鈭�200");
+ Style cableStyle3 = new Style();
+ cableStyle3.setFontFamily("瀹嬩綋");
+ cableStyle3.setColor("000000");
+ cableRenderData3.setStyle(cableStyle3);
+ text.add(cableRenderData3);
+
+ TextRenderData cableRenderData4 = new TextRenderData();
+ cableRenderData4.setText("");
+ Style cableStyle4 = new Style();
+ cableStyle4.setFontFamily("瀹嬩綋");
+ cableStyle4.setColor("000000");
+ cableRenderData4.setStyle(cableStyle4);
+ text.add(cableRenderData4);
+
+ TextRenderData cableRenderData5 = new TextRenderData();
+ cableRenderData5.setText("");
+ Style cableStyle5 = new Style();
+ cableStyle5.setFontFamily("瀹嬩綋");
+ cableStyle5.setColor("000000");
+ cableRenderData5.setStyle(cableStyle5);
+ text.add(cableRenderData5);
+
+ for (String cableTag : cableTags) {
+ TextRenderData cableRenderData6 = new TextRenderData();
+ cableRenderData6.setText(cableTag);
+ Style cableStyle6 = new Style();
+ cableStyle6.setFontFamily("瀹嬩綋");
+ cableStyle6.setColor("000000");
+ cableRenderData6.setStyle(cableStyle6);
+ text.add(cableRenderData6);
+ }
+ TextRenderData cableRenderData7 = new TextRenderData();
+ cableRenderData7.setText("-");
+ Style cableStyle7 = new Style();
+ cableStyle7.setFontFamily("瀹嬩綋");
+ cableStyle7.setColor("000000");
+ cableRenderData7.setStyle(cableStyle7);
+ text.add(cableRenderData7);
+
+ TextRenderData[] text4 = text.toArray(new TextRenderData[0]);
+ rowRenderData = Rows.of(text4).center().rowAtleastHeight(1).create();
+ rows.add(rowRenderData);
+ text = new ArrayList<>();
+ }
+
+
+ }
+
+
+ /**
+ * 娣诲姞妫�娴嬪��
+ * @param a 褰撳墠鏍峰搧
+ * @param text
+ * @param rowRenderData
+ * @param rows
+ * @param max 妫�楠屾暟閲�
+ * @param resultChList 涓嶇鍚堜俊鎭腑鏂�
+ * @param resultEhList 涓嶇鍚堜俊鎭嫳鏂�
+ * @param insSamples
+ * @param cableTags 绾胯姱棰滆壊
+ * @param isOneSample 鍒ゆ柇鏄惁鏄彧鏈変竴涓牱鍝�
+ */
+ private int addTestValue(SampleProductDto a,
+ List<TextRenderData> text,
+ RowRenderData rowRenderData,
+ List<RowRenderData> rows,
+ int max,
+ List<String> resultChList,
+ List<String> resultEhList,
+ InsSample insSamples, List<String> cableTags,
+ boolean isOneSample) {
+ // 妫�楠岄」鎬绘暟
+ AtomicInteger productSize = new AtomicInteger(1);
+ // 涓嶅悎鏍间俊鎭�
+ AtomicReference<String> resultCh = new AtomicReference<>("");
+ AtomicReference<String> resultEn = new AtomicReference<>("");
+ // 鏌ヨ妫�楠岀粨鏋�
+ List<Integer> ids = new ArrayList<>();
+ ids.add(a.getId());
+ List<SampleProductExportDto> sampleProductDto2s = insOrderMapper.selectSampleBySampleId(ids);
+
+ // 鍒ゆ柇鏄惁鏄搴︽楠�, 涓旀湁娌℃湁杩涘巶妫�楠�, 鏈夎繘鍘傛楠岃繘鍘傛楠岀殑淇℃伅璧嬪�煎埌瀛e害涓�
+ if (insSamples != null) {
+ // 鏌ヨ妫�楠屽唴瀹�
+ List<SampleProductExportDto> enterDto = insOrderMapper.selectSampleBySampleIdOne(insSamples.getId());
+ // 鎺掗櫎鎺夎繘鍘傛姤鍛婇噸澶嶇殑
+ enterDto = enterDto.stream().filter(sampleProductDto2 -> {
+ // 鍒ゆ柇妫�楠岄」妫�楠屽瓙椤规槸鍚︿竴鏍�, 涓�鏍峰氨鐩存帴杩斿洖false鎺掗櫎
+ return !sampleProductDto2s.stream().anyMatch(dto -> {
+ String quarter = sampleProductDto2.getInspectionItem() + sampleProductDto2.getInspectionItemSubclass();
+ String enter = dto.getInspectionItem() + dto.getInspectionItemSubclass();
+ return quarter.equals(enter);
+ });
+ }).collect(Collectors.toList());
+ sampleProductDto2s.addAll(enterDto);
+ }
+
+ // 鏍煎紡鍖栦慨鏀规楠岄」
+ this.formatProducts(sampleProductDto2s);
+
+ List<SampleProductExportDto> sampleList = new ArrayList<>();
+
+ // 鑾峰彇妫�楠岄」鍒嗙被鐨�
+ Map<String, List<SampleProductExportDto>> itemClassMap = sampleProductDto2s.stream().filter(sampleProductDto2 -> StringUtils.isNotBlank(sampleProductDto2.getInspectionItemClass()))
+ .collect(Collectors.groupingBy(SampleProductExportDto::getInspectionItemClass));
+
+ List<Map.Entry<String, List<SampleProductExportDto>>> itemClassEntries = new ArrayList<>(itemClassMap.entrySet());
+ itemClassEntries.sort((o1, o2) -> {
+ // 鍐嶆瘮杈� sort
+ Integer sort1 = o1.getValue().get(0).getSort();
+ Integer sort2 = o2.getValue().get(0).getSort();
+ sort1 = sort1 == null ? 0 : sort1;
+ sort2 = sort2 == null ? 0 : sort2;
+ return sort1.compareTo(sort2);
+ });
+ // 鍒涘缓涓�涓� LinkedHashMap 鏉ヤ繚鎸佹彃鍏ラ『搴�
+ Map<String, List<SampleProductExportDto>> itemClassList = new LinkedHashMap<>();
+ for (Map.Entry<String, List<SampleProductExportDto>> entry : itemClassEntries) {
+ itemClassList.put(entry.getKey(), entry.getValue());
+ }
+
+ if (CollectionUtils.isNotEmpty(itemClassList)) {
+ AtomicInteger finalIndex = new AtomicInteger(1);
+
+ // 鑾峰彇妫�楠岄」鍒嗙被鐩稿悓鐨�
+ itemClassList.forEach((s, sampleClass) -> {
+ // 娣诲姞妫�楠屽垎绫�
+ SampleProductExportDto classDto = new SampleProductExportDto();
+ // 鍒ゆ柇鏄惁鏈夎嫳鏂囧悕绉�
+ SampleProductExportDto temp = sampleClass.get(0);
+ if (StringUtils.isNotBlank(temp.getInspectionItemClassEN())) {
+ classDto.setInspectionName(temp.getInspectionItemClass() + "@" + temp.getInspectionItemClassEN());
+ } else {
+ classDto.setInspectionName(temp.getInspectionItemClass());
+ }
+ classDto.setIndex(Integer.toString(finalIndex.get()));
+ sampleList.add(classDto);
+
+ // 娣诲姞妫�楠岄」
+ Map<String, List<SampleProductExportDto>> sortedMap = sampleClass.stream()
+ .filter(sampleProductDto2 -> StringUtils.isNotBlank(sampleProductDto2.getInspectionItem()))
+ .collect(Collectors.groupingBy(SampleProductExportDto::getInspectionItemRadius));
+
+ List<Map.Entry<String, List<SampleProductExportDto>>> entries = new ArrayList<>(sortedMap.entrySet());
+ entries.sort((o1, o2) -> {
+ // 鍐嶆瘮杈� sort
+ Integer sort1 = o1.getValue().get(0).getSort();
+ Integer sort2 = o2.getValue().get(0).getSort();
+ sort1 = sort1 == null ? 0 : sort1;
+ sort2 = sort2 == null ? 0 : sort2;
+ return sort1.compareTo(sort2);
+ });
+ // 鍒涘缓涓�涓� LinkedHashMap 鏉ヤ繚鎸佹彃鍏ラ『搴�
+ Map<String, List<SampleProductExportDto>> item = new LinkedHashMap<>();
+ for (Map.Entry<String, List<SampleProductExportDto>> entry : entries) {
+ item.put(entry.getKey(), entry.getValue());
+ }
+
+ AtomicInteger belowIndex = new AtomicInteger(1);
+ item.forEach((s2, sampleProductDtoInside) -> {
+ // 娣诲姞妫�楠岄」
+ SampleProductExportDto dto2 = new SampleProductExportDto();
+ // 鍒ゆ柇鏄惁鏈夎嫳鏂囧悕绉�
+ SampleProductExportDto temp2 = sampleProductDtoInside.get(0);
+ if (StringUtils.isNotBlank(temp2.getInspectionItemEn())) {
+ dto2.setInspectionName(temp2.getInspectionItem() + "@" + temp2.getInspectionItemEn());
+ } else {
+ dto2.setInspectionName(temp2.getInspectionItem());
+ }
+ // 鍒ゆ柇鏈夋病鏈夋潯浠跺瓧娈靛~鍏呭埌瑕佹眰
+ if (StringUtils.isNotBlank(temp2.getRadius())) {
+ dto2.setTell("(" + temp2.getRadius() + ")");
+ }
+ // 鍒ゆ柇鏄惁鏈夋楠屽瓙椤�,娌℃湁灏辨妸妫�楠屽弬鏁板~鍏�
+ dto2.setIndex(finalIndex.get() + "." + belowIndex.get());
+ if (StringUtils.isBlank(temp2.getInspectionItemSubclass())) {
+ // 澶勭悊闆嗗悎
+ Map<String, SampleProductExportDto> map = new LinkedHashMap<>();
+ for (SampleProductExportDto productDto2 : sampleProductDtoInside) {
+ String productName = productDto2.getInspectionItemClass() + productDto2.getInspectionItem();
+ if (map.containsKey(productName)) {
+ // 濡傛灉鍚嶇О宸茬粡瀛樺湪锛屾坊鍔� lastValue 鍊煎埌 lastValueList 鍒楄〃
+ map.get(productName)
+ .getLastValueList()
+ .add(productDto2.getLastValue());
+ map.get(productName)
+ .getInsResultList()
+ .add(productDto2.getInsResult());
+ // 娣诲姞棰滆壊瀵瑰簲鐨勫�煎拰缁撴灉
+ if (StringUtils.isNotBlank(productDto2.getCableTag())) {
+ map.get(productName)
+ .getCableTagValueMap()
+ .put(productDto2.getCableTag(), productDto2.getLastValue());
+ map.get(productName)
+ .getCableTagResultMap()
+ .put(productDto2.getCableTag(), productDto2.getInsResult());
+ }
+ // 娣诲姞鏍囧噯瑕佹眰鏉ョ‘瀹氬敮涓�鎬�
+ map.get(productName).getTellSet().add(productDto2.getTell());
+ } else {
+ // 濡傛灉鍚嶇О涓嶅瓨鍦紝鐩存帴鏀惧叆 map
+ productDto2.setLastValueList(new ArrayList<>()); // 妫�楠屽唴瀹�
+ productDto2.getLastValueList().add(productDto2.getLastValue());
+ productDto2.setInsResultList(new ArrayList<>()); // 缁撴灉
+ productDto2.getInsResultList().add(productDto2.getInsResult());
+ productDto2.setTellSet(new LinkedHashSet<>());
+ productDto2.getTellSet().add(productDto2.getTell());// 鏍囧噯瑕佹眰
+
+ // 鍒ゆ柇鏄惁鏈夌嚎鑺鑹�, 娣诲姞棰滆壊瀵瑰簲鐨勫�煎拰缁撴灉
+ productDto2.setCableTagValueMap(new TreeMap<>());
+ productDto2.setCableTagResultMap(new TreeMap<>());
+ if (StringUtils.isNotBlank(productDto2.getCableTag())) {
+ productDto2.getCableTagValueMap().put(productDto2.getCableTag(), productDto2.getLastValue());
+ productDto2.getCableTagResultMap().put(productDto2.getCableTag(), productDto2.getInsResult());
+ }
+
+ map.put(productName, productDto2);
+ }
+ }
+ List<SampleProductExportDto> result = new ArrayList<>(map.values());
+
+
+ //娣诲姞妫�楠岄」
+ SampleProductExportDto temp3 = result.get(0);
+ String itemName = temp3.getInspectionItem();
+ if (StringUtils.isNotBlank(temp3.getRadius())) {
+ itemName = itemName + "(" + temp3.getRadius() + ")";
+ }
+ // 鍒ゆ柇鏈夋病鏈夋潯浠跺瓧娈垫湁闇�瑕佹嫾鎺ュ埌鍚嶇О鍚庨潰
+ if (StringUtils.isNotBlank(temp3.getInspectionItemEn())) {
+ temp3.setInspectionName(itemName + "@" + temp3.getInspectionItemEn());
+ } else {
+ temp3.setInspectionName(itemName);
+ }
+ // 鍒ゆ柇鏈夋病鏈夋潯浠跺瓧娈垫湁闇�瑕佹嫾鎺ュ埌鍚嶇О鍚庨潰
+ // 鍒ゆ柇鏈夋病鏈夋潯浠跺瓧娈靛~鍏呭埌瑕佹眰
+ if (StringUtils.isNotBlank(temp3.getRadius())) {
+ temp3.setTell("(" + temp3.getRadius() + ")");
+ }
+ temp3.setIndex(finalIndex.get() + "." + belowIndex.get());
+ sampleList.add(temp3);
+ } else {
+ sampleList.add(dto2);
+ // 鐜板湪闇�瑕佹牴鎹瓙椤瑰幓閲嶇疮鍔犳楠岀粨鏋�
+ // 澶勭悊闆嗗悎
+ Map<String, SampleProductExportDto> map = new LinkedHashMap<>();
+ for (SampleProductExportDto productDto2 : sampleProductDtoInside) {
+ String productName = productDto2.getInspectionItemClass() + productDto2.getInspectionItem() + productDto2.getInspectionItemSubclass();
+ if (map.containsKey(productName)) {
+ // 濡傛灉鍚嶇О宸茬粡瀛樺湪锛屾坊鍔� lastValue 鍊煎埌 lastValueList 鍒楄〃
+ map.get(productName)
+ .getLastValueList()
+ .add(productDto2.getLastValue());
+ map.get(productName)
+ .getInsResultList()
+ .add(productDto2.getInsResult());
+ // 娣诲姞棰滆壊瀵瑰簲鐨勫�煎拰缁撴灉
+ if (StringUtils.isNotBlank(productDto2.getCableTag())) {
+ map.get(productName)
+ .getCableTagValueMap()
+ .put(productDto2.getCableTag(), productDto2.getLastValue());
+ map.get(productName)
+ .getCableTagResultMap()
+ .put(productDto2.getCableTag(), productDto2.getInsResult());
+ }
+ // 娣诲姞鏍囧噯瑕佹眰鏉ョ‘瀹氬敮涓�鎬�
+ map.get(productName).getTellSet().add(productDto2.getTell());
+ } else {
+ // 濡傛灉鍚嶇О涓嶅瓨鍦紝鐩存帴鏀惧叆 map
+ productDto2.setLastValueList(new ArrayList<>()); // 妫�楠屽唴瀹�
+ productDto2.getLastValueList().add(productDto2.getLastValue());
+ productDto2.setInsResultList(new ArrayList<>()); // 缁撴灉
+ productDto2.getInsResultList().add(productDto2.getInsResult());
+ productDto2.setTellSet(new LinkedHashSet<>());
+ productDto2.getTellSet().add(productDto2.getTell());// 鏍囧噯瑕佹眰
+
+ // 鍒ゆ柇鏄惁鏈夌嚎鑺鑹�, 娣诲姞棰滆壊瀵瑰簲鐨勫�煎拰缁撴灉
+ productDto2.setCableTagValueMap(new TreeMap<>());
+ productDto2.setCableTagResultMap(new TreeMap<>());
+ if (StringUtils.isNotBlank(productDto2.getCableTag())) {
+ productDto2.getCableTagValueMap().put(productDto2.getCableTag(), productDto2.getLastValue());
+ productDto2.getCableTagResultMap().put(productDto2.getCableTag(), productDto2.getInsResult());
+ }
+
+ map.put(productName, productDto2);
+ }
+ }
+ List<SampleProductExportDto> result = new ArrayList<>(map.values());
+
+ //娣诲姞妫�楠屽瓙椤�
+ for (SampleProductExportDto productDto2 : result) {
+ if (StringUtils.isNotBlank(productDto2.getInspectionItemSubclassEn())) {
+ productDto2.setInspectionName("--" + productDto2.getInspectionItemSubclass() + "@"
+ + "--" + productDto2.getInspectionItemSubclassEn());
+ } else {
+ productDto2.setInspectionName("--" + productDto2.getInspectionItemSubclass());
+ }
+ sampleList.add(productDto2);
+ }
+ }
+ belowIndex.incrementAndGet();
+ productSize.incrementAndGet();
+ });
+ finalIndex.incrementAndGet();
+ });
+ } else {
+ // 杞垚Mpa杩涜鎺掑簭
+ Map<String, List<SampleProductExportDto>> sortedMap = sampleProductDto2s.stream()
+ .filter(sampleProductDto2 -> StringUtils.isNotBlank(sampleProductDto2.getInspectionItem()))
+ .collect(Collectors.groupingBy(SampleProductExportDto::getInspectionItemRadius));
+ List<Map.Entry<String, List<SampleProductExportDto>>> entries = new ArrayList<>(sortedMap.entrySet());
+ entries.sort((o1, o2) -> {
+ Integer sort1 = o1.getValue().get(0).getSort();
+ Integer sort2 = o2.getValue().get(0).getSort();
+ sort1 = sort1 == null ? 0 : sort1;
+ sort2 = sort2 == null ? 0 : sort2;
+ return sort1.compareTo(sort2);
+ });
+ // 鍒涘缓涓�涓� LinkedHashMap 鏉ヤ繚鎸佹彃鍏ラ『搴�
+ Map<String, List<SampleProductExportDto>> item = new LinkedHashMap<>();
+ for (Map.Entry<String, List<SampleProductExportDto>> entry : entries) {
+ item.put(entry.getKey(), entry.getValue());
+ }
+
+ AtomicInteger finalIndex = new AtomicInteger(1);
+ item.forEach((s, sampleProductDtoInside) -> {
+ // 娣诲姞妫�楠岄」
+ SampleProductExportDto dto2 = new SampleProductExportDto();
+ // 鍒ゆ柇鏄惁鏈夎嫳鏂囧悕绉�
+ SampleProductExportDto temp = sampleProductDtoInside.get(0);
+
+ // 鍒ゆ柇鏄惁鏈夋楠屽瓙椤�,娌℃湁灏辨妸妫�楠屽弬鏁板~鍏�
+ dto2.setIndex(Integer.toString(finalIndex.get()));
+ if (StringUtils.isBlank(temp.getInspectionItemSubclass())) {
+ // 澶勭悊闆嗗悎
+ Map<String, SampleProductExportDto> map = new LinkedHashMap<>();
+ for (SampleProductExportDto productDto2 : sampleProductDtoInside) {
+ String productName = productDto2.getInspectionItemClass() + productDto2.getInspectionItem();
+ if (map.containsKey(productName)) {
+ // 濡傛灉鍚嶇О宸茬粡瀛樺湪锛屾坊鍔� lastValue 鍊煎埌 lastValueList 鍒楄〃
+ map.get(productName)
+ .getLastValueList()
+ .add(productDto2.getLastValue());
+ map.get(productName)
+ .getInsResultList()
+ .add(productDto2.getInsResult());
+ // 娣诲姞棰滆壊瀵瑰簲鐨勫�煎拰缁撴灉
+ if (StringUtils.isNotBlank(productDto2.getCableTag())) {
+ map.get(productName)
+ .getCableTagValueMap()
+ .put(productDto2.getCableTag(), productDto2.getLastValue());
+ map.get(productName)
+ .getCableTagResultMap()
+ .put(productDto2.getCableTag(), productDto2.getInsResult());
+ }
+ // 娣诲姞鏍囧噯瑕佹眰鏉ョ‘瀹氬敮涓�鎬�
+ map.get(productName).getTellSet().add(productDto2.getTell());
+ } else {
+ // 濡傛灉鍚嶇О涓嶅瓨鍦紝鐩存帴鏀惧叆 map
+ productDto2.setLastValueList(new ArrayList<>()); // 妫�楠屽唴瀹�
+ productDto2.getLastValueList().add(productDto2.getLastValue());
+ productDto2.setInsResultList(new ArrayList<>()); // 缁撴灉
+ productDto2.getInsResultList().add(productDto2.getInsResult());
+ productDto2.setTellSet(new LinkedHashSet<>());
+ productDto2.getTellSet().add(productDto2.getTell());// 鏍囧噯瑕佹眰
+
+ // 鍒ゆ柇鏄惁鏈夌嚎鑺鑹�, 娣诲姞棰滆壊瀵瑰簲鐨勫�煎拰缁撴灉
+ productDto2.setCableTagValueMap(new TreeMap<>());
+ productDto2.setCableTagResultMap(new TreeMap<>());
+ if (StringUtils.isNotBlank(productDto2.getCableTag())) {
+ productDto2.getCableTagValueMap().put(productDto2.getCableTag(), productDto2.getLastValue());
+ productDto2.getCableTagResultMap().put(productDto2.getCableTag(), productDto2.getInsResult());
+ }
+
+ map.put(productName, productDto2);
+ }
+ }
+ List<SampleProductExportDto> result = new ArrayList<>(map.values());
+
+ //娣诲姞妫�楠屽瓙椤�
+ SampleProductExportDto temp2 = result.get(0);
+ String itemName = temp2.getInspectionItem();
+ if (StringUtils.isNotBlank(temp2.getRadius())) {
+ itemName = itemName + "(" + temp2.getRadius() + ")";
+ }
+ // 鍒ゆ柇鏈夋病鏈夋潯浠跺瓧娈垫湁闇�瑕佹嫾鎺ュ埌鍚嶇О鍚庨潰
+ if (StringUtils.isNotBlank(temp2.getInspectionItemEn())) {
+ temp2.setInspectionName(itemName + "@" + temp2.getInspectionItemEn());
+ } else {
+ temp2.setInspectionName(itemName);
+ }
+ // 鍒ゆ柇鏈夋病鏈夋潯浠跺瓧娈垫湁闇�瑕佹嫾鎺ュ埌鍚嶇О鍚庨潰
+ temp2.setIndex(Integer.toString(finalIndex.get()));
+ sampleList.add(temp2);
+ } else {
+ if (StringUtils.isNotBlank(temp.getInspectionItemEn())) {
+ dto2.setInspectionName(temp.getInspectionItem() + "@" + temp.getInspectionItemEn());
+ } else {
+ dto2.setInspectionName(temp.getInspectionItem());
+ }
+ // 濉厖鍒拌姹�
+ if (StringUtils.isNotBlank(temp.getRadius())) {
+ dto2.setTell("(" + temp.getRadius() + ")");
+ }
+ sampleList.add(dto2);
+
+ // 鐜板湪闇�瑕佹牴鎹瓙椤瑰幓閲嶇疮鍔犳楠岀粨鏋�
+ // 澶勭悊闆嗗悎
+ Map<String, SampleProductExportDto> map = new LinkedHashMap<>();
+ for (SampleProductExportDto productDto2 : sampleProductDtoInside) {
+ // 鍚嶅瓧鍙栦笁灞傚敮涓�
+ String productName = productDto2.getInspectionItemClass() + productDto2.getInspectionItem() + productDto2.getInspectionItemSubclass();
+ if (map.containsKey(productName)) {
+ // 濡傛灉鍚嶇О宸茬粡瀛樺湪锛屾坊鍔� lastValue 鍊煎埌 lastValueList 鍒楄〃
+ map.get(productName)
+ .getLastValueList()
+ .add(productDto2.getLastValue());
+ map.get(productName)
+ .getInsResultList()
+ .add(productDto2.getInsResult());
+ // 娣诲姞棰滆壊瀵瑰簲鐨勫�煎拰缁撴灉
+ if (StringUtils.isNotBlank(productDto2.getCableTag())) {
+ map.get(productName)
+ .getCableTagValueMap()
+ .put(productDto2.getCableTag(), productDto2.getLastValue());
+ map.get(productName)
+ .getCableTagResultMap()
+ .put(productDto2.getCableTag(), productDto2.getInsResult());
+ }
+ // 娣诲姞鏍囧噯瑕佹眰鏉ョ‘瀹氬敮涓�鎬�
+ map.get(productName).getTellSet().add(productDto2.getTell());
+ } else {
+ // 濡傛灉鍚嶇О涓嶅瓨鍦紝鐩存帴鏀惧叆 map
+ productDto2.setLastValueList(new ArrayList<>()); // 妫�楠屽唴瀹�
+ productDto2.getLastValueList().add(productDto2.getLastValue());
+ productDto2.setInsResultList(new ArrayList<>()); // 缁撴灉
+ productDto2.getInsResultList().add(productDto2.getInsResult());
+ productDto2.setTellSet(new LinkedHashSet<>());
+ productDto2.getTellSet().add(productDto2.getTell());// 鏍囧噯瑕佹眰
+ productDto2.setCableTagValueMap(new TreeMap<>());
+ // 鍒ゆ柇鏄惁鏈夌嚎鑺鑹�, 娣诲姞棰滆壊瀵瑰簲鐨勫�煎拰缁撴灉
+ productDto2.setCableTagValueMap(new TreeMap<>());
+ productDto2.setCableTagResultMap(new TreeMap<>());
+ if (StringUtils.isNotBlank(productDto2.getCableTag())) {
+ productDto2.getCableTagValueMap().put(productDto2.getCableTag(), productDto2.getLastValue());
+ productDto2.getCableTagResultMap().put(productDto2.getCableTag(), productDto2.getInsResult());
+ }
+ map.put(productName, productDto2);
+ }
+ }
+ List<SampleProductExportDto> result = new ArrayList<>(map.values());
+
+ //娣诲姞妫�楠屽瓙椤�
+ for (SampleProductExportDto productDto2 : result) {
+ if (StringUtils.isNotBlank(productDto2.getInspectionItemSubclassEn())) {
+ productDto2.setInspectionName("--" + productDto2.getInspectionItemSubclass() + "@"
+ + "--" + productDto2.getInspectionItemSubclassEn());
+ } else {
+ productDto2.setInspectionName("--" + productDto2.getInspectionItemSubclass());
+ }
+ sampleList.add(productDto2);
+ }
+ }
+ finalIndex.incrementAndGet();
+ });
+ productSize.set(finalIndex.get());
+ }
+
+ if (CollectionUtils.isEmpty(sampleList)) {
+ return productSize.get() - 1;
+ }
+
+ /* 妫�楠岄」map, 濡傛灉涓嶅悎鏍煎垽鏂槸鍚︽湁澶х被鍜屾楠岄」, 鏈夊ぇ绫讳笉闇�瑕侀噸鍙�, 濡�(缁濈紭鏈烘鐗╃悊鎬ц兘鑰佸寲鍓嶆柇瑁備几闀跨巼銆佺粷缂樻満姊扮墿鐞嗘�ц兘鑰佸寲鍓嶆姉寮犲己搴�)
+ * 闇�瑕佷慨鏀规垚缁濈紭鏈烘鐗╃悊鎬ц兘鑰佸寲鍓嶆柇瑁備几闀跨巼銆佹姉寮犲己搴�
+ * */
+ // 妫�楠岄」鍒嗙被 妫�楠岄」 妫�楠屽瓙椤�
+ Map<String, LinkedHashMap<String, List<String>>> errorClassItemMapCn = new LinkedHashMap<>();
+ Map<String, LinkedHashMap<String, List<String>>> errorClassItemMapEn = new LinkedHashMap<>();
+
+ // 涓棿妫�娴嬪�兼坊鍔�
+ for (int i = 0; i < sampleList.size(); i++) {
+ SampleProductExportDto sample = sampleList.get(i);
+
+ String fixedValue = "(100鈩冿紝168h)";
+ // 鍒ゆ柇鏄惁鏄� 鎷変几寮哄害鍙樺寲鐜�(100鈩冿紝168h) 鍜� 鏂鎷変几搴斿彉鍙樺寲鐜�(100鈩冿紝168h) 闇�瑕佸幓闄ゆ潯浠�
+ if (StrUtil.isNotBlank(sample.getInspectionName())
+ && sample.getInspectionName().contains("鏂鎷変几搴斿彉鍙樺寲鐜�(100鈩冿紝168h)")) {
+ sample.setInspectionName(sample.getInspectionName().replace(fixedValue, ""));
+ }
+ if (StrUtil.isNotBlank(sample.getInspectionName())
+ && sample.getInspectionName().contains("鎷変几寮哄害鍙樺寲鐜�(100鈩冿紝168h)")) {
+ sample.setInspectionName(sample.getInspectionName().replace(fixedValue, ""));
+ }
+ if (StrUtil.isNotBlank(sample.getInspectionName())
+ && sample.getInspectionName().contains("鑰佸寲鍚庢満姊版�ц兘(100鈩冿紝168h)")) {
+ sample.setInspectionName(sample.getInspectionName().replace(fixedValue, ""));
+ }
+
+ // 鍒ゆ柇鏄惁鏄� 鑰愮熆鐗╂补鈪狅紙150鈩� 72h) 鍜� 鑰愮熆鐗╂补鈪狅紙150鈩� 144h) 闇�瑕佸幓闄ゆ潯浠�
+ if (StrUtil.isNotBlank(sample.getInspectionName())
+ && sample.getInspectionName().contains("鑰愮熆鐗╂补鈪狅紙150鈩� 72h)")) {
+ sample.setInspectionName(sample.getInspectionName().replace("锛�150鈩� 72h)", ""));
+ }
+ if (StrUtil.isNotBlank(sample.getInspectionName())
+ && sample.getInspectionName().contains("鑰愮熆鐗╂补鈪狅紙150鈩� 144h)")) {
+ sample.setInspectionName(sample.getInspectionName().replace("锛�150鈩� 144h)", ""));
+ }
+
+ // 搴忓彿
+ TextRenderData headRenderData1 = new TextRenderData();
+ headRenderData1.setText(sample.getIndex());
+ Style headStyle1 = new Style();
+ headStyle1.setFontFamily("瀹嬩綋");
+ headStyle1.setColor("000000");
+ headRenderData1.setStyle(headStyle1);
+ text.add(headRenderData1);
+
+ // 妫�楠岄」鐩�
+ TextRenderData headRenderData2 = new TextRenderData();
+ headRenderData2.setText(sample.getInspectionName() + "鈭�" + (i + 999));
+ Style headStyle2 = new Style();
+ headStyle2.setFontFamily("瀹嬩綋");
+ headStyle2.setColor("000000");
+ headRenderData2.setStyle(headStyle2);
+ text.add(headRenderData2);
+
+ // 妫�楠岄」鐩�
+ TextRenderData headRenderData3 = new TextRenderData();
+ headRenderData3.setText(sample.getInspectionName() + "鈭�" + (i + 999));
+ Style headStyle3 = new Style();
+ headStyle3.setFontFamily("瀹嬩綋");
+ headStyle3.setColor("000000");
+ headRenderData3.setStyle(headStyle3);
+ text.add(headRenderData3);
+
+ // 鍗曚綅
+ TextRenderData headRenderData4 = new TextRenderData();
+ headRenderData4.setText(sample.getUnit());
+ Style headStyle4 = new Style();
+ headStyle4.setFontFamily("瀹嬩綋");
+ headStyle4.setColor("000000");
+ headRenderData4.setStyle(headStyle4);
+ text.add(headRenderData4);
+
+ //鏍囧噯瑕佹眰
+ String tell = sample.getTell();
+ if (CollectionUtils.isNotEmpty(sample.getTellSet())) {
+ tell = CollUtil.join(sample.getTellSet(), "/");
+ }
+ TextRenderData headRenderData5 = new TextRenderData();
+ headRenderData5.setText(tell);
+ Style headStyle5 = new Style();
+ headStyle5.setFontFamily("瀹嬩綋");
+ headStyle5.setColor("000000");
+ headRenderData5.setStyle(headStyle5);
+ text.add(headRenderData5);
+
+ // 鍒ゆ柇鏄惁鏈夌數缂嗘爣璇唌ap
+ if (CollectionUtils.isNotEmpty(sample.getCableTagValueMap())) {
+ sample.setLastValueList(new ArrayList<>(sample.getCableTagValueMap().values()));
+ }
+ if (CollectionUtils.isNotEmpty(sample.getCableTagResultMap())) {
+ sample.setInsResultList(new ArrayList<>(sample.getCableTagResultMap().values()));
+ }
+
+ // 妫�楠岀粨鏋�
+ // 鍒ゆ柇鏄惁鏄娆℃楠�
+ if (CollectionUtils.isNotEmpty(sample.getLastValueList())
+ && sample.getLastValueList().size() == max) {
+
+ for (String s : sample.getLastValueList()) {
+ TextRenderData headRenderData6 = new TextRenderData();
+ headRenderData6.setText(s);
+ Style headStyle6 = new Style();
+ headStyle6.setFontFamily("瀹嬩綋");
+ headStyle6.setColor("000000");
+ headRenderData6.setStyle(headStyle6);
+ text.add(headRenderData6);
+ }
+ } else {
+ for (int j = 0; j < max; j++) {
+ TextRenderData headRenderData6 = new TextRenderData();
+ headRenderData6.setText((StringUtils.isNotEmpty(sample.getLastValue()) ?
+ sample.getLastValue() : "")
+ + "鈭�" + (7 + i));
+ Style headStyle6 = new Style();
+ headStyle6.setFontFamily("瀹嬩綋");
+ headStyle6.setColor("000000");
+ headRenderData6.setStyle(headStyle6);
+ text.add(headRenderData6);
+ }
+ }
+ // 鍒ゅ畾缁撴灉
+ String result = "";
+ if (sample.getInsResult() != null) {
+ switch (sample.getInsResult()) {
+ case 1:
+ result = "鈭�";
+ break;
+ case 2:
+ result = "脳";
+ break;
+ case 3:
+ result = "-";
+ break;
+ }
+ }
+ if (CollectionUtils.isNotEmpty(sample.getLastValueList())) {
+ // 鍒ゆ柇鏄惁鏈変竴涓敊璇�
+ if (sample.getInsResultList().stream().anyMatch(s -> s.equals(3))) {
+ result = "-";
+ } else {
+ boolean error = sample.getInsResultList().stream().anyMatch(s -> s.equals(0));
+ if (error) {
+ List<String> collect = new ArrayList<>();
+ int index = 0;
+ for (Integer count : sample.getInsResultList()) {
+ String type;
+ if (count.equals(0)) {
+ String itemCh = "";
+ String itemEn = "";
+ // 娣诲姞涓嶅悎鏍兼弿杩�
+ // 鍒ゆ柇闀垮害鏄惁涓�1
+ if (sample.getLastValueList().size() == 1) {
+ this.fillReportErrorResult(errorClassItemMapCn, errorClassItemMapEn, sample, itemCh, itemEn);
+ } else if (CollectionUtils.isNotEmpty(cableTags)) {
+ // 鍒ゆ柇鏄惁鏈夌數缂嗛厤缃�, 涓嶆槸鐨勮瘽鍙兘涓哄師鏉愭枡
+ // 娣诲姞涓嶅悎鏍兼弿杩�
+ itemCh = (max == 1 ? "" : cableTags.get(index));
+ itemEn = (max == 1 ? "" : "The " + Integer.toString(index + 1) + " time ");
+ this.fillReportErrorResult(errorClassItemMapCn, errorClassItemMapEn, sample, itemCh, itemEn);
+ } else {
+ // 娣诲姞涓嶅悎鏍兼弿杩�
+ itemCh = (max == 1 ? "" : "绗�" + Integer.toString(index + 1) + "娆�");
+ itemEn = (max == 1 ? "" : "The " + Integer.toString(index + 1) + " time ");
+ this.fillReportErrorResult(errorClassItemMapCn, errorClassItemMapEn, sample, itemCh, itemEn);
+ }
+ type = "脳";
+ } else {
+ type = "鈭�";
+ }
+ collect.add(type);
+ index++;
+ }
+ result = CollUtil.join(collect, " ");
+ ;
+ } else {
+ result = "鈭�";
+ }
+ }
+ }
+
+ TextRenderData headRenderData7 = new TextRenderData();
+ headRenderData7.setText(result);
+ Style headStyle7 = new Style();
+ headStyle7.setFontFamily("瀹嬩綋");
+ headStyle7.setColor("000000");
+ headRenderData7.setStyle(headStyle7);
+ text.add(headRenderData7);
+
+ TextRenderData[] text2 = text.toArray(new TextRenderData[0]);
+ rowRenderData = Rows.of(text2).center().rowAtleastHeight(1).create();
+ rows.add(rowRenderData);
+ text = new ArrayList<>();
+
+ }
+ if (CollectionUtils.isNotEmpty(errorClassItemMapCn)) {
+ // 寰幆妫�楠岄」鍒嗙被
+ errorClassItemMapCn.forEach((errorClass, errorItemMap) -> {
+ if (StringUtils.isNotBlank(resultCh.get())) {
+ resultCh.set(resultCh.get() + "锛�" + errorClass);
+ } else {
+ resultCh.set(errorClass);
+ }
+ // 寰幆妫�楠岄」
+ AtomicBoolean flag = new AtomicBoolean(false);
+ errorItemMap.forEach((errorItem, errorSubClassList) -> {
+ if (flag.get()) {
+ resultCh.set(resultCh.get() + "锛�" + errorItem);
+ } else {
+ resultCh.set(resultCh.get() + errorItem);
+ }
+ flag.set(true);
+ // 寰幆妫�楠岄」鍒嗙被
+ if (CollectionUtils.isNotEmpty(errorSubClassList)) {
+ for (int i = 0; i < errorSubClassList.size(); i++) {
+ // 鍒ゆ柇鏄惁鏄浜屼釜, 绗簩涓坊鍔犻】鍙�
+ if (i > 0) {
+ resultCh.set(resultCh.get() + "銆�" + errorSubClassList.get(i));
+ } else {
+ resultCh.set(resultCh.get() + errorSubClassList.get(i));
+ }
+ }
+ }
+ });
+ });
+ // 寰幆妫�楠岄」鍒嗙被
+ errorClassItemMapEn.forEach((errorClass, errorItemMap) -> {
+ if (StringUtils.isNotBlank(resultEn.get())) {
+ resultEn.set(resultEn.get() + "锛�" + errorClass);
+ } else {
+ resultEn.set(errorClass);
+ }
+ // 寰幆妫�楠岄」
+ errorItemMap.forEach((errorItem, errorSubClassList) -> {
+ resultEn.set(resultEn.get() + errorItem);
+ // 寰幆妫�楠岄」鍒嗙被
+ if (CollectionUtils.isNotEmpty(errorSubClassList)) {
+ for (int i = 0; i < errorSubClassList.size(); i++) {
+ // 鍒ゆ柇鏄惁鏄浜屼釜, 绗簩涓坊鍔犻】鍙�
+ if (i > 0) {
+ resultEn.set(resultEn.get() + "銆�" + errorSubClassList.get(i));
+ } else {
+ resultEn.set(resultEn.get() + errorSubClassList.get(i));
+ }
+ }
+ }
+ });
+ });
+ }
+
+ if (StringUtils.isNotBlank(resultCh.get())) {
+ String resultChString = resultCh.get();
+ String resultEnString = resultEn.get();
+ // 鍒ゆ柇鏍峰搧鏄惁鏈夊涓�, 鏈夊涓渶瑕佹嫾鎺ユ牱鍝佺紪鍙�
+ if (!isOneSample) {
+ resultChString = a.getSampleCode() + resultChString;
+ resultEnString = a.getSampleCode() + resultEnString;
+ }
+ resultChList.add(resultChString);
+ resultEhList.add(resultEnString);
+ }
+
+
+ return productSize.get() - 1;
+ }
+
+ /**
+ * 娣诲姞鎶ュ憡缁撹涓嫳鏂�
+ * @param sample
+ * @param itemCh
+ * @param itemEn
+ */
+ private void fillReportErrorResult(Map<String, LinkedHashMap<String, List<String>>> errorClassItemMapCn,
+ Map<String, LinkedHashMap<String, List<String>>> errorClassItemMapEn,
+ SampleProductExportDto sample,
+ String itemCh,
+ String itemEn) {
+ // 鍒ゆ柇鏄惁鏈夋楠岄」鍒嗙被map
+ String classTiemName = itemCh + (StringUtils.isBlank(sample.getInspectionItemClass()) ? "" : sample.getInspectionItemClass());
+ String classTiemNameEn = itemEn + (StringUtils.isBlank(sample.getInspectionItemClassEN()) ? "" : sample.getInspectionItemClassEN());
+ String classTiemNameItemEN = StringUtils.isBlank(sample.getInspectionItemEn()) ? "" : sample.getInspectionItemEn();
+
+ if (errorClassItemMapCn.containsKey(classTiemName)) {
+ // 鍒ゆ柇鏄惁鏈夋楠岄」map
+ if (errorClassItemMapCn.get(classTiemName).containsKey(sample.getInspectionItem())) {
+ // 娣诲姞妫�楠岄」鍒嗙被
+ if (StringUtils.isNotBlank(sample.getInspectionItemSubclass())) {
+ errorClassItemMapCn.get(classTiemName).get(sample.getInspectionItem()).add(sample.getInspectionItemSubclass());
+ }
+ if (StringUtils.isNotBlank(sample.getInspectionItemSubclassEn())) {
+ errorClassItemMapEn.get(classTiemNameEn).get(classTiemNameItemEN).add(sample.getInspectionItemSubclassEn());
+ }
+ } else {
+ // 娣诲姞妫�楠岄」map
+ List<String> errorItemSubClassList = new ArrayList<>();
+ if (StringUtils.isNotBlank(sample.getInspectionItemSubclass())) {
+ errorItemSubClassList.add(sample.getInspectionItemSubclass());
+ }
+ List<String> errorItemSubClassListEn = new ArrayList<>();
+ if (StringUtils.isNotBlank(sample.getInspectionItemSubclassEn())) {
+ errorItemSubClassListEn.add(sample.getInspectionItemSubclassEn());
+ }
+ errorClassItemMapCn.get(classTiemName).put(sample.getInspectionItem(), errorItemSubClassList);
+ errorClassItemMapEn.get(classTiemNameEn).put(classTiemNameItemEN, errorItemSubClassListEn);
+ }
+ } else {
+ // map娣诲姞妫�楠岄」鍒嗙被
+ List<String> errorItemSubClassList = new ArrayList<>();
+ if (StringUtils.isNotBlank(sample.getInspectionItemSubclass())) {
+ errorItemSubClassList.add(sample.getInspectionItemSubclass());
+ }
+ List<String> errorItemSubClassListEn = new ArrayList<>();
+ if (StringUtils.isNotBlank(sample.getInspectionItemSubclassEn())) {
+ errorItemSubClassListEn.add(sample.getInspectionItemSubclassEn());
+ }
+ errorClassItemMapCn.put(classTiemName, new LinkedHashMap<String, List<String>>() {{
+ put(sample.getInspectionItem(), errorItemSubClassList);
+ }});
+ errorClassItemMapEn.put(classTiemNameEn, new LinkedHashMap<String, List<String>>() {{
+ put(classTiemNameItemEN, errorItemSubClassListEn);
+ }});
+ }
+ }
+
+
+ /**
+ * 鏍煎紡鍖栦慨鏀规楠岄」
+ * @param sampleProductDto2s
+ */
+ private void formatProducts(List<SampleProductExportDto> sampleProductDto2s) {
+ sampleProductDto2s.forEach(sampleProductDto2 -> {
+ // 娓呴櫎鍏ㄩ儴缁撴灉鐨勫墠鍚庣┖鏍�, 鎹㈣绗�
+ if (StrUtil.isNotBlank(sampleProductDto2.getLastValue())) {
+ sampleProductDto2.setLastValue(sampleProductDto2.getLastValue().trim());
+ }
+
+ if (sampleProductDto2.getInsResult().equals(0)) {
+ // 鏌ヨ涓嶅悎鏍煎娴�
+ Long count = insUnqualifiedRetestProductMapper.selectCount(Wrappers.<InsUnqualifiedRetestProduct>lambdaQuery()
+ .eq(InsUnqualifiedRetestProduct::getInsProductId, sampleProductDto2.getInsProductId())
+ .ne(InsUnqualifiedRetestProduct::getInsResult, 0));
+ if (count == 2) {
+ // 澶嶆祴鍐呭閮藉悎鏍煎氨鍙栫涓�涓粨鏋�
+ InsUnqualifiedRetestProduct retestProduct = insUnqualifiedRetestProductMapper.selectOne(Wrappers.<InsUnqualifiedRetestProduct>lambdaQuery()
+ .eq(InsUnqualifiedRetestProduct::getInsProductId, sampleProductDto2.getInsProductId())
+ .last("limit 1"));
+ sampleProductDto2.setLastValue(retestProduct.getLastValue());
+ sampleProductDto2.setInsResult(retestProduct.getInsResult());
+ }
+ }
+ // 鍒ゆ柇鏄惁鏄暟瀛楃被鍨�
+ if (sampleProductDto2.getInspectionValueType().equals("1")) {
+ // 鎶婃楠屽唴瀹瑰鏋滄纭寲鐐瑰拰鐒︾儳鏃堕棿鎶� . 鍒囧壊鎴� :
+ String lastValue = sampleProductDto2.getLastValue();
+ if (sampleProductDto2.getInspectionItem().contains("姝g~鍖栫偣") || sampleProductDto2.getInspectionItem().contains("鐒︾儳鏃堕棿")) {
+ sampleProductDto2.setLastValue(sampleProductDto2.getLastValue().replace('.', ':'));
+ } else {
+ // 鍒ゆ柇褰撳墠缁撴灉鏄惁鏄瀛﹁鏁版硶
+ boolean scientificNotation = isScientificNotation(lastValue);
+ if (scientificNotation) {
+ // 淇敼瑕佹眰鎻忚堪
+ sampleProductDto2.setTell(convertToScientificNotation(sampleProductDto2.getTell()));
+
+ // 淇敼瑕佹眰鍊�
+ sampleProductDto2.setLastValue(toScientificNotationWithTimes(lastValue));
+ } else {
+ // 鎺掗櫎姘ф寚鏁�
+ if (sampleProductDto2.getInspectionItem().contains("姘ф寚鏁�")) {
+
+ // 鐗规畩澶勭悊鍒ゆ柇妫�楠岄」鏄惁绛変簬澶栨姢濂楃數瀵肩巼, 鏄殑璇濆彧闇�瑕佷繚鐣欎竴浣嶅皬鏁�
+ } else if (StringUtils.isNotBlank(sampleProductDto2.getInspectionItemSubclass())
+ && sampleProductDto2.getInspectionItemSubclass().contains("澶栨姢濂楃數瀵肩巼")) {
+ BigDecimal bd = new BigDecimal(lastValue);
+ bd = bd.setScale(1, RoundingMode.HALF_UP);
+ sampleProductDto2.setLastValue(bd.stripTrailingZeros().toPlainString());
+ } else {
+ // 淇敼灏忔暟鐐逛綅鏁版牴鎹姹傚�兼潵
+ sampleProductDto2.setLastValue(modifyNumber(sampleProductDto2.getAsk(), lastValue));
+ }
+ }
+ }
+ }
+ // 鍒ゆ柇鏄惁鏄� 鎷変几寮哄害鍙樺寲鐜�(100鈩冿紝168h) 鍜� 鏂鎷変几搴斿彉鍙樺寲鐜�(100鈩冿紝168h) 闇�瑕佸幓闄ゆ潯浠�
+ if (StrUtil.isNotBlank(sampleProductDto2.getInspectionItemSubclass())
+ && sampleProductDto2.getInspectionItemSubclass().equals("鎷変几寮哄害鍙樺寲鐜�(100鈩冿紝168h)")) {
+ sampleProductDto2.setInspectionItem("鑰佸寲鍚庢満姊版�ц兘(100鈩冿紝168h)");
+ }
+ if (StrUtil.isNotBlank(sampleProductDto2.getInspectionItemSubclass())
+ && sampleProductDto2.getInspectionItemSubclass().equals("鏂鎷変几搴斿彉鍙樺寲鐜�(100鈩冿紝168h)")) {
+ sampleProductDto2.setInspectionItem("鑰佸寲鍚庢満姊版�ц兘(100鈩冿紝168h)");
+ }
+ });
+ }
+
+ /**
+ * 娣诲姞缁撳熬
+ * @param text
+ * @param rowRenderData
+ * @param rows
+ */
+ private static void addEnding(List<TextRenderData> text, RowRenderData rowRenderData, List<RowRenderData> rows, int max) {
+ for (int i = 0; i < 2; i++) {
+ TextRenderData endingRenderData = new TextRenderData();
+ endingRenderData.setText("澶囨敞鈭�1999");
+ Style endingStyle = new Style();
+ endingStyle.setFontFamily("瀹嬩綋");
+ endingStyle.setColor("000000");
+ endingRenderData.setStyle(endingStyle);
+ text.add(endingRenderData);
+ }
+
+ for (int i = 0; i < 5 + max - 1; i++) {
+ TextRenderData endingRenderData = new TextRenderData();
+ endingRenderData.setText("鈥溾垰鈥濊〃绀洪」鐩悎鏍�,鈥溍椻�濊〃绀洪」鐩笉鍚堟牸,鈥�-鈥濊〃绀轰笉瑕佸垽瀹氾紝鈥�/鈥濊〃绀烘病鏈夋爣鍑嗚姹傘�侤鈥溾垰鈥� indicates test ltem is qualified,鈥溍椻�� indicates test ltem is unqualified,鈥�-鈥� indicates test ltem judgment is not required,鈥�/鈥� indicates test ltem is no test requirement.鈭�2000");
+ Style endingStyle = new Style();
+ endingStyle.setFontFamily("瀹嬩綋");
+ endingStyle.setColor("000000");
+ endingRenderData.setStyle(endingStyle);
+ text.add(endingRenderData);
+ }
+ TextRenderData[] text3 = text.toArray(new TextRenderData[0]);
+ rowRenderData = Rows.of(text3).center().rowAtleastHeight(1).create();
+ rows.add(rowRenderData);
+ }
+
+ /**
+ * 鍒ゆ柇褰撳墠鍐呭鏄惁鏄瀛﹁鏁版硶
+ * @param str
+ * @return
+ */
+ public static boolean isScientificNotation(String str) {
+ if (StringUtils.isEmpty(str)) {
+ return false;
+ }
+ // 姝e垯琛ㄨ揪寮忓尮閰嶇瀛﹁鏁版硶锛屽寘鎷鏁板拰璐熸暟
+ String regex = "^[+|-]?\\d*[.]?\\d*e[+|-]?\\d+$";
+ Pattern pattern = Pattern.compile(regex);
+ return pattern.matcher(str).matches();
+ }
+
+
+ /**
+ * 淇敼瑕佹眰鎻忚堪鐨勭瀛﹁鏁版硶
+ * @param input
+ */
+ public static String convertToScientificNotation(String input) {
+ // 淇濆瓨鍘熷杈撳叆
+ String originalInput = input;
+
+ // 鍘绘帀闈炵瀛﹁鏁版硶鐨勫瓧绗�
+ String cleanedInput = input.replaceAll("[^0-9eE+-.]", "");
+
+ // 鍒ゆ柇瑕佹眰鎻忚堪鏄惁鏄瀛﹁鏁版硶
+ boolean scientificNotation = isScientificNotation(cleanedInput);
+ if (!scientificNotation) {
+ return input;
+ }
+
+ // 鎵惧嚭琚幓鎺夌殑瀛楃
+ String removedChars = originalInput.replace(cleanedInput, "");
+
+ try {
+ String scientificNotationWithTimes = toScientificNotationWithTimes(cleanedInput);
+ return removedChars + scientificNotationWithTimes;
+ } catch (Exception e) {
+ return input;
+ }
+
+ }
+
+ /**
+ * 灞曠ず鎴愮瀛﹁鏁版硶
+ * @param number
+ * @return
+ */
+ public static String toScientificNotationWithTimes(String number) {
+ Double value = Double.valueOf(number);
+
+ // 鎻愬彇灏忔暟閮ㄥ垎鍜屾寚鏁伴儴鍒�
+ String scientificFormat = String.format("%.1e", value);
+ String[] parts = scientificFormat.split("e");
+
+ // 澶勭悊鏁板瓧閮ㄥ垎鍜屾寚鏁伴儴鍒�
+ String mantissa = parts[0]; // 灏忔暟閮ㄥ垎
+ int exponent = Integer.parseInt(parts[1]); // 鎸囨暟閮ㄥ垎
+
+ String power = "";
+ switch (exponent) {
+ case 2:
+ power = "虏";
+ break;
+ case 3:
+ power = "鲁";
+ break;
+ case 4:
+ power = "鈦�";
+ break;
+ case 5:
+ power = "鈦�";
+ break;
+ case 6:
+ power = "鈦�";
+ break;
+ case 7:
+ power = "鈦�";
+ break;
+ case 8:
+ power = "鈦�";
+ break;
+ case 9:
+ power = "鈦�";
+ break;
+ case 10:
+ power = "鹿鈦�";
+ break;
+ case 11:
+ power = "鹿鹿";
+ break;
+ case 12:
+ power = "鹿虏";
+ break;
+ case 13:
+ power = "鹿鲁";
+ break;
+ case 14:
+ power = "鹿鈦�";
+ break;
+ case 15:
+ power = "鹿鈦�";
+ break;
+ case 16:
+ power = "鹿鈦�";
+ break;
+ case 17:
+ power = "鹿鈦�";
+ break;
+ case 18:
+ power = "鹿鈦�";
+ break;
+ case 19:
+ power = "鹿鈦�";
+ break;
+ case 20:
+ power = "虏鈦�";
+ break;
+
+ }
+
+ // 鏋勫缓鏈�缁堢殑绉戝璁℃暟娉曟牸寮忓瓧绗︿覆
+ return String.format("%s脳10%s", mantissa, power);
+ }
+
+
+ // 鍒ゆ柇鏄惁鏄暟瀛�
+ public static boolean isNumeric(String str) {
+ if (str == null || str.isEmpty()) {
+ return false;
+ }
+ try {
+ Double.parseDouble(str); // 灏濊瘯灏嗗瓧绗︿覆瑙f瀽涓哄弻绮惧害娴偣鏁�
+ return true;
+ } catch (NumberFormatException e) {
+ return false; // 瑙f瀽澶辫触鍒欒繑鍥瀎alse
+ }
+ }
+
+ /**
+ * 鏍规嵁瑕佹眰鎻忚堪淇濈暀缁撴灉灏忔暟鐐逛綅鏁�
+ * @param reference
+ * @param value
+ * @return
+ */
+ public static String modifyNumber(String reference, String value) {
+ if (reference.equals("/") || reference.equals("-") || reference.equals("鈥�")) {
+ // 涓嶅垽瀹氶粯璁や繚鐣欎竴浣嶅皬鏁� > 榛樿灏忔暟浣�
+// BigDecimal bd = new BigDecimal(value);
+// bd = bd.setScale(1, RoundingMode.HALF_UP);
+ return value;
+ }
+
+ // 鍒ゆ柇鏄惁鏄暟瀛�
+ if (!isNumeric(value)) {
+ try {
+ // 鍙兘鏄墹95.1A杩欐牱鐨�, 闇�瑕佹埅鍙栦繚鐣欎綅鏁�
+ // 浣跨敤姝e垯琛ㄨ揪寮忔彁鍙栨暟瀛楅儴鍒�
+ String numberPart = value.replaceAll("[^0-9.]", "");
+ // 灏嗘暟瀛楅儴鍒嗘浛鎹㈡垚鍗犱綅绗�
+ String withPlaceholder = value.replaceAll(numberPart, "**");
+ // 鎻愬彇灏忔暟鐐逛綅鏁�
+ int decimalPlaces = getDecimalPlaces(reference);
+ // 澶勭悊绗簩涓瓧绗︿覆
+ BigDecimal number = new BigDecimal(numberPart);
+ number = number.setScale(decimalPlaces, RoundingMode.HALF_UP);
+ // 绛変簬0闇�瑕佽繘涓�姝ュ鐞�
+ if (number.compareTo(BigDecimal.ZERO) == 0) {
+ return formatNumber(value, decimalPlaces);
+ }
+ // 灏嗗崰浣嶇鏇挎崲鎴愭寚瀹氭暟瀛�
+ String finalResult = withPlaceholder.replace("**", number.toString());
+ return finalResult;
+ } catch (Exception e) {
+ return value;
+ }
+ }
+
+ // 鎻愬彇灏忔暟鐐逛綅鏁�
+ int decimalPlaces = getDecimalPlaces(reference);
+
+ // 澶勭悊绗簩涓瓧绗︿覆
+ BigDecimal number = new BigDecimal(value);
+ number = number.setScale(decimalPlaces, RoundingMode.HALF_UP);
+
+ // 绛変簬0闇�瑕佽繘涓�姝ュ鐞�
+ if (number.compareTo(BigDecimal.ZERO) == 0) {
+ return formatNumber(value, decimalPlaces);
+ }
+
+ return number.toString();
+ }
+
+
+ private static int getDecimalPlaces(String str) {
+ // 鏌ユ壘灏忔暟鐐逛綅缃�
+ int decimalPointIndex = str.lastIndexOf('.');
+
+ if (decimalPointIndex == -1) {
+ // 濡傛灉娌℃湁灏忔暟鐐癸紝杩斿洖0浣嶅皬鏁�
+ return 0;
+ }
+
+ // 璁$畻灏忔暟鐐瑰悗鐨勪綅鏁�
+ return str.length() - decimalPointIndex - 1;
+ }
+
+ /**
+ * 淇濈暀浣嶆暟, 濡傛灉绛変簬0 杩斿洖鎵惧埌鐨勪竴涓潪0浣嶆暟
+ * @param number 褰撳墠鏁板瓧
+ * @param scale 鍘熸湰淇濈暀鐨勪綅鏁�
+ * @return
+ */
+ public static String formatNumber(String number, int scale) {
+ // 灏嗚緭鍏ョ殑瀛楃涓茶浆鎹负 BigDecimal
+ BigDecimal bd = new BigDecimal(number);
+
+ // 淇濈暀鎸囧畾鐨勫皬鏁颁綅鏁帮紝骞朵娇鐢ㄥ洓鑸嶄簲鍏ユā寮�
+ bd = bd.setScale(scale, RoundingMode.HALF_UP);
+
+ // 妫�鏌ヤ繚鐣欑殑灏忔暟鏄惁绛変簬 0
+ if (bd.stripTrailingZeros().scale() <= 0) {
+ // 闇�瑕佹壘鍒扮涓�涓笉涓� 0 鐨勫皬鏁颁綅
+ String decimalPart = number.substring(number.indexOf('.') + 1);
+ int firstNonZeroIndex = findFirstNonZeroIndex(decimalPart);
+
+ if (firstNonZeroIndex != -1) {
+ // 璁$畻闇�瑕佷繚鐣欑殑灏忔暟浣嶆暟
+ int newScale = firstNonZeroIndex + 1;
+ bd = new BigDecimal(number).setScale(newScale, RoundingMode.HALF_UP);
+ }
+ }
+
+ return bd.toString();
+ }
+
+ private static int findFirstNonZeroIndex(String decimalPart) {
+ for (int i = 0; i < decimalPart.length(); i++) {
+ if (decimalPart.charAt(i) != '0') {
+ return i;
+ }
+ }
+ return -1; // 濡傛灉娌℃湁鎵惧埌闈為浂鐨勬暟瀛�
+ }
+
+ /**
+ * 淇濆瓨鍏冩闃块噷杩涜揣楠岃瘉鍘熷璁板綍
+ * @param insOrderId 璁㈠崟Id
+ * @param examineUserId 澶嶆牳浜篒d
+ * @param writeUserId 妫�楠屽憳Id
+ */
+ private void reportFactoryVerify(Integer insOrderId, Integer examineUserId, Integer writeUserId) {
+ // 鏌ヨ杩涜揣楠岃瘉鍘熷璁板綍
+ InsOrderFactoryVerify factoryVerify = insOrderFactoryVerifyMapper.selectOne(Wrappers.<InsOrderFactoryVerify>lambdaQuery()
+ .eq(InsOrderFactoryVerify::getInsOrderId, insOrderId)
+ .last("limit 1"));
+
+ // 娌℃湁灏辩粨鏉�
+ if (factoryVerify == null) {
+ return;
+ }
+
+ //1.鏉愭枡鍚嶇О
+ factoryVerify.setBasicName(this.formatBasic(factoryVerify.getBasicName()));
+ //2.瑙勬牸鍨嬪彿
+ factoryVerify.setBasicModel(this.formatBasic(factoryVerify.getBasicModel()));
+ //3.鏉愭枡鎵瑰彿
+ factoryVerify.setBasicBatchNo(this.formatBasic(factoryVerify.getBasicBatchNo()));
+ //4.鎵ц鏍囧噯
+ factoryVerify.setBasicStandard(this.formatBasic(factoryVerify.getBasicStandard()));
+ //5.鐢熶骇鏃ユ湡
+ factoryVerify.setBasicDate(this.formatBasic(factoryVerify.getBasicDate()));
+ //6.渚涜揣鏁伴噺
+ factoryVerify.setBasicNumber(this.formatBasic(factoryVerify.getBasicNumber()));
+ //7.鏉愭枡鍚嶇О
+ factoryVerify.setBasicColor(this.formatBasic(factoryVerify.getBasicColor()));
+
+ //8.鍏朵粬
+ // 鍐呭
+ if (factoryVerify.getBasicOtherValue() == null) {
+ factoryVerify.setBasicOtherValue("");
+ }
+ // 鍊�
+ if (factoryVerify.getBasicOther() == null) {
+ factoryVerify.setBasicOther("");
+ }
+ switch (factoryVerify.getBasicOther()) {
+ case "1":
+ factoryVerify.setBasicOther("鈽戠鍚� 鈻′笉绗﹀悎");
+ break;
+ case "2":
+ factoryVerify.setBasicOther("鈻$鍚� 鈽戜笉绗﹀悎");
+ break;
+ default:
+ factoryVerify.setBasicOther("鈻$鍚� 鈻′笉绗﹀悎");
+ }
+
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+ String declareDate = factoryVerify.getDeclareDate().format(formatter);
+
+ // 淇敼楠岃瘉椤圭洰
+ List<InsOrderFactoryVerifyItem> verifyItems = insOrderFactoryVerifyItemService.list(Wrappers.<InsOrderFactoryVerifyItem>lambdaQuery()
+ .eq(InsOrderFactoryVerifyItem::getFactoryVerifyId, factoryVerify.getFactoryVerifyId())
+ .orderByAsc(InsOrderFactoryVerifyItem::getSort));
+
+ for (InsOrderFactoryVerifyItem verifyItem : verifyItems) {
+ if (verifyItem.getResult() == null) {
+ verifyItem.setResult("");
+ }
+ switch (verifyItem.getResult()) {
+ case "1":
+ verifyItem.setResult("鈽戠鍚� 鈻′笉绗﹀悎 鈻′笉閫傜敤");
+ break;
+ case "2":
+ verifyItem.setResult("鈻$鍚� 鈽戜笉绗﹀悎 鈻′笉閫傜敤");
+ break;
+ case "3":
+ verifyItem.setResult("鈻$鍚� 鈻′笉绗﹀悎 鈽戜笉閫傜敤");
+ break;
+ default:
+ verifyItem.setResult("鈻$鍚� 鈻′笉绗﹀悎 鈻′笉閫傜敤");
+ }
+ }
+
+ //鑾峰彇鎻愪氦浜虹殑绛惧悕鍦板潃
+ String writeUrl;
+ try {
+ writeUrl = userMapper.selectById(writeUserId).getSignatureUrl();
+ } catch (Exception e) {
+ throw new ErrorException("鎵句笉鍒扮紪鍒朵汉鐨勭鍚�");
+ }
+ if (ObjectUtils.isEmpty(writeUrl) || writeUrl.equals("")) {
+ throw new ErrorException("鎵句笉鍒版楠屼汉鐨勭鍚�");
+ }
+
+ //鑾峰彇澶嶆牳浜虹殑绛惧悕鍦板潃
+ String examineUrl;
+ try {
+ examineUrl = userMapper.selectById(examineUserId).getSignatureUrl();
+ } catch (Exception e) {
+ throw new ErrorException("鎵句笉鍒板鏍镐汉鐨勭鍚�");
+ }
+ if (ObjectUtils.isEmpty(examineUrl) || examineUrl.equals("")) {
+ throw new ErrorException("鎵句笉鍒板鏍镐汉鐨勭鍚�");
+ }
+
+
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/factory_verify.docx");
+ ConfigureBuilder builder = Configure.builder();
+ builder.useSpringEL(true);
+
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
+ new HashMap<String, Object>() {{
+ put("report", factoryVerify);
+ put("declareDate", declareDate);
+ put("factoryVerifyItemList", verifyItems);
+ put("writeUrl", Pictures.ofLocal(imgUrl + "/" + writeUrl).create());
+ put("examineUrl", Pictures.ofLocal(imgUrl + "/" + examineUrl).create());
+ put("writeDateUrl", Pictures.ofStream(DateImageUtil.createDateImage(null)).create());
+ put("examineDateUrl", Pictures.ofStream(DateImageUtil.createDateImage(null)).create());
+ }});
+
+ MultipartFile multipartFile = xwpfDocumentToMockMultipartFile(template.getXWPFDocument());
+
+ // 淇濆瓨鍒伴檮浠堕噷闈�
+ uploadFile(insOrderId, multipartFile);
+
+ }
+
+ /**
+ * XWPFDocument 杞� MultipartFile(MockMultipartFile)
+ *
+ * @param document 鏂囨。瀵硅薄
+ * @return
+ */
+ public static MultipartFile xwpfDocumentToMockMultipartFile(XWPFDocument document) {
+ String fileName = "鍘熸潗鏂欒繘璐ч獙璇佽褰�.docx";
+ try {
+ String contentType = "text/plain";
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ document.write(bos);
+ //XWPFDocument 杞� byte[]
+ byte[] barray = bos.toByteArray();
+ //byte[] 杞� InputStream
+ InputStream is = new ByteArrayInputStream(barray);
+ //InputStream 杞� MultipartFile
+ MultipartFile multipartFile = new MockMultipartFile(fileName, fileName, contentType, is);
+ return multipartFile;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+
+ /**
+ * 鏍煎紡鍖栬繘鍘傞獙璇佸唴瀹�
+ * @param basicType
+ * @return
+ */
+ private String formatBasic(String basicType) {
+ if (basicType == null) {
+ basicType = "";
+ }
+
+ //鏍煎紡鍖栧瓧娈�
+ String basic = "";
+ switch (basicType) {
+ case "1":
+ basic = "鈽戠鍚� 鈻′笉绗﹀悎 鈻′笉閫傜敤";
+ break;
+ case "2":
+ basic = "鈻$鍚� 鈽戜笉绗﹀悎 鈻′笉閫傜敤";
+ break;
+ case "3":
+ basic = "鈻$鍚� 鈻′笉绗﹀悎 鈽戜笉閫傜敤";
+ break;
+ default:
+ basic = "鈻$鍚� 鈻′笉绗﹀悎 鈻′笉閫傜敤";
+ }
+
+ return basic;
+ }
+
+ /**
+ * word杞崲pdf
+ * @param path
+ * @return
+ */
+ @Override
+ public String wordToPdfTemp(String path) {
+ try {
+ return wordToPdf(path, path.replace(".docx", "-涓存椂.pdf"));
+ } catch (Exception e) {
+ throw new ErrorException("杞崲澶辫触");
+ }
+ }
+
+ private 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鏂囦欢
+ com.aspose.words.Document doc = new com.aspose.words.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;
+ }
+
+ /**
+ * 娣诲姞宸ユ椂
+ * @param userId
+ * @param insProduct
+ * @param insOrder
+ */
+ private synchronized void addAuxiliary(Integer userId, InsProduct insProduct, InsOrder insOrder) {
+ if (insProduct.getIsBinding().equals(1)) {
+ return;
+ }
+
+ //棣栧厛鍒ゆ柇褰撳墠浜虹殑褰撳墠鏃堕棿鏄惁鏄帓鐝椂闂村唴,濡傛灉涓嶆槸灏辨槸鍔犵彮
+ LocalDateTime today = LocalDateTime.of(LocalDate.now(), LocalTime.MIDNIGHT);
+
+ //鏍¢獙濡傛灉杩欎釜浜鸿繖涓娴嬮」鐩凡缁忔坊鍔犺繃浜�
+ List<AuxiliaryOutputWorkingHours> count2s = auxiliaryOutputWorkingHoursMapper.selectList(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
+ .eq(AuxiliaryOutputWorkingHours::getCheck, userId)
+ .eq(AuxiliaryOutputWorkingHours::getInsProductId, insProduct.getId()));
+ if (CollectionUtils.isNotEmpty(count2s)) {
+ auxiliaryOutputWorkingHoursMapper.deleteBatchIds(count2s.stream().map(auxiliaryOutputWorkingHours -> auxiliaryOutputWorkingHours.getId()).collect(Collectors.toList()));
+ }
+ if (ObjectUtils.isNotEmpty(insProduct.getManHour()) && StringUtils.isNotBlank(insProduct.getLastValue())) {
+ AuxiliaryOutputWorkingHours auxiliaryOutputWorkingHours = new AuxiliaryOutputWorkingHours();
+ auxiliaryOutputWorkingHours.setInspectionItemClass(insProduct.getInspectionItemClass());//妫�娴嬮」鍒嗙被
+ auxiliaryOutputWorkingHours.setInspectionItem(insProduct.getInspectionItem());//妫�娴嬬埗椤�
+ auxiliaryOutputWorkingHours.setInspectionItemSubclass(insProduct.getInspectionItemSubclass());//妫�娴嬪瓙椤�
+ auxiliaryOutputWorkingHours.setSample(insSampleMapper.selectById(insProduct.getInsSampleId()).getSampleCode());//鏍峰搧缂栧彿
+ auxiliaryOutputWorkingHours.setOrderId(insOrder.getId());//璁㈠崟id
+ auxiliaryOutputWorkingHours.setOrderNo(insOrder.getEntrustCode());//闈炲姞鐝鎵樺崟鍙�
+ auxiliaryOutputWorkingHours.setWorkTime(insProduct.getManHour());//闈炲姞鐝伐鏃�
+ auxiliaryOutputWorkingHours.setAmount(1);//闈炲姞鐝暟閲�
+ auxiliaryOutputWorkingHours.setOutputWorkTime((ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getOvertimeWorkTime()) ? auxiliaryOutputWorkingHours.getOvertimeWorkTime() : BigDecimal.ZERO).add(ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getWorkTime()) ? auxiliaryOutputWorkingHours.getWorkTime() : BigDecimal.ZERO));//浜ч噺宸ユ椂
+ auxiliaryOutputWorkingHours.setManHourGroup(insProduct.getManHourGroup());//宸ユ椂鍒嗙粍
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+ DateTimeFormatter formatters = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+ auxiliaryOutputWorkingHours.setDateTime(LocalDateTime.now().toLocalDate().atStartOfDay().format(formatters));//鏃ユ湡
+ LocalDateTime localDateTime = LocalDateTime.now();
+ DateTime parse = DateUtil.parse(localDateTime.format(formatter));
+ auxiliaryOutputWorkingHours.setWeekDay(getWeek(localDateTime.format(formatters)));//鏄熸湡
+ auxiliaryOutputWorkingHours.setWeek(String.valueOf(DateUtil.weekOfYear(DateUtil.offsetDay(parse, 1))));//鍛ㄦ
+ auxiliaryOutputWorkingHours.setCheck(userId);//妫�娴嬩汉
+ auxiliaryOutputWorkingHours.setPrice(insProduct.getPrice());//鍗曚环
+ auxiliaryOutputWorkingHours.setSampleId(insProduct.getInsSampleId());//鏍峰搧id
+ auxiliaryOutputWorkingHours.setInsProductId(insProduct.getId());//妫�楠岄」id
+
+ auxiliaryOutputWorkingHoursMapper.insert(auxiliaryOutputWorkingHours);
+
+ }
+ }
+
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderStandardTemplateServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderStandardTemplateServiceImpl.java
new file mode 100644
index 0000000..3bf2e55
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderStandardTemplateServiceImpl.java
@@ -0,0 +1,19 @@
+package com.ruoyi.inspect.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.inspect.mapper.InsOrderStandardTemplateMapper;
+import com.ruoyi.inspect.pojo.InsOrderStandardTemplate;
+import com.ruoyi.inspect.service.InsOrderStandardTemplateService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 璁㈠崟鏍囧噯妯℃澘澶嶅埗
+ *
+ * @author zhuo
+ * @since 2024-11-05
+ */
+@Service
+public class InsOrderStandardTemplateServiceImpl extends ServiceImpl<InsOrderStandardTemplateMapper, InsOrderStandardTemplate> implements InsOrderStandardTemplateService {
+
+}
+
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..6c7dc54
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsUnPassServiceImpl.java
@@ -0,0 +1,31 @@
+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) {
+ return insUnPassMapper.pageInsUnPass(page, QueryWrappers.queryWrappers(unPassPageDto));
+ }
+}
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsUnqualifiedRetestProductServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsUnqualifiedRetestProductServiceImpl.java
new file mode 100644
index 0000000..52edb38
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsUnqualifiedRetestProductServiceImpl.java
@@ -0,0 +1,19 @@
+package com.ruoyi.inspect.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.inspect.mapper.InsUnqualifiedRetestProductMapper;
+import com.ruoyi.inspect.pojo.InsUnqualifiedRetestProduct;
+import com.ruoyi.inspect.service.InsUnqualifiedRetestProductService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 涓嶅悎鏍兼楠岄」鐩娴�
+ *
+ * @author zhuo
+ * @since 2024-09-03
+ */
+@Service
+public class InsUnqualifiedRetestProductServiceImpl extends ServiceImpl<InsUnqualifiedRetestProductMapper, InsUnqualifiedRetestProduct> implements InsUnqualifiedRetestProductService {
+
+}
+
diff --git a/inspect-server/src/main/resources/mapper/InsOrderDeviceRecordMapper.xml b/inspect-server/src/main/resources/mapper/InsOrderDeviceRecordMapper.xml
new file mode 100644
index 0000000..af17e04
--- /dev/null
+++ b/inspect-server/src/main/resources/mapper/InsOrderDeviceRecordMapper.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.ruoyi.inspect.mapper.InsOrderDeviceRecordMapper">
+
+ <!-- 璁㈠崟id鏌ヨ璁惧浣跨敤璁板綍 -->
+ <select id="selectDeviceNumber" resultType="com.ruoyi.inspect.dto.InsOrderDeviceRecordDto">
+ select dr.*,
+ d.management_number
+ from device_record dr
+ left join device d on d.id = dr.device_id
+ where dr.ins_order_id = #{insOrderId}
+ </select>
+
+ <!-- 鏍规嵁缂栧彿鏌ヨ璁惧id -->
+ <select id="selectDeviceIdsByNumbers" resultType="java.lang.Integer">
+ select id
+ from device
+ where management_number in
+ <foreach collection="deviceNumbers" index="index" open="(" separator="," close=")" item="val">
+ #{val}
+ </foreach>
+ </select>
+</mapper>
diff --git a/inspect-server/src/main/resources/mapper/InsOrderFileMapper.xml b/inspect-server/src/main/resources/mapper/InsOrderFileMapper.xml
new file mode 100644
index 0000000..ce5e6c2
--- /dev/null
+++ b/inspect-server/src/main/resources/mapper/InsOrderFileMapper.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.inspect.mapper.InsOrderFileMapper">
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <select id="getFileList" resultType="com.ruoyi.inspect.pojo.InsOrderFile">
+ select A.*
+ from (select iof.*, name
+ from ins_order_file iof
+ left join user u on iof.create_user = u.id
+ where iof.ins_order_id = #{insOrderId}) A
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+</mapper>
diff --git a/inspect-server/src/main/resources/mapper/InsProductResultMapper.xml b/inspect-server/src/main/resources/mapper/InsProductResultMapper.xml
new file mode 100644
index 0000000..0a42c74
--- /dev/null
+++ b/inspect-server/src/main/resources/mapper/InsProductResultMapper.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+ "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.inspect.mapper.InsProductResultMapper">
+ <resultMap id="BaseResultMap" type="com.ruoyi.inspect.pojo.InsProductResult">
+ <id property="id" column="id" jdbcType="INTEGER"/>
+ <result property="insProductId" column="ins_product_id" jdbcType="INTEGER"/>
+ <result property="insValue" column="ins_value" jdbcType="VARCHAR"/>
+ <result property="comValue" column="com_value" jdbcType="VARCHAR"/>
+ <result property="equipValue" column="equip_value" jdbcType="VARCHAR"/>
+ <result property="createUser" column="create_user" jdbcType="INTEGER"/>
+ <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
+ <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+ <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+ </resultMap>
+
+ <select id="selDetail" resultMap="BaseResultMap">
+ select *
+ from ins_product_result
+ where 1=1
+ <!--and ins_product_id in (#{ips})-->
+ <if test="ips != null and ips.size() > 0">
+ <!-- 浣跨敤foreach鍏冪礌鏋勫缓IN瀛愬彞 -->
+ and ins_product_id in
+ <foreach item="item" collection="ips" open="(" separator="," close=")">
+ #{item}
+ </foreach>
+ </if>
+ </select>
+
+ <!-- 鏍规嵁璁㈠崟id鏌ヨ妫�楠岀粨鏋� -->
+ <select id="selectResultByOrderId" resultType="com.ruoyi.inspect.pojo.InsProductResult">
+ select ipr.equip_value
+ from ins_product_result ipr
+ left join ins_product ip on ip.id = ipr.ins_product_id
+ left join ins_sample is2 on is2.id = ip.ins_sample_id
+ where is2.ins_order_id = #{orderId}
+ </select>
+</mapper>
diff --git a/inspect-server/src/main/resources/mapper/InsUnPassMapper.xml b/inspect-server/src/main/resources/mapper/InsUnPassMapper.xml
new file mode 100644
index 0000000..8a22fe9
--- /dev/null
+++ b/inspect-server/src/main/resources/mapper/InsUnPassMapper.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+ "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.inspect.mapper.InsUnPassMapper">
+
+ <select id="pageInsUnPass" resultType="com.ruoyi.inspect.dto.UnPassPageDto">
+ SELECT * FROM
+ ins_un_pass iu
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+</mapper>
diff --git a/performance-server/src/main/resources/mapper/PerformanceShiftMapper.xml b/performance-server/src/main/resources/mapper/PerformanceShiftMapper.xml
index 64b3dfc..56bd55b 100644
--- a/performance-server/src/main/resources/mapper/PerformanceShiftMapper.xml
+++ b/performance-server/src/main/resources/mapper/PerformanceShiftMapper.xml
@@ -11,6 +11,7 @@
<select id="performanceShiftPage" resultMap="performanceShiftPageMap">
SELECT
+ u2.name name,
GROUP_CONCAT(s.work_time, '锛�', s.shift, '锛�', s.id order by s.work_time SEPARATOR ';') AS shift_time, u2.id user_id
FROM performance_shift s
LEFT JOIN (SELECT distinct u.* from
@@ -62,6 +63,7 @@
<select id="performanceShiftYear" resultType="java.util.Map">
SELECT
+ u2.name name,
s.user_id, u2.account,
DATE_FORMAT(s.work_time, '%c') work_time,
GROUP_CONCAT(DATE_FORMAT(s.work_time, '%c'), '锛�', s.shift order by s.work_time SEPARATOR ';') month_str
@@ -90,6 +92,7 @@
<select id="performanceShiftYearList" resultType="map">
SELECT
+ u.name name,
s.user_id, u.account,
DATE_FORMAT(s.work_time, '%c') work_time,
GROUP_CONCAT(DATE_FORMAT(s.work_time, '%c'), '锛�', s.shift order by s.work_time SEPARATOR ';') month_str
@@ -111,7 +114,8 @@
<select id="performanceShiftList" resultMap="performanceShiftPageMap">
SELECT
- GROUP_CONCAT(s.work_time, '锛�', s.shift, '锛�', s.id order by s.work_time SEPARATOR ';') AS shift_time, u.id user_id, u.department
+ u.name name,
+ GROUP_CONCAT(s.work_time, '锛�', s.shift, '锛�', s.id order by s.work_time SEPARATOR ';') AS shift_time, u.id user_id
FROM performance_shift s
LEFT JOIN user u on u.id = s.user_id
<where>
--
Gitblit v1.9.3