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