From 54c480e3632fbc6fc821786e2b473bceb2f0ae4e Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期六, 22 三月 2025 15:35:29 +0800
Subject: [PATCH] 天线的电路总报告保留两位小数
---
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java | 1618 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 1,605 insertions(+), 13 deletions(-)
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
index 669f0fd..5497fbe 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java
@@ -1,36 +1,1628 @@
package com.yuanchu.mom.service.impl;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.lang.UUID;
+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.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.yuanchu.mom.common.GetLook;
import com.yuanchu.mom.common.PrintChina;
-import com.yuanchu.mom.mapper.InsOrderMapper;
-import com.yuanchu.mom.pojo.InsOrder;
-import com.yuanchu.mom.service.InsOrderPlanService;
-import com.yuanchu.mom.utils.QueryWrappers;
-import com.yuanchu.mom.vo.InsOrderPlanVO;
-import lombok.AllArgsConstructor;
+import com.yuanchu.mom.dto.*;
+import com.yuanchu.mom.exception.ErrorException;
+import com.yuanchu.mom.mapper.*;
+import com.yuanchu.mom.pojo.*;
+import com.yuanchu.mom.service.*;
+import com.yuanchu.mom.utils.*;
+import com.yuanchu.mom.vo.*;
+import org.apache.poi.hwpf.usermodel.*;
+import org.apache.poi.ss.usermodel.CellValue;
+import org.apache.poi.xssf.usermodel.XSSFCell;
+import org.apache.poi.xssf.usermodel.XSSFRow;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import javax.annotation.Resource;
+import javax.imageio.ImageIO;
+import javax.servlet.http.HttpServletRequest;
+import java.io.*;
+import java.nio.file.Files;
+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.regex.Matcher;
+import java.util.regex.Pattern;
import java.util.stream.Collectors;
+
+import org.apache.poi.hwpf.HWPFDocument;
/**
* 妫�楠屼换鍔�-涓氬姟瀹炵幇灞�
*/
@Service
-@AllArgsConstructor
+@Transactional(rollbackFor = Exception.class)
public class InsOrderPlanServiceImpl extends ServiceImpl<InsOrderMapper, InsOrder> implements InsOrderPlanService {
- private InsOrderMapper insOrderMapper;
-
+ @Resource
+ private InsSampleMapper insSampleMapper;
+ @Resource
+ private InsSampleUserMapper insSampleUserMapper;
+ @Resource
private GetLook getLook;
+ @Resource
+ private InsOrderMapper insOrderMapper;
+ @Resource
+ private InsOrderService insOrderService;
+ @Resource
+ private StandardTemplateService standardTemplateService;
+ @Resource
+ private InsOrderStateMapper insOrderStateMapper;
+ @Resource
+ private InsProductMapper insProductMapper;
+ @Resource
+ private InsOrderUserMapper insOrderUserMapper;
+ @Resource
+ private ShiftTimeMapper shiftTimeMapper;
+ @Resource
+ private PerformanceShiftMapper performanceShiftMapper;
+ @Resource
+ private WarehouseHistoryMapper warehouseHistoryMapper;
+
+ @Resource
+ private WarehouseService warehouseService;
+
+ @Value("${wordUrl}")
+ private String wordUrl;
+
+ @Resource
+ WordUtils wordUtils;
+
+ @Resource
+ private InsReportMapper insReportMapper;
+
+ @Resource
+ private InsProductResultMapper insProductResultMapper;
+
+ @Resource
+ private InsProductResult2Mapper insProductResult2Mapper;
+
+ @Resource
+ private InsProductUserMapper insProductUserMapper;
+
+ @Resource
+ private InsUnPassService insUnPassService;
+
+ @Resource
+ AuxiliaryOutputWorkingHoursMapper auxiliaryOutputWorkingHoursMapper;
+
+ @Resource
+ QYWXApi qywxApi;
+
+ @Resource
+ private InformationNotificationService informationNotificationService;
+
+ @Resource
+ private UserMapper userMapper;
+
+ @Value("${file.path}")
+ private String imgUrl;
+
+ @Resource
+ private InsOrderFileMapper insOrderFileMapper;
+
+ @Resource
+ FuSheUtils fuSheUtils;
+
+ @Resource
+ DianLuUtils dianLuUtils;
@Override
- public Map<String, Object> selectInsOrderPlanList(Page page, InsOrder insOrder) {
+ public Map<String, Object> selectInsOrderPlanList(Page page, InsOrderPlanDTO insOrderPlanDTO) {
+ Map<String, Object> map = new HashMap<>();
+ map.put("head", PrintChina.printChina(InsOrderPlanVO.class));
+ Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId(null);
+ String laboratory = null;
+ String userName = null;
+ if (ObjectUtil.isNotEmpty(insOrderPlanDTO.getUserId())) {
+ userName = userMapper.selectById(map1.get("userId")).getName();
+ insOrderPlanDTO.setUserId(null);
+ }
+ String sonLaboratory = insOrderPlanDTO.getSonLaboratory();//璇曢獙瀹�
+ insOrderPlanDTO.setSonLaboratory(null);
+ IPage<InsOrderPlanVO> insOrderPage = insSampleMapper.findInsSampleAndOrder(page, QueryWrappers.queryWrappers(insOrderPlanDTO), userName, sonLaboratory, laboratory);
+ map.put("body", insOrderPage);
+ return map;
+ }
+
+ @Override
+ public Map<String, Object> inspectionOrderDetailsTaskSwitching(Page page, InsOrderPlanDTO insOrderPlanDTO) {
+ Map<String, Object> map = new HashMap<>();
+ map.put("head", PrintChina.printChina(InsOrderPlanTaskSwitchVo.class));
+ Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId(null);
+ Integer userId = map1.get("userId");
+ User user = userMapper.selectById(map1.get("userId"));//褰撳墠鐧诲綍鐨勪汉
+ 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);
+ map.put("body", insOrderPage);
+ return map;
+ }
+
+ //璁ら浠诲姟
+ @Override
+ public boolean claimInsOrderPlan(InsOrderPlanDTO entity) {
+ if (Objects.isNull(entity)) {
+ return false;
+ }
+ Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId(null);
+ Integer userId = map1.get("userId");
+ InsSampleUser insSampleUser = new InsSampleUser(entity.getInsSampleId().intValue(), userId, 0, entity.getSonLaboratory());
+ return insSampleUserMapper.insert(insSampleUser) > 0;
+ }
+
+ @Override
+ public Map<String, Object> doInsOrder(Integer sampleId, String laboratory) {
+ InsSample insSample = insSampleMapper.selectById(sampleId);
+ InsOrder insOrder = new InsOrder();
+ insOrder.setId(insSample.getInsOrderId());
+ InsOrder order = insOrderMapper.selectById(insSample.getInsOrderId());
+ if (BeanUtil.isEmpty(order.getInsTime())) {
+ insOrder.setInsTime(LocalDateTime.now());//璁㈠崟鐨勬楠屾椂闂�
+ insOrderMapper.updateById(insOrder);
+ }
+ InsOrderState orderState = insOrderStateMapper.selectOne(Wrappers.<InsOrderState>lambdaQuery()
+ .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+ .eq(InsOrderState::getInsSampleId, sampleId)
+ .eq(InsOrderState::getLaboratory, laboratory));
+ if (ObjectUtils.isEmpty(orderState.getInsTime())) {
+ //鏇存柊妫�楠屼换鍔¤〃鐨勬楠屾椂闂�
+ insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
+ .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+ .eq(InsOrderState::getInsSampleId, sampleId)
+ .eq(InsOrderState::getLaboratory, laboratory)
+ .set(InsOrderState::getInsTime, LocalDateTime.now())
+ .set(InsOrderState::getInsState, 1));
+ }
+ Map<String, Object> map = insOrderService.getInsOrderAndSample(sampleId, laboratory);
+ List<SampleProductDto> list = JSON.parseArray(JSON.toJSONString(map.get("sampleProduct")), SampleProductDto.class);
+ map.put("sampleProduct", list);
+ return map;
+ }
+
+ @Override
+ public List<InsProduct> getInsProduct(Integer id, Integer type, String laboratory, HttpServletRequest request) {
+ List<InsProduct> insProducts = new ArrayList<>();
+ switch (type) {
+ case 0:
+ //鏍峰搧
+ insProducts = insSampleMapper.getInsProduct1(id, laboratory);
+ if (insProducts.size() == 0) {
+ insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
+ .eq(InsProduct::getInsSampleId, id)
+ .eq(InsProduct::getState, 1)
+ .eq(InsProduct::getSonLaboratory, laboratory));
+ for (InsProduct insProduct : insProducts) {
+ List<InsProductResult2> insProductResult2List = insProductResult2Mapper.selectList(Wrappers.<InsProductResult2>lambdaQuery()
+ .eq(InsProductResult2::getInsProductId, insProduct.getId()).isNull(InsProductResult2::getNum));
+ insProduct.setInsProductResult2(insProductResult2List);
+ InsProductResult insProductResult = insProductResultMapper.selectOne(Wrappers.<InsProductResult>lambdaQuery()
+ .eq(InsProductResult::getInsProductId, insProduct.getId()).isNull(InsProductResult::getNum));
+ insProduct.setInsProductResult(insProductResult);
+ }
+ }
+ break;
+ case 1:
+ //鍏夌氦甯�
+ break;
+ case 2:
+ //鍏夌氦
+ break;
+ case 3:
+ //濂楃
+ break;
+ }
+ Set<Integer> set = new HashSet<>();
+ Map<Integer, String> map2 = new HashMap<>();
+ if (BeanUtil.isEmpty(insProducts)) return null;
+ getTemplateThing(set, map2, insProducts);
+ return insProducts;
+ }
+
+ @Override
+ public List<InsProduct> getInsProduct2(Integer id, Integer type, String laboratory, HttpServletRequest request, Integer num) {
+ List<InsProduct> insProducts = new ArrayList<>();
+ switch (type) {
+ case 0:
+ //鏍峰搧
+ insProducts = insSampleMapper.get2InsProduct1(id, laboratory, num);
+ if (insProducts.size() == 0) {
+ throw new ErrorException("褰撳墠妫�楠屾暟鎹繕娌℃湁淇濆瓨,淇濆瓨涔嬪悗鏈夋暟鎹巻鍙�");
+ }
+ break;
+ case 1:
+ //鍏夌氦甯�
+ break;
+ case 2:
+ //鍏夌氦
+ break;
+ case 3:
+ //濂楃
+ break;
+ }
+ Set<Integer> set = new HashSet<>();
+ Map<Integer, String> map2 = new HashMap<>();
+ if (BeanUtil.isEmpty(insProducts)) return null;
+ getTemplateThing(set, map2, insProducts);
+ return insProducts;
+ }
+
+ @Override
+ public List<String> checkSubmitPlan(Integer sampleId, String laboratory) {
+ List<String> collect = new ArrayList<>();
+ List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
+ .eq(InsProduct::getInsSampleId, sampleId)
+ .eq(InsProduct::getSonLaboratory, laboratory)
+ .eq(InsProduct::getState, 1)
+ .eq(InsProduct::getInsResult, 0));
+ if (insProducts.size() > 0) {
+ collect = insProducts.stream().map(insProduct -> {
+ return insProduct.getInspectionItem() + "-" + insProduct.getInspectionItemSubclass();
+ }).collect(Collectors.toList());
+ }
+ return collect;
+ }
+
+ @Override
+ public Map<String, Object> getFileList(Page page, InsOrderFile insOrderFile) {
+ Map<String, Object> map = new HashMap<>();
+ map.put("head", PrintChina.printChina(InsOrderFile.class));
+ Integer insOrderId = insOrderFile.getInsOrderId();
+ insOrderFile.setInsOrderId(null);
+ String sonLaboratory = null;
+ Integer sampleId = null;
+ if (ObjectUtils.isNotEmpty(insOrderFile.getSonLaboratory())) {
+ sonLaboratory = insOrderFile.getSonLaboratory();
+ insOrderFile.setSonLaboratory(null);
+ }
+ if (ObjectUtils.isNotEmpty(insOrderFile.getInsSampleId())) {
+ sampleId = insOrderFile.getInsSampleId();
+ insOrderFile.setInsSampleId(null);
+ }
+ IPage<InsOrderFile> insOrderFileIPage = insOrderFileMapper.getFileList(page, QueryWrappers.queryWrappers(insOrderFile), insOrderId, sonLaboratory, sampleId);
+ map.put("body", insOrderFileIPage);
+ return map;
+ }
+
+ @Override
+ public Object uploadFile(Integer orderId, MultipartFile file, String sonLaboratory, Integer sampleId) {
+ InsOrder insOrder = insOrderMapper.selectById(orderId);
+ String urlString;
+ String pathName;
+ String path;
+ String filename = file.getOriginalFilename();
+ String contentType = file.getContentType();
+ InsOrderFile insOrderFile = new InsOrderFile();
+ insOrderFile.setInsOrderId(orderId);
+ if (ObjectUtils.isNotEmpty(sampleId)) {
+ insOrderFile.setInsSampleId(sampleId);
+ }
+ if (ObjectUtils.isNotEmpty(sonLaboratory)) {
+ insOrderFile.setSonLaboratory(sonLaboratory);
+ }
+ insOrderFile.setFileName(filename);
+ if (contentType != null && contentType.startsWith("image/")) {
+ // 鏄浘鐗�
+ path = imgUrl;
+ insOrderFile.setType(1);
+ } else {
+ // 鏄枃浠�
+ path = wordUrl;
+ insOrderFile.setType(2);
+ }
+ try {
+ File realpath = new File(path);
+ if (!realpath.exists()) {
+ realpath.mkdirs();
+ }
+ pathName = UUID.randomUUID() + "_" + file.getOriginalFilename().replace("#", "&");
+ urlString = realpath + "/" + pathName;
+ file.transferTo(new File(urlString));
+ insOrderFile.setFileUrl(pathName);
+ insOrderFileMapper.insert(insOrderFile);
+ String[] split = filename.split("\\.");
+ if (ObjectUtils.isNotEmpty(sonLaboratory) && sonLaboratory.equals("杩戝満") && split[split.length - 1].equals("csv")) {
+ fuSheUtils.getFuSheWord1(sonLaboratory, insOrderFile);
+ } else if (ObjectUtils.isNotEmpty(sonLaboratory) && sonLaboratory.equals("杩滃満") && split[split.length - 1].equals("xlsx")) {
+ fuSheUtils.getFuSheWord2(sonLaboratory, insOrderFile);
+ } else if (ObjectUtils.isNotEmpty(sonLaboratory) && sonLaboratory.equals("鐢佃矾璇曢獙") && split[split.length - 1].equals("xlsx") && filename.contains("浜よ皟")) {
+ dianLuUtils.readDianLuFile1(sampleId, insOrderFile);
+ } else if (ObjectUtils.isNotEmpty(sonLaboratory) && sonLaboratory.equals("鐢佃矾璇曢獙") && split[split.length - 1].equals("csv") && filename.contains("椹绘尝")) {
+ dianLuUtils.readDianLuFile2(sampleId, insOrderFile);
+ } else if (ObjectUtils.isNotEmpty(sonLaboratory) && sonLaboratory.equals("鐢佃矾璇曢獙") && split[split.length - 1].equals("csv") && insOrder.getSampleType().equals("鏃犳簮鍣ㄤ欢")) {
+ dianLuUtils.readDianLuFile3(sampleId, insOrderFile);
+ }
+ // 鐢佃矾瀹為獙杩斿洖鏂囦欢鍚�
+ if(ObjectUtils.isNotEmpty(sonLaboratory) && sonLaboratory.equals("鐢佃矾璇曢獙")){
+ return pathName;
+ }
+ // 闇囧姩doc鏂囦欢瑙f瀽
+ if(filename.contains(".doc") && sonLaboratory.equals("鎸姩")){
+ return docAnalysis(urlString,orderId,sampleId,file.getOriginalFilename());
+ }
+ } catch (Exception e) {
+ throw new ErrorException(e.getMessage());
+ }
+ return 0;
+ }
+
+ @Override
+ public List<String> upPlanUser2(Integer sampleId) {
+ List<String> sonLaboratory = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
+ .eq(InsProduct::getState, 1)
+ .eq(InsProduct::getInsSampleId, sampleId))
+ .stream().map(InsProduct::getSonLaboratory).distinct().collect(Collectors.toList());
+ return sonLaboratory;
+ }
+
+ @Override
+ public int deleteInsContext(InsProductResultVo insProductResultVo) {
+ return insProductResult2Mapper.delete(Wrappers.<InsProductResult2>lambdaQuery()
+ .eq(InsProductResult2::getFrequency, insProductResultVo.getFrequency())
+ .eq(InsProductResult2::getNum, insProductResultVo.getNum())
+ .in(InsProductResult2::getInsProductId, insProductResultVo.getProductIds()));
+ }
+
+ //鎵爜鎶ユ
+ @Override
+ public int scanInsOrderState(String sonLaboratory, String sampleCode, String trees, String entrustCode) {
+ /*鏍峰搧鍏ュ簱*/
+ warehouseService.inWarehouse(trees, sampleCode, entrustCode);
+ /*鏂板妫�楠屼换鍔�*/
+ //鍏堝垽鏂鏍峰搧鏄惁鏈夎繖涓珯鐐圭殑椤圭洰
+ List<InsOrder> insOrders = insOrderMapper.selectList(Wrappers.<InsOrder>lambdaQuery().eq(InsOrder::getEntrustCode, entrustCode));
+ InsSample insSample = insSampleMapper.selectOne(Wrappers.<InsSample>lambdaQuery()
+ .eq(InsSample::getSampleCode, sampleCode)
+ .eq(InsSample::getInsOrderId, insOrders.get(0).getId()));
+ List<String> collect = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
+ .eq(InsProduct::getState, 1)
+ .eq(InsProduct::getInsSampleId, insSample.getId())).stream().map(InsProduct::getSonLaboratory).collect(Collectors.toList());
+ if (!collect.contains(sonLaboratory)) {
+ throw new ErrorException("璇ユ牱鍝佹病鏈�" + sonLaboratory + "绔欑偣鐨勭浉鍏抽」鐩�,璇锋煡鐪嬩笅鍗曡鎯�!");
+ }
+ //鍒ゆ柇璇ヨ鍗曟槸鍚︾珯鐐逛换鍔℃湁缁撴潫璇曢獙(鍙浠讳竴浠诲姟缁撴潫璇曢獙閮戒笉鑳藉啀娆¤瘯楠�)
+ List<InsOrderState> orderStates = insOrderStateMapper.selectList(Wrappers.<InsOrderState>lambdaQuery()
+ .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+ .eq(InsOrderState::getInsState, 5));
+ if (CollectionUtils.isNotEmpty(orderStates)) {
+ throw new ErrorException("璇ヨ鍗曠珯鐐圭殑浠诲姟宸茬粡缁撴潫璇曢獙,鏃犳硶鍐嶆杩涜璇曢獙!");
+ }
+ InsOrderState orderState = insOrderStateMapper.selectOne(Wrappers.<InsOrderState>lambdaQuery()
+ .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+ .eq(InsOrderState::getInsSampleId, insSample.getId())
+ .eq(InsOrderState::getLaboratory, sonLaboratory));
+ if (ObjectUtils.isNotEmpty(orderState)) {
+ //缁х画璇曢獙
+ if (orderState.getInsState() == 6) {
+ orderState.setInsState(0);
+ orderState.setNum(orderState.getNum() + 1);//閫掑
+ insOrderStateMapper.updateById(orderState);
+ }
+ } else {
+ InsOrderState insOrderState = new InsOrderState();
+ insOrderState.setInsOrderId(insSample.getInsOrderId());
+ insOrderState.setInsSampleId(insSample.getId());
+ insOrderState.setLaboratory(sonLaboratory);
+ insOrderState.setInsState(0);
+ insOrderState.setNum(1);//鍒濆鏄涓�娆�
+ insOrderStateMapper.insert(insOrderState);
+ }
+ return 1;
+ }
+
+ //鎵爜鍑哄簱
+ @Override
+ public int outInsOrderState(String sonLaboratory, String sampleCode, String entrustCode) {
+ //鍒ゆ柇璇ユ牱鍝佺殑妫�楠屼换鍔℃槸鍚﹀凡缁忕粨鏉�(缁х画璇曢獙鎴栬�呮槸缁撴潫璇曢獙)
+ //鍏堝垽鏂鏍峰搧鏄惁鏈夎繖涓珯鐐圭殑椤圭洰
+ List<InsOrder> insOrders = insOrderMapper.selectList(Wrappers.<InsOrder>lambdaQuery().eq(InsOrder::getEntrustCode, entrustCode));
+ InsSample insSample = insSampleMapper.selectOne(Wrappers.<InsSample>lambdaQuery()
+ .eq(InsSample::getSampleCode, sampleCode)
+ .eq(InsSample::getInsOrderId, insOrders.get(0).getId()));
+ List<String> collect = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
+ .eq(InsProduct::getState, 1)
+ .eq(InsProduct::getInsSampleId, insSample.getId())).stream().map(InsProduct::getSonLaboratory).collect(Collectors.toList());
+ if (!collect.contains(sonLaboratory)) {
+ throw new ErrorException("璇ユ牱鍝佹病鏈�" + sonLaboratory + "绔欑偣鐨勭浉鍏抽」鐩�,璇锋煡鐪嬩笅鍗曡鎯�!");
+ }
+ //鍒ゆ柇璇ヨ鍗曟槸鍚︾珯鐐逛换鍔℃湁(缁х画璇曢獙鎴栬�呮槸缁撴潫璇曢獙)
+ List<InsOrderState> orderStates = insOrderStateMapper.selectList(Wrappers.<InsOrderState>lambdaQuery()
+ .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+ .eq(InsOrderState::getInsState, 5));//缁撴潫璇曢獙
+ if (CollectionUtils.isEmpty(orderStates)) {
+ List<InsOrderState> orderStates1 = insOrderStateMapper.selectList(Wrappers.<InsOrderState>lambdaQuery()
+ .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+ .eq(InsOrderState::getInsSampleId, insSample.getId())
+ .eq(InsOrderState::getLaboratory, sonLaboratory)
+ .eq(InsOrderState::getInsState, 6));//缁х画璇曢獙
+ if (CollectionUtils.isEmpty(orderStates1)) {
+ throw new ErrorException("璇ユ牱鍝佺殑妫�楠屼换鍔¤繕娌℃湁缁撴潫璇曢獙鎴栫户缁瘯楠�,鏆傛椂鏃犳硶鍑哄簱!");
+ }
+ }
+ boolean a = true;
+ warehouseService.outWarehouse(sampleCode, a, entrustCode);
+ return 0;
+ }
+
+ @Override
+ public List<InsOrderUser> getInsOrderUserList(Integer insOrderStateId) {
+ return insOrderUserMapper.getInsOrderUserList(insOrderStateId);
+ }
+
+ private static final String splitIdentifier = "@-@"; // 鑷畾涔夊敮涓�鏍囪瘑鍒嗗壊绗�
+
+ //棰勮鏂囦欢
+ @Override
+ public Object preview(Integer id) throws Exception {
+ InsOrderFile insOrderFile = insOrderFileMapper.selectById(id);
+ File file = new File(wordUrl + "/" + insOrderFile.getFileUrl());
+ StringBuilder stringBuilder = new StringBuilder();
+ // 鍒涘缓 reader
+ try (BufferedReader br = Files.newBufferedReader(file.toPath())) {
+ // CSV鏂囦欢鐨勫垎闅旂
+ String DELIMITER = ",";
+ // 鎸夎璇诲彇
+ String line;
+ while ((line = br.readLine()) != null) {
+ // 鍒嗗壊
+ String[] columns = line.split(DELIMITER);
+ // 鎵撳嵃琛�
+ stringBuilder.append(String.join(splitIdentifier, columns)).append("\n");
+ }
+ } catch (Exception ex) {
+ List<Object> list = new ArrayList<>();
+ //鍒涘缓宸ヤ綔绨垮璞�
+ XSSFWorkbook xssfWorkbook = new XSSFWorkbook(new FileInputStream(file));
+ //鑾峰彇宸ヤ綔绨夸笅sheet鐨勪釜鏁� 鍙鍙栫涓�涓猻heet
+ int sheetNum = xssfWorkbook.getNumberOfSheets();
+ //閬嶅巻宸ヤ綔绨夸腑鐨勬墍鏈夋暟鎹�
+ for (int i = 0; i < sheetNum; i++) {
+ Map<String, Object> map = new HashMap<>();
+ StringBuilder result = new StringBuilder();
+ XSSFSheet sheet = xssfWorkbook.getSheetAt(i);
+ //鑾峰彇鏈�鍚庝竴琛岀殑num锛屽嵆鎬昏鏁般�傛澶勪粠0寮�濮�
+ int maxRow = sheet.getLastRowNum();
+ for (int row = 0; row <= maxRow; row++) {
+ XSSFRow xssfRow = sheet.getRow(row);
+ //鑾峰彇鏈�鍚庡崟鍏冩牸num锛屽嵆鎬诲崟鍏冩牸鏁� ***娉ㄦ剰锛氭澶勪粠1寮�濮嬭鏁�***
+ int maxRol = sheet.getRow(row).getLastCellNum();
+ StringBuilder aLine = new StringBuilder();
+ /*for (int rol = 0; rol < maxRol; rol++) {
+ aLine.append(sheet.getRow(row).getCell(rol)).append(",");
+ }*/
+ for (int rol = 0; rol < maxRol; rol++) {
+ XSSFCell cell = xssfRow.getCell(rol);
+ if (cell == null) {
+ aLine.append(",");
+ } else {
+ switch (cell.getCellType()) {
+ case FORMULA:
+ // 璁$畻鍏紡骞惰幏鍙栫粨鏋�
+ CellValue cellValue = xssfWorkbook.getCreationHelper().createFormulaEvaluator().evaluate(cell);
+ switch (cellValue.getCellType()) {
+ case NUMERIC:
+ String formattedValue = String.format("%.4f", cellValue.getNumberValue());
+ aLine.append(formattedValue);
+ break;
+ case STRING:
+ aLine.append(cellValue.getStringValue());
+ break;
+ case BOOLEAN:
+ aLine.append(cellValue.getBooleanValue());
+ break;
+ case ERROR:
+ aLine.append("#ERR!");
+ break;
+ default:
+ aLine.append("");
+ break;
+ }
+ break;
+ case NUMERIC:
+ String formattedValue = String.format("%.4f", cell.getNumericCellValue());
+ aLine.append(formattedValue);
+ break;
+ case STRING:
+ aLine.append(cell.getStringCellValue());
+ break;
+ case BOOLEAN:
+ aLine.append(cell.getBooleanCellValue());
+ break;
+ case ERROR:
+ aLine.append("#ERR!");
+ break;
+ default:
+ aLine.append("");
+ break;
+ }
+ aLine.append(",");
+ }
+ }
+ String substring = aLine.substring(0, aLine.length() - 1);
+ result.append(substring).append("\n");
+ }
+ map.put("sheetName", sheet.getSheetName());
+ map.put("content", result.toString());
+ list.add(map);
+ }
+ return list;
+ }
+ return stringBuilder.toString();
+ }
+
+ //妯$増淇濆瓨妫�楠屽唴瀹�
+ @Override
+ public void saveInsContext(Map<String, Object> insContext, Integer num) {
+ Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
+ CompletableFuture.supplyAsync(() -> {
+ insContext.forEach((k, v) -> {
+ JSONObject jo = JSON.parseObject(JSON.toJSONString(v));
+ InsProduct insProduct = new InsProduct();
+ insProduct.setId(Integer.parseInt(k));
+ List<InsProductResult> results = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery()
+ .eq(InsProductResult::getNum, num)
+ .eq(InsProductResult::getInsProductId, insProduct.getId()));
+ InsProductResult result;
+ if (CollectionUtils.isEmpty(results)) {
+ result = new InsProductResult();
+ } else {
+ result = results.get(0);
+ }
+ result.setInsProductId(Integer.parseInt(k));
+ result.setNum(num);
+ //妫�楠屽��
+ 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) {
+ }
+ }
+ result.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);
+ }
+ result.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("");//''
+ }
+ //璇曢獙鍓嶆牱鍝佹鏌�
+ try {
+ JSONObject resValue = JSON.parseObject(JSON.toJSONString(jo.get("beforeCheck")));
+ if (resValue.get("v") != null) {
+ Object o = JSON.parseObject(JSON.toJSONString(resValue.get("v"))).get("v");
+ result.setBeforeCheck(o.equals("") ? null : (o.toString()));
+ }
+ } catch (Exception e) {
+ result.setBeforeCheck("");//''
+ }
+ //璇曢獙鍚庢牱鍝佹鏌�
+ try {
+ JSONObject resValue = JSON.parseObject(JSON.toJSONString(jo.get("afterCheck")));
+ if (resValue.get("v") != null) {
+ Object o = JSON.parseObject(JSON.toJSONString(resValue.get("v"))).get("v");
+ result.setAfterCheck(o.equals("") ? null : (o.toString()));
+ }
+ } catch (Exception e) {
+ result.setAfterCheck("");//''
+ }
+ //瀹為獙缁撴灉
+ try {
+ JSONObject resValue = JSON.parseObject(JSON.toJSONString(jo.get("testResult")));
+ if (resValue.get("v") != null) {
+ Object o = JSON.parseObject(JSON.toJSONString(resValue.get("v"))).get("v");
+ result.setTestResult(o.equals("") ? null : (o.toString()));
+ }
+ } catch (Exception e) {
+ result.setTestResult("");//''
+ }
+ //璁惧缂栧彿
+ 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);
+ }
+ result.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);
+ }
+ result.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 (BeanUtil.isEmpty(result.getId())) {
+ result.setCreateUser(userId);
+ result.setUpdateUser(userId);
+ insProductResultMapper.insert(result);
+ } else {
+ result.setUpdateUser(userId);
+ result.setUpdateTime(LocalDateTime.now());
+ insProductResultMapper.updateById(result);
+ }
+ insProduct.setUpdateUser(userId);
+ insProductMapper.updateById(insProduct);
+ insProductUserMapper.insert(new InsProductUser(null, userId, LocalDateTime.now(), insProduct.getId()));
+ insProduct = insProductMapper.selectById(insProduct);
+ 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 (l == l1) {
+ //濡傛灉鎵�鏈夐」鐩兘鏈夌粨璁�,閭d箞璇ユ牱鍝佺姸鎬佸凡妫�
+ insSample.setInsState(2);
+ }
+ insSampleMapper.updateById(insSample);
+ /*鏍¢獙涓�涓媟esult琛�*/
+ List<InsProductResult> insProductResults = insProductResultMapper.selectList(Wrappers.<InsProductResult>lambdaQuery()
+ .eq(InsProductResult::getNum, num)
+ .eq(InsProductResult::getInsProductId, insProduct.getId()));
+ if (insProductResults.size() > 1) {
+ for (int i = 1; i < insProductResults.size(); i++) {
+ insProductResultMapper.deleteById(insProductResults.get(i));
+ }
+ }
+ });
+ return insContext.keySet().stream().findFirst().orElse(null);
+ }).thenAccept(res -> {
+ if (res != null) {
+ int pId = Integer.parseInt(res.replaceAll("\\D+", ""));
+ InsProduct insProduct = insProductMapper.selectById(pId);
+ // 閫氳繃鏍锋湰id鑾峰彇璁㈠崟id
+ InsSample insSample = insSampleMapper.selectById(insProduct.getInsSampleId());
+ int orderId = insSample.getInsOrderId();
+ int count = insProductMapper.selectInsProductCountByOrderId(insSample.getId());
+ if (count == 0) {
+ insOrderStateMapper.update(new InsOrderState(), Wrappers.<InsOrderState>lambdaUpdate()
+ .eq(InsOrderState::getInsOrderId, orderId)
+ .eq(InsOrderState::getInsSampleId, insSample.getId())
+ .eq(InsOrderState::getLaboratory, insProduct.getSonLaboratory())
+ .set(InsOrderState::getInsState, 2));
+ }
+ }
+ }).exceptionally(e -> {
+ e.printStackTrace();
+ return null;
+ });
+ }
+
+ //鐢佃矾璇曢獙鐨勪繚瀛樻楠屽唴瀹�
+ @Override
+ public List<Integer> saveInsContext2(InsProductResultDto insProductResultDtos) {
+ if (ObjectUtils.isEmpty(insProductResultDtos.getFrequency())) {
+ throw new ErrorException("棰戠巼涓嶈兘涓虹┖");
+ }
+ Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
+ //鏌ヨ鏍峰搧淇℃伅
+ InsSample insSample = insSampleMapper.selectById(insProductResultDtos.getSampleId());
+ //鏌ヨ妫�楠屽崟淇℃伅
+ InsOrderState orderState = insOrderStateMapper.selectOne(Wrappers.<InsOrderState>lambdaQuery()
+ .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+ .eq(InsOrderState::getInsSampleId, insProductResultDtos.getSampleId())
+ .eq(InsOrderState::getLaboratory, insProductResultDtos.getSonLaboratory())
+ .orderByDesc(InsOrderState::getId)
+ .last("LIMIT 1"));// 纭繚鍙彇涓�鏉¤褰�
+ List<Integer> list = new ArrayList<>();
+ /*鏂板妫�楠岄」鐩楠屽�艰褰曡〃(閲囧彇鍏堝垹鍚庡)*/
+ insProductResult2Mapper.delete(Wrappers.<InsProductResult2>lambdaQuery()
+ .in(InsProductResult2::getInsProductId, insProductResultDtos.getInsProductResult2s().stream().map(InsProductResult2::getInsProductId).distinct().collect(Collectors.toList()))
+ .eq(InsProductResult2::getNum, orderState.getNum())
+ .eq(InsProductResult2::getFrequency, insProductResultDtos.getFrequency()));
+ List<InsProductResult2> result2s = new ArrayList<>();
+ List<InsProductUser> insProductUsers = new ArrayList<>();
+ for (InsProductResult2 insProductResult2 : insProductResultDtos.getInsProductResult2s()) {
+ InsProduct insProduct = new InsProduct();
+ insProduct.setId(insProductResult2.getInsProductId());//椤圭洰id
+ InsProductResult2 result2 = new InsProductResult2();
+ result2.setNum(orderState.getNum());
+ result2.setInsProductId(insProductResult2.getInsProductId());
+ //棰戠巼
+ result2.setFrequency(insProductResultDtos.getFrequency());
+ //棰戠偣
+ if (insProductResult2.getOften() != null) {
+ result2.setOften(insProductResult2.getOften());
+ }
+ //绔彛
+ if (insProductResult2.getPort() != null) {
+ result2.setPort(insProductResult2.getPort());
+ }
+ //瑙掑害
+ if (insProductResult2.getAngle() != null) {
+ result2.setAngle(insProductResult2.getAngle());
+ }
+ //璁惧缂栧彿
+ if (insProductResult2.getEquipValue() != null) {
+ result2.setEquipValue(insProductResult2.getEquipValue());
+ }
+ //璁惧鍚嶇О
+ if (insProductResult2.getEquipName() != null) {
+ result2.setEquipName(insProductResult2.getEquipName());
+ }
+ insProduct = insProductMapper.selectById(insProduct.getId());
+ //鍊�
+ if (insProductResult2.getValue() != null) {
+ result2.setValue(insProductResult2.getValue());
+ //缁撹
+ int ressult = 1;
+ String valueStr = insProductResult2.getValue();
+ String regex = "[\u4e00-\u9fa5]";
+ if (!insProduct.getAsk().contains(",")) {
+ if (insProduct.getAsk().equals("/") || Pattern.compile(regex).matcher(insProduct.getAsk()).find()) {
+ ressult = 3; //涓嶅垽瀹�
+ } else if (!isValueValid(valueStr, new String[]{insProduct.getAsk()})) {
+ ressult = 0; //涓嶅悎鏍�
+ }
+ } else {
+ // 濡傛灉瑕佹眰鍊兼槸(2掳鈮�20,7掳鈮�25,12掳鈮�25)杩欑鎯呭喌
+ String[] askParts = insProduct.getAsk().split(",");
+ String[] angles = insProductResult2.getAngle().split(",");
+ for (String s : askParts) {
+ String[] askSplit = s.split("掳");
+ String angleKey = askSplit[0];
+ String angleValue = askSplit[1];
+ for (int i = 0; i < angles.length; i++) {
+ if (angles[i].split("掳")[0].equals(angleKey)) {
+ try {
+ String s1 = valueStr.substring(1, valueStr.length() - 1).split("\\],\\[")[i];
+ if (!s1.startsWith("[")) {
+ s1 = "[" + s1;
+ }
+ if (!s1.endsWith("]")) {
+ s1 = s1 + "]";
+ }
+ if (!isValueValid("[" + s1 + "]", new String[]{angleValue})) {
+ ressult = 0; // 涓嶅悎鏍�
+ break;
+ }
+ } catch (Exception e) {
+ } finally {
+ continue;
+ }
+ }
+ }
+ }
+ }
+ result2.setResult(ressult);
+ list.add(ressult);
+ }
+ result2.setCreateUser(userId);
+ result2.setUpdateUser(userId);
+ result2s.add(result2);
+ //insProductResult2Mapper.insert(result2);
+ //insProduct.setUpdateUser(userId);
+ //insProducts.add(insProduct);
+ //insProductMapper.updateById(insProduct);
+ insProductUsers.add(new InsProductUser(null, userId, LocalDateTime.now(), insProduct.getId()));
+ //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 (l == l1) {
+ //濡傛灉鎵�鏈夐」鐩兘鏈夌粨璁�,閭d箞璇ユ牱鍝佺姸鎬佸凡妫�
+ insSample.setInsState(2);
+ }
+ }
+ insProductResult2Mapper.saveBatch(result2s);
+ insProductUserMapper.saveBatch(insProductUsers);
+ insSampleMapper.updateById(insSample);
+ /*鍒ゆ柇璇ョ珯鐐圭殑妫�楠岄」鐩槸鍚﹀叏閮ㄥ凡妫�*/
+ int count = insProductMapper.selectInsProductCountByOrderId(insSample.getInsOrderId());
+ if (count == 0) {
+ insOrderStateMapper.update(new InsOrderState(), Wrappers.<InsOrderState>lambdaUpdate()
+ .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+ .eq(InsOrderState::getInsSampleId, insProductResultDtos.getSampleId())
+ .eq(InsOrderState::getLaboratory, insProductResultDtos.getSonLaboratory())
+ .set(InsOrderState::getInsState, 2));
+ }
+ return list;
+ }
+
+ //鐢佃矾璇曢獙鐨勪繚瀛樻楠屽唴瀹�(杩斿洖/鎻愪氦)
+ @Override
+ public int saveInsContext2s(InsProductResultDtos insProductResultDtos) {
+ for (InsProductResultDto insProductResultDto : insProductResultDtos.getInsProductResultDtos()) {
+ saveInsContext2(insProductResultDto);
+ }
+ return 1;
+ }
+
+ /**
+ * 闇囧姩doc鏂囦欢瑙f瀽
+ * @param urlString
+ * @param orderId
+ * @param sampleId
+ * @param originFileName
+ * @return
+ */
+ private Map<String, String> docAnalysis(String urlString,Integer orderId,Integer sampleId,String originFileName) {
+ Map<String, String> analysisMap = new HashMap<>();
+ try {
+ File file = new File(urlString);
+ HWPFDocument document = new HWPFDocument(new FileInputStream(file));
+ Range range = document.getRange();
+ TableIterator tableIterator = new TableIterator(range);
+ List<Table> tableList = new ArrayList<>();
+ while (tableIterator.hasNext()) {
+ tableList.add(tableIterator.next());
+ }
+ for (int tableIndex = 0; tableIndex < tableList.size(); tableIndex++) {
+ // 鍙栫涓�涓〃鍗曢檺鍒跺弬鏁扮殑 鎸姩鍙板瀷鍙枫�佽繍鍔ㄩ儴浠剁瓑鏁堣川閲忋�佽瘯浠惰川閲忔暟鍊�
+ if(tableIndex == 0){
+ Table table = tableList.get(0);
+ for (int i = 0; i < table.numRows(); i++) {
+ String columnText = ObjectUtils.isEmpty(table.getRow(i).getCell(0))? "" : table.getRow(i).getCell(0).text();
+ String columnValue = ObjectUtils.isEmpty(table.getRow(i).getCell(1))? "" : table.getRow(i).getCell(1).text();
+ if(columnValue.contains("\u0007")){
+ columnValue = columnValue.replace("\u0007","");
+ }
+ if(columnText.contains("\u0007")){
+ columnText = columnText.replace("\u0007","");
+ }
+ if(columnText.equals("鎸姩鍙板瀷鍙�")){
+ analysisMap.put("11",columnValue);
+ }
+ if(columnText.equals("杩愬姩閮ㄤ欢绛夋晥璐ㄩ噺")){
+ analysisMap.put("12",columnValue);
+ }
+ if(columnText.equals("璇曚欢璐ㄩ噺")){
+ analysisMap.put("1",columnValue);
+ }
+ }
+ }
+ //鍙栫涓�涓〃鍗曡緭鍏ラ�氶亾鍙傛暟绗竴鏉℃暟鎹�
+ if(tableIndex == 1){
+ Table table = tableList.get(1);
+ if(ObjectUtils.isNotEmpty(table)&& table.numRows() > 0){
+ String columnValue = ObjectUtils.isEmpty(table.getRow(1).getCell(2))? "" : table.getRow(1).getCell(2).text();
+ if(columnValue.contains("\u0007")){
+ columnValue = columnValue.replace("\u0007","");
+ }
+ analysisMap.put("9",columnValue);
+ }
+ }
+ // 鍙栨渶鍚庝竴涓〃鍗曠涓夌鍥涜淇℃伅
+ if(tableIndex == tableList.size() - 1){
+ Table table = tableList.get(tableIndex);
+ for (int i = 0; i < table.numRows(); i++) {
+ String columnText = ObjectUtils.isEmpty(table.getRow(i).getCell(0))? "" : table.getRow(i).getCell(0).text();
+ String columnValue = ObjectUtils.isEmpty(table.getRow(i).getCell(1))? "" : table.getRow(i).getCell(1).text();
+ if(columnValue.contains("\u0007")){
+ columnValue = columnValue.replace("\u0007","");
+ }
+ if(columnText.contains("\u0007")){
+ columnText = columnText.replace("\u0007","");
+ }
+ if(columnText.contains("鎬昏繍琛屾椂闂�")){
+ analysisMap.put("13",columnValue);
+ }
+ if(columnText.contains("璇曢獙鎵鏁�")){
+ analysisMap.put("10",columnValue);
+ }
+ }
+ }
+ }
+ // 鍥剧墖缁戝畾
+ List<Picture> pictureList = document.getPicturesTable().getAllPictures();
+ String[] split = originFileName.split("\\.");
+ String docName = "";
+ if(null != split && split.length > 0){
+ docName = split[0];
+ }
+ for (Picture picture : pictureList) {
+ byte[] pictureData = picture.getContent();
+ File imgDir = new File(imgUrl);
+ if (!imgDir.exists()) {
+ imgDir.mkdirs();
+ }
+ String filename = docName + "_" + UUID.randomUUID()+".png";
+ File pictureFile = new File(imgUrl + File.separatorChar + filename);
+ // 鍒涘缓杈撳嚭娴佷互灏嗗浘鐗囨暟鎹啓鍏ュ埌鎸囧畾璺緞
+ try (OutputStream outputStream = new FileOutputStream(pictureFile)) {
+ // 鍐欏叆鏁版嵁
+ outputStream.write(pictureData);
+ }
+ InsOrderFile insOrderFile = new InsOrderFile();
+ insOrderFile.setInsOrderId(orderId);
+ insOrderFile.setInsSampleId(sampleId);
+ insOrderFile.setSonLaboratory("鎸姩");
+ insOrderFile.setType(1);
+ insOrderFile.setFileName(filename);
+ insOrderFile.setFileUrl(filename);
+ insOrderFileMapper.insert(insOrderFile);
+ }
+ }catch (Exception e){
+ log.error(e.getMessage());
+ }
+ return analysisMap;
+ }
+
+ //娓╂箍搴﹁瘯楠�+鍔熺巼璇曢獙鐨勪繚瀛樻楠屽唴瀹�
+ @Override
+ public int saveInsContext3(InsProductResult insProductResult) {
+ //鍏堝垹鍚庡姞
+ insProductResultMapper.delete(Wrappers.<InsProductResult>lambdaQuery()
+ .eq(InsProductResult::getInsProductId, insProductResult.getInsProductId())
+ .eq(InsProductResult::getNum, insProductResult.getNum()));
+ insProductResult.setEquipValue("[{\"v\":\"" + insProductResult.getEquipValue() + "\"}]");
+ insProductResult.setEquipName("[{\"v\":\"" + insProductResult.getEquipName() + "\"}]");
+ insProductResultMapper.insert(insProductResult);
+ return 0;
+ }
+
+ //瑙f瀽瑕佹眰鍊肩殑鏍煎紡
+ private boolean getResult(double s, String ask) {
+ // 澶勭悊卤鑼冨洿鐨勬潯浠�
+ if (ask.contains("卤")) {
+ Pattern pattern = Pattern.compile("(\\d+)卤(\\d+)");
+ Matcher matcher = pattern.matcher(ask);
+ if (matcher.matches()) {
+ double center = Double.parseDouble(matcher.group(1));
+ double tolerance = Double.parseDouble(matcher.group(2));
+ return Math.abs(s - center) <= tolerance;
+ }
+ }
+ // 澶勭悊鍏朵粬姣旇緝鏉′欢
+ if (ask.startsWith(">") || ask.startsWith("锛�")) {
+ double threshold = Double.parseDouble(ask.substring(1));
+ return s > threshold;
+ } else if (ask.startsWith("鈮�")) {
+ double threshold = Double.parseDouble(ask.substring(1));
+ return s >= threshold;
+ } else if (ask.startsWith("<")|| ask.startsWith("锛�")) {
+ double threshold = Double.parseDouble(ask.substring(1));
+ return s < threshold;
+ } else if (ask.startsWith("鈮�")) {
+ double threshold = Double.parseDouble(ask.substring(1));
+ return s <= threshold;
+ } else if (ask.equals("=")|| ask.startsWith("锛�")) {
+ double exactValue = Double.parseDouble(ask.substring(1));
+ return s == exactValue;
+ }
+ // 澶勭悊涓嶆敮鎸佺殑鏉′欢
+ throw new IllegalArgumentException("鏈煡鏍煎紡瑕佹眰鍊艰妫�鏌�" + ask);
+ }
+
+ //灏嗗墠绔紶杩囨潵鐨勫�艰浆鎹㈡垚鏁扮粍鐨勫舰寮�
+ private String[] parseValues(String valueStr) {
+ String trimmedStr = valueStr.substring(1, valueStr.length() - 1);
+ return Arrays.stream(trimmedStr.split("\\],\\["))
+ .map(s -> s.substring(1, s.length() - 1).split(","))
+ .flatMap(Arrays::stream)
+ .map(s -> s.replace("\"", ""))
+ .toArray(String[]::new);
+ }
+
+ //鍒よ鍚堟牸涓庝笉鍚堟牸
+ private boolean isValueValid(String valueStr, String[] valuesToCheck) {
+ for (String s : parseValues(valueStr)) {
+ if (ObjectUtils.isEmpty(s)) {
+ continue;
+ }
+ double numericValue = Math.abs(Double.parseDouble(s));
+ boolean valid = Arrays.stream(valuesToCheck)
+ .allMatch(v -> getResult(numericValue, v));
+ if (!valid) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ //浜ゆ帴
+ @Override
+ public int upPlanUser(Integer userId, Integer sampleId, String sonLaboratory) {
+ InsSampleUser insSampleUser = new InsSampleUser();
+ insSampleUser.setUserId(userId);
+ insSampleUser.setInsSampleId(sampleId);
+ insSampleUser.setState(0);
+ insSampleUser.setSonLaboratory(sonLaboratory);
+ return insSampleUserMapper.insert(insSampleUser);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public int verifyPlan(Integer sampleId, String laboratory, Integer type, String tell) {
+ LocalDateTime now = LocalDateTime.now();
+ Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
+ List<InsUnPass> insUnPasses = new ArrayList<>();
+ /*鏍峰搧涓嬬殑椤圭洰鍙鏈変竴涓」鐩笉鍚堟牸鍒欐楠岀粨鏋滀负0,鍚﹀垯涓�1*/
+ InsSample insSample = insSampleMapper.selectById(sampleId);
+ List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
+ .eq(InsProduct::getInsSampleId, insSample.getId())
+ .eq(InsProduct::getSonLaboratory, laboratory)
+ .eq(InsProduct::getState, 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琛ㄤ腑*/
+ InsOrder insOrder = insOrderMapper.selectById(insSample.getInsOrderId());
+ 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(insOrder.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);
+ /*type=0 鍐嶆璇曢獙; type=1 缁х画璇曢獙 ; type=2 缁撴潫璇曢獙*/
+ // 鏌ヨ鏍规嵁 id 鍊掑簭鎺掑垪鐨勭涓�鏉¤褰�
+ InsOrderState record = insOrderStateMapper.selectOne(Wrappers.<InsOrderState>lambdaQuery()
+ .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+ .eq(InsOrderState::getInsSampleId, sampleId)
+ .eq(InsOrderState::getLaboratory, laboratory)
+ .orderByDesc(InsOrderState::getId)
+ .last("LIMIT 1")); // 纭繚鍙彇涓�鏉¤褰�
+ if (record != null) {
+ //鏇存柊璁板綍
+ insOrderUserMapper.update(null, Wrappers.<InsOrderUser>lambdaUpdate()
+ .eq(InsOrderUser::getInsOrderStateId, record.getId())
+ .eq(InsOrderUser::getNum, record.getNum())
+ .set(InsOrderUser::getTell, tell));
+ switch (type) {
+ case 0:
+ //鍐嶆璇曢獙:璇ュ崟瀛愰��鍥炲埌妫�楠岀姸鎬�(鎺掑簭鏀规垚褰撳墠鐨勬渶鍚�),娆℃暟閫掑(淇濈暀浠ュ墠鐨勬暟鎹�)锛�
+ insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
+ .eq(InsOrderState::getId, record.getId())
+ .set(InsOrderState::getInsTime, now)
+ .set(InsOrderState::getInsState, 4)
+ .set(InsOrderState::getVerifyTell, tell)
+ .set(InsOrderState::getVerifyUser, userId)
+ .set(InsOrderState::getNum, record.getNum() + 1)//娆℃暟鍔�1
+ .set(InsOrderState::getCreateTime, LocalDateTime.now()));
+ break;
+ case 1:
+ //缁х画璇曢獙:璇ユ牱鍝佽绔欑偣浠诲姟缁撴潫(鍙互鍐嶆鎵爜妫�楠�)锛�
+ insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
+ .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+ .eq(InsOrderState::getInsSampleId, sampleId)
+ .eq(InsOrderState::getLaboratory, laboratory)
+ .set(InsOrderState::getInsState, 6)
+ .set(InsOrderState::getVerifyTell, tell)
+ .set(InsOrderState::getVerifyUser, userId));
+ break;
+ case 2:
+ //缁撴潫璇曢獙:姝ゅ鎵樺崟鍋滄璇曢獙(鏃犳硶鍐嶆妫�楠�)銆�
+ insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
+ .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+ .eq(InsOrderState::getInsSampleId, sampleId)
+ .eq(InsOrderState::getLaboratory, laboratory)
+ .set(InsOrderState::getInsState, 5)
+ .set(InsOrderState::getVerifyTell, tell)
+ .set(InsOrderState::getVerifyUser, userId));
+ //濡傛灉璁㈠崟绫诲瀷鏄師鐞嗘牱鏈�,鍒欒璁㈠崟鐩存帴闂幆
+ List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, insSample.getInsOrderId()));
+ for (InsSample sample : insSamples) {
+ try{
+ outInsOrderState(laboratory, sample.getSampleCode(), insOrder.getEntrustCode());
+ }catch (Exception e){
+
+ }
+ }
+ /*鐢熸垚瀵瑰簲鐨勬楠屾姤鍛�*/
+ List<InsReportDto1> insReportDto1s=insOrderUserMapper.selectInsReportDto1(insOrder.getId());
+ createReport(insOrder.getId(),insReportDto1s);
+ //璇ヨ鍗曢棴鐜�
+ insOrder.setState(4);
+ insOrderMapper.updateById(insOrder);
+ break;
+ }
+ }
+ return 1;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public int verifyPlan2(Integer sampleId, String laboratory, Integer type, String tell) {
+ Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
+ InsSample insSample = insSampleMapper.selectById(sampleId);
+ InsOrder insOrder = insOrderMapper.selectById(insSample.getInsOrderId());
+ /*type=0 鍐嶆璇曢獙; type=1 缁х画璇曢獙 ; type=2 缁撴潫璇曢獙*/
+ // 鏌ヨ鏍规嵁 id 鍊掑簭鎺掑垪鐨勭涓�鏉¤褰�
+ InsOrderState record = insOrderStateMapper.selectOne(Wrappers.<InsOrderState>lambdaQuery()
+ .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+ .eq(InsOrderState::getInsSampleId, sampleId)
+ .eq(InsOrderState::getLaboratory, laboratory)
+ .orderByDesc(InsOrderState::getId)
+ .last("LIMIT 1")); // 纭繚鍙彇涓�鏉¤褰�
+ if (record != null) {
+ switch (type) {
+ case 0:
+ //鍐嶆璇曢獙:璇ュ崟瀛愰��鍥炲埌妫�楠岀姸鎬�(鎺掑簭鏀规垚褰撳墠鐨勬渶鍚�),娆℃暟閫掑(淇濈暀浠ュ墠鐨勬暟鎹�)锛�
+ insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
+ .eq(InsOrderState::getId, record.getId())
+ .set(InsOrderState::getInsTime, LocalDateTime.now())
+ .set(InsOrderState::getInsState, 4)
+ .set(InsOrderState::getVerifyTell, tell)
+ .set(InsOrderState::getVerifyUser, userId)
+ .set(InsOrderState::getNum, record.getNum() + 1)//娆℃暟鍔�1
+ .set(InsOrderState::getCreateTime, LocalDateTime.now()));
+ break;
+ case 1:
+ //缁х画璇曢獙:璇ユ牱鍝佽绔欑偣浠诲姟缁撴潫(鍙互鍐嶆鎵爜妫�楠�)锛�
+ //鍏堝垽鏂笂涓�涓鏍告槸浠�涔堢粨璁�
+ if (record.getInsState()==4){
+ insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
+ .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+ .eq(InsOrderState::getInsSampleId, sampleId)
+ .eq(InsOrderState::getLaboratory, laboratory)
+ .set(InsOrderState::getInsState, 6)
+ .set(InsOrderState::getVerifyTell, tell)
+ .set(InsOrderState::getNum, record.getNum() - 1)//娆℃暟-1
+ .set(InsOrderState::getVerifyUser, userId));
+ }else {
+ insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
+ .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+ .eq(InsOrderState::getInsSampleId, sampleId)
+ .eq(InsOrderState::getLaboratory, laboratory)
+ .set(InsOrderState::getInsState, 6)
+ .set(InsOrderState::getVerifyTell, tell)
+ .set(InsOrderState::getVerifyUser, userId));
+ }
+ break;
+ case 2:
+ //缁撴潫璇曢獙:姝ゅ鎵樺崟鍋滄璇曢獙(鏃犳硶鍐嶆妫�楠�)銆�
+ //鍏堝垽鏂笂涓�涓鏍告槸浠�涔堢粨璁�
+ if (record.getInsState()==4){
+ insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
+ .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+ .eq(InsOrderState::getInsSampleId, sampleId)
+ .eq(InsOrderState::getLaboratory, laboratory)
+ .set(InsOrderState::getInsState, 5)
+ .set(InsOrderState::getNum, record.getNum() - 1)//娆℃暟-1
+ .set(InsOrderState::getVerifyTell, tell)
+ .set(InsOrderState::getVerifyUser, userId));
+ }else {
+ insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
+ .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+ .eq(InsOrderState::getInsSampleId, sampleId)
+ .eq(InsOrderState::getLaboratory, laboratory)
+ .set(InsOrderState::getInsState, 5)
+ .set(InsOrderState::getVerifyTell, tell)
+ .set(InsOrderState::getVerifyUser, userId));
+ }
+ //鍑哄簱
+ List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, insSample.getInsOrderId()));
+ for (InsSample sample : insSamples) {
+ try{
+ outInsOrderState(laboratory, sample.getSampleCode(), insOrder.getEntrustCode());
+ }catch (Exception e){
+ }
+ }
+ /*鐢熸垚瀵瑰簲鐨勬楠屾姤鍛�*/
+ List<InsReportDto1> insReportDto1s=insOrderUserMapper.selectInsReportDto1(insOrder.getId());
+ createReport(insOrder.getId(),insReportDto1s);
+ //璁㈠崟闂幆
+ insOrder.setState(4);
+ insOrderMapper.updateById(insOrder);
+ break;
+ }
+ }
+ return 1;
+ }
+
+
+ /*鐢熸垚瀵瑰簲鐨勬楠屾姤鍛�*/
+ private void createReport(Integer orderId,List<InsReportDto1> insReportDto1s){
+ for (InsReportDto1 insReportDto1 : insReportDto1s) {
+ if (ObjectUtils.isNotEmpty(insReportDto1.getInsReportDto2s())){
+ wordUtils.generateReport(orderId, insReportDto1);
+// try{
+// wordUtils.generateReport(orderId, insReportDto1);
+// }catch (Exception e){
+// throw new ErrorException("鎶ュ憡鏍煎紡鐢熸垚鏈夎,璇疯仈绯荤鐞嗗憳!");
+// }
+ }
+ }
+ }
+
+ private void getTemplateThing
+ (Set<Integer> set, Map<Integer, String> map2, List<InsProduct> insProducts) {
+ for (InsProduct product : insProducts) {
+ if (product.getTemplateId() == null) {
+ product.setTemplate(new ArrayList<>());
+ continue;
+ }
+ String thing = null;
+ if (product.getTemplateId() != null && set.add(product.getTemplateId())) {
+ map2.put(product.getTemplateId(), standardTemplateService.getStandTempThingById(product.getTemplateId()) + "");
+ thing = map2.get(product.getTemplateId());
+ }
+ if (StrUtil.isNotEmpty(thing)) {
+ JSONObject sheet = JSON.parseObject(JSON.toJSONString(JSON.parseArray(JSON.toJSONString(JSON.parseObject(thing).get("data"))).get(0)));
+ JSONObject config = JSON.parseObject(JSON.toJSONString(sheet.get("config")));
+ List<JSONObject> cellData = JSON.parseArray(JSON.toJSONString(sheet.get("celldata")), JSONObject.class);
+ Map<String, Object> style = new HashMap<>();
+ style.put("rowlen", config.get("rowlen"));
+ style.put("columnlen", config.get("columnlen"));
+ product.setTemplate(cellData);
+ product.setStyle(style);
+ product.setTemplateName(standardTemplateService.getStandTempNameById(product.getTemplateId()));
+ }
+ }
+ }
+
+ @Override
+ public int submitPlan(SubmitPlanDto submitPlanDto) {
+ InsSample insSample = insSampleMapper.selectById(submitPlanDto.getSampleId());
+ InsOrderState orderState = insOrderStateMapper.selectOne(Wrappers.<InsOrderState>lambdaQuery()
+ .eq(InsOrderState::getInsOrderId, insSample.getInsOrderId())
+ .eq(InsOrderState::getInsSampleId, submitPlanDto.getSampleId())
+ .eq(InsOrderState::getLaboratory, submitPlanDto.getLaboratory())
+ .orderByDesc(InsOrderState::getId)
+ .last("LIMIT 1"));// 纭繚鍙彇涓�鏉¤褰�
+ /*璁板綍妫�楠屼换鍔℃瘡娆$殑澶囨敞淇℃伅*/
+ InsOrderUser insOrderUser = new InsOrderUser();
+ insOrderUser.setInsOrderStateId(orderState.getId());
+ insOrderUser.setSubmitUser(getLook.selectPowerByMethodAndUserId(null).get("userId"));
+ insOrderUser.setInsTime(orderState.getInsTime());
+ insOrderUser.setSubmitTime(LocalDateTime.now());
+ insOrderUser.setNum(orderState.getNum());
+ insOrderUser.setNote(ObjectUtils.isNotEmpty(submitPlanDto.getNote()) ? submitPlanDto.getNote() : null);
+ insOrderUser.setTerm(ObjectUtils.isNotEmpty(submitPlanDto.getTerm()) ? submitPlanDto.getTerm() : null);
+ insOrderUserMapper.insert(insOrderUser);
+ List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
+ .eq(InsProduct::getInsSampleId, insSample.getId())
+ .eq(InsProduct::getSonLaboratory, submitPlanDto.getLaboratory())
+ .and(wrapper -> wrapper
+ .isNull(InsProduct::getInsResult)
+ .or()
+ .eq(InsProduct::getInsResult, 2)
+ )
+ .eq(InsProduct::getState, 1));
+ if (insProducts.size() > 0) {
+ String str = "";
+ int count = 0;
+ for (InsProduct product : insProducts) {
+ //娓╂箍搴﹁瘯楠�,鍔熺巼璇曢獙鐨勬楠岄」鐩�,涓嶉渶瑕佸幓鎵嬪姩濉啓妫�楠屽��,鍙渶瑕佷笂浼犺〃鏍兼枃浠跺氨鍙互浜�,鍚庡彴鎻愪氦鐨勬椂鍊欐牎楠岃烦杩囪繖涓楠岄」鐩�
+ if ( product.getInspectionItem().equals("娓╂箍搴﹁瘯楠�") || product.getInspectionItem().equals("鍔熺巼璇曢獙")) {
+ product.setInsResult(3);//涓嶅垽瀹�
+ insProductMapper.updateById(product);
+ continue;
+ }
+ //鐢佃矾璇曢獙鐨勬楠岄」鐩�,闇�瑕佸湪鎻愪氦鐨勬椂鍊欏啀鍘昏祴鍊煎悎鏍间笌涓嶅悎鏍�
+ if (product.getInspectionItem().equals("鐢佃矾璇曢獙")) {
+ List<Integer> collect = insProductResult2Mapper.selectList(Wrappers.<InsProductResult2>lambdaQuery()
+ .eq(InsProductResult2::getNum, orderState.getNum())
+ .eq(InsProductResult2::getInsProductId, product.getId())).stream().map(InsProductResult2::getResult).distinct().collect(Collectors.toList());
+ if (collect.contains(0)) {
+ product.setInsResult(0);//涓嶅悎鏍�
+ } else {
+ product.setInsResult(1);//鍚堟牸
+ }
+ insProductMapper.updateById(product);
+ continue;
+ }
+ 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, insSample.getInsOrderId())
+ .eq(InsOrderState::getInsSampleId, submitPlanDto.getSampleId())
+ .eq(InsOrderState::getLaboratory, submitPlanDto.getLaboratory())
+ .set(InsOrderState::getInsState, 3)
+ .set(InsOrderState::getVerifyUser, submitPlanDto.getVerifyUser()));
+ InsOrder insOrder = insOrderMapper.selectById(insSample.getInsOrderId());
+
+ Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
+ //LIMS绯荤粺娑堟伅鎺ㄩ��
+ InformationNotification info = new InformationNotification();
+ info.setCreateUser(insProductMapper.selectUserById(userId).get("name"));
+ info.setMessageType("2");
+ info.setTheme("澶嶆牳閫氱煡");
+ info.setContent("鎮ㄦ湁涓�鏉℃楠屼换鍔″緟澶嶆牳娑堟伅,璁㈠崟鍙锋槸锛�" + insOrder.getEntrustCode() + ",鏍峰搧鍚嶇О涓猴細" + insSample.getSample());
+ info.setSenderId(userId);
+ info.setConsigneeId(submitPlanDto.getVerifyUser());
+ info.setViewStatus(false);
+ info.setJumpPath("b1-inspect-order-plan");
+ informationNotificationService.addInformationNotification(info);
+ //澶嶆牳浜�--妫�楠屽崟鐩稿叧璐熻矗浜�
+ InsSampleUser insSampleUser = new InsSampleUser();
+ insSampleUser.setUserId(submitPlanDto.getVerifyUser());
+ insSampleUser.setInsSampleId(submitPlanDto.getSampleId());
+ insSampleUser.setState(1);
+ insSampleUser.setSonLaboratory(submitPlanDto.getLaboratory());
+ insSampleUserMapper.insert(insSampleUser);
+ /*鐢熸垚鐢佃矾璇曢獙鐨勭珯鐐规姤鍛婂苟涓婁紶鍒伴檮浠朵腑*/
+ if (submitPlanDto.getLaboratory().equals("鐢佃矾璇曢獙")) {
+ if (!insOrder.getSampleType().equals("鏃犳簮鍣ㄤ欢")) {
+ wordUtils.generateWord(submitPlanDto.getTerm(), orderState);
+ } else {
+ wordUtils.generateWord2(submitPlanDto.getTerm(), orderState);
+ }
+ //todo 鐢佃矾绔欑偣鎶ュ憡 姝e紡搴撻儴缃叉斁寮�
+// try {
+// if (!insOrder.getSampleType().equals("鏃犳簮鍣ㄤ欢")) {
+// wordUtils.generateWord(submitPlanDto.getTerm(), orderState);
+// }else {
+// wordUtils.generateWord2(submitPlanDto.getTerm(), orderState);
+// }
+// } catch (Exception e) {
+// throw new ErrorException("鐢佃矾璇曢獙鐨勭珯鐐规姤鍛婄敓鎴愭湁璇�,璇疯仈绯诲紑鍙戜汉鍛樿皟鏁�!");
+// }
+ }
+ /*鐢熸垚浜ч噺宸ユ椂*/
+ //鏍¢獙濡傛灉杩欎釜浜鸿繖涓娴嬮」鐩凡缁忔坊鍔犺繃浜嗗垯涓嶉渶瑕佸啀鏂板
+ //棣栧厛鍒ゆ柇褰撳墠浜虹殑褰撳墠鏃堕棿鏄惁鏄帓鐝椂闂村唴,濡傛灉涓嶆槸灏辨槸鍔犵彮
+ LocalDateTime today = LocalDateTime.of(LocalDate.now(), LocalTime.MIDNIGHT);
+ PerformanceShift performanceShift = performanceShiftMapper.selectOne(Wrappers.<PerformanceShift>lambdaQuery()
+ .eq(PerformanceShift::getUserId, userId)
+ .eq(PerformanceShift::getWorkTime, today));
+ if (ObjectUtils.isNotEmpty(performanceShift)) {
+ ShiftTime shiftTime = shiftTimeMapper.selectOne(Wrappers.<ShiftTime>lambdaQuery().eq(ShiftTime::getShift, performanceShift.getShift()));
+ if (ObjectUtils.isNotEmpty(shiftTime)) {
+ DateTimeFormatter forma = DateTimeFormatter.ofPattern("HH:mm");
+ LocalTime now = LocalTime.now();
+ LocalTime startTime = LocalTime.parse(shiftTime.getStartTime(), forma);
+ LocalTime endTime = LocalTime.parse(shiftTime.getEndTime(), forma);
+ // 妫�鏌ュ綋鍓嶆椂闂存槸鍚﹀湪鑼冨洿鍐咃紙鍖呮嫭杈圭晫锛�
+ boolean isWithinRange;
+ if (endTime.isAfter(startTime)) {
+ // 涓嶈法澶╃殑鎯呭喌
+ isWithinRange = !now.isBefore(startTime) && !now.isAfter(endTime);
+ } else {
+ // 璺ㄥぉ鐨勬儏鍐�
+ isWithinRange = !now.isBefore(startTime) || !now.isAfter(endTime);
+ }
+ for (AuxiliaryOutputWorkingHours auxiliaryOutputWorkingHours : submitPlanDto.getAuxiliaryOutputWorkingHoursList()) {
+ InsProduct insProduct = insProductMapper.selectById(auxiliaryOutputWorkingHours.getInsProductId());
+ if (isWithinRange) {
+ //鍦ㄦ椂闂村唴灏辨槸姝e父涓婄彮
+ auxiliaryOutputWorkingHours.setOrderNo(insOrder.getEntrustCode());//闈炲姞鐝鎵樺崟鍙�
+ auxiliaryOutputWorkingHours.setWorkTime(auxiliaryOutputWorkingHours.getOutputWorkTime());//闈炲姞鐝伐鏃�
+ auxiliaryOutputWorkingHours.setAmount(1);//闈炲姞鐝暟閲�
+ } else {
+ //鍔犵彮
+ auxiliaryOutputWorkingHours.setOvertimeOrderNo(insOrder.getEntrustCode());//鍔犵彮濮旀墭鍗曞彿
+ auxiliaryOutputWorkingHours.setOvertimeWorkTime(auxiliaryOutputWorkingHours.getOutputWorkTime());//鍔犵彮宸ユ椂
+ auxiliaryOutputWorkingHours.setOvertimeAmount(1);//鍔犵彮鏁伴噺
+ }
+ 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))));//鍛ㄦ
+ auxiliaryOutputWorkingHoursMapper.insert(auxiliaryOutputWorkingHours);
+ }
+ }
+ }
+
+ // todo 浼佷笟寰俊娑堟伅鎺ㄩ�丂zss
+ HashMap<String, Object> map = new HashMap<>();
+ String account = userMapper.selectById(submitPlanDto.getVerifyUser()).getAccount();
+ map.put("touser", account);//鎺ユ敹娑堟伅鎴愬憳鐨勮处鍙�'ZT-031292'杩欑绫诲瀷(濡傛灉鏈夊涓敤'|'鍒嗛殧)
+ map.put("toparty", "");//鎺ユ敹閮ㄩ棬id
+ map.put("totag", "");//娑堟伅鏍囩id
+ map.put("msgtype", "text");//娑堟伅绫诲瀷 text:鏂囨湰
+ map.put("agentid", 1000517);//搴旂敤id
+ HashMap<String, Object> hashMap = new HashMap<>();
+ hashMap.put("content", "鎮ㄦ湁涓�鏉℃楠屼换鍔″緟澶嶆牳娑堟伅,璁㈠崟鍙锋槸锛�" + insOrder.getEntrustCode() + ",鏍峰搧鍚嶇О涓猴細" + insSample.getSample() +
+ ",璇峰墠寰�LIMS绯荤粺鏌ョ湅銆傝鐐瑰嚮<a href=\"https://ztwxlims.ztt.cn:7443/enter\">涓ぉ閫氫俊LIMS绯荤粺 </a>");
+ map.put("text", hashMap);//娑堟伅鍐呭
+ map.put("safe", 0);//鏄惁淇濆瘑娑堟伅.0鍚�
+ map.put("enable_id_trans", 0);//鏄惁寮�鍚痠d杞瘧.0鍚�
+ map.put("enable_duplicate_check", 0);//鏄惁寮�鍚噸澶嶆秷鎭鏌�.0鍚�
+ qywxApi.send(map);
+ return 1;
+ }
+
+ @Override
+ public int cancelSubmitPlan(Integer orderStateId) {
+ InsOrderState orderState = insOrderStateMapper.selectById(orderStateId);
+ InsOrder insOrder = insOrderMapper.selectById(orderState.getInsOrderId());
+ InsSample insSample = insSampleMapper.selectById(orderState.getInsSampleId());
+ /*鍒犻櫎璁板綍妫�楠屼换鍔℃瘡娆$殑澶囨敞淇℃伅*/
+ insOrderUserMapper.delete(Wrappers.<InsOrderUser>lambdaQuery()
+ .eq(InsOrderUser::getInsOrderStateId, orderState.getId())
+ .eq(InsOrderUser::getNum, orderState.getNum()));
+ //鎾ら攢鎻愪氦
+ insOrderStateMapper.update(null, Wrappers.<InsOrderState>lambdaUpdate()
+ .eq(InsOrderState::getInsOrderId, orderState.getInsOrderId())
+ .eq(InsOrderState::getInsSampleId, orderState.getInsSampleId())
+ .eq(InsOrderState::getLaboratory, orderState.getLaboratory())
+ .set(InsOrderState::getInsState, 2));
+ Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
+ //LIMS绯荤粺娑堟伅鎺ㄩ��
+ InformationNotification info = new InformationNotification();
+ info.setCreateUser(insProductMapper.selectUserById(userId).get("name"));
+ info.setMessageType("2");
+ info.setTheme("澶嶆牳鎾ら攢閫氱煡");
+ info.setContent("鎮ㄦ湁涓�鏉℃楠屼换鍔″緟澶嶆牳宸叉挙閿�鐨勬秷鎭�,璁㈠崟鍙锋槸锛�" + insOrder.getEntrustCode() + ",鏍峰搧鍚嶇О涓猴細" + insSample.getSample());
+ info.setSenderId(userId);
+ info.setConsigneeId(orderState.getVerifyUser());
+ info.setViewStatus(false);
+ info.setJumpPath("b1-inspect-order-plan");
+ informationNotificationService.addInformationNotification(info);
+ //鍒犻櫎澶嶆牳浜�--妫�楠屽崟鐩稿叧璐熻矗浜�
+ insSampleUserMapper.delete(Wrappers.<InsSampleUser>lambdaQuery()
+ .eq(InsSampleUser::getState, 1)
+ .eq(InsSampleUser::getSonLaboratory, orderState.getLaboratory())
+ .eq(InsSampleUser::getUserId, orderState.getVerifyUser())
+ .eq(InsSampleUser::getInsSampleId, orderState.getInsSampleId()));
+ //鍒犻櫎鐢熸垚鐨勬姤鍛�
+ if (orderState.getLaboratory().equals("鐢佃矾璇曢獙")) {
+ List<InsOrderFile> insOrderFiles = insOrderFileMapper.selectList(Wrappers.<InsOrderFile>lambdaQuery()
+ .eq(InsOrderFile::getType, 2)
+ .like(InsOrderFile::getFileName, "鐢佃矾鍙傛暟.docx")
+ .eq(InsOrderFile::getInsOrderId, insOrder.getId())
+ .eq(InsOrderFile::getInsSampleId, orderState.getInsSampleId())
+ .eq(InsOrderFile::getSonLaboratory, orderState.getLaboratory()));
+ for (InsOrderFile insOrderFile : insOrderFiles) {
+ File file = new File(wordUrl + "/" + insOrderFile.getFileUrl());
+ file.delete();
+ insOrderFileMapper.deleteById(insOrderFile.getId());
+ }
+ }
+
+ /*鍒犻櫎鐢熸垚浜ч噺宸ユ椂*/
+ List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery().eq(InsProduct::getInsSampleId, insSample.getId()));
+ List<Integer> productIds = insProducts.stream().map(InsProduct::getId).distinct().collect(Collectors.toList());
+ auxiliaryOutputWorkingHoursMapper.delete(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
+ .eq(AuxiliaryOutputWorkingHours::getSample, insSample.getSampleCode())
+ .in(AuxiliaryOutputWorkingHours::getInsProductId, productIds)
+ .eq(AuxiliaryOutputWorkingHours::getNum, orderState.getNum()));
+
+ // todo 浼佷笟寰俊娑堟伅鎺ㄩ�丂zss
+ HashMap<String, Object> map = new HashMap<>();
+ String account = userMapper.selectById(orderState.getVerifyUser()).getAccount();
+ map.put("touser", account);//鎺ユ敹娑堟伅鎴愬憳鐨勮处鍙�'ZT-031292'杩欑绫诲瀷(濡傛灉鏈夊涓敤'|'鍒嗛殧)
+ map.put("toparty", "");//鎺ユ敹閮ㄩ棬id
+ map.put("totag", "");//娑堟伅鏍囩id
+ map.put("msgtype", "text");//娑堟伅绫诲瀷 text:鏂囨湰
+ map.put("agentid", 1000517);//搴旂敤id
+ HashMap<String, Object> hashMap = new HashMap<>();
+ hashMap.put("content", "鎮ㄦ湁涓�鏉″鏍哥殑娑堟伅宸叉挙閿�,璁㈠崟鍙锋槸锛�" + insOrder.getEntrustCode() + ",鏍峰搧鍚嶇О涓猴細" + insSample.getSample() +
+ ",璇峰墠寰�LIMS绯荤粺鏌ョ湅銆傝鐐瑰嚮<a href=\"https://ztwxlims.ztt.cn:7443/enter\">涓ぉ閫氫俊LIMS绯荤粺 </a>");
+ map.put("text", hashMap);//娑堟伅鍐呭
+ map.put("safe", 0);//鏄惁淇濆瘑娑堟伅.0鍚�
+ map.put("enable_id_trans", 0);//鏄惁寮�鍚痠d杞瘧.0鍚�
+ map.put("enable_duplicate_check", 0);//鏄惁寮�鍚噸澶嶆秷鎭鏌�.0鍚�
+ qywxApi.send(map);
+ return 0;
+ }
+
+ 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 "鏈煡";
+ }
+ }
}
--
Gitblit v1.9.3