From fc543916cfac06f0cf16d018b9751417e3a119f7 Mon Sep 17 00:00:00 2001
From: zhuo <2089219845@qq.com>
Date: 星期一, 26 五月 2025 10:02:02 +0800
Subject: [PATCH] 人员培训讲师生成签名

---
 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java | 2203 +++++++++++++++++++++++++++++++----------------------------
 1 files changed, 1,153 insertions(+), 1,050 deletions(-)

diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java
index f70a18d..55d6e7f 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java
@@ -1,1050 +1,1153 @@
-//package com.ruoyi.inspect.service.impl;
-//
-//import cn.hutool.core.collection.CollUtil;
-//import cn.hutool.core.util.ObjectUtil;
-//import cn.hutool.core.util.StrUtil;
-//import cn.hutool.json.JSONUtil;
-//import com.alibaba.excel.EasyExcel;
-//import com.alibaba.excel.ExcelWriter;
-//import com.alibaba.excel.write.metadata.WriteSheet;
-//import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
-//import com.alibaba.excel.write.style.column.SimpleColumnWidthStyleStrategy;
-//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-//import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-//import com.baomidou.mybatisplus.core.metadata.IPage;
-//import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
-//import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-//import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-//import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-//import com.ruoyi.basic.mapper.IfsInventoryQuantityMapper;
-//import com.ruoyi.basic.mapper.StandardProductListMapper;
-//import com.ruoyi.basic.pojo.IfsInventoryQuantity;
-//import com.ruoyi.basic.pojo.StandardProductList;
-//import com.ruoyi.basic.pojo.StructureTestObject;
-//import com.ruoyi.common.constant.InsOrderTypeConstants;
-//import com.ruoyi.common.core.domain.entity.User;
-//import com.ruoyi.common.numgen.NumberGenerator;
-//import com.ruoyi.common.utils.*;
-//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.InsOrderService;
-//import com.ruoyi.inspect.service.InsProductService;
-//import com.ruoyi.inspect.service.InsSampleService;
-//import com.ruoyi.inspect.vo.InsOrderPrintingVo;
-//import com.ruoyi.inspect.vo.SampleDefectsFatherVo;
-//import com.ruoyi.system.mapper.CustomMapper;
-//import com.ruoyi.system.mapper.UserMapper;
-//import lombok.AllArgsConstructor;
-//import org.apache.commons.lang3.StringUtils;
-//import org.springframework.beans.BeanUtils;
-//import org.springframework.stereotype.Service;
-//import org.springframework.transaction.annotation.Transactional;
-//
-//import javax.servlet.http.HttpServletResponse;
-//import java.io.IOException;
-//import java.math.BigDecimal;
-//import java.net.URLEncoder;
-//import java.time.LocalDate;
-//import java.time.LocalDateTime;
-//import java.time.Month;
-//import java.time.format.DateTimeFormatter;
-//import java.util.*;
-//import java.util.concurrent.atomic.AtomicInteger;
-//import java.util.stream.Collectors;
-//
-///**
-// * @author gaoaoy
-// * @description 閽堝琛ㄣ�恑ns_order(妫�楠屼笅鍗�)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
-// * @createDate 2024-03-12 16:17:55
-// */
-//@Service
-//@AllArgsConstructor
-//public class InsOrderServiceImpl extends ServiceImpl<InsOrderMapper, InsOrder>
-//        implements InsOrderService {
-//
-//    private InsOrderMapper insOrderMapper;
-//    private InsSampleService insSampleService;
-//    private InsSampleMapper insSampleMapper;
-//    private InsProductService insProductService;
-//    private InsProductMapper insProductMapper;
-//    private InsProductUserMapper insProductUserMapper;
-//    private InsSampleUserMapper insSampleUserMapper;
-//    private InsOrderStateMapper insOrderStateMapper;
-//    private UserMapper userMapper;
-//    private IfsInventoryQuantityMapper ifsInventoryQuantityMapper;
-//    private CustomMapper customMapper;
-//    private final NumberGenerator<InsOrder> numberGenerator;
-//    private InsReportMapper insReportMapper;
-//    private InsUnqualifiedRetestProductMapper insUnqualifiedRetestProductMapper;
-//    private IfsApiUtils ifsApiUtils;
-//    private SpotCheckQuarterItemMapper spotCheckQuarterItemMapper;
-//    private StandardProductListMapper standardProductListMapper;
-//
-//
-//
-//    //鑾峰彇妫�楠屼笅鍗曟暟鎹�
-//    @Override
-//    public IPage<SampleOrderDto> selectInsOrderParameter(IPage<InsOrder> page, SampleOrderDto sampleOrderDto) {
-//        //todo: 鍙湅鎴戝垽鏂叏閮�,涓汉,缁勭粐鐨勬潈闄�
-//        String laboratory = null;
-//        // 鍒ゆ柇鏄惁鏄叏閮�
-//        String isOrderAll = null;
-//        if (sampleOrderDto.getState() != null && sampleOrderDto.getState() == -2) {
-//            isOrderAll = "1";
-//            sampleOrderDto.setState(null);
-//        }
-//        IPage<SampleOrderDto> sampleOrderDtoIPage = insOrderMapper.selectInsOrderPage(page, QueryWrappers.queryWrappers(sampleOrderDto), laboratory, isOrderAll);
-//        return insOrderMapper.selectInsOrderPage(page, QueryWrappers.queryWrappers(sampleOrderDto), laboratory, isOrderAll);
-//    }
-//
-//
-//    @Override
-//    @Transactional(rollbackFor = Exception.class)
-//    public int upInsOrder(Integer orderId, Integer sampleId, String appointed, Integer userId, String sonLaboratory) {
-//        InsOrder insOrder = new InsOrder();
-//        insOrder.setId(orderId);
-//        insOrder.setAppointed(StringUtils.isNotEmpty(appointed) ? LocalDate.parse(appointed) : null);
-//        insOrder.setSendTime(LocalDateTime.now());
-//        insOrderMapper.updateById(insOrder);
-//        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::getState, 1)
-//                .select(InsProduct::getSonLaboratory).groupBy(InsProduct::getSonLaboratory));
-//        for (InsProduct insProduct : insProducts) {
-//            InsOrderState insOrderState = new InsOrderState();
-//            insOrderState.setInsOrderId(orderId);
-//            try {
-//                insOrderState.setLaboratory(insProduct.getSonLaboratory());
-//            } catch (NullPointerException e) {
-//                throw new ErrorException("璇ユ楠屽崟鏈夋湭缁存姢瀹為獙瀹ょ殑妫�楠岄」鐩�");
-//            }
-//            insOrderState.setInsState(0);
-//            insOrderStateMapper.insert(insOrderState);
-//        }
-//        if (userId != null) {
-//            InsSampleUser insSampleUser = new InsSampleUser();
-//            insSampleUser.setState(0);
-//            insSampleUser.setUserId(userId);
-//            insSampleUser.setInsSampleId(orderId);
-//            insSampleUser.setSonLaboratory(sonLaboratory);
-//            insSampleUserMapper.insert(insSampleUser);
-//        }
-//
-//        // 鍒ゆ柇璁㈠崟鏈夋病鏈夌粦瀹氭娊鏍疯鍒�
-//        InsOrder order = insOrderMapper.selectById(orderId);
-//        if (order.getQuarterItemId() != null) {
-//           // 闇�瑕佹坊鍔犱笅鍙戞椂闂村埌鎶芥牱鏃堕棿, 鍙栨牱浜哄憳灏辨槸妫�娴嬩汉
-//            SpotCheckQuarterItem spotCheckQuarterItem = spotCheckQuarterItemMapper.selectById(order.getQuarterItemId());
-//            spotCheckQuarterItem.setSpotCheckTime(order.getSendTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
-//            User user = userMapper.selectById(userId);
-//            spotCheckQuarterItem.setSamplingUser(user.getName());
-//            spotCheckQuarterItemMapper.updateById(spotCheckQuarterItem);
-//        }
-//        return 1;
-//    }
-//
-//    @Override
-//    @Transactional(rollbackFor = Exception.class)
-//    public int addInsOrder(List<SampleProductDto> list, InsOrder insOrder, List<List<Integer>> pairing) {
-//        // todo: 涓嬪崟鍒ゆ柇鎶芥牱璁″垝鐨勫敮涓�鎬�
-//        if (insOrder.getQuarterItemId() != null) {
-//            Long quarterItemCount = insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery()
-//                    .eq(InsOrder::getQuarterItemId, insOrder.getQuarterItemId())
-//                    .notIn(InsOrder::getState, -1 ,2 ,3));
-//            if (quarterItemCount > 0) {
-//                throw new ErrorException("璇ユ娊鏍疯鍒掑凡琚粦瀹氳繃");
-//            }
-//        }
-//
-//        insOrder.setState(0);
-//
-//        LocalDate appointed = insOrder.getAppointed();
-//
-//        insOrderMapper.insert(insOrder); // 涓昏〃
-//
-//        list.forEach(a -> {
-//            a.setId(null);
-//            a.setInsOrderId(insOrder.getId());
-//            insSampleMapper.insert(a);
-//            if (ObjectUtil.isNotEmpty(a.getInsProduct())) {
-//                // 鍒ゆ柇鏄惁濉啓寰呮椤规暟閲�
-//                if (a.getQuantity() != null) {
-//                    List<InsProduct> ip2 = new ArrayList<>();
-//                    for (Integer i = 1; i <= a.getQuantity(); i++) {
-//                        // 閲嶆柊鎷疯礉 鍒涘缓鏂板璞�
-//                        AtomicInteger atomicInteger = new AtomicInteger(i);
-//                        List<InsProduct> insProducts = a.getInsProduct().stream().map(insProduct -> {
-//                            insProduct.setRawMaterialTag(String.valueOf(atomicInteger.get()));
-//                            InsProduct product = new InsProduct();
-//                            BeanUtils.copyProperties(insProduct, product);
-//                            return product;
-//                        }).collect(Collectors.toList());
-//
-//                        ip2.addAll(insProducts);
-//                    }
-//                    addInsProductMethod(a.getId(), ip2);
-//                } else {
-//                    addInsProductMethod(a.getId(), a.getInsProduct());
-//                }
-//            }
-//            // 鍒ゆ柇鏄惁鏈夌數缂嗛厤缃�
-//            if (ObjectUtil.isNotEmpty(a.getInsulating())) {
-//                // 鍒ゆ柇鏄惁鏈夎緟鍔╃嚎鑺�
-//                if (ObjectUtil.isNotEmpty(a.getAuxiliaryWireCore())) {
-//                    if (a.getAuxiliaryWireCore().getInsProduct().stream().filter(insProduct -> insProduct.getState() == 1).count() !=
-//                            a.getInsulating().getInsProduct().stream().filter(insProduct -> insProduct.getState() == 1).count()) {
-//                        throw new ErrorException("鐢电紗閰嶇疆杈呭姪绾胯姱妫�楠岄」鏁伴噺涓嶇粺涓�, 璇锋鏌�");
-//                    }
-//                }
-//                List<InsProduct> ip2 = new ArrayList<>();
-//                for (String s : a.getInsulating().getNum()) {
-//                    // 閲嶆柊鎷疯礉 鍒涘缓鏂板璞�
-//                    List<InsProduct> insProducts = a.getInsulating().getInsProduct().stream().map(insProduct -> {
-//                        insProduct.setCableTag(s);
-//                        InsProduct product = new InsProduct();
-//                        BeanUtils.copyProperties(insProduct, product);
-//                        return product;
-//                    }).collect(Collectors.toList());
-//                    ip2.addAll(insProducts);
-//                }
-//                for (InsProduct product : ip2) {
-//                    product.setStandardMethodListId(a.getInsulating().getStandardMethodListId());
-//                }
-//                addInsProductMethod(a.getId(), ip2);
-//            }
-//            // 鍒ゆ柇鏄惁鏈夎緟鍔╃嚎鑺�
-//            if (ObjectUtil.isNotEmpty(a.getAuxiliaryWireCore())) {
-//                List<InsProduct> ip2 = new ArrayList<>();
-//                for (String s : a.getAuxiliaryWireCore().getNum()) {
-//                    // 閲嶆柊鎷疯礉 鍒涘缓鏂板璞�
-//                    List<InsProduct> insProducts = a.getAuxiliaryWireCore().getInsProduct().stream().map(insProduct -> {
-//                        insProduct.setCableTag(s);
-//                        InsProduct product = new InsProduct();
-//                        BeanUtils.copyProperties(insProduct, product);
-//                        return product;
-//                    }).collect(Collectors.toList());
-//                    ip2.addAll(insProducts);
-//                }
-//                for (InsProduct product : ip2) {
-//                    product.setStandardMethodListId(a.getAuxiliaryWireCore().getStandardMethodListId());
-//                }
-//                addInsProductMethod(a.getId(), ip2);
-//            }
-//            // 瀛愭牱鍝侀厤缃�
-//            if (ObjectUtil.isNotEmpty(a.getChildSampleList())) {
-//                for (SampleProductDto b : a.getChildSampleList()) {
-//                    for (int i = 0; i < b.getNum(); i++) {
-//                        b.setId(null);
-//                        b.setInsOrderId(insOrder.getId());
-//                        b.setParentId(a.getId());
-//                        insSampleMapper.insert(b);
-//                        if (ObjectUtil.isNotEmpty(b.getInsProduct())) {
-//                            addInsProductMethod(b.getId(), b.getInsProduct());
-//                        }
-//                    }
-//                }
-//            }
-//        });
-//        //鏄惁涓哄師鏉愭枡涓嬪崟
-//        if (insOrder.getTypeSource() != null && insOrder.getTypeSource().equals(1)) {
-//            // 鍘熸潗鏂欎笅鍗�: 濮旀墭浜哄氨鏄姤妫�浜�, 鐢熶骇鍗曚綅灏辨槸渚涘簲鍟嗗崟浣�
-//            IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(insOrder.getIfsInventoryId());
-//            Integer declareUserId = ifsInventoryQuantity.getDeclareUserId();
-//            User user = userMapper.selectById(declareUserId);
-//            if (user == null) {
-//               throw new ErrorException("缂哄皯鎶ユ浜轰俊鎭�");
-//            }
-//            // 渚涘簲鍟嗗悕绉�
-//            insOrder.setProduction(ifsInventoryQuantity.getSupplierName());
-//            insOrder.setProductionEn("");
-//            // 濮旀墭浜哄悕绉�
-//            insOrder.setPrepareUserId(user.getId());
-//            insOrder.setPrepareUser(user.getName());
-//            insOrder.setPrepareUserEn(user.getNameEn());
-//            insOrder.setPhone(user.getPhone());
-//            insOrder.setState(1);
-//            Long count1 = insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery()
-//                    .eq(InsOrder::getIfsInventoryId, insOrder.getIfsInventoryId())
-//                    .ne(InsOrder::getState, -1)
-//                    .eq(InsOrder::getOrderType, InsOrderTypeConstants.ENTER_THE_FACTORY)
-//                    .ne(InsOrder::getId, insOrder.getId()));
-//            // 鍒ゆ柇涔嬪墠鏄惁鏈夎繘鍘傛楠�
-//            if (count1 == 0) {
-//                ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>().set(IfsInventoryQuantity::getState, 1)
-//                        .eq(IfsInventoryQuantity::getId, insOrder.getIfsInventoryId()));
-//            }
-//
-//            // 鍒ゆ柇缁撴潫鐘舵�佷慨鏀瑰悎鏍肩姸鎬�
-//            if (ifsInventoryQuantity.getIsFinish().equals(0)) {
-//                ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
-//                        .eq(IfsInventoryQuantity::getId, insOrder.getIfsInventoryId())
-//                        .set(IfsInventoryQuantity::getInspectStatus, 0));
-//            }
-//
-//            upInsOrderOfState(insOrder);
-//            upInsOrder(insOrder.getId(), null, appointed != null ? appointed.toString() : null, SecurityUtils.getUserId().intValue(), "鍘熸潗鏂�");
-//
-//
-//            // 鏍规嵁闆朵欢鍙峰垽鏂槸鍚︽槸杈呮潗
-//            boolean isRaw = false;
-//            StructureTestObject productObject = insOrderMapper.selectProductByPartNo(ifsInventoryQuantity.getPartNo());
-//            // 鏌ヨ浜у搧
-//            if (productObject != null && StrUtil.isNotBlank(productObject.getObjectType()) && productObject.getObjectType().equals("1")) {
-//                isRaw = true;
-//            } else {
-//            // 鏌ヨ瀵硅薄
-//                StructureTestObject testObject = insOrderMapper.selectByPartNo(ifsInventoryQuantity.getPartNo());
-//                if (testObject != null && StrUtil.isNotBlank(testObject.getObjectType()) && testObject.getObjectType().equals("1")) {
-//                    isRaw = true;
-//                }
-//            }
-//
-//            if (isRaw) {
-//                // 鑾峰彇褰撳墠瀛e害鐨勫紑濮嬫椂闂村拰缁撴潫鏃堕棿
-//                LocalDateTime now = LocalDateTime.now();
-//                // 鑾峰彇褰撳墠鏈堜唤
-//                int month = now.getMonthValue();
-//                // 纭畾褰撳墠瀛e害鐨勫紑濮嬫湀浠�
-//                int startMonth = (month - 1) / 3 * 3 + 1;
-//                // 鏋勯�犲搴︾殑寮�濮嬫椂闂�
-//                LocalDateTime startOfQuarter = LocalDateTime.of(now.getYear(), Month.of(startMonth), 1, 0, 0);
-//                // 璁$畻涓嬩竴涓搴︾殑寮�濮嬫椂闂�
-//                LocalDateTime startOfNextQuarter = startOfQuarter.plusMonths(3);
-//                // 璁$畻褰撳墠瀛e害鐨勭粨鏉熸椂闂�
-//                LocalDateTime endOfQuarter = startOfNextQuarter.minusSeconds(1);
-//
-//                // 鏍规嵁涓嬪崟鐨勮鏍煎瀷鍙峰垽鏂槸鍚︿负瀛e害棣栨鍑虹幇
-//                Integer count = ifsInventoryQuantityMapper.selectIsFirst(insOrder.getPartDetail(),
-//                        ifsInventoryQuantity.getSupplierName(),
-//                        startOfNextQuarter,
-//                        endOfQuarter);
-//
-//                if(count == 0) {
-//                    ifsInventoryQuantity.setIsFirst(1);
-//                    ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
-//                            .eq(IfsInventoryQuantity::getId, insOrder.getIfsInventoryId())
-//                            .set(IfsInventoryQuantity::getIsFirst, 1));
-//                }
-//            }
-//        }
-//        return insOrder.getId();
-//    }
-//
-//    /**
-//     * 娣诲姞妫�楠岄」
-//     * @param sampleId
-//     * @param productList
-//     */
-//    private void addInsProductMethod(Integer sampleId, List<InsProduct> productList) {
-//        for (InsProduct product : productList) {
-//            if (product.getState() == 1) {
-//                product.setId(null);
-//                product.setCreateTime(null);
-//                product.setCreateUser(null);
-//                product.setUpdateTime(null);
-//                product.setUpdateUser(null);
-//                product.setInsSampleId(sampleId);
-//                if (product.getInspectionItemSubclass() == null) {
-//                    product.setInspectionItemSubclass("");
-//                }
-//                if (StringUtils.isBlank(product.getAsk()) || StringUtils.isBlank(product.getTell())) {
-//                    throw new ErrorException("鏈夋楠岄」鐨勮姹傚�兼垨瑕佹眰鎻忚堪涓虹┖, 璇峰厛鍘绘爣鍑嗗簱閰嶇疆瑕佹眰鍊兼垨瑕佹眰鎻忚堪");
-//                }
-//                insProductMapper.insert(product);
-//            }
-//        }
-//    }
-//
-//
-//    @Override
-//    public Map<String, Object> getInsOrder(Integer id) {
-//        Map<String, Object> map = new HashMap<>();
-//        InsOrder insOrder = insOrderMapper.selectById(id);
-//        List<SampleProductDto> list;
-//        // 鍒ゆ柇鏄惁鏄繘鍘傛姤鍛婂厤妫�
-//        if (insOrder.getIsExemption().equals(1)) {
-//            list = insSampleMapper.selectExemptionByOrderId(id);
-//        } else {
-//            list = insSampleMapper.selectSampleProductListByOrderId2(id);
-//        }
-//        Map<String, Object> map1 = insSampleMapper.selectInsOrder(id);
-//        map.put("insOrder", insOrder);
-//        map.put("sampleProduct", list);
-//        map.put("insOrderTemplate", map1);
-//        return map;
-//    }
-//
-//    @Override
-//    public int upInsOrderOfState(InsOrder insOrder) {
-//        insOrder.setExamineTime(LocalDateTime.now());
-//        if (insOrder.getState() == 1) {
-//            //瀹℃牳閫氳繃鎵嶄細鐢熸垚濮旀墭缂栧彿
-//            // todo: 妫�楠岀被鍨嬬紪鍙�
-//            InsOrder order = this.getById(insOrder.getId());
-//            String code = "";
-//            switch (order.getOrderType()) {
-//                case InsOrderTypeConstants.SPOT_CHECK:
-//                    code = "C";
-//                    break;
-//                case InsOrderTypeConstants.CUSTOMER_ORDERED:
-//                    code = "W";
-//                    break;
-//                case InsOrderTypeConstants.ENTER_THE_FACTORY:
-//                case InsOrderTypeConstants.QUARTERLY_TEST:
-//                    code = "Y";
-//                    break;
-//            }
-//            // 鐢熸垚缂栧彿
-//            String no = numberGenerator.generateNumberWithPrefix(3,
-//                    "JCZX/ZB-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
-//                    InsOrder::getEntrustCode);
-//            // 鍒ゆ柇鏄惁鏄搴︽楠�, 鏄搴︽楠屽彇娑堝師鏉愭枡瀛e害妫�楠屼笅鍗�
-//            if (InsOrderTypeConstants.QUARTERLY_TEST.equals(order.getOrderType())) {
-//                ifsInventoryQuantityMapper.update(null,  Wrappers.<IfsInventoryQuantity>lambdaUpdate()
-//                        .eq(IfsInventoryQuantity::getId, order.getIfsInventoryId())
-//                        .set(IfsInventoryQuantity::getIsQuarter, 0));
-//
-//                // 鏌ヨ鏄惁鏈夎繃杩涘巶妫�楠�, 鏈夎幏鍙栭噷闈㈢殑缂栧彿
-//                InsOrder order1 = insOrderMapper.selectOne(Wrappers.<InsOrder>lambdaQuery()
-//                        .eq(InsOrder::getIfsInventoryId, order.getIfsInventoryId())
-//                        .ne(InsOrder::getState, -1)
-//                        .eq(InsOrder::getOrderType, InsOrderTypeConstants.ENTER_THE_FACTORY));
-//                if (order1 != null) {
-//                  no = order1.getEntrustCode();
-//                }
-//            }
-//
-//            int count = 1;
-//            // 鏌ヨ鏍峰搧琛�
-//            List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery()
-//                    .eq(InsSample::getInsOrderId, insOrder.getId()));
-//            for (InsSample insSample : insSamples) {
-//                if (StringUtils.isBlank(insSample.getSampleCode())) {
-//                    // 濡傛灉鍙湁涓�涓牱鍝佸氨涓嶉渶瑕佹嫾鎺ユ暟瀛�
-//                    if (insSamples.size() != 1) {
-//                        insSample.setSampleCode(no + "-" + count);
-//                        count++;
-//                    } else {
-//                        insSample.setSampleCode(no);
-//                    }
-//                }
-//            }
-//            insSampleService.updateBatchById(insSamples);
-//
-//            insOrder.setEntrustCode(no);
-//        }
-//        return insOrderMapper.updateById(insOrder);
-//    }
-//
-//    @Override
-//    public Map<String, Object> getInsOrderAndSample(Integer id, String laboratory) {
-//        Map<String, Object> map = new HashMap<>();
-//        InsOrder insOrder = insOrderMapper.selectById(id);
-//        List<SampleProductDto> list = insSampleMapper.getInsOrderAndSample(id, laboratory);
-//        for (SampleProductDto sampleProductDto : list) {
-//            List<Integer> ids = sampleProductDto.getInsProduct().stream().map(InsProduct::getId).collect(Collectors.toList());
-//            List<InsProductUser> insProductUsers = insProductUserMapper.selectList(Wrappers.<InsProductUser>lambdaQuery()
-//                    .in(InsProductUser::getInsProductId, ids));
-//            if (CollectionUtils.isNotEmpty(insProductUsers)) {
-//                List<Integer> userIds = insProductUsers.stream().map(InsProductUser::getCreateUser).distinct().collect(Collectors.toList());
-//                String collect = userMapper.selectBatchIds(userIds).stream().map(User::getName).collect(Collectors.joining(","));
-//                sampleProductDto.setCheckName(collect);
-//            }
-//        }
-//        map.put("insOrder", insOrder);
-//        map.put("sampleProduct", list);
-//        //鏌ヨ鎵�鏈夎褰曟ā鐗堝幓閲�
-//        List<Map<Integer, Object>> list2 = insOrderMapper.selectReportModelByOrderId(id, laboratory);
-//        map.put("reportModel", list2);
-//        return map;
-//    }
-//
-//    @Override
-//    public IPage<SampleProductDto2> selectSampleAndProductByOrderId(IPage<SampleProductDto2> page, SampleProductDto2 sampleProductDto) {
-//        IPage<SampleProductDto2> productDto2IPage = insOrderMapper.selectSampleAndProductByOrderId(page,
-//                QueryWrappers.queryWrappers(sampleProductDto)
-//                        .orderByAsc("sample_code")
-//                        .orderByAsc("cable_tag")
-//                        .orderByAsc("sort"),
-//                sampleProductDto.getId());
-//        return productDto2IPage;
-//    }
-//
-//    @Override
-//    public IPage<CostStatisticsDto> costStatistics(IPage<CostStatisticsDto> page, CostStatisticsDto costStatisticsDto) {
-//        String dates = costStatisticsDto.getDates();
-//        String[] split = dates.replaceAll("\\[", "").replaceAll("]", "").replaceAll("\"", "").split(",");
-//        costStatisticsDto.setDates(null);
-//
-//        //todo:浠呯湅鑷繁
-//
-//        IPage<CostStatisticsDto> dtoIPage = insOrderMapper.selectCostStatistics(page, QueryWrappers.queryWrappers(costStatisticsDto).ge("create_time", split[0]).le("create_time", split[1] + " 23:59:59"));
-//        List<CostStatisticsDto> collect = dtoIPage.getRecords().stream().map(dto -> {
-//            Set<String> uniqueTags = new HashSet<>();
-//            if (dto.getInspectionItem().contains(",")) {
-//                for (String s : dto.getInspectionItem().split(",")) {
-//                    uniqueTags.add(s.split("@")[0]);
-//                }
-//            } else {
-//                uniqueTags.add(dto.getInspectionItem().split("@")[0]);
-//            }
-//            dto.setInspectionItem(uniqueTags.toString());
-//            return dto;
-//        }).collect(Collectors.toList());
-//        dtoIPage.setRecords(collect);
-//        return dtoIPage;
-//    }
-//
-//    @Override
-//    public Map<String, Object> costStatistics2(CostStatisticsDto costStatisticsDto) {
-//        Map<String, Object> map = new HashMap<>();
-//        String dates = costStatisticsDto.getDates();
-//        String[] split = dates.replaceAll("\\[", "").replaceAll("]", "").replaceAll("\"", "").split(",");
-//        costStatisticsDto.setDates(null);
-//        List<CostStatisticsDto> costStatisticsDtos = insOrderMapper.selectCostStatistics2(QueryWrappers.queryWrappers(costStatisticsDto).ge("create_time", split[0]).le("create_time", split[1] + " 23:59:59"));
-//        double totalPrice = costStatisticsDtos.stream()
-//                .filter(dto -> dto.getPrice() != null) // 杩囨护鎺変环鏍间负 null 鐨勫璞�
-//                .mapToDouble(value -> value.getPrice().doubleValue() * value.getNum())
-//                .sum();
-//        map.put("total", totalPrice);
-//        return map;
-//    }
-//
-//    @Override
-//    public Map<String, Object> selectSampleDefects(Page page, String inspectionItems, String orderNumber) {
-//        List<SampleDefectsFatherVo> sampleDefectsFatherVos = insOrderMapper.selectSampleDefects(page, inspectionItems, orderNumber);
-//        Map<String, Object> map = new HashMap<>();
-//        map.put("records", sampleDefectsFatherVos);
-//        Long aLong = insOrderMapper.getCount(inspectionItems, orderNumber);
-//        map.put("total", aLong);
-//        return map;
-//    }
-//
-//    @Override
-//    public int updateStatus(Integer id) {
-//        return insOrderMapper.updateStatus(id);
-//    }
-//
-//
-//    @Override
-//    public void export(CostStatisticsDto costStatisticsDto, HttpServletResponse response) throws IOException {
-//        //鏌ヨ瀵煎嚭鐨勮垂鐢ㄧ粺璁℃暟鎹�
-//        String dates = costStatisticsDto.getDates();
-//        String[] split = dates.replaceAll("\\[", "").replaceAll("]", "").replaceAll("\"", "").split(",");
-//        costStatisticsDto.setDates(null);
-//        List<CostStatisticsDto> costStatisticsDtos = insOrderMapper.selectCostStatistics2(QueryWrappers.queryWrappers(costStatisticsDto).ge("create_time", split[0]).le("create_time", split[1] + " 23:59:59"));
-//        costStatisticsDtos = costStatisticsDtos.stream().map(dto -> {
-//            Set<String> uniqueTags = new HashSet<>();
-//            if (dto.getInspectionItem().contains(",")) {
-//                for (String s : dto.getInspectionItem().split(",")) {
-//                    uniqueTags.add(s.split("@")[0]);
-//                }
-//            } else {
-//                uniqueTags.add(dto.getInspectionItem().split("@")[0]);
-//            }
-//            dto.setInspectionItem(uniqueTags.toString());
-//            return dto;
-//        }).collect(Collectors.toList());
-//
-//        response.setContentType("application/vnd.ms-excel");
-//        response.setCharacterEncoding("UTF-8");
-//        // 杩欓噷URLEncoder.encode鍙互闃叉涓枃涔辩爜 褰撶劧鍜宔asyexcel娌℃湁鍏崇郴
-//        String fileName = URLEncoder.encode("鏍峰搧璐圭敤缁熻瀵煎嚭", "UTF-8");
-//        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
-//        Map<String, List<CostStatisticsDto>> groupByCompany =
-//                costStatisticsDtos.stream().filter(e -> StrUtil.isNotEmpty(e.getCompany()))
-//                        .collect(Collectors.groupingBy(CostStatisticsDto::getCompany));
-//        try {
-//            // 鏂板缓ExcelWriter
-//            // 鏂板缓ExcelWriter
-//            ExcelWriter excelWriter =
-//                    EasyExcel.write(response.getOutputStream())
-//                            .registerWriteHandler(new SimpleColumnWidthStyleStrategy(25))
-//                            .build();
-//            for (Map.Entry<String, List<CostStatisticsDto>> companyDataEntry : groupByCompany.entrySet()) {
-//                String sheetName = companyDataEntry.getKey();
-//                List<CostStatisticsDto> dataList = companyDataEntry.getValue();
-//                WriteSheet mainSheet = EasyExcel.writerSheet(sheetName)
-//                        .head(CostStatisticsDto.class)
-//                        .registerWriteHandler(new SimpleColumnWidthStyleStrategy(25))
-//                        .build();
-//                excelWriter.write(dataList, mainSheet);
-//            }
-//            // 鍏抽棴娴�
-//            excelWriter.finish();
-//        } catch (IOException e) {
-//            throw new RuntimeException("瀵煎嚭澶辫触");
-//        }
-//    }
-//
-//    /**
-//     * 鑾峰彇ifs搴撳瓨淇℃伅
-//     * @param
-//     * @return
-//     */
-//    @Override
-//    public void getIfsOrder() {
-//        HashMap<String, Object> map = new HashMap<>();
-//        map.put("LOCATION_NO","1302");
-//        map.put("STATE_DB","To be Inspected");
-//        List<Map<String, Object>> inventory = ifsApiUtils.getInventory(JSONUtil.toJsonStr(map));
-//        if(inventory.size() == 0) {
-//            return;
-//        }
-//        // 杩涜淇濆瓨
-//        for (Map<String, Object> map1 : inventory) {
-//            DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); // 鏃堕棿鏍煎紡鍖�
-//            IfsInventoryQuantity ifsInventoryQuantity = new IfsInventoryQuantity();
-//            ifsInventoryQuantity.setContract(map1.get("CONTRACT") == null ? "" : map1.get("CONTRACT").toString()); // 鍩�
-//            ifsInventoryQuantity.setPartNo(map1.get("PART_NO") == null ? "" : map1.get("PART_NO").toString() ); // 闆朵欢鍙�
-//            ifsInventoryQuantity.setPartDesc(map1.get("PART_DESC") == null ? "" : map1.get("PART_DESC").toString()); // 闆朵欢鎻忚堪
-//            ifsInventoryQuantity.setOrderNo(map1.get("ORDER_NO") == null ? "" : map1.get("ORDER_NO").toString()); // 璁㈠崟鍙�
-//            ifsInventoryQuantity.setLineNo(map1.get("LINE_NO") == null ? "" : map1.get("LINE_NO").toString()); // 琛屽彿
-//            ifsInventoryQuantity.setReleaseNo(map1.get("RELEASE_NO") == null ? "" : map1.get("RELEASE_NO").toString()); // 涓嬭揪鍙�
-//            ifsInventoryQuantity.setReceiptNo(Integer.parseInt(map1.get("RECEIPT_NO") == null ? "" : map1.get("RECEIPT_NO").toString())); // 鎺ユ敹鍙�
-//            ifsInventoryQuantity.setStatus(map1.get("STATE") == null ? "" : map1.get("STATE").toString()); // 鐘舵�佹弿杩�
-//            ifsInventoryQuantity.setStatusDb(map1.get("STATE_DB") == null ? "" : map1.get("STATE_DB").toString()); // 鐘舵��
-//            if(map1.get("QTY_ARRIVED") != null) {
-//                ifsInventoryQuantity.setQtyArrived(new BigDecimal(map1.get("QTY_ARRIVED").toString())); // 鎶佃揪鐨勯噰璐暟閲�
-//            }
-//            if(map1.get("QTY_INSPECTED") != null) {
-//                ifsInventoryQuantity.setQtyInspected(new BigDecimal(map1.get("QTY_INSPECTED").toString())); // 宸叉楠岀殑璐拱鏁伴噺
-//            }
-//            if(map1.get("QTY_TO_INSPECT") != null) {
-//                ifsInventoryQuantity.setQtyToInspect(new BigDecimal(map1.get("QTY_TO_INSPECT").toString())); // 瑕佹楠岀殑閲囪喘鏁伴噺
-//            }
-//            if(map1.get("INV_QTY_IN_STORE") != null) {
-//                ifsInventoryQuantity.setInvQtyInStore(new BigDecimal(map1.get("INV_QTY_IN_STORE").toString())); // 鎶佃揪鐨勫簱瀛樻暟閲�
-//            }
-//            if(map1.get("PUR_QTY_IN_STORE") != null) {
-//                ifsInventoryQuantity.setPurQtyInStore(new BigDecimal( map1.get("PUR_QTY_IN_STORE").toString())); // 鎶佃揪鐨勯噰璐暟閲�
-//
-//            }
-//            ifsInventoryQuantity.setSupplierId(map1.get("SUPPLIER_ID") == null ? "" : map1.get("SUPPLIER_ID").toString()); // 渚涘簲鍟咺D
-//            ifsInventoryQuantity.setSupplierName(map1.get("SUPPLIER_NAME") == null ? "" : map1.get("SUPPLIER_NAME").toString()); // 渚涘簲鍟嗗悕绉�
-//            ifsInventoryQuantity.setConfigurationId(map1.get("CONFIGURATION_ID") == null ? "" : map1.get("CONFIGURATION_ID").toString()); // 閰嶇疆鏍囪瘑
-//            ifsInventoryQuantity.setLotBatchNo(map1.get("LOT_BATCH_NO") == null ? "" : map1.get("LOT_BATCH_NO").toString()); // 鎵规鍙�
-//            ifsInventoryQuantity.setUpdateBatchNo(map1.get("LOT_BATCH_NO") == null ? "" : map1.get("LOT_BATCH_NO").toString()); // 鎵规鍙�
-//            ifsInventoryQuantity.setWaivDevRejNo(map1.get("WAIV_DEV_REJ_NO") == null ? "" : map1.get("WAIV_DEV_REJ_NO").toString()); // WDR鍙�
-//            ifsInventoryQuantity.setActivitySeq(map1.get("ACTIVITY_SEQ") == null ? null : Integer.parseInt(map1.get("ACTIVITY_SEQ").toString())); // 娲诲姩搴忓垪
-//            ifsInventoryQuantity.setSerialNo(map1.get("SERIAL_NO") == null ? "" : map1.get("SERIAL_NO").toString()); // 搴忓垪鍙�
-//            ifsInventoryQuantity.setLocationNo(map1.get("LOCATION_NO") == null ? "" : map1.get("LOCATION_NO").toString()); // 搴撲綅鍙�
-//            ifsInventoryQuantity.setEngChgLevel(map1.get("ENG_CHG_LEVEL") == null ? "" : map1.get("ENG_CHG_LEVEL").toString()); // 鐗堟湰鍙�
-//            ifsInventoryQuantity.setReceiver(map1.get("RECEIVER") == null ? "" : map1.get("RECEIVER").toString()); // 鎺ユ敹浜�
-//            ifsInventoryQuantity.setReceiverName(map1.get("RECEIVER_NAME") == null ? "" : map1.get("RECEIVER_NAME").toString()); // 鎺ユ敹浜哄悕绉�
-//            ifsInventoryQuantity.setBuyerCode(map1.get("BUYER_CODE") == null ? "" : map1.get("BUYER_CODE").toString()); // 閲囪喘鍛�
-//            ifsInventoryQuantity.setBuyerName(map1.get("BUYER_NAME") == null ? "" : map1.get("BUYER_NAME").toString()); // 閲囪喘鍛樺悕绉�
-//
-//            if(map1.get("ARRIVE_DATE") != null) {
-//                ifsInventoryQuantity.setArriveDate(LocalDateTime.parse(map1.get("ARRIVE_DATE").toString(),dateTimeFormatter)); // 瀹為檯鍒拌揣鏃ユ湡
-//            }
-//            if(map1.get("DELIVERY_DATE") != null) {
-//                ifsInventoryQuantity.setDeliveryDate(LocalDateTime.parse(map1.get("DELIVERY_DATE").toString(),dateTimeFormatter)); // 瀹為檯浜よ揣鏃ユ湡
-//            }
-//            if(map1.get("PRODUCT_DATE") != null) {
-//                ifsInventoryQuantity.setProductDate(LocalDateTime.parse(map1.get("PRODUCT_DATE").toString(),dateTimeFormatter)); // 鐢熶骇鏃ユ湡
-//
-//            }
-//            if(map1.get("INVALID_DATE") != null) {
-//                ifsInventoryQuantity.setInvalidDate(LocalDateTime.parse(map1.get("INVALID_DATE").toString(),dateTimeFormatter)); // 澶辨晥鏃ユ湡
-//            }
-//            if(map1.get("APPROVED_DATE") != null) {
-//                ifsInventoryQuantity.setApprovedDate(LocalDateTime.parse(map1.get("APPROVED_DATE").toString(),dateTimeFormatter)); // 瀹℃壒鏃ユ湡
-//            }
-//            ifsInventoryQuantity.setReqCeater(map1.get("REQ_CEATER") == null ? "" : map1.get("REQ_CEATER").toString()); // 閲囪喘鐢宠鍒涘缓浜�
-//            ifsInventoryQuantity.setReqCeaterName(map1.get("REQ_CEATER_NAME") == null ? "" : map1.get("REQ_CEATER_NAME").toString()); // 閲囪喘鐢宠鍒涘缓浜哄悕绉�
-//            ifsInventoryQuantity.setLineRemarks(map1.get("LINE_REMARKS") == null ? "" : map1.get("LINE_REMARKS").toString()); // 閲囪喘璁㈠崟琛屽娉�
-//            ifsInventoryQuantity.setBuyUnitMeas(map1.get("BUY_UNIT_MEAS") == null ? "" : map1.get("BUY_UNIT_MEAS").toString()); // 閲囪喘鍗曚綅
-//            ifsInventoryQuantity.setReceiverDate(LocalDateTime.now()); // 鎺ユ敹鏃ユ湡
-//            ifsInventoryQuantity.setIsSource(1);
-//            ifsInventoryQuantity.setState(0);
-//
-//            IfsInventoryQuantity one = ifsInventoryQuantityMapper.selectOne(new LambdaQueryWrapper<IfsInventoryQuantity>()
-//                    .eq(IfsInventoryQuantity::getOrderNo, ifsInventoryQuantity.getOrderNo())
-//                    .eq(IfsInventoryQuantity::getLineNo, ifsInventoryQuantity.getLineNo())
-//                    .eq(IfsInventoryQuantity::getReleaseNo, ifsInventoryQuantity.getReleaseNo())
-//                    .eq(IfsInventoryQuantity::getReceiptNo, ifsInventoryQuantity.getReceiptNo())
-//                    .eq(IfsInventoryQuantity::getLocationNo, ifsInventoryQuantity.getLocationNo())
-//                    .eq(IfsInventoryQuantity::getLotBatchNo, ifsInventoryQuantity.getLotBatchNo())
-//                    .eq(IfsInventoryQuantity::getSerialNo, ifsInventoryQuantity.getSerialNo())
-//                    .eq(IfsInventoryQuantity::getEngChgLevel, ifsInventoryQuantity.getEngChgLevel())
-//                    .eq(IfsInventoryQuantity::getWaivDevRejNo, ifsInventoryQuantity.getWaivDevRejNo())
-//                    .eq(IfsInventoryQuantity::getActivitySeq, ifsInventoryQuantity.getActivitySeq())
-//            );
-//            if(Objects.isNull(one)) {
-//
-//                ifsInventoryQuantity.setIsFirst(0);
-//                // 鏌ヨ浜т笟閾炬娴嬫暟鎹�
-//                String industryChainAttrFields = IndustryChainUtils.getIndustryChainAttrFields(ifsInventoryQuantity.getOrderNo(),
-//                        ifsInventoryQuantity.getLineNo(),
-//                        ifsInventoryQuantity.getReleaseNo());
-//                ifsInventoryQuantity.setIndustryChain(industryChainAttrFields);
-//
-//                ifsInventoryQuantityMapper.insert(ifsInventoryQuantity);
-//            }
-//        }
-//    }
-//
-//    /**
-//     * id鏄師鏉愭枡鐨刬d
-//     *
-//     * 淇敼璁㈠崟鍗曞彿
-//     * @param insOrder
-//     */
-//    @Override
-//    @Transactional(rollbackFor = Exception.class)
-//    public void updateEntrustCode(InsOrder insOrder) {
-//        // 鍒ゆ柇褰撳墠璁㈠崟鏄惁鐢熸垚浜嗘姤鍛�, 鐢熸垚浜嗘姤鍛婁笉鑳戒慨鏀瑰崟鍙�
-//        List<InsOrder> insOrders = insOrderMapper.selectList(Wrappers.<InsOrder>lambdaQuery()
-//                .eq(InsOrder::getIfsInventoryId, insOrder.getId())
-//                .ne(InsOrder::getState, -1));
-//        List<Integer> insOrderIds = insOrders.stream().map(InsOrder::getId).collect(Collectors.toList());
-//        Long count = insReportMapper.selectCount(Wrappers.<InsReport>lambdaQuery()
-//                .in(InsReport::getInsOrderId, insOrderIds));
-//        if (count > 0 ) {
-//            throw new ErrorException("褰撳墠璁㈠崟宸茬粡鐢熸垚浜嗘姤鍛婁笉鑳戒慨鏀圭紪鍙�");
-//        }
-//
-//
-//        Long count1 = insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery()
-//                .eq(InsOrder::getEntrustCode, insOrder.getEntrustCode())
-//                .ne(InsOrder::getIfsInventoryId, insOrder.getId())
-//                .ne(InsOrder::getInsState, -1));
-//        if (count1 > 0) {
-//            throw new ErrorException("璇ョ紪鍙烽噸澶�");
-//        }
-//
-//        //淇敼鎶ュ憡鐨勭紪鍙�
-//        insOrderMapper.update(null, Wrappers.<InsOrder>lambdaUpdate()
-//                .eq(InsOrder::getIfsInventoryId, insOrder.getId())
-//                .set(InsOrder::getEntrustCode, insOrder.getEntrustCode()));
-//
-//        // 淇敼鏍峰搧鐨勭紪鍙�
-//        // 鏌ヨ鎵�鏈夌殑鏍峰搧
-//        List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery()
-//                .in(InsSample::getInsOrderId, insOrderIds));
-//        for (InsSample insSample : insSamples) {
-//            String sampleCode = insSample.getSampleCode();
-//            String updateCode = insOrder.getEntrustCode();
-//            // 鏌ユ壘鏈�鍚庝竴涓�'-'鐨勪綅缃�
-//            int lastDashIndex = sampleCode.lastIndexOf('-');
-//            if (lastDashIndex != -1) {
-//                int secondLastDashIndex = sampleCode.lastIndexOf('-', lastDashIndex - 1);
-//                // 澶勭悊鏈�鍚庝竴涓�'-'鍓嶇殑閮ㄥ垎
-//                if (secondLastDashIndex != -1) {
-//                    // 澶勭悊鏈�鍚庝竴涓�'-'鍙婁箣鍚庣殑閮ㄥ垎
-//                    String afterLastDash = sampleCode.substring(lastDashIndex);
-//
-//                    updateCode = updateCode + afterLastDash;
-//                }
-//            }
-//            insSampleMapper.update(null, Wrappers.<InsSample>lambdaUpdate()
-//                    .eq(InsSample::getId, insSample.getId())
-//                    .set(InsSample::getSampleCode, updateCode));
-//
-//        }
-//    }
-//
-//    @Override
-//    public List<InsUnqualifiedRetestProduct> getRetestResult(Integer insProductId) {
-//        return insUnqualifiedRetestProductMapper.selectList(Wrappers.<InsUnqualifiedRetestProduct>lambdaQuery()
-//                .eq(InsUnqualifiedRetestProduct::getInsProductId, insProductId));
-//    }
-//
-//    /**
-//     * 淇敼閲囪喘璁㈠崟鎺ユ敹鐘舵��, 閬垮厤鍥炴粴
-//     * @param id
-//     */
-//    @Transactional
-//    public void updateIfsInventoryQuantity(Integer id) {
-//        ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
-//                .set(IfsInventoryQuantity::getIsRegister, 1)
-//                .eq(IfsInventoryQuantity::getId, id));
-//    }
-//
-//    /**
-//     * 鏂板閾滃崟涓濅笅鍗�
-//     * @param list
-//     * @param insOrder
-//     * @return
-//     */
-//    @Override
-//    public int addRawCopperOrder(List<SampleProductDto> list, CopperInsOrderDto insOrder) {
-//        insOrder.setState(1);
-//        insOrder.setTypeSource(1);
-//
-//        LocalDate appointed = insOrder.getAppointed();
-//
-//        insOrderMapper.insert(insOrder); // 涓昏〃
-//
-//        list.forEach(a -> {
-//            a.setId(null);
-//            a.setInsOrderId(insOrder.getId());
-//            insSampleMapper.insert(a);
-//            if (ObjectUtil.isNotEmpty(a.getInsProduct())) {
-//                // 鍒ゆ柇鏄惁濉啓寰呮椤规暟閲�
-//                if (a.getQuantity() != null) {
-//                    List<InsProduct> ip2 = new ArrayList<>();
-//                    for (Integer i = 1; i <= a.getQuantity(); i++) {
-//                        // 閲嶆柊鎷疯礉 鍒涘缓鏂板璞�
-//                        AtomicInteger atomicInteger = new AtomicInteger(i);
-//                        List<InsProduct> insProducts = a.getInsProduct().stream().map(insProduct -> {
-//                            insProduct.setRawMaterialTag(String.valueOf(atomicInteger.get()));
-//                            InsProduct product = new InsProduct();
-//                            BeanUtils.copyProperties(insProduct, product);
-//                            return product;
-//                        }).collect(Collectors.toList());
-//
-//                        ip2.addAll(insProducts);
-//                    }
-//                    addInsProductMethod(a.getId(), ip2);
-//                } else {
-//                    addInsProductMethod(a.getId(), a.getInsProduct());
-//                }
-//            }
-//            if (ObjectUtil.isNotEmpty(a.getChildSampleList())) {
-//                for (SampleProductDto b : a.getChildSampleList()) {
-//                    for (int i = 0; i < b.getNum(); i++) {
-//                        b.setId(null);
-//                        b.setInsOrderId(insOrder.getId());
-//                        b.setParentId(a.getId());
-//                        insSampleMapper.insert(b);
-//                        if (ObjectUtil.isNotEmpty(b.getInsProduct())) {
-//                            addInsProductMethod(b.getId(), b.getInsProduct());
-//                        }
-//                    }
-//                }
-//            }
-//        });
-//
-//        // 娣诲姞鍘熸潗鏂欎俊鎭�
-//        IfsInventoryQuantity ifsInventoryQuantity = new IfsInventoryQuantity();
-//        // 鍩烘湰淇℃伅
-//        ifsInventoryQuantity.setIsSource(0);
-//        ifsInventoryQuantity.setIsInspect(1);
-//        ifsInventoryQuantity.setState(1);
-//        ifsInventoryQuantity.setIsFinish(0);
-//        ifsInventoryQuantity.setIsCopper(1);
-//        ifsInventoryQuantity.setIsQuarter(0);
-//        ifsInventoryQuantity.setInspectStatus(0);
-//
-//        ifsInventoryQuantity.setQtyArrived(insOrder.getQtyArrived());
-//        ifsInventoryQuantity.setBuyUnitMeas(insOrder.getBuyUnitMeas());
-//        ifsInventoryQuantity.setSupplierName(insOrder.getSupplierName());
-//        ifsInventoryQuantity.setUpdateBatchNo(insOrder.getUpdateBatchNo());
-//        ifsInventoryQuantity.setDeclareDate(insOrder.getDeclareDate());
-//
-//        ifsInventoryQuantityMapper.insert(ifsInventoryQuantity);
-//
-//
-//        insOrder.setIfsInventoryId(ifsInventoryQuantity.getId());
-//        insOrder.setState(1);
-//
-//
-//        upInsOrderOfState(insOrder);
-//        upInsOrder(insOrder.getId(), null, appointed != null ? appointed.toString() : null, SecurityUtils.getUserId().intValue(), "鍘熸潗鏂�");
-//
-//        return insOrder.getId();
-//    }
-//
-//    /**
-//     * 淇敼濮旀墭涓嬪崟缂栧彿
-//     * @param insOrder
-//     */
-//    @Override
-//    public void updateOrderEntrustCode(InsOrder insOrder) {
-//        // 鍒ゆ柇褰撳墠璁㈠崟鏄惁鐢熸垚浜嗘姤鍛�, 鐢熸垚浜嗘姤鍛婁笉鑳戒慨鏀瑰崟鍙�
-//        Long count = insReportMapper.selectCount(Wrappers.<InsReport>lambdaQuery()
-//                .eq(InsReport::getInsOrderId, insOrder.getId()));
-//        if (count > 0 ) {
-//            throw new ErrorException("褰撳墠璁㈠崟宸茬粡鐢熸垚浜嗘姤鍛婁笉鑳戒慨鏀圭紪鍙�");
-//        }
-//
-//        Long count1 = insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery()
-//                .eq(InsOrder::getEntrustCode, insOrder.getEntrustCode()));
-//        if (count1 > 0) {
-//            throw new ErrorException("璇ョ紪鍙烽噸澶�");
-//        }
-//
-//        //淇敼鎶ュ憡鐨勭紪鍙�
-//        insOrderMapper.update(null, Wrappers.<InsOrder>lambdaUpdate()
-//                .eq(InsOrder::getId, insOrder.getId())
-//                .set(InsOrder::getEntrustCode, insOrder.getEntrustCode()));
-//
-//        // 淇敼鏍峰搧鐨勭紪鍙�
-//        // 鏌ヨ鎵�鏈夌殑鏍峰搧
-//        List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery()
-//                .eq(InsSample::getInsOrderId, insOrder.getId()));
-//        for (InsSample insSample : insSamples) {
-//            String sampleCode = insSample.getSampleCode();
-//            String updateCode = insOrder.getEntrustCode();
-//            // 鏌ユ壘鏈�鍚庝竴涓�'-'鐨勪綅缃�
-//            int lastDashIndex = sampleCode.lastIndexOf('-');
-//            if (lastDashIndex != -1) {
-//                int secondLastDashIndex = sampleCode.lastIndexOf('-', lastDashIndex - 1);
-//                // 澶勭悊鏈�鍚庝竴涓�'-'鍓嶇殑閮ㄥ垎
-//                if (secondLastDashIndex != -1) {
-//                    // 澶勭悊鏈�鍚庝竴涓�'-'鍙婁箣鍚庣殑閮ㄥ垎
-//                    String afterLastDash = sampleCode.substring(lastDashIndex);
-//
-//                    updateCode = updateCode + afterLastDash;
-//                }
-//            }
-//            insSampleMapper.update(null, Wrappers.<InsSample>lambdaUpdate()
-//                    .eq(InsSample::getId, insSample.getId())
-//                    .set(InsSample::getSampleCode, updateCode));
-//
-//        }
-//    }
-//
-//    /**
-//     * 淇敼妫�楠屼笅鍗曞唴瀹�
-//     * @param insOrderUpdateDto
-//     * @return
-//     */
-//    @Override
-//    @Transactional(rollbackFor = Exception.class)
-//    public Boolean updateInsOrder(InsOrderUpdateDto insOrderUpdateDto) {
-//        // 淇敼璁㈠崟
-//        insOrderUpdateDto.getInsOrder().setState(0);
-//        insOrderUpdateDto.getInsOrder().setTell("");
-//        insOrderMapper.updateById(insOrderUpdateDto.getInsOrder());
-//
-//        // 淇敼妫�楠岄」
-//        for (SampleProductDto sampleProductDto : insOrderUpdateDto.getSampleProduct()) {
-//            insProductService.updateBatchById(sampleProductDto.getInsProduct());
-//        }
-//
-//        return true;
-//    }
-//
-//    /**
-//     * 鎴愬搧鏍囩鎵撳嵃
-//     * @param ids
-//     * @return
-//     */
-//    @Override
-//    public List<InsOrderPrintingVo> labelOrderPrinting(List<Integer> ids) {
-//        return insOrderMapper.labelOrderPrinting(ids);
-//    }
-//
-//    /**
-//     * 鏍规嵁鏍峰搧id鏌ヨ妫�楠岄」鏍�
-//     * @param insSampleId
-//     * @return
-//     */
-//    @Override
-//    public List<StandardProductList> getProductTreeBySampleId(Integer insSampleId) {
-//        // 鏌ヨ绗竴涓楠岄」鑾峰彇妫�楠岄」鏍�
-//        InsProduct insProduct = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
-//                .eq(InsProduct::getInsSampleId, insSampleId)
-//                .last("limit 1"));
-//        String tree = insProduct.getFactory() + " - " +
-//                insProduct.getLaboratory() + " - " +
-//                insProduct.getSampleType() + " - " +
-//                insProduct.getSample() + " - " +
-//                insProduct.getModel();
-//        // 鏌ヨ鏍囧噯鏍�
-//        List<StandardProductList> standardProductLists = standardProductListMapper.selectList(Wrappers.<StandardProductList>lambdaQuery()
-//                .eq(StandardProductList::getStandardMethodListId, insProduct.getStandardMethodListId())
-//                .eq(StandardProductList::getTree, tree));
-//        for (StandardProductList standardProductList : standardProductLists) {
-//            standardProductList.setId(null);
-//        }
-//
-//        return standardProductLists;
-//    }
-//
-//    /**
-//     * 娣诲姞閬楁紡鐨勬楠岄」
-//     * @param omitOrderProductDto
-//     * @return
-//     */
-//    @Override
-//    public boolean addOmitOrderProduct(OmitOrderProductDto omitOrderProductDto) {
-//        if (omitOrderProductDto.getInsSampleId() == null) {
-//            throw new ErrorException("缂哄皯鏍峰搧Id");
-//        }
-//        for (InsProduct product : omitOrderProductDto.getInsProductBindingList()) {
-//            if (product.getState() == 1) {
-//                product.setId(null);
-//                product.setCreateTime(null);
-//                product.setCreateUser(null);
-//                product.setUpdateTime(null);
-//                product.setUpdateUser(null);
-//                product.setInsSampleId(omitOrderProductDto.getInsSampleId());
-//                if (StringUtils.isBlank(product.getCableTag())) {
-//                    product.setCableTag(null);
-//                }
-//                if (product.getInspectionItemSubclass() == null) {
-//                    product.setInspectionItemSubclass("");
-//                }
-//                if (StringUtils.isBlank(product.getAsk()) || StringUtils.isBlank(product.getTell())) {
-//                    throw new ErrorException("鏈夋楠岄」鐨勮姹傚�兼垨瑕佹眰鎻忚堪涓虹┖, 璇峰~鍐欒姹傚�兼垨瑕佹眰鎻忚堪");
-//                }
-//                insProductMapper.insert(product);
-//            }
-//        }
-//
-//        return true;
-//    }
-//
-//    /**
-//     * 鎴愬搧妫�楠屽崟瀵煎嚭
-//     * @param sampleOrderDto
-//     * @param response
-//     */
-//    @Override
-//    public void rawAllInsOrderExport(SampleOrderDto sampleOrderDto, HttpServletResponse response) {
-//        //鍒ゆ柇鍏ㄩ儴,涓汉,缁勭粐鐨勬潈闄�
-//        //todo:浠呯湅鎴戣幏鍙栧綋鍓嶄汉鎵�灞炲疄楠屽id
-//        String laboratory = null;
-//        // 鍒ゆ柇鏄惁鏄叏閮�
-//        String isOrderAll = null;
-//        if (sampleOrderDto.getState() != null && sampleOrderDto.getState() == -2) {
-//            isOrderAll = "1";
-//            sampleOrderDto.setState(null);
-//        }
-//        List<SampleOrderDto> sampleOrderDtoList = insOrderMapper.rawAllInsOrderExport(QueryWrappers.queryWrappers(sampleOrderDto), laboratory, isOrderAll);
-//
-//        // 鍒ゆ柇鏄惁鏄笉鍚堟牸, 涓嶅悎鏍兼煡璇笉鍚堟牸椤�
-//        for (SampleOrderDto orderDto : sampleOrderDtoList) {
-//            if (orderDto.getInsResult() != null && orderDto.getInsResult() == 0){
-//                // 鏌ヨ涓嶅悎鏍奸」
-//                List<String> unqualifiedList = insProductMapper.selectUnqualifiedList(orderDto.getId());
-//                orderDto.setUnqualifiedItem(CollUtil.join(unqualifiedList, ","));
-//            }
-//            orderDto.setCreateTimeString(orderDto.getCreateTime() == null ? "" : orderDto.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
-//
-//        }
-//
-//        response.setContentType("application/vnd.ms-excel");
-//        response.setCharacterEncoding("UTF-8");
-//        try {
-//            // 杩欓噷URLEncoder.encode鍙互闃叉涓枃涔辩爜 褰撶劧鍜宔asyexcel娌℃湁鍏崇郴
-//            String fileName = URLEncoder.encode("濮旀墭妫�娴嬩俊鎭鍑�", "UTF-8");
-//            response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
-//            //鏂板缓ExcelWriter
-//            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
-//            //鑾峰彇sheet0瀵硅薄
-//            WriteSheet mainSheet = EasyExcel.writerSheet(0, "濮旀墭妫�娴嬩俊鎭鍑�").head(SampleOrderDto.class).build();
-//
-//            //鍚憇heet0鍐欏叆鏁版嵁 浼犲叆绌簂ist杩欐牱鍙鍑鸿〃澶�
-//            excelWriter.write(sampleOrderDtoList, mainSheet);
-//            //鍏抽棴娴�
-//            excelWriter.finish();
-//        } catch (IOException e) {
-//            throw new RuntimeException("瀵煎嚭澶辫触");
-//        }
-//    }
-//
-//}
-//
-//
-//
-//
+package com.ruoyi.inspect.service.impl;
+
+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 cn.hutool.json.JSONUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.basic.mapper.IfsInventoryQuantityMapper;
+import com.ruoyi.basic.mapper.StandardProductListMapper;
+import com.ruoyi.basic.mapper.StructureItemParameterMapper;
+import com.ruoyi.basic.pojo.IfsInventoryQuantity;
+import com.ruoyi.basic.pojo.StandardProductList;
+import com.ruoyi.basic.pojo.StructureItemParameter;
+import com.ruoyi.basic.pojo.StructureTestObject;
+import com.ruoyi.common.constant.InsOrderTypeConstants;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.numgen.NumberGenerator;
+import com.ruoyi.common.utils.*;
+import com.ruoyi.common.utils.api.IfsApiUtils;
+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.InsOrderService;
+import com.ruoyi.inspect.service.InsOrderStateService;
+import com.ruoyi.inspect.service.InsProductService;
+import com.ruoyi.inspect.service.InsSampleService;
+import com.ruoyi.inspect.vo.InsOrderPrintingVo;
+import com.ruoyi.system.mapper.UserMapper;
+import lombok.AllArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.Month;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
+
+/**
+ * @author gaoaoy
+ * @description 閽堝琛ㄣ�恑ns_order(妫�楠屼笅鍗�)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+ * @createDate 2024-03-12 16:17:55
+ */
+@Service
+@AllArgsConstructor
+public class InsOrderServiceImpl extends ServiceImpl<InsOrderMapper, InsOrder>
+        implements InsOrderService {
+
+    private InsOrderMapper insOrderMapper;
+    private InsSampleService insSampleService;
+    private InsSampleMapper insSampleMapper;
+    private InsProductService insProductService;
+    private InsProductMapper insProductMapper;
+    private InsSampleUserMapper insSampleUserMapper;
+    private InsOrderStateService insOrderStateService;
+    private UserMapper userMapper;
+    private IfsInventoryQuantityMapper ifsInventoryQuantityMapper;
+    private final NumberGenerator<InsOrder> numberGenerator;
+    private InsReportMapper insReportMapper;
+    private InsUnqualifiedRetestProductMapper insUnqualifiedRetestProductMapper;
+    private IfsApiUtils ifsApiUtils;
+    private SpotCheckQuarterItemMapper spotCheckQuarterItemMapper;
+    private StandardProductListMapper standardProductListMapper;
+    private StructureItemParameterMapper structureItemParameterMapper;
+
+
+
+    //鑾峰彇妫�楠屼笅鍗曟暟鎹�
+    @Override
+    public IPage<SampleOrderDto> selectInsOrderParameter(IPage<InsOrder> page, SampleOrderDto sampleOrderDto) {
+        String laboratory = null;
+        // 鍒ゆ柇鏄惁鏄叏閮�
+        String isOrderAll = null;
+        if (sampleOrderDto.getState() != null && sampleOrderDto.getState() == -2) {
+            isOrderAll = "1";
+            sampleOrderDto.setState(null);
+        }
+        return insOrderMapper.selectInsOrderPage(page, QueryWrappers.queryWrappers(sampleOrderDto), laboratory, isOrderAll);
+    }
+
+
+    /**
+     * 鍒嗛厤妫�楠屼汉
+     *
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int upInsOrder(Integer orderId, Integer sampleId, String appointed, Integer userId, String sonLaboratory) {
+        InsOrder insOrder = new InsOrder();
+        insOrder.setId(orderId);
+        insOrder.setAppointed(StringUtils.isNotEmpty(appointed) ? LocalDate.parse(appointed) : null);
+        insOrder.setSendTime(LocalDateTime.now());
+        insOrderMapper.updateById(insOrder);
+        List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, orderId));
+        List<Integer> ids = insSamples.stream().map(InsSample::getId).collect(Collectors.toList());
+        List<InsProduct> insProducts = insProductMapper.selectList(Wrappers.<InsProduct>lambdaQuery()
+                .in(InsProduct::getInsSampleId, ids)
+                .eq(InsProduct::getState, 1)
+                .select(InsProduct::getSonLaboratory).groupBy(InsProduct::getSonLaboratory));
+
+        // 鎵归噺娣诲姞妫�楠屼换鍔$姸鎬佽〃
+        List<InsOrderState> insOrderStateList = insProducts.stream().map(insProduct -> {
+            InsOrderState insOrderState = new InsOrderState();
+            insOrderState.setInsOrderId(orderId);
+            try {
+                insOrderState.setLaboratory(insProduct.getSonLaboratory());
+            } catch (NullPointerException e) {
+                throw new ErrorException("璇ユ楠屽崟鏈夋湭缁存姢瀹為獙瀹ょ殑妫�楠岄」鐩�");
+            }
+            insOrderState.setInsState(0);
+            return insOrderState;
+        }).collect(Collectors.toList());
+        insOrderStateService.saveBatch(insOrderStateList);
+
+        if (userId != null) {
+            InsSampleUser insSampleUser = new InsSampleUser();
+            insSampleUser.setState(0);
+            insSampleUser.setUserId(userId);
+            insSampleUser.setInsSampleId(orderId);
+            insSampleUser.setSonLaboratory(sonLaboratory);
+            insSampleUserMapper.insert(insSampleUser);
+        }
+
+        // 鍒ゆ柇璁㈠崟鏈夋病鏈夌粦瀹氭娊鏍疯鍒�
+        InsOrder order = insOrderMapper.selectById(orderId);
+        if (order.getQuarterItemId() != null) {
+           // 闇�瑕佹坊鍔犱笅鍙戞椂闂村埌鎶芥牱鏃堕棿, 鍙栨牱浜哄憳灏辨槸妫�娴嬩汉
+            SpotCheckQuarterItem spotCheckQuarterItem = spotCheckQuarterItemMapper.selectById(order.getQuarterItemId());
+            spotCheckQuarterItem.setSpotCheckTime(order.getSendTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+            User user = userMapper.selectById(userId);
+            spotCheckQuarterItem.setSamplingUser(user.getName());
+            spotCheckQuarterItemMapper.updateById(spotCheckQuarterItem);
+        }
+
+        return 1;
+    }
+
+
+    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 "鏈煡";
+        }
+    }
+
+
+    // 濡傛灉浣犱娇鐢� Java 8+锛屼篃鍙互鐢� Stream API 绠�鍖栦唬鐮侊細
+    public List<StandardProductList> findMissingItemsWithStream(List<StandardProductList> standardList,
+                                                                List<InsProduct> insList) {
+        Set<Integer> insIds = insList.stream()
+                .map(InsProduct::getStructureItemParameterId)
+                .collect(Collectors.toSet());
+
+        return standardList.stream()
+                .filter(product -> !insIds.contains(product.getStructureItemParameterId()))
+                .collect(Collectors.toList());
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int addInsOrder(List<SampleProductDto> list, InsOrder insOrder) {
+        // todo: 涓嬪崟鍒ゆ柇鎶芥牱璁″垝鐨勫敮涓�鎬�
+        if (insOrder.getQuarterItemId() != null) {
+            Long quarterItemCount = insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery()
+                    .eq(InsOrder::getQuarterItemId, insOrder.getQuarterItemId())
+                    .notIn(InsOrder::getState, -1 ,2 ,3));
+            if (quarterItemCount > 0) {
+                throw new ErrorException("璇ユ娊鏍疯鍒掑凡琚粦瀹氳繃");
+            }
+        }
+        insOrder.setState(0);
+
+        LocalDate appointed = insOrder.getAppointed();
+
+        insOrderMapper.insert(insOrder); // 涓昏〃
+
+        list.forEach(a -> {
+            a.setId(null);
+            a.setInsOrderId(insOrder.getId());
+            insSampleMapper.insert(a);
+            if (ObjectUtil.isNotEmpty(a.getInsProduct())) {
+                // 鍒ゆ柇鏄惁濉啓寰呮椤规暟閲�
+                if (a.getQuantity() != null) {
+                    List<InsProduct> ip2 = new ArrayList<>();
+                    for (Integer i = 1; i <= a.getQuantity(); i++) {
+                        // 閲嶆柊鎷疯礉 鍒涘缓鏂板璞�
+                        AtomicInteger atomicInteger = new AtomicInteger(i);
+                        List<InsProduct> insProducts = a.getInsProduct().stream().map(insProduct -> {
+                            insProduct.setRawMaterialTag(String.valueOf(atomicInteger.get()));
+                            InsProduct product = new InsProduct();
+                            BeanUtils.copyProperties(insProduct, product);
+                            return product;
+                        }).collect(Collectors.toList());
+
+                        ip2.addAll(insProducts);
+                    }
+                    addInsProductMethod(a.getId(), ip2);
+                } else {
+                    addInsProductMethod(a.getId(), a.getInsProduct());
+                }
+            }
+            // 鍒ゆ柇鏄惁鏈夌數缂嗛厤缃�
+            if (ObjectUtil.isNotEmpty(a.getInsulating())) {
+                // 鍒ゆ柇鏄惁鏈夎緟鍔╃嚎鑺�
+                if (ObjectUtil.isNotEmpty(a.getAuxiliaryWireCore())) {
+                    if (a.getAuxiliaryWireCore().getInsProduct().stream().filter(insProduct -> insProduct.getState() == 1).count() !=
+                            a.getInsulating().getInsProduct().stream().filter(insProduct -> insProduct.getState() == 1).count()) {
+                        throw new ErrorException("鐢电紗閰嶇疆杈呭姪绾胯姱妫�楠岄」鏁伴噺涓嶇粺涓�, 璇锋鏌�");
+                    }
+                }
+                List<InsProduct> ip2 = new ArrayList<>();
+                for (String s : a.getInsulating().getNum()) {
+                    // 閲嶆柊鎷疯礉 鍒涘缓鏂板璞�
+                    List<InsProduct> insProducts = a.getInsulating().getInsProduct().stream().map(insProduct -> {
+                        insProduct.setCableTag(s);
+                        InsProduct product = new InsProduct();
+                        BeanUtils.copyProperties(insProduct, product);
+                        return product;
+                    }).collect(Collectors.toList());
+                    ip2.addAll(insProducts);
+                }
+                for (InsProduct product : ip2) {
+                    product.setStandardMethodListId(a.getInsulating().getStandardMethodListId());
+                }
+                addInsProductMethod(a.getId(), ip2);
+            }
+            // 鍒ゆ柇鏄惁鏈夎緟鍔╃嚎鑺�
+            if (ObjectUtil.isNotEmpty(a.getAuxiliaryWireCore())) {
+                List<InsProduct> ip2 = new ArrayList<>();
+                for (String s : a.getAuxiliaryWireCore().getNum()) {
+                    // 閲嶆柊鎷疯礉 鍒涘缓鏂板璞�
+                    List<InsProduct> insProducts = a.getAuxiliaryWireCore().getInsProduct().stream().map(insProduct -> {
+                        insProduct.setCableTag(s);
+                        InsProduct product = new InsProduct();
+                        BeanUtils.copyProperties(insProduct, product);
+                        return product;
+                    }).collect(Collectors.toList());
+                    ip2.addAll(insProducts);
+                }
+                for (InsProduct product : ip2) {
+                    product.setStandardMethodListId(a.getAuxiliaryWireCore().getStandardMethodListId());
+                }
+                addInsProductMethod(a.getId(), ip2);
+            }
+            // 瀛愭牱鍝侀厤缃�
+            if (ObjectUtil.isNotEmpty(a.getChildSampleList())) {
+                for (SampleProductDto b : a.getChildSampleList()) {
+                    for (int i = 0; i < b.getNum(); i++) {
+                        b.setId(null);
+                        b.setInsOrderId(insOrder.getId());
+                        b.setParentId(a.getId());
+                        insSampleMapper.insert(b);
+                        if (ObjectUtil.isNotEmpty(b.getInsProduct())) {
+                            addInsProductMethod(b.getId(), b.getInsProduct());
+                        }
+                    }
+                }
+            }
+        });
+        //鏄惁涓哄師鏉愭枡涓嬪崟
+        if (insOrder.getTypeSource() != null && insOrder.getTypeSource().equals(1)) {
+            // 鍘熸潗鏂欎笅鍗�: 濮旀墭浜哄氨鏄姤妫�浜�, 鐢熶骇鍗曚綅灏辨槸渚涘簲鍟嗗崟浣�
+            IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(insOrder.getIfsInventoryId());
+            Integer declareUserId = ifsInventoryQuantity.getDeclareUserId();
+            User user = userMapper.selectById(declareUserId);
+            if (user == null) {
+               throw new ErrorException("缂哄皯鎶ユ浜轰俊鎭�");
+            }
+            // 渚涘簲鍟嗗悕绉�
+            insOrder.setProduction(ifsInventoryQuantity.getSupplierName());
+            insOrder.setProductionEn("");
+            // 濮旀墭浜哄悕绉�
+            insOrder.setPrepareUserId(user.getId());
+            insOrder.setPrepareUser(user.getName());
+            insOrder.setPrepareUserEn(user.getNameEn());
+            insOrder.setPhone(user.getPhone());
+            insOrder.setState(1);
+            Long count1 = insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery()
+                    .eq(InsOrder::getIfsInventoryId, insOrder.getIfsInventoryId())
+                    .ne(InsOrder::getState, -1)
+                    .eq(InsOrder::getOrderType, InsOrderTypeConstants.ENTER_THE_FACTORY)
+                    .ne(InsOrder::getId, insOrder.getId()));
+            // 鍒ゆ柇涔嬪墠鏄惁鏈夎繘鍘傛楠�
+            if (count1 == 0) {
+                ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>().set(IfsInventoryQuantity::getState, 1)
+                        .eq(IfsInventoryQuantity::getId, insOrder.getIfsInventoryId()));
+            }
+
+            // 鍒ゆ柇缁撴潫鐘舵�佷慨鏀瑰悎鏍肩姸鎬�
+            if (ifsInventoryQuantity.getIsFinish().equals(0)) {
+                ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
+                        .eq(IfsInventoryQuantity::getId, insOrder.getIfsInventoryId())
+                        .set(IfsInventoryQuantity::getInspectStatus, 0));
+            }
+
+            // 瀹℃牳妫�楠屽崟
+            upInsOrderOfState(insOrder);
+
+            // 鍒嗛厤妫�楠屼汉
+            upInsOrder(insOrder.getId(), null, appointed != null ? appointed.toString() : null, SecurityUtils.getUserId().intValue(), "鍘熸潗鏂�");
+
+            // 鏍规嵁闆朵欢鍙峰垽鏂槸鍚︽槸杈呮潗
+            boolean isRaw = false;
+            StructureTestObject productObject = insOrderMapper.selectProductByPartNo(ifsInventoryQuantity.getPartNo());
+            // 鏌ヨ浜у搧
+            if (productObject != null && StrUtil.isNotBlank(productObject.getObjectType()) && productObject.getObjectType().equals("1")) {
+                isRaw = true;
+            } else {
+            // 鏌ヨ瀵硅薄
+                StructureTestObject testObject = insOrderMapper.selectByPartNo(ifsInventoryQuantity.getPartNo());
+                if (testObject != null && StrUtil.isNotBlank(testObject.getObjectType()) && testObject.getObjectType().equals("1")) {
+                    isRaw = true;
+                }
+            }
+
+            if (isRaw) {
+                // 鑾峰彇褰撳墠瀛e害鐨勫紑濮嬫椂闂村拰缁撴潫鏃堕棿
+                LocalDateTime now = LocalDateTime.now();
+                // 鑾峰彇褰撳墠鏈堜唤
+                int month = now.getMonthValue();
+                // 纭畾褰撳墠瀛e害鐨勫紑濮嬫湀浠�
+                int startMonth = (month - 1) / 3 * 3 + 1;
+                // 鏋勯�犲搴︾殑寮�濮嬫椂闂�
+                LocalDateTime startOfQuarter = LocalDateTime.of(now.getYear(), Month.of(startMonth), 1, 0, 0);
+                // 璁$畻涓嬩竴涓搴︾殑寮�濮嬫椂闂�
+                LocalDateTime startOfNextQuarter = startOfQuarter.plusMonths(3);
+                // 璁$畻褰撳墠瀛e害鐨勭粨鏉熸椂闂�
+                LocalDateTime endOfQuarter = startOfNextQuarter.minusSeconds(1);
+
+                // 鏍规嵁涓嬪崟鐨勮鏍煎瀷鍙峰垽鏂槸鍚︿负瀛e害棣栨鍑虹幇
+                Integer count = ifsInventoryQuantityMapper.selectIsFirst(insOrder.getPartDetail(),
+                        ifsInventoryQuantity.getSupplierName(),
+                        startOfNextQuarter,
+                        endOfQuarter);
+
+                if(count == 0) {
+                    ifsInventoryQuantity.setIsFirst(1);
+                    ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
+                            .eq(IfsInventoryQuantity::getId, insOrder.getIfsInventoryId())
+                            .set(IfsInventoryQuantity::getIsFirst, 1));
+                }
+            }
+        }
+        return insOrder.getId();
+    }
+
+    /**
+     * 娣诲姞妫�楠岄」
+     * @param sampleId
+     * @param productList
+     */
+    private void addInsProductMethod(Integer sampleId, List<InsProduct> productList) {
+        for (InsProduct product : productList) {
+            if (product.getState() == 1) {
+                product.setId(null);
+                product.setCreateTime(null);
+                product.setCreateUser(null);
+                product.setUpdateTime(null);
+                product.setUpdateUser(null);
+                product.setInsSampleId(sampleId);
+                if (product.getInspectionItemSubclass() == null) {
+                    product.setInspectionItemSubclass("");
+                }
+                if (StringUtils.isBlank(product.getAsk()) || StringUtils.isBlank(product.getTell())) {
+                    throw new ErrorException("鏈夋楠岄」鐨勮姹傚�兼垨瑕佹眰鎻忚堪涓虹┖, 璇峰厛鍘绘爣鍑嗗簱閰嶇疆瑕佹眰鍊兼垨瑕佹眰鎻忚堪");
+                }
+                if (StringUtils.isBlank(product.getSonLaboratory())) {
+                    throw new ErrorException("鏈夋楠岄」鐨勭殑瀛愬疄楠屽涓虹粦瀹�, 璇峰厛缁戝畾瀛愬疄楠屽");
+                }
+                insProductMapper.insert(product);
+            }
+        }
+    }
+
+
+    @Override
+    public Map<String, Object> getInsOrder(Integer id) {
+        Map<String, Object> map = new HashMap<>();
+        InsOrder insOrder = insOrderMapper.selectById(id);
+        List<SampleProductDto> list;
+        // 鍒ゆ柇鏄惁鏄繘鍘傛姤鍛婂厤妫�
+        if (insOrder.getIsExemption().equals(1)) {
+            list = insSampleMapper.selectExemptionByOrderId(id);
+        } else {
+            list = insSampleMapper.selectSampleProductListByOrderId2(id);
+        }
+        Map<String, Object> map1 = insSampleMapper.selectInsOrder(id);
+        map.put("insOrder", insOrder);
+        map.put("sampleProduct", list);
+        map.put("insOrderTemplate", map1);
+        return map;
+    }
+
+    /**
+     * 瀹℃牳妫�楠屽崟
+     * @param insOrder
+     * @return
+     */
+    @Override
+    public int upInsOrderOfState(InsOrder insOrder) {
+        insOrder.setExamineTime(LocalDateTime.now());
+        if (insOrder.getState() == 1) {
+            //瀹℃牳閫氳繃鎵嶄細鐢熸垚濮旀墭缂栧彿
+            // todo: 妫�楠岀被鍨嬬紪鍙�
+            InsOrder order = this.getById(insOrder.getId());
+            String code = "";
+            switch (order.getOrderType()) {
+                case InsOrderTypeConstants.SPOT_CHECK:
+                    code = "C";
+                    break;
+                case InsOrderTypeConstants.CUSTOMER_ORDERED:
+                    code = "W";
+                    break;
+                case InsOrderTypeConstants.ENTER_THE_FACTORY:
+                case InsOrderTypeConstants.QUARTERLY_TEST:
+                    code = "Y";
+                    break;
+            }
+            // 鐢熸垚缂栧彿
+            String no = numberGenerator.generateNumberWithPrefix(3,
+                    "JCZX/ZB-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
+                    InsOrder::getEntrustCode);
+            // 鍒ゆ柇鏄惁鏄搴︽楠�, 鏄搴︽楠屽彇娑堝師鏉愭枡瀛e害妫�楠屼笅鍗�
+            if (InsOrderTypeConstants.QUARTERLY_TEST.equals(order.getOrderType())) {
+                ifsInventoryQuantityMapper.update(null,  Wrappers.<IfsInventoryQuantity>lambdaUpdate()
+                        .eq(IfsInventoryQuantity::getId, order.getIfsInventoryId())
+                        .set(IfsInventoryQuantity::getIsQuarter, 0));
+
+                // 鏌ヨ鏄惁鏈夎繃杩涘巶妫�楠�, 鏈夎幏鍙栭噷闈㈢殑缂栧彿
+                InsOrder order1 = insOrderMapper.selectOne(Wrappers.<InsOrder>lambdaQuery()
+                        .eq(InsOrder::getIfsInventoryId, order.getIfsInventoryId())
+                        .ne(InsOrder::getState, -1)
+                        .eq(InsOrder::getOrderType, InsOrderTypeConstants.ENTER_THE_FACTORY));
+                if (order1 != null) {
+                  no = order1.getEntrustCode();
+                }
+            }
+
+            int count = 1;
+            // 鏌ヨ鏍峰搧琛�
+            List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery()
+                    .eq(InsSample::getInsOrderId, insOrder.getId()));
+            for (InsSample insSample : insSamples) {
+                if (StringUtils.isBlank(insSample.getSampleCode())) {
+                    // 濡傛灉鍙湁涓�涓牱鍝佸氨涓嶉渶瑕佹嫾鎺ユ暟瀛�
+                    if (insSamples.size() != 1) {
+                        insSample.setSampleCode(no + "-" + count);
+                        count++;
+                    } else {
+                        insSample.setSampleCode(no);
+                    }
+                }
+            }
+            insSampleService.updateBatchById(insSamples);
+
+            insOrder.setEntrustCode(no);
+        }
+        return insOrderMapper.updateById(insOrder);
+    }
+
+    @Override
+    public Map<String, Object> getInsOrderAndSample(Integer id, String laboratory) {
+        Map<String, Object> map = new HashMap<>();
+        InsOrder insOrder = insOrderMapper.selectById(id);
+        List<SampleProductDto> list = insSampleMapper.getInsOrderAndSample(id, laboratory);
+        map.put("insOrder", insOrder);
+        map.put("sampleProduct", list);
+        //鏌ヨ鎵�鏈夎褰曟ā鐗堝幓閲�
+        List<Map<Integer, Object>> list2 = insOrderMapper.selectReportModelByOrderId(id, laboratory);
+        map.put("reportModel", list2);
+        return map;
+    }
+
+    @Override
+    public IPage<SampleProductDto2> selectSampleAndProductByOrderId(IPage<SampleProductDto2> page, SampleProductDto2 sampleProductDto) {
+        IPage<SampleProductDto2> productDto2IPage = insOrderMapper.selectSampleAndProductByOrderId(page,
+                QueryWrappers.queryWrappers(sampleProductDto)
+                        .orderByAsc("sample_code")
+                        .orderByAsc("cable_tag")
+                        .orderByAsc("sort"),
+                sampleProductDto.getId());
+        return productDto2IPage;
+    }
+
+
+    @Override
+    public int updateStatus(Integer id) {
+        return insOrderMapper.updateStatus(id);
+    }
+
+
+    /**
+     * 鑾峰彇ifs搴撳瓨淇℃伅
+     * @param
+     * @return
+     */
+    @Override
+    public void getIfsOrder() {
+        HashMap<String, Object> map = new HashMap<>();
+        map.put("LOCATION_NO","1302");
+        map.put("STATE_DB","To be Inspected");
+        List<Map<String, Object>> inventory = ifsApiUtils.getInventory(JSONUtil.toJsonStr(map));
+        if(inventory.size() == 0) {
+            return;
+        }
+        // 杩涜淇濆瓨
+        for (Map<String, Object> map1 : inventory) {
+            DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); // 鏃堕棿鏍煎紡鍖�
+            IfsInventoryQuantity ifsInventoryQuantity = new IfsInventoryQuantity();
+            ifsInventoryQuantity.setContract(map1.get("CONTRACT") == null ? "" : map1.get("CONTRACT").toString()); // 鍩�
+            ifsInventoryQuantity.setPartNo(map1.get("PART_NO") == null ? "" : map1.get("PART_NO").toString() ); // 闆朵欢鍙�
+            ifsInventoryQuantity.setPartDesc(map1.get("PART_DESC") == null ? "" : map1.get("PART_DESC").toString()); // 闆朵欢鎻忚堪
+            ifsInventoryQuantity.setOrderNo(map1.get("ORDER_NO") == null ? "" : map1.get("ORDER_NO").toString()); // 璁㈠崟鍙�
+            ifsInventoryQuantity.setLineNo(map1.get("LINE_NO") == null ? "" : map1.get("LINE_NO").toString()); // 琛屽彿
+            ifsInventoryQuantity.setReleaseNo(map1.get("RELEASE_NO") == null ? "" : map1.get("RELEASE_NO").toString()); // 涓嬭揪鍙�
+            ifsInventoryQuantity.setReceiptNo(Integer.parseInt(map1.get("RECEIPT_NO") == null ? "" : map1.get("RECEIPT_NO").toString())); // 鎺ユ敹鍙�
+            ifsInventoryQuantity.setStatus(map1.get("STATE") == null ? "" : map1.get("STATE").toString()); // 鐘舵�佹弿杩�
+            ifsInventoryQuantity.setStatusDb(map1.get("STATE_DB") == null ? "" : map1.get("STATE_DB").toString()); // 鐘舵��
+            if(map1.get("QTY_ARRIVED") != null) {
+                ifsInventoryQuantity.setQtyArrived(new BigDecimal(map1.get("QTY_ARRIVED").toString())); // 鎶佃揪鐨勯噰璐暟閲�
+            }
+            if(map1.get("QTY_INSPECTED") != null) {
+                ifsInventoryQuantity.setQtyInspected(new BigDecimal(map1.get("QTY_INSPECTED").toString())); // 宸叉楠岀殑璐拱鏁伴噺
+            }
+            if(map1.get("QTY_TO_INSPECT") != null) {
+                ifsInventoryQuantity.setQtyToInspect(new BigDecimal(map1.get("QTY_TO_INSPECT").toString())); // 瑕佹楠岀殑閲囪喘鏁伴噺
+            }
+            if(map1.get("INV_QTY_IN_STORE") != null) {
+                ifsInventoryQuantity.setInvQtyInStore(new BigDecimal(map1.get("INV_QTY_IN_STORE").toString())); // 鎶佃揪鐨勫簱瀛樻暟閲�
+            }
+            if(map1.get("PUR_QTY_IN_STORE") != null) {
+                ifsInventoryQuantity.setPurQtyInStore(new BigDecimal( map1.get("PUR_QTY_IN_STORE").toString())); // 鎶佃揪鐨勯噰璐暟閲�
+
+            }
+            ifsInventoryQuantity.setSupplierId(map1.get("SUPPLIER_ID") == null ? "" : map1.get("SUPPLIER_ID").toString()); // 渚涘簲鍟咺D
+            ifsInventoryQuantity.setSupplierName(map1.get("SUPPLIER_NAME") == null ? "" : map1.get("SUPPLIER_NAME").toString()); // 渚涘簲鍟嗗悕绉�
+            ifsInventoryQuantity.setConfigurationId(map1.get("CONFIGURATION_ID") == null ? "" : map1.get("CONFIGURATION_ID").toString()); // 閰嶇疆鏍囪瘑
+            ifsInventoryQuantity.setLotBatchNo(map1.get("LOT_BATCH_NO") == null ? "" : map1.get("LOT_BATCH_NO").toString()); // 鎵规鍙�
+            ifsInventoryQuantity.setUpdateBatchNo(map1.get("LOT_BATCH_NO") == null ? "" : map1.get("LOT_BATCH_NO").toString()); // 鎵规鍙�
+            ifsInventoryQuantity.setWaivDevRejNo(map1.get("WAIV_DEV_REJ_NO") == null ? "" : map1.get("WAIV_DEV_REJ_NO").toString()); // WDR鍙�
+            ifsInventoryQuantity.setActivitySeq(map1.get("ACTIVITY_SEQ") == null ? null : Integer.parseInt(map1.get("ACTIVITY_SEQ").toString())); // 娲诲姩搴忓垪
+            ifsInventoryQuantity.setSerialNo(map1.get("SERIAL_NO") == null ? "" : map1.get("SERIAL_NO").toString()); // 搴忓垪鍙�
+            ifsInventoryQuantity.setLocationNo(map1.get("LOCATION_NO") == null ? "" : map1.get("LOCATION_NO").toString()); // 搴撲綅鍙�
+            ifsInventoryQuantity.setEngChgLevel(map1.get("ENG_CHG_LEVEL") == null ? "" : map1.get("ENG_CHG_LEVEL").toString()); // 鐗堟湰鍙�
+            ifsInventoryQuantity.setReceiver(map1.get("RECEIVER") == null ? "" : map1.get("RECEIVER").toString()); // 鎺ユ敹浜�
+            ifsInventoryQuantity.setReceiverName(map1.get("RECEIVER_NAME") == null ? "" : map1.get("RECEIVER_NAME").toString()); // 鎺ユ敹浜哄悕绉�
+            ifsInventoryQuantity.setBuyerCode(map1.get("BUYER_CODE") == null ? "" : map1.get("BUYER_CODE").toString()); // 閲囪喘鍛�
+            ifsInventoryQuantity.setBuyerName(map1.get("BUYER_NAME") == null ? "" : map1.get("BUYER_NAME").toString()); // 閲囪喘鍛樺悕绉�
+
+            if(map1.get("ARRIVE_DATE") != null) {
+                ifsInventoryQuantity.setArriveDate(LocalDateTime.parse(map1.get("ARRIVE_DATE").toString(),dateTimeFormatter)); // 瀹為檯鍒拌揣鏃ユ湡
+            }
+            if(map1.get("DELIVERY_DATE") != null) {
+                ifsInventoryQuantity.setDeliveryDate(LocalDateTime.parse(map1.get("DELIVERY_DATE").toString(),dateTimeFormatter)); // 瀹為檯浜よ揣鏃ユ湡
+            }
+            if(map1.get("PRODUCT_DATE") != null) {
+                ifsInventoryQuantity.setProductDate(LocalDateTime.parse(map1.get("PRODUCT_DATE").toString(),dateTimeFormatter)); // 鐢熶骇鏃ユ湡
+
+            }
+            if(map1.get("INVALID_DATE") != null) {
+                ifsInventoryQuantity.setInvalidDate(LocalDateTime.parse(map1.get("INVALID_DATE").toString(),dateTimeFormatter)); // 澶辨晥鏃ユ湡
+            }
+            if(map1.get("APPROVED_DATE") != null) {
+                ifsInventoryQuantity.setApprovedDate(LocalDateTime.parse(map1.get("APPROVED_DATE").toString(),dateTimeFormatter)); // 瀹℃壒鏃ユ湡
+            }
+            ifsInventoryQuantity.setReqCeater(map1.get("REQ_CEATER") == null ? "" : map1.get("REQ_CEATER").toString()); // 閲囪喘鐢宠鍒涘缓浜�
+            ifsInventoryQuantity.setReqCeaterName(map1.get("REQ_CEATER_NAME") == null ? "" : map1.get("REQ_CEATER_NAME").toString()); // 閲囪喘鐢宠鍒涘缓浜哄悕绉�
+            ifsInventoryQuantity.setLineRemarks(map1.get("LINE_REMARKS") == null ? "" : map1.get("LINE_REMARKS").toString()); // 閲囪喘璁㈠崟琛屽娉�
+            ifsInventoryQuantity.setBuyUnitMeas(map1.get("BUY_UNIT_MEAS") == null ? "" : map1.get("BUY_UNIT_MEAS").toString()); // 閲囪喘鍗曚綅
+            ifsInventoryQuantity.setReceiverDate(LocalDateTime.now()); // 鎺ユ敹鏃ユ湡
+            ifsInventoryQuantity.setIsSource(1);
+            ifsInventoryQuantity.setState(0);
+
+            Long count = ifsInventoryQuantityMapper.selectCount(new LambdaQueryWrapper<IfsInventoryQuantity>()
+                    .eq(IfsInventoryQuantity::getOrderNo, ifsInventoryQuantity.getOrderNo())
+                    .eq(IfsInventoryQuantity::getLineNo, ifsInventoryQuantity.getLineNo())
+                    .eq(IfsInventoryQuantity::getReleaseNo, ifsInventoryQuantity.getReleaseNo())
+                    .eq(IfsInventoryQuantity::getReceiptNo, ifsInventoryQuantity.getReceiptNo())
+                    .eq(IfsInventoryQuantity::getLocationNo, ifsInventoryQuantity.getLocationNo())
+                    .eq(IfsInventoryQuantity::getLotBatchNo, ifsInventoryQuantity.getLotBatchNo())
+                    .eq(IfsInventoryQuantity::getSerialNo, ifsInventoryQuantity.getSerialNo())
+                    .eq(IfsInventoryQuantity::getEngChgLevel, ifsInventoryQuantity.getEngChgLevel())
+                    .eq(IfsInventoryQuantity::getWaivDevRejNo, ifsInventoryQuantity.getWaivDevRejNo())
+                    .eq(IfsInventoryQuantity::getActivitySeq, ifsInventoryQuantity.getActivitySeq())
+            );
+            if(count == 0) {
+                ifsInventoryQuantity.setIsFirst(0);
+                // 鏌ヨ浜т笟閾炬娴嬫暟鎹�
+                String industryChainAttrFields = IndustryChainUtils.getIndustryChainAttrFields(ifsInventoryQuantity.getOrderNo(),
+                        ifsInventoryQuantity.getLineNo(),
+                        ifsInventoryQuantity.getReleaseNo());
+                ifsInventoryQuantity.setIndustryChain(industryChainAttrFields);
+
+                ifsInventoryQuantityMapper.insert(ifsInventoryQuantity);
+            }
+        }
+    }
+
+    /**
+     * id鏄師鏉愭枡鐨刬d
+     *
+     * 淇敼璁㈠崟鍗曞彿
+     * @param insOrder
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updateEntrustCode(InsOrder insOrder) {
+        // 鍒ゆ柇褰撳墠璁㈠崟鏄惁鐢熸垚浜嗘姤鍛�, 鐢熸垚浜嗘姤鍛婁笉鑳戒慨鏀瑰崟鍙�
+        List<InsOrder> insOrders = insOrderMapper.selectList(Wrappers.<InsOrder>lambdaQuery()
+                .eq(InsOrder::getIfsInventoryId, insOrder.getId())
+                .ne(InsOrder::getState, -1));
+        List<Integer> insOrderIds = insOrders.stream().map(InsOrder::getId).collect(Collectors.toList());
+        Long count = insReportMapper.selectCount(Wrappers.<InsReport>lambdaQuery()
+                .in(InsReport::getInsOrderId, insOrderIds));
+        if (count > 0 ) {
+            throw new ErrorException("褰撳墠璁㈠崟宸茬粡鐢熸垚浜嗘姤鍛婁笉鑳戒慨鏀圭紪鍙�");
+        }
+
+
+        Long count1 = insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery()
+                .eq(InsOrder::getEntrustCode, insOrder.getEntrustCode())
+                .ne(InsOrder::getIfsInventoryId, insOrder.getId())
+                .ne(InsOrder::getInsState, -1));
+        if (count1 > 0) {
+            throw new ErrorException("璇ョ紪鍙烽噸澶�");
+        }
+
+        //淇敼鎶ュ憡鐨勭紪鍙�
+        insOrderMapper.update(null, Wrappers.<InsOrder>lambdaUpdate()
+                .eq(InsOrder::getIfsInventoryId, insOrder.getId())
+                .set(InsOrder::getEntrustCode, insOrder.getEntrustCode()));
+
+        // 淇敼鏍峰搧鐨勭紪鍙�
+        // 鏌ヨ鎵�鏈夌殑鏍峰搧
+        List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery()
+                .in(InsSample::getInsOrderId, insOrderIds));
+        for (InsSample insSample : insSamples) {
+            String sampleCode = insSample.getSampleCode();
+            String updateCode = insOrder.getEntrustCode();
+            // 鏌ユ壘鏈�鍚庝竴涓�'-'鐨勪綅缃�
+            int lastDashIndex = sampleCode.lastIndexOf('-');
+            if (lastDashIndex != -1) {
+                int secondLastDashIndex = sampleCode.lastIndexOf('-', lastDashIndex - 1);
+                // 澶勭悊鏈�鍚庝竴涓�'-'鍓嶇殑閮ㄥ垎
+                if (secondLastDashIndex != -1) {
+                    // 澶勭悊鏈�鍚庝竴涓�'-'鍙婁箣鍚庣殑閮ㄥ垎
+                    String afterLastDash = sampleCode.substring(lastDashIndex);
+
+                    updateCode = updateCode + afterLastDash;
+                }
+            }
+            insSampleMapper.update(null, Wrappers.<InsSample>lambdaUpdate()
+                    .eq(InsSample::getId, insSample.getId())
+                    .set(InsSample::getSampleCode, updateCode));
+
+        }
+    }
+
+    @Override
+    public List<InsUnqualifiedRetestProduct> getRetestResult(Integer insProductId) {
+        return insUnqualifiedRetestProductMapper.selectList(Wrappers.<InsUnqualifiedRetestProduct>lambdaQuery()
+                .eq(InsUnqualifiedRetestProduct::getInsProductId, insProductId));
+    }
+
+    /**
+     * 淇敼閲囪喘璁㈠崟鎺ユ敹鐘舵��, 閬垮厤鍥炴粴
+     * @param id
+     */
+    @Transactional
+    public void updateIfsInventoryQuantity(Integer id) {
+        ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
+                .set(IfsInventoryQuantity::getIsRegister, 1)
+                .eq(IfsInventoryQuantity::getId, id));
+    }
+
+    /**
+     * 鏂板閾滃崟涓濅笅鍗�
+     * @param list
+     * @param insOrder
+     * @return
+     */
+    @Override
+    public int addRawCopperOrder(List<SampleProductDto> list, CopperInsOrderDto insOrder) {
+        insOrder.setState(1);
+        insOrder.setTypeSource(1);
+
+        LocalDate appointed = insOrder.getAppointed();
+
+        insOrderMapper.insert(insOrder); // 涓昏〃
+
+        list.forEach(a -> {
+            a.setId(null);
+            a.setInsOrderId(insOrder.getId());
+            insSampleMapper.insert(a);
+            if (ObjectUtil.isNotEmpty(a.getInsProduct())) {
+                // 鍒ゆ柇鏄惁濉啓寰呮椤规暟閲�
+                if (a.getQuantity() != null) {
+                    List<InsProduct> ip2 = new ArrayList<>();
+                    for (Integer i = 1; i <= a.getQuantity(); i++) {
+                        // 閲嶆柊鎷疯礉 鍒涘缓鏂板璞�
+                        AtomicInteger atomicInteger = new AtomicInteger(i);
+                        List<InsProduct> insProducts = a.getInsProduct().stream().map(insProduct -> {
+                            insProduct.setRawMaterialTag(String.valueOf(atomicInteger.get()));
+                            InsProduct product = new InsProduct();
+                            BeanUtils.copyProperties(insProduct, product);
+                            return product;
+                        }).collect(Collectors.toList());
+
+                        ip2.addAll(insProducts);
+                    }
+                    addInsProductMethod(a.getId(), ip2);
+                } else {
+                    addInsProductMethod(a.getId(), a.getInsProduct());
+                }
+            }
+            if (ObjectUtil.isNotEmpty(a.getChildSampleList())) {
+                for (SampleProductDto b : a.getChildSampleList()) {
+                    for (int i = 0; i < b.getNum(); i++) {
+                        b.setId(null);
+                        b.setInsOrderId(insOrder.getId());
+                        b.setParentId(a.getId());
+                        insSampleMapper.insert(b);
+                        if (ObjectUtil.isNotEmpty(b.getInsProduct())) {
+                            addInsProductMethod(b.getId(), b.getInsProduct());
+                        }
+                    }
+                }
+            }
+        });
+
+        // 娣诲姞鍘熸潗鏂欎俊鎭�
+        IfsInventoryQuantity ifsInventoryQuantity = new IfsInventoryQuantity();
+        // 鍩烘湰淇℃伅
+        ifsInventoryQuantity.setIsSource(0);
+        ifsInventoryQuantity.setIsInspect(1);
+        ifsInventoryQuantity.setState(1);
+        ifsInventoryQuantity.setIsFinish(0);
+        ifsInventoryQuantity.setIsCopper(1);
+        ifsInventoryQuantity.setIsQuarter(0);
+        ifsInventoryQuantity.setInspectStatus(0);
+
+        ifsInventoryQuantity.setQtyArrived(insOrder.getQtyArrived());
+        ifsInventoryQuantity.setBuyUnitMeas(insOrder.getBuyUnitMeas());
+        ifsInventoryQuantity.setSupplierName(insOrder.getSupplierName());
+        ifsInventoryQuantity.setUpdateBatchNo(insOrder.getUpdateBatchNo());
+        ifsInventoryQuantity.setDeclareDate(insOrder.getDeclareDate());
+
+        ifsInventoryQuantityMapper.insert(ifsInventoryQuantity);
+
+
+        insOrder.setIfsInventoryId(ifsInventoryQuantity.getId());
+        insOrder.setState(1);
+
+
+        upInsOrderOfState(insOrder);
+        upInsOrder(insOrder.getId(), null, appointed != null ? appointed.toString() : null, SecurityUtils.getUserId().intValue(), "鍘熸潗鏂�");
+
+        return insOrder.getId();
+    }
+
+    /**
+     * 淇敼濮旀墭涓嬪崟缂栧彿
+     * @param insOrder
+     */
+    @Override
+    public void updateOrderEntrustCode(InsOrder insOrder) {
+        // 鍒ゆ柇褰撳墠璁㈠崟鏄惁鐢熸垚浜嗘姤鍛�, 鐢熸垚浜嗘姤鍛婁笉鑳戒慨鏀瑰崟鍙�
+        Long count = insReportMapper.selectCount(Wrappers.<InsReport>lambdaQuery()
+                .eq(InsReport::getInsOrderId, insOrder.getId()));
+        if (count > 0 ) {
+            throw new ErrorException("褰撳墠璁㈠崟宸茬粡鐢熸垚浜嗘姤鍛婁笉鑳戒慨鏀圭紪鍙�");
+        }
+
+        Long count1 = insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery()
+                .eq(InsOrder::getEntrustCode, insOrder.getEntrustCode()));
+        if (count1 > 0) {
+            throw new ErrorException("璇ョ紪鍙烽噸澶�");
+        }
+
+        //淇敼鎶ュ憡鐨勭紪鍙�
+        insOrderMapper.update(null, Wrappers.<InsOrder>lambdaUpdate()
+                .eq(InsOrder::getId, insOrder.getId())
+                .set(InsOrder::getEntrustCode, insOrder.getEntrustCode()));
+
+        // 淇敼鏍峰搧鐨勭紪鍙�
+        // 鏌ヨ鎵�鏈夌殑鏍峰搧
+        List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery()
+                .eq(InsSample::getInsOrderId, insOrder.getId()));
+        for (InsSample insSample : insSamples) {
+            String sampleCode = insSample.getSampleCode();
+            String updateCode = insOrder.getEntrustCode();
+            // 鏌ユ壘鏈�鍚庝竴涓�'-'鐨勪綅缃�
+            int lastDashIndex = sampleCode.lastIndexOf('-');
+            if (lastDashIndex != -1) {
+                int secondLastDashIndex = sampleCode.lastIndexOf('-', lastDashIndex - 1);
+                // 澶勭悊鏈�鍚庝竴涓�'-'鍓嶇殑閮ㄥ垎
+                if (secondLastDashIndex != -1) {
+                    // 澶勭悊鏈�鍚庝竴涓�'-'鍙婁箣鍚庣殑閮ㄥ垎
+                    String afterLastDash = sampleCode.substring(lastDashIndex);
+
+                    updateCode = updateCode + afterLastDash;
+                }
+            }
+            insSampleMapper.update(null, Wrappers.<InsSample>lambdaUpdate()
+                    .eq(InsSample::getId, insSample.getId())
+                    .set(InsSample::getSampleCode, updateCode));
+
+        }
+    }
+
+    /**
+     * 淇敼妫�楠屼笅鍗曞唴瀹�
+     * @param insOrderUpdateDto
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean updateInsOrder(InsOrderUpdateDto insOrderUpdateDto) {
+        // 淇敼璁㈠崟
+        insOrderUpdateDto.getInsOrder().setState(0);
+        insOrderUpdateDto.getInsOrder().setTell("");
+        insOrderMapper.updateById(insOrderUpdateDto.getInsOrder());
+
+        // 淇敼妫�楠岄」
+        for (SampleProductDto sampleProductDto : insOrderUpdateDto.getSampleProduct()) {
+            insSampleService.update(Wrappers.<InsSample>lambdaUpdate()
+                    .eq(InsSample::getId, sampleProductDto.getId())
+                    .set(InsSample::getSpecialStandardMethod, sampleProductDto.getSpecialStandardMethod()));
+
+            insProductService.updateBatchById(sampleProductDto.getInsProduct());
+        }
+
+        return true;
+    }
+
+    /**
+     * 鎴愬搧鏍囩鎵撳嵃
+     * @param ids
+     * @return
+     */
+    @Override
+    public List<InsOrderPrintingVo> labelOrderPrinting(List<Integer> ids) {
+        return insOrderMapper.labelOrderPrinting(ids);
+    }
+
+    /**
+     * 鏍规嵁鏍峰搧id鏌ヨ妫�楠岄」鏍�
+     * @param insSampleId
+     * @return
+     */
+    @Override
+    public List<StandardProductList> getProductTreeBySampleId(Integer insSampleId) {
+        // 鏌ヨ绗竴涓楠岄」鑾峰彇妫�楠岄」鏍�
+        InsProduct insProduct = insProductMapper.selectOne(Wrappers.<InsProduct>lambdaQuery()
+                .eq(InsProduct::getInsSampleId, insSampleId)
+                .last("limit 1"));
+        String tree = insProduct.getFactory() + " - " +
+                insProduct.getLaboratory() + " - " +
+                insProduct.getSampleType() + " - " +
+                insProduct.getSample() + " - " +
+                insProduct.getModel();
+        // 鏌ヨ鏍囧噯鏍�
+        List<StandardProductList> standardProductLists = standardProductListMapper.selectList(Wrappers.<StandardProductList>lambdaQuery()
+                .eq(StandardProductList::getStandardMethodListId, insProduct.getStandardMethodListId())
+                .eq(StandardProductList::getTree, tree)
+                .orderByAsc(StandardProductList::getSort));
+        for (StandardProductList standardProductList : standardProductLists) {
+            standardProductList.setId(null);
+        }
+
+        return standardProductLists;
+    }
+
+    /**
+     * 娣诲姞閬楁紡鐨勬楠岄」
+     * @param omitOrderProductDto
+     * @return
+     */
+    @Override
+    public boolean addOmitOrderProduct(OmitOrderProductDto omitOrderProductDto) {
+        if (omitOrderProductDto.getInsSampleId() == null) {
+            throw new ErrorException("缂哄皯鏍峰搧Id");
+        }
+        for (InsProduct product : omitOrderProductDto.getInsProductBindingList()) {
+            if (product.getState() == 1) {
+                product.setId(null);
+                product.setCreateTime(null);
+                product.setCreateUser(null);
+                product.setUpdateTime(null);
+                product.setUpdateUser(null);
+                product.setSection(null);
+                product.setInsSampleId(omitOrderProductDto.getInsSampleId());
+                if (StringUtils.isBlank(product.getCableTag())) {
+                    product.setCableTag(null);
+                }
+                if (product.getInspectionItemSubclass() == null) {
+                    product.setInspectionItemSubclass("");
+                }
+                if (StringUtils.isBlank(product.getAsk()) || StringUtils.isBlank(product.getTell())) {
+                    throw new ErrorException("鏈夋楠岄」鐨勮姹傚�兼垨瑕佹眰鎻忚堪涓虹┖, 璇峰~鍐欒姹傚�兼垨瑕佹眰鎻忚堪");
+                }
+                insProductMapper.insert(product);
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * 鎴愬搧妫�楠屽崟瀵煎嚭
+     * @param sampleOrderDto
+     * @param response
+     */
+    @Override
+    public void rawAllInsOrderExport(SampleOrderDto sampleOrderDto, HttpServletResponse response) {
+        List<SampleOrderDto> sampleOrderDtoList = new ArrayList<>();
+        if (StringUtils.isNotBlank(sampleOrderDto.getIds())) {
+            List<String> orderIds = StrUtil.split(sampleOrderDto.getIds(), ",");
+            sampleOrderDtoList = insOrderMapper.getInsOrderExportByIds(orderIds);
+        } else {
+            String laboratory = null;
+            // 鍒ゆ柇鏄惁鏄叏閮�
+            String isOrderAll = null;
+            if (sampleOrderDto.getState() != null && sampleOrderDto.getState() == -2) {
+                isOrderAll = "1";
+                sampleOrderDto.setState(null);
+            }
+            sampleOrderDto.setIds(null);
+            sampleOrderDtoList = insOrderMapper.rawAllInsOrderExport(QueryWrappers.queryWrappers(sampleOrderDto), laboratory, isOrderAll);
+        }
+
+        // 鍒ゆ柇鏄惁鏄笉鍚堟牸, 涓嶅悎鏍兼煡璇笉鍚堟牸椤�
+        for (SampleOrderDto orderDto : sampleOrderDtoList) {
+            if (orderDto.getInsResult() != null && orderDto.getInsResult() == 0){
+                // 鏌ヨ涓嶅悎鏍奸」
+                List<String> unqualifiedList = insProductMapper.selectUnqualifiedList(orderDto.getId());
+                orderDto.setUnqualifiedItem(CollUtil.join(unqualifiedList, ","));
+            }
+            orderDto.setCreateTimeString(orderDto.getCreateTime() == null ? "" : orderDto.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+
+        }
+
+        response.setContentType("application/vnd.ms-excel");
+        response.setCharacterEncoding("UTF-8");
+        try {
+            // 杩欓噷URLEncoder.encode鍙互闃叉涓枃涔辩爜 褰撶劧鍜宔asyexcel娌℃湁鍏崇郴
+            String fileName = URLEncoder.encode("濮旀墭妫�娴嬩俊鎭鍑�", "UTF-8");
+            response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+            //鏂板缓ExcelWriter
+            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
+            //鑾峰彇sheet0瀵硅薄
+            WriteSheet mainSheet = EasyExcel.writerSheet(0, "濮旀墭妫�娴嬩俊鎭鍑�").head(SampleOrderDto.class).build();
+
+            //鍚憇heet0鍐欏叆鏁版嵁 浼犲叆绌簂ist杩欐牱鍙鍑鸿〃澶�
+            excelWriter.write(sampleOrderDtoList, mainSheet);
+            //鍏抽棴娴�
+            excelWriter.finish();
+        } catch (IOException e) {
+            throw new RuntimeException("瀵煎嚭澶辫触");
+        }
+    }
+
+    /**
+     * 淇敼鏍峰搧鍨嬪彿
+     * @param insSample
+     */
+    @Override
+    public void updateSampleModel(InsSample insSample) {
+        // 鍒ゆ柇褰撳墠璁㈠崟鏄惁鐢熸垚浜嗘姤鍛�, 鐢熸垚浜嗘姤鍛婁笉鑳戒慨鏀瑰崟鍙�
+        Long count = insReportMapper.selectCount(Wrappers.<InsReport>lambdaQuery()
+                .eq(InsReport::getInsOrderId, insSample.getInsOrderId()));
+        if (count > 0 ) {
+            throw new ErrorException("褰撳墠璁㈠崟宸茬粡鐢熸垚浜嗘姤鍛婁笉鑳戒慨鏀圭紪鍙�");
+        }
+
+        insSampleService.update(Wrappers.<InsSample>lambdaUpdate()
+                .eq(InsSample::getId, insSample.getId())
+                .set(InsSample::getModel, insSample.getModel()));
+    }
+
+    /**
+     * 鏌ヨ褰撳墠鏃堕棿鏄惁娌℃湁璇ユ娴嬮」鐨勬娊鏍疯鍒�
+     * @param sampleList
+     * @param insOrder
+     * @return
+     */
+    @Override
+    public Result judgeNotSpotCheckOrder(List<SampleProductDto> sampleList, InsOrder insOrder) {
+        // todo: 涓嬪崟鍒ゆ柇鎶芥牱璁″垝鐨勫敮涓�鎬�
+        if (insOrder.getQuarterItemId() != null) {
+            Long quarterItemCount = insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery()
+                    .eq(InsOrder::getQuarterItemId, insOrder.getQuarterItemId())
+                    .notIn(InsOrder::getState, -1 ,2 ,3));
+            if (quarterItemCount > 0) {
+                throw new ErrorException("璇ユ娊鏍疯鍒掑凡琚粦瀹氳繃");
+            }
+        }
+
+        // 鍒ゆ柇鏄惁鏄娊鏍锋娴�
+        if (insOrder.getOrderType().equals(InsOrderTypeConstants.SPOT_CHECK)) {
+            Set<String> monthMessageSet = new HashSet<>();
+            Set<String> quarterMessageSet = new HashSet<>();
+            Set<String> yearMessageSet = new HashSet<>();
+
+            String formatTime = "yyyy-MM-dd HH:mm:ss";
+            // 鏌ヨ褰撳墠鎵�鏈夋牱鍝佺殑妫�楠岄」
+            for (SampleProductDto sampleProductDto : sampleList) {
+                List<StandardProductList> standardProductList = getProductTreeBySampleId(sampleProductDto.getId());
+
+                Set<Integer> insIds = sampleProductDto.getInsProduct().stream()
+                        .map(InsProduct::getStructureItemParameterId)
+                        .collect(Collectors.toSet());
+
+                List<StandardProductList> productLists = standardProductList.stream()
+                        .filter(product -> !insIds.contains(product.getStructureItemParameterId()))
+                        .collect(Collectors.toList());
+
+                // 鏌ヨ妫�楠岄」鍩虹琛�, 鏌ヨ鏄惁鏈夋湀搴�, 瀛e害, 骞村害鐨勬楠岄」
+                List<StructureItemParameter> itemParameterList = structureItemParameterMapper.selectList(Wrappers.<StructureItemParameter>lambdaQuery()
+                        .in(StructureItemParameter::getId, productLists.stream().map(StandardProductList::getStructureItemParameterId).collect(Collectors.toList())));
+
+                for (StructureItemParameter item : itemParameterList) {
+                    if (StringUtils.isNotBlank(item.getSpotCheckType())) {
+                        switch (item.getSpotCheckType()) {
+                            case "1": // 鏈堝害
+                                // 鏌ヨ褰撴湀鏄惁鏈夎妫�娴嬮」鐨勬娊鏍疯鍒�
+                                // 褰撴湀寮�濮嬫椂闂�
+                                DateTime monthStart = DateUtil.beginOfMonth(DateUtil.date());
+                                String monthStartTime = monthStart.toString(formatTime);
+                                // 褰撴湀缁撴潫鏃堕棿
+                                DateTime monthEnd = DateUtil.endOfMonth(DateUtil.date());
+                                String monthEndTime = monthEnd.toString(formatTime);
+                                Integer count = insOrderMapper.selectNotSpotCheckOrder(item.getId(), monthStartTime, monthEndTime);
+                                if (count == 0) {
+                                    String monthMessage = item.getInspectionItemClass() +
+                                            item.getInspectionItem() +
+                                            item.getInspectionItemSubclass();
+                                    monthMessageSet.add(monthMessage);
+                                }
+                                break;
+                            case "2": // 瀛e害
+                                DateTime quarterStart = DateUtil.beginOfQuarter(DateUtil.date());
+                                String quarterStartTime = quarterStart.toString(formatTime);
+                                // 褰撴湀缁撴潫鏃堕棿
+                                DateTime quarterEnd = DateUtil.endOfQuarter(DateUtil.date());
+                                String quarterEndTime = quarterEnd.toString(formatTime);
+                                Integer quarterCount = insOrderMapper.selectNotSpotCheckOrder(item.getId(), quarterStartTime, quarterEndTime);
+                                if (quarterCount == 0) {
+                                    String quarterMessage = item.getInspectionItemClass() +
+                                            item.getInspectionItem() +
+                                            item.getInspectionItemSubclass();
+                                    quarterMessageSet.add(quarterMessage);
+                                }
+
+                                break;
+                            case "3": // 骞村害
+                                DateTime yearStart = DateUtil.beginOfQuarter(DateUtil.date());
+                                String yearStartTime = yearStart.toString(formatTime);
+                                // 褰撴湀缁撴潫鏃堕棿
+                                DateTime yearEnd = DateUtil.endOfQuarter(DateUtil.date());
+                                String yearEndTime = yearEnd.toString(formatTime);
+                                Integer yearCount = insOrderMapper.selectNotSpotCheckOrder(item.getId(), yearStartTime, yearEndTime);
+                                if (yearCount == 0) {
+                                    String yearMessage = item.getInspectionItemClass() +
+                                            item.getInspectionItem() +
+                                            item.getInspectionItemSubclass();
+                                    yearMessageSet.add(yearMessage);
+                                }
+
+                                break;
+                        }
+                    }
+                }
+            }
+
+            String message = "";
+            if (CollectionUtils.isNotEmpty(monthMessageSet)) {
+                message += StrUtil.format("<p>妫�楠岄」<span style=\"color: red\">{}</span>褰撴湀杩樻湭杩涜鎶芥牱妫�娴�, 璇锋煡鐪嬫槸鍚﹂渶瑕佹坊鍔犲綋鍓嶆楠岄」</p>", CollUtil.join(monthMessageSet, ", "));
+            }
+
+            if (CollectionUtils.isNotEmpty(quarterMessageSet)) {
+                message += StrUtil.format("<p>妫�楠岄」<span style=\"color: red\">{}</span>褰撳墠瀛e害杩樻湭杩涜鎶芥牱妫�娴�, 璇风湅鏄惁闇�瑕佹坊鍔犲綋鍓嶆楠岄」</p>", CollUtil.join(quarterMessageSet, ", "));
+            }
+
+            if (CollectionUtils.isNotEmpty(yearMessageSet)) {
+                message += StrUtil.format("<p>妫�楠岄」<span style=\"color: red\">{}</span>浠婂勾杩樻湭杩涜鎶芥牱妫�娴�, 璇风湅鏄惁闇�瑕佹坊鍔犲綋鍓嶆楠岄」</p>", CollUtil.join(yearMessageSet, ", "));
+            }
+
+            if (StringUtils.isNotBlank(message)) {
+                return Result.success(false, message);
+            }
+        }
+        return Result.success(true);
+
+    }
+
+}
+
+
+
+

--
Gitblit v1.9.3