From 9733594dd881627b4c00665e6f9bfbf08c1cacec Mon Sep 17 00:00:00 2001
From: zhuo <2089219845@qq.com>
Date: 星期一, 17 二月 2025 17:49:29 +0800
Subject: [PATCH] 业务管理移植

---
 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java | 1708 +++++++++++++++++++++++++++++-----------------------------
 1 files changed, 847 insertions(+), 861 deletions(-)

diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java
index 4c81840..1faaee4 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java
@@ -1,861 +1,847 @@
-package com.ruoyi.inspect.service.impl;
-
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.core.date.DateTime;
-import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.util.StrUtil;
-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.update.LambdaUpdateWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.basic.dto.FactoryDto;
-import com.ruoyi.basic.dto.LaboratoryDto;
-import com.ruoyi.inspect.dto.RawMaterialStandardTreeDto;
-import com.ruoyi.basic.dto.SampleTypeDto;
-import com.ruoyi.basic.mapper.IfsInventoryQuantityMapper;
-import com.ruoyi.basic.mapper.StandardTreeMapper;
-import com.ruoyi.inspect.pojo.InsOrder;
-import com.ruoyi.inspect.service.InsOrderService;
-import com.ruoyi.inspect.service.RawMaterialOrderService;
-import com.ruoyi.common.numgen.NumberGenerator;
-import com.ruoyi.framework.exception.ErrorException;
-import com.ruoyi.system.mapper.UserMapper;
-import lombok.AllArgsConstructor;
-import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.math.BigDecimal;
-import java.net.URLEncoder;
-import java.text.SimpleDateFormat;
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-import java.util.*;
-import java.util.concurrent.atomic.AtomicInteger;
-
-/**
- * @Author zhuo
- * @Date 2024/7/31
- */
-@Service
-@AllArgsConstructor
-public class RawMaterialOrderServiceImpl implements RawMaterialOrderService {
-
-    private StandardTreeMapper standardTreeMapper;
-    private IfsInventoryQuantityMapper ifsInventoryQuantityMapper;
-    private GetLook getLook;
-    private UserMapper userMapper;
-    private InsOrderService insOrderService;
-    private InsOrderMapper insOrderMapper;
-    private InsSampleMapper insSampleMapper;
-    private final NumberGenerator<InsOrder> numberGenerator;
-    private InsReportService insReportService;
-    private WechatProperty wechatProperty;
-    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
-    private InsProductMapper insProductMapper;
-    private AuxiliaryOutputWorkingHoursMapper auxiliaryOutputWorkingHoursMapper;
-
-
-    @Override
-    public RawMaterialStandardTreeDto selectStandardTreeListByPartNo(String partNo) {
-        if (StringUtils.isBlank(partNo)) {
-            throw new ErrorException("闆朵欢鍙蜂涪澶�");
-        }
-        List<FactoryDto> factoryDtos = standardTreeMapper.selectStandardTreeListByPartNo(partNo);
-        if (CollectionUtil.isEmpty(factoryDtos)) {
-            throw new ErrorException("闆朵欢鍙蜂负" + partNo + "鐨勫師鏉愭枡娌℃湁瀵瑰簲鐨勬爣鍑嗗簱閰嶇疆");
-        }
-        RawMaterialStandardTreeDto rawMaterialStandardTreeDto = new RawMaterialStandardTreeDto();
-        for (FactoryDto factoryDto : factoryDtos) {
-            for (LaboratoryDto laboratoryDto : factoryDto.getChildren()) {
-                for (SampleTypeDto sampleTypeDto : laboratoryDto.getChildren()) {
-                    if (sampleTypeDto.getChildren().size() == 0) {
-                        sampleTypeDto.setChildren(standardTreeMapper.getStandardTree3(sampleTypeDto.getValue()));
-                    }
-                    // 鍒ゆ柇缁戝畾鐨勬槸鍚︽槸褰撳墠闆朵欢鍙�
-                    if (sampleTypeDto.getPartNo() != null && sampleTypeDto.getPartNo().equals(partNo)) {
-                        // 娣诲姞瀵硅薄
-                        rawMaterialStandardTreeDto.setTreeName(factoryDto.getValue() + "-"
-                                + laboratoryDto.getValue() + "-"
-                                + sampleTypeDto.getValue());
-                        rawMaterialStandardTreeDto.setCode(sampleTypeDto.getCode());
-                        rawMaterialStandardTreeDto.setLabel(sampleTypeDto.getLabel());
-                        rawMaterialStandardTreeDto.setValue(sampleTypeDto.getValue());
-                        rawMaterialStandardTreeDto.setChildren1(sampleTypeDto.getChildren());
-                    } else {
-                        for (SampleDto sampleDto : sampleTypeDto.getChildren()) {
-                            if (sampleDto.getPartNo() != null && sampleDto.getPartNo().equals(partNo)) {
-                                // 娣诲姞瀵硅薄
-                                rawMaterialStandardTreeDto.setTreeName(factoryDto.getValue() + "-"
-                                        + laboratoryDto.getValue() + "-"
-                                        + sampleTypeDto.getValue() + "-"
-                                        + sampleDto.getValue());
-                                rawMaterialStandardTreeDto.setCode(sampleDto.getCode());
-                                rawMaterialStandardTreeDto.setLabel(sampleDto.getLabel());
-                                rawMaterialStandardTreeDto.setValue(sampleDto.getValue());
-                                rawMaterialStandardTreeDto.setChildren2(sampleDto.getChildren());
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        return rawMaterialStandardTreeDto;
-    }
-
-    @Override
-    public Map<String, Object> getWarehouseSubmit(IPage<IfsInventoryQuantity> page, IfsInventoryQuantity ifsInventoryQuantity) {
-        Map<String, Object> map = new HashMap<>();
-        map.put("head", PrintChina.printChina(IfsInventoryQuantity.class));
-        map.put("body", standardTreeMapper.selectIfsPage(page, QueryWrappers.queryWrappers(ifsInventoryQuantity)));
-        return map;
-    }
-
-    @Override
-    public Map<String, Object> getIfsByStateOne(IPage<IfsInventoryQuantityDto> page, IfsInventoryQuantityDto ifsInventoryQuantityDto) {
-        Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("getIfsByStateOne");
-        if (map1.get("look") == 1) {
-            //涓汉
-            ifsInventoryQuantityDto.setCreateUser(map1.get("userId"));
-        }
-        Map<String, Object> map = new HashMap<>();
-//        ifsInventoryQuantityDto.setOrderState(null);
-        map.put("head", PrintChina.printChina(IfsInventoryQuantityDto.class));
-        map.put("body", standardTreeMapper.getIfsByStateOne(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto)));
-        return map;
-    }
-
-
-    /**
-     * 鎶ユ
-     * @param ids
-     * @return
-     */
-    @Override
-    public int inspectionReport(List<Integer> ids) {
-        Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
-        ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
-                .in(IfsInventoryQuantity::getId, ids)
-                .set(IfsInventoryQuantity::getDeclareUser, userMapper.selectById(userId).getName())
-                .set(IfsInventoryQuantity::getDeclareUserId, userId)
-                .set(IfsInventoryQuantity::getIsInspect, 1)
-                .set(IfsInventoryQuantity::getDeclareDate, LocalDateTime.now())
-        );
-        threadPoolTaskExecutor.execute(() -> {
-            List<IfsInventoryQuantity> quantityList = ifsInventoryQuantityMapper.selectList(Wrappers.<IfsInventoryQuantity>lambdaQuery()
-                    .in(IfsInventoryQuantity::getId, ids));
-            // 浼佷笟寰俊閫氱煡
-            String message = "";
-            message += "鏂板鎶ユ閫氱煡";
-            for (IfsInventoryQuantity inventoryQuantity : quantityList) {
-                message += "\n鎵规鍙�: " + inventoryQuantity.getUpdateBatchNo();
-                message += "\n闆朵欢鎻忚堪: " + inventoryQuantity.getPartDesc();
-                message += "\n鎶佃揪鏁伴噺: " + inventoryQuantity.getQtyArrived().stripTrailingZeros().toPlainString() + inventoryQuantity.getBuyUnitMeas();
-
-                // 鍒ゆ柇鏈夋病鏈夊埌20鍚�. 鎴栬�呰兘鍚﹀厤妫�
-                int result = notificationRawOrder(inventoryQuantity.getId());
-                switch (result) {
-                    case 1:
-                        message += "\n褰撳墠鏍峰搧宸叉楠岃繃, 鍙互鍏嶆";
-                        break;
-                    case 2:
-                        message += "\n褰撳墠鏍峰搧宸茶秴杩�20鍚�";
-                        break;
-                }
-                message += "\n";
-            }
-            WxCpUtils.informWebHook(wechatProperty.getExaminingUrl(), message);
-        });
-        return 1;
-    }
-
-    /**
-     * 鎾ら攢鎶ユ
-     * @param id
-     * @return
-     */
-    @Override
-    public int revokeInspectionReport(Integer id) {
-        return ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
-                .eq(IfsInventoryQuantity::getId, id)
-                .set(IfsInventoryQuantity::getIsInspect, 0)
-        );
-    }
-
-    /**
-     * 鎵撳嵃鏍囩鏌ヨ
-     * @param ids
-     * @return
-     */
-    @Override
-    public List<IfsInventoryQuantityDto> printLabel(List<Integer> ids) {
-        return ifsInventoryQuantityMapper.printLabel(ids);
-    }
-
-    /**
-     * 鎶ユ
-     * @param ifsInventoryQuantity
-     * @return
-     */
-    @Override
-    public int inspectionReportOne(IfsInventoryQuantity ifsInventoryQuantity) {
-        Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
-        ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
-                .eq(IfsInventoryQuantity::getId, ifsInventoryQuantity.getId())
-                .set(IfsInventoryQuantity::getDeclareUser, userMapper.selectById(userId).getName())
-                .set(IfsInventoryQuantity::getDeclareUserId, userId)
-                .set(IfsInventoryQuantity::getIsInspect, 1)
-                .set(IfsInventoryQuantity::getDeclareDate, LocalDateTime.now())
-                .set(IfsInventoryQuantity::getUpdateBatchNo, ifsInventoryQuantity.getUpdateBatchNo())
-        );
-
-        threadPoolTaskExecutor.execute(() -> {
-            IfsInventoryQuantity inventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryQuantity.getId());
-            // 浼佷笟寰俊閫氱煡
-            String message = "";
-            message += "鏂板鎶ユ閫氱煡";
-            message += "\n鎵规鍙�: " + inventoryQuantity.getUpdateBatchNo();
-            message += "\n闆朵欢鎻忚堪: " + inventoryQuantity.getPartDesc();
-            message += "\n鎶佃揪鏁伴噺: " + inventoryQuantity.getQtyArrived().stripTrailingZeros().toPlainString() + inventoryQuantity.getBuyUnitMeas();
-            WxCpUtils.informWebHook(wechatProperty.getExaminingUrl(), message);
-        });
-        return 1;
-    }
-
-    /**
-     * 鑾峰彇閾滀骇涓氶摼妫�娴嬫暟鎹�
-     * @param id
-     * @return
-     */
-    @Override
-    public String getIndustryChain(Integer id) {
-        return ifsInventoryQuantityMapper.selectById(id).getIndustryChain();
-    }
-
-    /**
-     * 鍘熸潗鏂欐挙閿�鎺ュ彛
-     * @param ifsInventoryId
-     * @return
-     */
-    @Override
-    public boolean repealRawOrder(Integer ifsInventoryId) {
-        // 鏌ヨ鍒ゆ柇鏄惁鏄摐鍗曚笣
-        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
-        if (ifsInventoryQuantity.getIsCopper() != null && ifsInventoryQuantity.getIsCopper().equals(1)) {
-            // 閾滃崟涓濈洿鎺ュ垹闄ゅ氨琛�
-            ifsInventoryQuantityMapper.deleteById(ifsInventoryId);
-        } else {
-            ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
-                    .set(IfsInventoryQuantity::getState, 0)
-                    .set(IfsInventoryQuantity::getIsQuarter, 1)
-                    .eq(IfsInventoryQuantity::getId, ifsInventoryId));
-        }
-
-        insOrderService.update(Wrappers.<InsOrder>lambdaUpdate()
-                .eq(InsOrder::getIfsInventoryId, ifsInventoryId)
-                .set(InsOrder::getState, -1)
-                .set(InsOrder::getEntrustCode, ""));// 鎾ら攢
-        return true;
-    }
-
-    /**
-     * 鍘熸潗鏂欏厤妫�涓嬪崟
-     * @param list
-     * @param insOrder
-     * @return
-     */
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public int addExemptionOrder(List<SampleProductDto> list, InsOrder insOrder) {
-        if (!insOrder.getOrderType().equals(InsOrderTypeConstants.ENTER_THE_FACTORY)) {
-            throw new ErrorException("鍙湁杩涘巶妫�楠屾墠鑳藉厤妫�");
-        }
-        insOrder.setSendTime(LocalDateTime.now());
-        // 淇敼璁㈠崟琛ㄧ洿鎺ヤ负宸叉楠�
-        insOrder.setState(4);
-        insOrder.setTypeSource(1);
-
-        String code = "Y";
-        // 鐢熸垚缂栧彿
-        String no = numberGenerator.generateNumberWithPrefix(3,
-                "JCZX/ZB-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
-                InsOrder::getEntrustCode);
-
-        insOrderMapper.insert(insOrder); // 涓昏〃
-
-        AtomicInteger count = new AtomicInteger();
-        list.forEach(a -> {
-            count.getAndIncrement();
-            a.setId(null);
-            a.setInsOrderId(insOrder.getId());
-            if (StrUtil.isEmpty(a.getSampleCode())) {
-                // 濡傛灉鍙湁涓�涓牱鍝佸氨涓嶉渶瑕佹嫾鎺ユ暟瀛�
-                if (list.size() != 1) {
-                    a.setSampleCode(no + "-" + count.get());
-                } else {
-                    a.setSampleCode(no);
-                }
-            }
-            insSampleMapper.insert(a);
-
-            if (!CollectionUtil.isEmpty(a.getInsProduct())) {
-                throw new ErrorException("鍏嶆涓嶉渶瑕佸~鍐欐楠岄」");
-            }
-        });
-
-        // 鍘熸潗鏂欎笅鍗�: 濮旀墭浜哄氨鏄姤妫�浜�, 鐢熶骇鍗曚綅灏辨槸渚涘簲鍟嗗崟浣�
-        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(insOrder.getIfsInventoryId());
-        Integer declareUserId = ifsInventoryQuantity.getDeclareUserId();
-        User user = userMapper.selectById(declareUserId);
-        // 渚涘簲鍟嗗悕绉�
-        insOrder.setProduction(ifsInventoryQuantity.getSupplierName());
-        // 濮旀墭浜哄悕绉�
-        insOrder.setPrepareUser(user.getName());
-        insOrder.setPhone(user.getPhone());
-
-        // 淇敼鍘熸潗鏂欐暟鎹洿鎺ヤ负宸叉楠�
-        ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>().set(IfsInventoryQuantity::getState, 2)
-                .eq(IfsInventoryQuantity::getId, insOrder.getIfsInventoryId()));
-
-        insOrder.setExamineTime(LocalDateTime.now());
-
-        insOrder.setEntrustCode(no);
-        insOrder.setIsExemption(1);
-
-        insOrderMapper.updateById(insOrder);
-
-        // 娣诲姞宸ユ椂
-        addAuxiliary(insOrder, ifsInventoryQuantity);
-
-        // todo: ifs鐩存帴绉诲簱
-        insReportService.isRawMaterial(insOrder);
-
-        return insOrder.getId();
-    }
-
-
-    /**
-     * 鏌ヨ寰呬笅鍗�
-     * @param page
-     * @param ifsInventoryQuantity
-     * @return
-     */
-    @Override
-    public Map<String, Object> selectIfsInventoryQuantity(Page<IfsInventoryQuantityCheckDto> page, IfsInventoryQuantityCheckDto ifsInventoryQuantity) {
-        Map<String, Object> map = new HashMap<>();
-        map.put("head", PrintChina.printChina(IfsInventoryQuantityCheckDto.class));
-        map.put("body", standardTreeMapper.selectIfsInventoryQuantity(page, QueryWrappers.queryWrappers(ifsInventoryQuantity)));
-        return map;
-    }
-
-    /**
-     * 鏌ヨ宸叉楠�
-     * @param page
-     * @param ifsInventoryQuantityDto
-     * @return
-     */
-    @Override
-    public Map<String, Object> getIfsByOver(Page<IfsInventoryQuantitySupplierDto> page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto) {
-        Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("getIfsByStateOne");
-        if (map1.get("look") == 1) {
-            //涓汉
-            ifsInventoryQuantityDto.setCreateUser(map1.get("userId"));
-        }
-        String beginDeclareDate = ifsInventoryQuantityDto.getBeginDeclareDate();
-        String endDeclareDate = ifsInventoryQuantityDto.getEndDeclareDate();
-        ifsInventoryQuantityDto.setBeginDeclareDate(null);
-        ifsInventoryQuantityDto.setEndDeclareDate(null);
-
-        Map<String, Object> map = new HashMap<>();
-        map.put("head", PrintChina.printChina(IfsInventoryQuantitySupplierDto.class));
-        map.put("body", standardTreeMapper.getIfsByOver(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate));
-        return map;
-    }
-
-    /**
-     * 鍒犻櫎鍘熸潗鏂欐姤妫�淇℃伅
-     * @param id
-     * @return
-     */
-    @Override
-    public int delIfsInventory(Integer id) {
-        return ifsInventoryQuantityMapper.deleteById(id);
-    }
-
-    /**
-     * 鍘熸潗鏂欐斁琛屽厤妫�
-     * @param ifsInventoryId
-     * @return
-     */
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public boolean rawOrderRelease(Integer ifsInventoryId, String partDetail) {
-        // 淇敼鍘熸潗鏂欐暟鎹洿鎺ヤ负宸叉楠�
-        ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
-                .set(IfsInventoryQuantity::getState, 2)
-                .set(IfsInventoryQuantity::getIsQuarter, 0)
-                .eq(IfsInventoryQuantity::getId, ifsInventoryId));
-
-        // 鏌ヨ鍘熸潗鏂欎俊鎭�
-        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
-        // 濮旀墭浜哄氨鏄姤妫�浜�, 鐢熶骇鍗曚綅灏辨槸渚涘簲鍟嗗崟浣�
-        Integer declareUserId = ifsInventoryQuantity.getDeclareUserId();
-        User user = userMapper.selectById(declareUserId);
-
-        InsOrder insOrder = new InsOrder();
-        insOrder.setState(4);
-        insOrder.setTypeSource(1);
-        String code = "Y";
-        // 鐢熸垚缂栧彿
-        String no = numberGenerator.generateNumberWithPrefix(3,
-                "JCZX/ZB-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
-                InsOrder::getEntrustCode);
-        insOrder.setExamineTime(LocalDateTime.now());
-        insOrder.setEntrustCode(no);
-        insOrder.setIsExemption(1);
-        // 渚涘簲鍟嗗悕绉�
-        insOrder.setProduction(ifsInventoryQuantity.getSupplierName());
-        // 濮旀墭浜哄悕绉�
-        insOrder.setPrepareUser(user.getName());
-        insOrder.setPhone(user.getPhone());
-        insOrder.setIfsInventoryId(ifsInventoryId);
-        insOrder.setPartDetail(partDetail);
-        insOrder.setSendTime(LocalDateTime.now());
-        insOrder.setSample(ifsInventoryQuantity.getPartDesc());
-        // 杩涘巶妫�楠�
-        insOrder.setOrderType(InsOrderTypeConstants.ENTER_THE_FACTORY);
-
-        insOrderMapper.insert(insOrder);
-
-        // 娣诲姞宸ユ椂
-        addAuxiliary(insOrder, ifsInventoryQuantity);
-
-        // todo: ifs鐩存帴绉诲簱
-        insReportService.isRawMaterial(insOrder);
-        return true;
-    }
-
-    /**
-     * 0, 鏃犳彁绀�, 1鎻愮ず  褰撳墠鎵规鐨勬牱鍝佸凡妫�楠岃繃, 鍙互鍏嶆, 2 鎻愮ず 褰撳墠鎵规鐨勬牱鍝佸凡瓒�20鍚�, 闇�瑕佸绾у娆℃楠�
-     *
-     * 鍘熸潗鏂欎笅鍗曢�氱煡鍏嶆鎴栬�呭娆℃楠�
-     * @param ifsInventoryId
-     * @return
-     */
-    @Override
-    public int notificationRawOrder(Integer ifsInventoryId) {
-        IfsInventoryQuantity ifsInventory = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
-        // 鏌ヨ褰撳墠鎵规, 渚涘簲鍟�, 闆朵欢鍙风殑鍘熸潗鏂欐槸鍚﹁秴杩囦簡20鍚�, 瓒呰繃浜�20鍚ㄩ渶瑕佽繘琛屽娆℃楠屾彁閱�
-        List<IfsInventoryQuantity> quantityList = ifsInventoryQuantityMapper.selectList(Wrappers.<IfsInventoryQuantity>lambdaQuery()
-                .eq(IfsInventoryQuantity::getPartNo, ifsInventory.getPartNo())
-                .eq(IfsInventoryQuantity::getUpdateBatchNo, ifsInventory.getUpdateBatchNo())
-                .eq(IfsInventoryQuantity::getSupplierId, ifsInventory.getSupplierId())
-                .eq(IfsInventoryQuantity::getSupplierName, ifsInventory.getSupplierName()));
-
-        // 鍒ゆ柇鏄惁澶т簬20鍚�
-        BigDecimal bigDecimal = new BigDecimal("20000");
-        BigDecimal count = BigDecimal.ZERO;
-        for (IfsInventoryQuantity inventoryQuantity : quantityList) {
-            // 鍒ゆ柇鍗曚綅鏄痥g鎴栬�卼
-            if (inventoryQuantity.getBuyUnitMeas().equalsIgnoreCase("t")) {
-                count = count.add(inventoryQuantity.getQtyArrived().multiply(new BigDecimal("1000")));
-            } else if (inventoryQuantity.getBuyUnitMeas().equalsIgnoreCase("kg")) {
-                count = count.add(inventoryQuantity.getQtyArrived());
-            }
-        }
-
-        if (count.compareTo(bigDecimal) >= 0) {
-            return 2;
-        } else {
-            // 鍒ゆ柇涔嬪墠鏄惁鍑鸿繃鎶ュ憡, 鍑鸿繃鎶ュ憡鍙互鍏嶆
-            int reportCount = ifsInventoryQuantityMapper.selectReportCountById(ifsInventoryId);
-            if (reportCount > 0) {
-                return 1;
-            }
-        }
-        return 0;
-    }
-
-    /**
-     * 鎶ユ鍙互鏂板鎶ユ淇℃伅
-     * @param ifsInventoryQuantity
-     */
-    @Override
-    public void addIfsInventoryQuantity(IfsInventoryQuantity ifsInventoryQuantity) {
-        ifsInventoryQuantity.setIsSource(0);
-        ifsInventoryQuantity.setState(0);
-        ifsInventoryQuantity.setIsFinish(0);
-        ifsInventoryQuantityMapper.insert(ifsInventoryQuantity);
-    }
-
-    @Override
-    public void shiftingParking(List<Integer> ids) {
-        for (Integer id : ids) {
-            InsOrder order = insOrderService.getById(id);
-            // todo: ifs鐩存帴绉诲簱
-            insReportService.isRawMaterial(order);
-        }
-    }
-
-    /**
-     * 閾滃崟涓濅笅鍗曞厤妫�
-     * @param list
-     * @param insOrder
-     */
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public int addRawCopperOrderExemptionOrder(List<SampleProductDto> list, CopperInsOrderDto insOrder) {
-        if (!insOrder.getOrderType().equals(InsOrderTypeConstants.ENTER_THE_FACTORY)) {
-            throw new ErrorException("鍙湁杩涘巶妫�楠屾墠鑳藉厤妫�");
-        }
-        insOrder.setSendTime(LocalDateTime.now());
-        // 淇敼璁㈠崟琛ㄧ洿鎺ヤ负宸叉楠�
-        insOrder.setState(4);
-        insOrder.setTypeSource(1);
-
-        String code = "Y";
-        // 鐢熸垚缂栧彿
-        String no = numberGenerator.generateNumberWithPrefix(3,
-                "JCZX/ZB-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
-                InsOrder::getEntrustCode);
-
-        insOrderMapper.insert(insOrder); // 涓昏〃
-
-        AtomicInteger count = new AtomicInteger();
-        list.forEach(a -> {
-            count.getAndIncrement();
-            a.setId(null);
-            a.setInsOrderId(insOrder.getId());
-            if (StrUtil.isEmpty(a.getSampleCode())) {
-                // 濡傛灉鍙湁涓�涓牱鍝佸氨涓嶉渶瑕佹嫾鎺ユ暟瀛�
-                if (list.size() != 1) {
-                    a.setSampleCode(no + "-" + count.get());
-                } else {
-                    a.setSampleCode(no);
-                }
-            }
-            insSampleMapper.insert(a);
-
-            if (!CollectionUtil.isEmpty(a.getInsProduct())) {
-                throw new ErrorException("鍏嶆涓嶉渶瑕佸~鍐欐楠岄」");
-            }
-        });
-        // 娣诲姞鍘熸潗鏂欎俊鎭�
-        IfsInventoryQuantity ifsInventoryQuantity = new IfsInventoryQuantity();
-        // 鍩烘湰淇℃伅
-        ifsInventoryQuantity.setIsSource(0);
-        ifsInventoryQuantity.setState(2);
-        ifsInventoryQuantity.setIsInspect(1);
-        ifsInventoryQuantity.setIsFinish(1);
-        ifsInventoryQuantity.setIsCopper(1);
-        ifsInventoryQuantity.setInspectStatus(1);
-        ifsInventoryQuantity.setIsQuarter(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.setExamineTime(LocalDateTime.now());
-
-        insOrder.setEntrustCode(no);
-        insOrder.setIsExemption(1);
-
-        insOrderMapper.updateById(insOrder);
-
-        // 娣诲姞宸ユ椂
-        addAuxiliary(insOrder, ifsInventoryQuantity);
-
-        return insOrder.getId();
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public boolean concessionRelease(Integer ifsInventoryId) {
-        // 鏌ヨ鍘熸潗鏂欎俊鎭�
-        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
-        if (!ifsInventoryQuantity.getInspectStatus().equals(2)) {
-            throw new ErrorException("涓嶅悎鏍肩殑鍘熸潗鏂欐墠鑳借姝ユ斁琛�");
-        }
-
-        // todo:闇�瑕佸垽鏂璷a娴佺▼鏄惁鏄姝ユ斁琛�
-        String toLocation = insReportService.moveRawMaterial(ifsInventoryQuantity);
-
-        ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
-                .set(IfsInventoryQuantity::getInspectStatus, 4)
-                .set(IfsInventoryQuantity::getToLocation, toLocation)
-                .eq(IfsInventoryQuantity::getId, ifsInventoryId));
-
-        return true;
-    }
-
-    /**
-     * 鍘熸潗鏂欒繘鍘傛挙閿�涓嬪崟
-     * @param enterOrderId
-     * @return
-     */
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public boolean repealEnterRawOrder(Integer enterOrderId) {
-        // 鏌ヨ璁㈠崟
-        InsOrder order = insOrderMapper.selectById(enterOrderId);
-
-        // 鏌ヨ鍒ゆ柇鏄惁鏄摐鍗曚笣
-        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(order.getIfsInventoryId());
-        if (ifsInventoryQuantity.getIsCopper() != null && ifsInventoryQuantity.getIsCopper().equals(1)) {
-            // 閾滃崟涓濈洿鎺ュ垹闄ゅ氨琛�
-            ifsInventoryQuantityMapper.deleteById(order.getIfsInventoryId());
-        } else {
-            ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
-                    .set(IfsInventoryQuantity::getState, 0)
-                    .set(IfsInventoryQuantity::getIsQuarter, 1)
-                    .eq(IfsInventoryQuantity::getId, order.getIfsInventoryId()));
-        }
-        insOrderService.update(Wrappers.<InsOrder>lambdaUpdate()
-                .eq(InsOrder::getId, enterOrderId)
-                .set(InsOrder::getState, -1)
-                .set(InsOrder::getEntrustCode, ""));// 鎾ら攢
-
-        // 娓呴櫎涔嬪墠鐨勫伐鏃�
-        auxiliaryOutputWorkingHoursMapper.delete(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
-                .eq(AuxiliaryOutputWorkingHours::getOrderId, enterOrderId));
-
-        // 娓呴櫎涔嬪墠鎶ュ憡
-        insReportService.remove(Wrappers.<InsReport>lambdaQuery()
-                .eq(InsReport::getInsOrderId, enterOrderId));
-
-        return true;
-    }
-
-    /**
-     * 鍘熸潗鏂欏搴︽挙閿�涓嬪崟
-     * @param quarterOrderId
-     * @return
-     */
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public boolean repealQuarterRawOrder(Integer quarterOrderId) {
-        // 鏌ヨ璁㈠崟
-        InsOrder order = insOrderMapper.selectById(quarterOrderId);
-
-        Long count = insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery()
-                .eq(InsOrder::getIfsInventoryId, order.getIfsInventoryId())
-                .ne(InsOrder::getState, -1)
-                .eq(InsOrder::getOrderType, InsOrderTypeConstants.ENTER_THE_FACTORY)
-                .ne(InsOrder::getId, order.getId()));
-        // 鍒ゆ柇涔嬪墠鏄惁鏈夎繘鍘傛楠�, 娌℃湁闇�瑕佷慨鏀瑰師鏉愭枡淇℃伅
-        if (count == 0) {
-            ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
-                    .set(IfsInventoryQuantity::getState, 0)
-                    .set(IfsInventoryQuantity::getIsQuarter, 1)
-                    .eq(IfsInventoryQuantity::getId, order.getIfsInventoryId()));
-        } else {
-            ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
-                    .set(IfsInventoryQuantity::getIsQuarter, 1)
-                    .eq(IfsInventoryQuantity::getId, order.getIfsInventoryId()));
-        }
-
-        insOrderService.update(Wrappers.<InsOrder>lambdaUpdate()
-                .eq(InsOrder::getId, quarterOrderId)
-                .set(InsOrder::getState, -1)
-                .set(InsOrder::getEntrustCode, ""));// 鎾ら攢
-        auxiliaryOutputWorkingHoursMapper.delete(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
-                .eq(AuxiliaryOutputWorkingHours::getOrderId, quarterOrderId));
-        // 娓呴櫎涔嬪墠鎶ュ憡
-        insReportService.remove(Wrappers.<InsReport>lambdaQuery()
-                .eq(InsReport::getInsOrderId, quarterOrderId));
-        return true;
-    }
-
-    /**
-     * 鍘熸潗鏂欐姤妫�鍏ㄩ儴淇℃伅瀵煎嚭
-     * @param ifsInventoryQuantityDto
-     * @param response
-     */
-    @Override
-    public void rawAllExport(IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto, HttpServletResponse response) throws UnsupportedEncodingException {
-        //鏌ヨ瀵煎嚭鐨勮垂鐢ㄧ粺璁℃暟鎹�
-        String beginDeclareDate = ifsInventoryQuantityDto.getBeginDeclareDate();
-        String endDeclareDate = ifsInventoryQuantityDto.getEndDeclareDate();
-        ifsInventoryQuantityDto.setBeginDeclareDate(null);
-        ifsInventoryQuantityDto.setEndDeclareDate(null);
-        List<IfsInventoryQuantitySupplierDto> ifsByOverList = standardTreeMapper.getIfsByOverList(QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate);
-
-        for (IfsInventoryQuantitySupplierDto dto : ifsByOverList) {
-            dto.setSendTimeString(dto.getSendTime() == null ? "" : dto.getSendTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
-            dto.setReceiverDateString(dto.getReceiverDate() == null ? "" : dto.getReceiverDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
-            dto.setDeclareDateString(dto.getDeclareDate() == null ? "" : dto.getDeclareDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
-            switch (dto.getInspectStatus()) {
-                case 1:
-                    dto.setInspectStatusString("鍚堟牸");
-                    break;
-                case 2:
-                    dto.setInspectStatusString("涓嶅悎鏍�");
-                    // 鏌ヨ涓嶅悎鏍奸」
-                    List<String> unqualifiedList = insProductMapper.selectUnqualifiedList(dto.getEnterOrderId() == null ? dto.getQuarterOrderId() : dto.getEnterOrderId());
-                    dto.setUnqualifiedItem(CollUtil.join(unqualifiedList, ","));
-                    break;
-                case 3:
-                    dto.setInspectStatusString("鏈笅鍗�");
-                    break;
-                case 4:
-                    dto.setInspectStatusString("璁╂鏀捐");
-                    break;
-                case 0:
-                    dto.setInspectStatusString("妫�楠屼腑");
-                    break;
-
-            }
-        }
-
-
-        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");
-        try {
-            //鏂板缓ExcelWriter
-            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
-            //鑾峰彇sheet0瀵硅薄
-            WriteSheet mainSheet = EasyExcel.writerSheet(0, "鍘熸潗鏂欐娴嬩俊鎭鍑�").head(IfsInventoryQuantitySupplierDto.class).build();
-
-            //鍚憇heet0鍐欏叆鏁版嵁 浼犲叆绌簂ist杩欐牱鍙鍑鸿〃澶�
-            excelWriter.write(ifsByOverList, mainSheet);
-            //鍏抽棴娴�
-            excelWriter.finish();
-        } catch (IOException e) {
-            throw new RuntimeException("瀵煎嚭澶辫触");
-        }
-    }
-
-    /**
-     * 鍘熸潗鏂欐煡璇㈠彲浠ュ搴︽楠岀殑鍐呭
-     * @param page
-     * @param ifsInventoryQuantityDto
-     * @return
-     */
-    @Override
-    public Map<String, Object> getIfsByQuarter(Page page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto) {
-        Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("getIfsByStateOne");
-        if (map1.get("look") == 1) {
-            //涓汉
-            ifsInventoryQuantityDto.setCreateUser(map1.get("userId"));
-        }
-        String beginDeclareDate = ifsInventoryQuantityDto.getBeginDeclareDate();
-        String endDeclareDate = ifsInventoryQuantityDto.getEndDeclareDate();
-        ifsInventoryQuantityDto.setBeginDeclareDate(null);
-        ifsInventoryQuantityDto.setEndDeclareDate(null);
-
-        Map<String, Object> map = new HashMap<>();
-        map.put("head", PrintChina.printChina(IfsInventoryQuantitySupplierDto.class));
-        map.put("body", standardTreeMapper.getIfsByQuarter(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate));
-        return map;
-    }
-
-    /**
-     * 鎻愬墠鍏ュ簱
-     * @param ifsInventoryId
-     * @return
-     */
-    @Override
-    public boolean advancedGodown(Integer ifsInventoryId) {
-        // 鏌ヨ鍘熸潗鏂欎俊鎭�
-        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
-        if (!ifsInventoryQuantity.getInspectStatus().equals(0)
-                && !ifsInventoryQuantity.getInspectStatus().equals(3)) {
-            throw new ErrorException("鏈娴嬪畬鎴愭暟鎹墠鑳芥彁鍓嶅叆搴�");
-        }
-
-        // todo:闇�瑕佸垽鏂璷a娴佺▼鏄惁鏄姝ユ斁琛�
-        String toLocation = insReportService.moveRawMaterial(ifsInventoryQuantity);
-
-        ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
-                .set(IfsInventoryQuantity::getInspectStatus, 1)
-                .set(IfsInventoryQuantity::getIsFinish, 1)
-                .set(IfsInventoryQuantity::getToLocation, toLocation)
-                .eq(IfsInventoryQuantity::getId, ifsInventoryId));
-
-        return true;
-    }
-
-
-    /**
-     * 娣诲姞宸ユ椂
-     * @param insOrder
-     * @param ifsInventoryQuantity
-     */
-    private void addAuxiliary(InsOrder insOrder, IfsInventoryQuantity ifsInventoryQuantity) {
-        AuxiliaryOutputWorkingHours auxiliaryOutputWorkingHours = new AuxiliaryOutputWorkingHours();
-        auxiliaryOutputWorkingHours.setInspectionItemClass(ifsInventoryQuantity.getUpdateBatchNo() + "鍏嶆");//妫�娴嬮」鍒嗙被
-        auxiliaryOutputWorkingHours.setSample(insOrder.getEntrustCode());//鏍峰搧缂栧彿
-        auxiliaryOutputWorkingHours.setOrderId(insOrder.getId());//璁㈠崟id
-        auxiliaryOutputWorkingHours.setOrderNo(insOrder.getEntrustCode());//闈炲姞鐝鎵樺崟鍙�
-
-        // 鍏嶆榛樿2
-        auxiliaryOutputWorkingHours.setWorkTime(new BigDecimal("2"));//闈炲姞鐝伐鏃�
-        auxiliaryOutputWorkingHours.setAmount(1);//闈炲姞鐝暟閲�
-        auxiliaryOutputWorkingHours.setOutputWorkTime((ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getOvertimeWorkTime()) ? auxiliaryOutputWorkingHours.getOvertimeWorkTime() : BigDecimal.ZERO).add(ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getWorkTime()) ? auxiliaryOutputWorkingHours.getWorkTime() : BigDecimal.ZERO));//浜ч噺宸ユ椂
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-        DateTimeFormatter formatters = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-        auxiliaryOutputWorkingHours.setDateTime(LocalDateTime.now().toLocalDate().atStartOfDay().format(formatters));//鏃ユ湡
-        LocalDateTime localDateTime = LocalDateTime.now();
-        DateTime parse = DateUtil.parse(localDateTime.format(formatter));
-        auxiliaryOutputWorkingHours.setWeekDay(getWeek(localDateTime.format(formatters)));//鏄熸湡
-        auxiliaryOutputWorkingHours.setWeek(String.valueOf(DateUtil.weekOfYear(DateUtil.offsetDay(parse, 1))));//鍛ㄦ
-        auxiliaryOutputWorkingHours.setCheck(getLook.selectPowerByMethodAndUserId(null).get("userId"));//妫�娴嬩汉
-        auxiliaryOutputWorkingHours.setPrice(new BigDecimal("1"));//鍗曚环
-
-        auxiliaryOutputWorkingHoursMapper.insert(auxiliaryOutputWorkingHours);
-    }
-
-    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 "鏈煡";
-        }
-    }
-}
+//package com.ruoyi.inspect.service.impl;
+//
+//import cn.hutool.core.collection.CollUtil;
+//import cn.hutool.core.collection.CollectionUtil;
+//import cn.hutool.core.date.DateTime;
+//import cn.hutool.core.date.DateUtil;
+//import cn.hutool.core.util.StrUtil;
+//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.update.LambdaUpdateWrapper;
+//import com.baomidou.mybatisplus.core.metadata.IPage;
+//import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+//import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+//import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+//import com.ruoyi.basic.dto.*;
+//import com.ruoyi.basic.pojo.IfsInventoryQuantity;
+//import com.ruoyi.common.constant.InsOrderTypeConstants;
+//import com.ruoyi.common.core.domain.entity.User;
+//import com.ruoyi.common.utils.LimsDateUtil;
+//import com.ruoyi.common.utils.QueryWrappers;
+//import com.ruoyi.common.utils.SecurityUtils;
+//import com.ruoyi.common.utils.WxCpUtils;
+//import com.ruoyi.framework.properties.WechatProperty;
+//import com.ruoyi.inspect.dto.CopperInsOrderDto;
+//import com.ruoyi.inspect.dto.RawMaterialStandardTreeDto;
+//import com.ruoyi.basic.mapper.IfsInventoryQuantityMapper;
+//import com.ruoyi.basic.mapper.StandardTreeMapper;
+//import com.ruoyi.inspect.dto.SampleProductDto;
+//import com.ruoyi.inspect.mapper.InsOrderMapper;
+//import com.ruoyi.inspect.mapper.InsProductMapper;
+//import com.ruoyi.inspect.mapper.InsSampleMapper;
+//import com.ruoyi.inspect.pojo.InsOrder;
+//import com.ruoyi.inspect.pojo.InsReport;
+//import com.ruoyi.inspect.service.InsOrderService;
+//import com.ruoyi.inspect.service.InsReportService;
+//import com.ruoyi.inspect.service.RawMaterialOrderService;
+//import com.ruoyi.common.numgen.NumberGenerator;
+//import com.ruoyi.framework.exception.ErrorException;
+//import com.ruoyi.performance.mapper.AuxiliaryOutputWorkingHoursMapper;
+//import com.ruoyi.performance.pojo.AuxiliaryOutputWorkingHours;
+//import com.ruoyi.system.mapper.UserMapper;
+//import lombok.AllArgsConstructor;
+//import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+//import org.springframework.stereotype.Service;
+//import org.springframework.transaction.annotation.Transactional;
+//
+//import javax.servlet.http.HttpServletResponse;
+//import java.io.IOException;
+//import java.io.UnsupportedEncodingException;
+//import java.math.BigDecimal;
+//import java.net.URLEncoder;
+//import java.text.SimpleDateFormat;
+//import java.time.LocalDateTime;
+//import java.time.format.DateTimeFormatter;
+//import java.util.*;
+//import java.util.concurrent.atomic.AtomicInteger;
+//
+///**
+// * @Author zhuo
+// * @Date 2024/7/31
+// */
+//@Service
+//@AllArgsConstructor
+//public class RawMaterialOrderServiceImpl implements RawMaterialOrderService {
+//
+//    private StandardTreeMapper standardTreeMapper;
+//    private IfsInventoryQuantityMapper ifsInventoryQuantityMapper;
+//    private UserMapper userMapper;
+//    private InsOrderService insOrderService;
+//    private InsOrderMapper insOrderMapper;
+//    private InsSampleMapper insSampleMapper;
+//    private final NumberGenerator<InsOrder> numberGenerator;
+//    private InsReportService insReportService;
+//    private WechatProperty wechatProperty;
+//    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+//    private InsProductMapper insProductMapper;
+//    private AuxiliaryOutputWorkingHoursMapper auxiliaryOutputWorkingHoursMapper;
+//
+//
+//    @Override
+//    public RawMaterialStandardTreeDto selectStandardTreeListByPartNo(String partNo) {
+//        if (StringUtils.isBlank(partNo)) {
+//            throw new ErrorException("闆朵欢鍙蜂涪澶�");
+//        }
+//        List<FactoryDto> factoryDtos = standardTreeMapper.selectStandardTreeListByPartNo(partNo);
+//        if (CollectionUtil.isEmpty(factoryDtos)) {
+//            throw new ErrorException("闆朵欢鍙蜂负" + partNo + "鐨勫師鏉愭枡娌℃湁瀵瑰簲鐨勬爣鍑嗗簱閰嶇疆");
+//        }
+//        RawMaterialStandardTreeDto rawMaterialStandardTreeDto = new RawMaterialStandardTreeDto();
+//        for (FactoryDto factoryDto : factoryDtos) {
+//            for (LaboratoryDto laboratoryDto : factoryDto.getChildren()) {
+//                for (SampleTypeDto sampleTypeDto : laboratoryDto.getChildren()) {
+//                    if (sampleTypeDto.getChildren().size() == 0) {
+//                        sampleTypeDto.setChildren(standardTreeMapper.getStandardTree3(sampleTypeDto.getValue()));
+//                    }
+//                    // 鍒ゆ柇缁戝畾鐨勬槸鍚︽槸褰撳墠闆朵欢鍙�
+//                    if (sampleTypeDto.getPartNo() != null && sampleTypeDto.getPartNo().equals(partNo)) {
+//                        // 娣诲姞瀵硅薄
+//                        rawMaterialStandardTreeDto.setTreeName(factoryDto.getValue() + "-"
+//                                + laboratoryDto.getValue() + "-"
+//                                + sampleTypeDto.getValue());
+//                        rawMaterialStandardTreeDto.setCode(sampleTypeDto.getCode());
+//                        rawMaterialStandardTreeDto.setLabel(sampleTypeDto.getLabel());
+//                        rawMaterialStandardTreeDto.setValue(sampleTypeDto.getValue());
+//                        rawMaterialStandardTreeDto.setChildren1(sampleTypeDto.getChildren());
+//                    } else {
+//                        for (SampleDto sampleDto : sampleTypeDto.getChildren()) {
+//                            if (sampleDto.getPartNo() != null && sampleDto.getPartNo().equals(partNo)) {
+//                                // 娣诲姞瀵硅薄
+//                                rawMaterialStandardTreeDto.setTreeName(factoryDto.getValue() + "-"
+//                                        + laboratoryDto.getValue() + "-"
+//                                        + sampleTypeDto.getValue() + "-"
+//                                        + sampleDto.getValue());
+//                                rawMaterialStandardTreeDto.setCode(sampleDto.getCode());
+//                                rawMaterialStandardTreeDto.setLabel(sampleDto.getLabel());
+//                                rawMaterialStandardTreeDto.setValue(sampleDto.getValue());
+//                                rawMaterialStandardTreeDto.setChildren2(sampleDto.getChildren());
+//                            }
+//                        }
+//                    }
+//                }
+//            }
+//        }
+//        return rawMaterialStandardTreeDto;
+//    }
+//
+//    @Override
+//    public IPage<IfsInventoryQuantity> getWarehouseSubmit(IPage<IfsInventoryQuantity> page, IfsInventoryQuantity ifsInventoryQuantity) {
+//        return standardTreeMapper.selectIfsPage(page, QueryWrappers.queryWrappers(ifsInventoryQuantity));
+//    }
+//
+//    @Override
+//    public IPage<IfsInventoryQuantityDto> getIfsByStateOne(IPage<IfsInventoryQuantityDto> page, IfsInventoryQuantityDto ifsInventoryQuantityDto) {
+//        return standardTreeMapper.getIfsByStateOne(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto));
+//    }
+//
+//
+//    /**
+//     * 鎶ユ
+//     * @param ids
+//     * @return
+//     */
+//    @Override
+//    public int inspectionReport(List<Integer> ids) {
+//        Integer userId = SecurityUtils.getUserId().intValue();
+//        ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
+//                .in(IfsInventoryQuantity::getId, ids)
+//                .set(IfsInventoryQuantity::getDeclareUser, userMapper.selectById(userId).getName())
+//                .set(IfsInventoryQuantity::getDeclareUserId, userId)
+//                .set(IfsInventoryQuantity::getIsInspect, 1)
+//                .set(IfsInventoryQuantity::getDeclareDate, LocalDateTime.now())
+//        );
+//        threadPoolTaskExecutor.execute(() -> {
+//            List<IfsInventoryQuantity> quantityList = ifsInventoryQuantityMapper.selectList(Wrappers.<IfsInventoryQuantity>lambdaQuery()
+//                    .in(IfsInventoryQuantity::getId, ids));
+//            // 浼佷笟寰俊閫氱煡
+//            String message = "";
+//            message += "鏂板鎶ユ閫氱煡";
+//            for (IfsInventoryQuantity inventoryQuantity : quantityList) {
+//                message += "\n鎵规鍙�: " + inventoryQuantity.getUpdateBatchNo();
+//                message += "\n闆朵欢鎻忚堪: " + inventoryQuantity.getPartDesc();
+//                message += "\n鎶佃揪鏁伴噺: " + inventoryQuantity.getQtyArrived().stripTrailingZeros().toPlainString() + inventoryQuantity.getBuyUnitMeas();
+//
+//                // 鍒ゆ柇鏈夋病鏈夊埌20鍚�. 鎴栬�呰兘鍚﹀厤妫�
+//                int result = notificationRawOrder(inventoryQuantity.getId());
+//                switch (result) {
+//                    case 1:
+//                        message += "\n褰撳墠鏍峰搧宸叉楠岃繃, 鍙互鍏嶆";
+//                        break;
+//                    case 2:
+//                        message += "\n褰撳墠鏍峰搧宸茶秴杩�20鍚�";
+//                        break;
+//                }
+//                message += "\n";
+//            }
+//            WxCpUtils.informWebHook(wechatProperty.getExaminingUrl(), message);
+//        });
+//        return 1;
+//    }
+//
+//    /**
+//     * 鎾ら攢鎶ユ
+//     * @param id
+//     * @return
+//     */
+//    @Override
+//    public int revokeInspectionReport(Integer id) {
+//        return ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
+//                .eq(IfsInventoryQuantity::getId, id)
+//                .set(IfsInventoryQuantity::getIsInspect, 0)
+//        );
+//    }
+//
+//    /**
+//     * 鎵撳嵃鏍囩鏌ヨ
+//     * @param ids
+//     * @return
+//     */
+//    @Override
+//    public List<IfsInventoryQuantityDto> printLabel(List<Integer> ids) {
+//        return ifsInventoryQuantityMapper.printLabel(ids);
+//    }
+//
+//    /**
+//     * 鎶ユ
+//     * @param ifsInventoryQuantity
+//     * @return
+//     */
+//    @Override
+//    public int inspectionReportOne(IfsInventoryQuantity ifsInventoryQuantity) {
+//        Integer userId = SecurityUtils.getUserId().intValue();
+//        ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
+//                .eq(IfsInventoryQuantity::getId, ifsInventoryQuantity.getId())
+//                .set(IfsInventoryQuantity::getDeclareUser, userMapper.selectById(userId).getName())
+//                .set(IfsInventoryQuantity::getDeclareUserId, userId)
+//                .set(IfsInventoryQuantity::getIsInspect, 1)
+//                .set(IfsInventoryQuantity::getDeclareDate, LocalDateTime.now())
+//                .set(IfsInventoryQuantity::getUpdateBatchNo, ifsInventoryQuantity.getUpdateBatchNo())
+//        );
+//
+//        threadPoolTaskExecutor.execute(() -> {
+//            IfsInventoryQuantity inventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryQuantity.getId());
+//            // 浼佷笟寰俊閫氱煡
+//            String message = "";
+//            message += "鏂板鎶ユ閫氱煡";
+//            message += "\n鎵规鍙�: " + inventoryQuantity.getUpdateBatchNo();
+//            message += "\n闆朵欢鎻忚堪: " + inventoryQuantity.getPartDesc();
+//            message += "\n鎶佃揪鏁伴噺: " + inventoryQuantity.getQtyArrived().stripTrailingZeros().toPlainString() + inventoryQuantity.getBuyUnitMeas();
+//            WxCpUtils.informWebHook(wechatProperty.getExaminingUrl(), message);
+//        });
+//        return 1;
+//    }
+//
+//    /**
+//     * 鑾峰彇閾滀骇涓氶摼妫�娴嬫暟鎹�
+//     * @param id
+//     * @return
+//     */
+//    @Override
+//    public String getIndustryChain(Integer id) {
+//        return ifsInventoryQuantityMapper.selectById(id).getIndustryChain();
+//    }
+//
+//    /**
+//     * 鍘熸潗鏂欐挙閿�鎺ュ彛
+//     * @param ifsInventoryId
+//     * @return
+//     */
+//    @Override
+//    public boolean repealRawOrder(Integer ifsInventoryId) {
+//        // 鏌ヨ鍒ゆ柇鏄惁鏄摐鍗曚笣
+//        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
+//        if (ifsInventoryQuantity.getIsCopper() != null && ifsInventoryQuantity.getIsCopper().equals(1)) {
+//            // 閾滃崟涓濈洿鎺ュ垹闄ゅ氨琛�
+//            ifsInventoryQuantityMapper.deleteById(ifsInventoryId);
+//        } else {
+//            ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
+//                    .set(IfsInventoryQuantity::getState, 0)
+//                    .set(IfsInventoryQuantity::getIsQuarter, 1)
+//                    .eq(IfsInventoryQuantity::getId, ifsInventoryId));
+//        }
+//
+//        insOrderService.update(Wrappers.<InsOrder>lambdaUpdate()
+//                .eq(InsOrder::getIfsInventoryId, ifsInventoryId)
+//                .set(InsOrder::getState, -1)
+//                .set(InsOrder::getEntrustCode, ""));// 鎾ら攢
+//        return true;
+//    }
+//
+//    /**
+//     * 鍘熸潗鏂欏厤妫�涓嬪崟
+//     * @param list
+//     * @param insOrder
+//     * @return
+//     */
+//    @Override
+//    @Transactional(rollbackFor = Exception.class)
+//    public int addExemptionOrder(List<SampleProductDto> list, InsOrder insOrder) {
+//        if (!insOrder.getOrderType().equals(InsOrderTypeConstants.ENTER_THE_FACTORY)) {
+//            throw new ErrorException("鍙湁杩涘巶妫�楠屾墠鑳藉厤妫�");
+//        }
+//        insOrder.setSendTime(LocalDateTime.now());
+//        // 淇敼璁㈠崟琛ㄧ洿鎺ヤ负宸叉楠�
+//        insOrder.setState(4);
+//        insOrder.setTypeSource(1);
+//
+//        String code = "Y";
+//        // 鐢熸垚缂栧彿
+//        String no = numberGenerator.generateNumberWithPrefix(3,
+//                "JCZX/ZB-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
+//                InsOrder::getEntrustCode);
+//
+//        insOrderMapper.insert(insOrder); // 涓昏〃
+//
+//        AtomicInteger count = new AtomicInteger();
+//        list.forEach(a -> {
+//            count.getAndIncrement();
+//            a.setId(null);
+//            a.setInsOrderId(insOrder.getId());
+//            if (StrUtil.isEmpty(a.getSampleCode())) {
+//                // 濡傛灉鍙湁涓�涓牱鍝佸氨涓嶉渶瑕佹嫾鎺ユ暟瀛�
+//                if (list.size() != 1) {
+//                    a.setSampleCode(no + "-" + count.get());
+//                } else {
+//                    a.setSampleCode(no);
+//                }
+//            }
+//            insSampleMapper.insert(a);
+//
+//            if (!CollectionUtil.isEmpty(a.getInsProduct())) {
+//                throw new ErrorException("鍏嶆涓嶉渶瑕佸~鍐欐楠岄」");
+//            }
+//        });
+//
+//        // 鍘熸潗鏂欎笅鍗�: 濮旀墭浜哄氨鏄姤妫�浜�, 鐢熶骇鍗曚綅灏辨槸渚涘簲鍟嗗崟浣�
+//        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(insOrder.getIfsInventoryId());
+//        Integer declareUserId = ifsInventoryQuantity.getDeclareUserId();
+//        User user = userMapper.selectById(declareUserId);
+//        // 渚涘簲鍟嗗悕绉�
+//        insOrder.setProduction(ifsInventoryQuantity.getSupplierName());
+//        // 濮旀墭浜哄悕绉�
+//        insOrder.setPrepareUser(user.getName());
+//        insOrder.setPhone(user.getPhone());
+//
+//        // 淇敼鍘熸潗鏂欐暟鎹洿鎺ヤ负宸叉楠�
+//        ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>().set(IfsInventoryQuantity::getState, 2)
+//                .eq(IfsInventoryQuantity::getId, insOrder.getIfsInventoryId()));
+//
+//        insOrder.setExamineTime(LocalDateTime.now());
+//
+//        insOrder.setEntrustCode(no);
+//        insOrder.setIsExemption(1);
+//
+//        insOrderMapper.updateById(insOrder);
+//
+//        // 娣诲姞宸ユ椂
+//        addAuxiliary(insOrder, ifsInventoryQuantity);
+//
+//        // todo: ifs鐩存帴绉诲簱
+//        insReportService.isRawMaterial(insOrder);
+//
+//        return insOrder.getId();
+//    }
+//
+//
+//    /**
+//     * 鏌ヨ寰呬笅鍗�
+//     * @param page
+//     * @param ifsInventoryQuantity
+//     * @return
+//     */
+//    @Override
+//    public IPage<IfsInventoryQuantityCheckDto> selectIfsInventoryQuantity(Page<IfsInventoryQuantityCheckDto> page, IfsInventoryQuantityCheckDto ifsInventoryQuantity) {
+//        return standardTreeMapper.selectIfsInventoryQuantity(page, QueryWrappers.queryWrappers(ifsInventoryQuantity));
+//    }
+//
+//    /**
+//     * 鏌ヨ宸叉楠�
+//     * @param page
+//     * @param ifsInventoryQuantityDto
+//     * @return
+//     */
+//    @Override
+//    public IPage<IfsInventoryQuantitySupplierDto> getIfsByOver(Page<IfsInventoryQuantitySupplierDto> page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto) {
+//        // todo: 鍙湅鎴�
+//        String beginDeclareDate = ifsInventoryQuantityDto.getBeginDeclareDate();
+//        String endDeclareDate = ifsInventoryQuantityDto.getEndDeclareDate();
+//        ifsInventoryQuantityDto.setBeginDeclareDate(null);
+//        ifsInventoryQuantityDto.setEndDeclareDate(null);
+//
+//        return standardTreeMapper.getIfsByOver(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate);
+//    }
+//
+//    /**
+//     * 鍒犻櫎鍘熸潗鏂欐姤妫�淇℃伅
+//     * @param id
+//     * @return
+//     */
+//    @Override
+//    public int delIfsInventory(Integer id) {
+//        return ifsInventoryQuantityMapper.deleteById(id);
+//    }
+//
+//    /**
+//     * 鍘熸潗鏂欐斁琛屽厤妫�
+//     * @param ifsInventoryId
+//     * @return
+//     */
+//    @Override
+//    @Transactional(rollbackFor = Exception.class)
+//    public boolean rawOrderRelease(Integer ifsInventoryId, String partDetail) {
+//        // 淇敼鍘熸潗鏂欐暟鎹洿鎺ヤ负宸叉楠�
+//        ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
+//                .set(IfsInventoryQuantity::getState, 2)
+//                .set(IfsInventoryQuantity::getIsQuarter, 0)
+//                .eq(IfsInventoryQuantity::getId, ifsInventoryId));
+//
+//        // 鏌ヨ鍘熸潗鏂欎俊鎭�
+//        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
+//        // 濮旀墭浜哄氨鏄姤妫�浜�, 鐢熶骇鍗曚綅灏辨槸渚涘簲鍟嗗崟浣�
+//        Integer declareUserId = ifsInventoryQuantity.getDeclareUserId();
+//        User user = userMapper.selectById(declareUserId);
+//
+//        InsOrder insOrder = new InsOrder();
+//        insOrder.setState(4);
+//        insOrder.setTypeSource(1);
+//        String code = "Y";
+//        // 鐢熸垚缂栧彿
+//        String no = numberGenerator.generateNumberWithPrefix(3,
+//                "JCZX/ZB-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
+//                InsOrder::getEntrustCode);
+//        insOrder.setExamineTime(LocalDateTime.now());
+//        insOrder.setEntrustCode(no);
+//        insOrder.setIsExemption(1);
+//        // 渚涘簲鍟嗗悕绉�
+//        insOrder.setProduction(ifsInventoryQuantity.getSupplierName());
+//        // 濮旀墭浜哄悕绉�
+//        insOrder.setPrepareUser(user.getName());
+//        insOrder.setPhone(user.getPhone());
+//        insOrder.setIfsInventoryId(ifsInventoryId);
+//        insOrder.setPartDetail(partDetail);
+//        insOrder.setSendTime(LocalDateTime.now());
+//        insOrder.setSample(ifsInventoryQuantity.getPartDesc());
+//        // 杩涘巶妫�楠�
+//        insOrder.setOrderType(InsOrderTypeConstants.ENTER_THE_FACTORY);
+//
+//        insOrderMapper.insert(insOrder);
+//
+//        // 娣诲姞宸ユ椂
+//        addAuxiliary(insOrder, ifsInventoryQuantity);
+//
+//        // todo: ifs鐩存帴绉诲簱
+//        insReportService.isRawMaterial(insOrder);
+//        return true;
+//    }
+//
+//    /**
+//     * 0, 鏃犳彁绀�, 1鎻愮ず  褰撳墠鎵规鐨勬牱鍝佸凡妫�楠岃繃, 鍙互鍏嶆, 2 鎻愮ず 褰撳墠鎵规鐨勬牱鍝佸凡瓒�20鍚�, 闇�瑕佸绾у娆℃楠�
+//     *
+//     * 鍘熸潗鏂欎笅鍗曢�氱煡鍏嶆鎴栬�呭娆℃楠�
+//     * @param ifsInventoryId
+//     * @return
+//     */
+//    @Override
+//    public int notificationRawOrder(Integer ifsInventoryId) {
+//        IfsInventoryQuantity ifsInventory = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
+//        // 鏌ヨ褰撳墠鎵规, 渚涘簲鍟�, 闆朵欢鍙风殑鍘熸潗鏂欐槸鍚﹁秴杩囦簡20鍚�, 瓒呰繃浜�20鍚ㄩ渶瑕佽繘琛屽娆℃楠屾彁閱�
+//        List<IfsInventoryQuantity> quantityList = ifsInventoryQuantityMapper.selectList(Wrappers.<IfsInventoryQuantity>lambdaQuery()
+//                .eq(IfsInventoryQuantity::getPartNo, ifsInventory.getPartNo())
+//                .eq(IfsInventoryQuantity::getUpdateBatchNo, ifsInventory.getUpdateBatchNo())
+//                .eq(IfsInventoryQuantity::getSupplierId, ifsInventory.getSupplierId())
+//                .eq(IfsInventoryQuantity::getSupplierName, ifsInventory.getSupplierName()));
+//
+//        // 鍒ゆ柇鏄惁澶т簬20鍚�
+//        BigDecimal bigDecimal = new BigDecimal("20000");
+//        BigDecimal count = BigDecimal.ZERO;
+//        for (IfsInventoryQuantity inventoryQuantity : quantityList) {
+//            // 鍒ゆ柇鍗曚綅鏄痥g鎴栬�卼
+//            if (inventoryQuantity.getBuyUnitMeas().equalsIgnoreCase("t")) {
+//                count = count.add(inventoryQuantity.getQtyArrived().multiply(new BigDecimal("1000")));
+//            } else if (inventoryQuantity.getBuyUnitMeas().equalsIgnoreCase("kg")) {
+//                count = count.add(inventoryQuantity.getQtyArrived());
+//            }
+//        }
+//
+//        if (count.compareTo(bigDecimal) >= 0) {
+//            return 2;
+//        } else {
+//            // 鍒ゆ柇涔嬪墠鏄惁鍑鸿繃鎶ュ憡, 鍑鸿繃鎶ュ憡鍙互鍏嶆
+//            int reportCount = ifsInventoryQuantityMapper.selectReportCountById(ifsInventoryId);
+//            if (reportCount > 0) {
+//                return 1;
+//            }
+//        }
+//        return 0;
+//    }
+//
+//    /**
+//     * 鎶ユ鍙互鏂板鎶ユ淇℃伅
+//     * @param ifsInventoryQuantity
+//     */
+//    @Override
+//    public void addIfsInventoryQuantity(IfsInventoryQuantity ifsInventoryQuantity) {
+//        ifsInventoryQuantity.setIsSource(0);
+//        ifsInventoryQuantity.setState(0);
+//        ifsInventoryQuantity.setIsFinish(0);
+//        ifsInventoryQuantityMapper.insert(ifsInventoryQuantity);
+//    }
+//
+//    @Override
+//    public void shiftingParking(List<Integer> ids) {
+//        for (Integer id : ids) {
+//            InsOrder order = insOrderService.getById(id);
+//            // todo: ifs鐩存帴绉诲簱
+//            insReportService.isRawMaterial(order);
+//        }
+//    }
+//
+//    /**
+//     * 閾滃崟涓濅笅鍗曞厤妫�
+//     * @param list
+//     * @param insOrder
+//     */
+//    @Override
+//    @Transactional(rollbackFor = Exception.class)
+//    public int addRawCopperOrderExemptionOrder(List<SampleProductDto> list, CopperInsOrderDto insOrder) {
+//        if (!insOrder.getOrderType().equals(InsOrderTypeConstants.ENTER_THE_FACTORY)) {
+//            throw new ErrorException("鍙湁杩涘巶妫�楠屾墠鑳藉厤妫�");
+//        }
+//        insOrder.setSendTime(LocalDateTime.now());
+//        // 淇敼璁㈠崟琛ㄧ洿鎺ヤ负宸叉楠�
+//        insOrder.setState(4);
+//        insOrder.setTypeSource(1);
+//
+//        String code = "Y";
+//        // 鐢熸垚缂栧彿
+//        String no = numberGenerator.generateNumberWithPrefix(3,
+//                "JCZX/ZB-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
+//                InsOrder::getEntrustCode);
+//
+//        insOrderMapper.insert(insOrder); // 涓昏〃
+//
+//        AtomicInteger count = new AtomicInteger();
+//        list.forEach(a -> {
+//            count.getAndIncrement();
+//            a.setId(null);
+//            a.setInsOrderId(insOrder.getId());
+//            if (StrUtil.isEmpty(a.getSampleCode())) {
+//                // 濡傛灉鍙湁涓�涓牱鍝佸氨涓嶉渶瑕佹嫾鎺ユ暟瀛�
+//                if (list.size() != 1) {
+//                    a.setSampleCode(no + "-" + count.get());
+//                } else {
+//                    a.setSampleCode(no);
+//                }
+//            }
+//            insSampleMapper.insert(a);
+//
+//            if (!CollectionUtil.isEmpty(a.getInsProduct())) {
+//                throw new ErrorException("鍏嶆涓嶉渶瑕佸~鍐欐楠岄」");
+//            }
+//        });
+//        // 娣诲姞鍘熸潗鏂欎俊鎭�
+//        IfsInventoryQuantity ifsInventoryQuantity = new IfsInventoryQuantity();
+//        // 鍩烘湰淇℃伅
+//        ifsInventoryQuantity.setIsSource(0);
+//        ifsInventoryQuantity.setState(2);
+//        ifsInventoryQuantity.setIsInspect(1);
+//        ifsInventoryQuantity.setIsFinish(1);
+//        ifsInventoryQuantity.setIsCopper(1);
+//        ifsInventoryQuantity.setInspectStatus(1);
+//        ifsInventoryQuantity.setIsQuarter(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.setExamineTime(LocalDateTime.now());
+//
+//        insOrder.setEntrustCode(no);
+//        insOrder.setIsExemption(1);
+//
+//        insOrderMapper.updateById(insOrder);
+//
+//        // 娣诲姞宸ユ椂
+//        addAuxiliary(insOrder, ifsInventoryQuantity);
+//
+//        return insOrder.getId();
+//    }
+//
+//    @Override
+//    @Transactional(rollbackFor = Exception.class)
+//    public boolean concessionRelease(Integer ifsInventoryId) {
+//        // 鏌ヨ鍘熸潗鏂欎俊鎭�
+//        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
+//        if (!ifsInventoryQuantity.getInspectStatus().equals(2)) {
+//            throw new ErrorException("涓嶅悎鏍肩殑鍘熸潗鏂欐墠鑳借姝ユ斁琛�");
+//        }
+//
+//        // todo:闇�瑕佸垽鏂璷a娴佺▼鏄惁鏄姝ユ斁琛�
+//        String toLocation = insReportService.moveRawMaterial(ifsInventoryQuantity);
+//
+//        ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
+//                .set(IfsInventoryQuantity::getInspectStatus, 4)
+//                .set(IfsInventoryQuantity::getToLocation, toLocation)
+//                .eq(IfsInventoryQuantity::getId, ifsInventoryId));
+//
+//        return true;
+//    }
+//
+//    /**
+//     * 鍘熸潗鏂欒繘鍘傛挙閿�涓嬪崟
+//     * @param enterOrderId
+//     * @return
+//     */
+//    @Override
+//    @Transactional(rollbackFor = Exception.class)
+//    public boolean repealEnterRawOrder(Integer enterOrderId) {
+//        // 鏌ヨ璁㈠崟
+//        InsOrder order = insOrderMapper.selectById(enterOrderId);
+//
+//        // 鏌ヨ鍒ゆ柇鏄惁鏄摐鍗曚笣
+//        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(order.getIfsInventoryId());
+//        if (ifsInventoryQuantity.getIsCopper() != null && ifsInventoryQuantity.getIsCopper().equals(1)) {
+//            // 閾滃崟涓濈洿鎺ュ垹闄ゅ氨琛�
+//            ifsInventoryQuantityMapper.deleteById(order.getIfsInventoryId());
+//        } else {
+//            ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
+//                    .set(IfsInventoryQuantity::getState, 0)
+//                    .set(IfsInventoryQuantity::getIsQuarter, 1)
+//                    .eq(IfsInventoryQuantity::getId, order.getIfsInventoryId()));
+//        }
+//        insOrderService.update(Wrappers.<InsOrder>lambdaUpdate()
+//                .eq(InsOrder::getId, enterOrderId)
+//                .set(InsOrder::getState, -1)
+//                .set(InsOrder::getEntrustCode, ""));// 鎾ら攢
+//
+//        // 娓呴櫎涔嬪墠鐨勫伐鏃�
+//        auxiliaryOutputWorkingHoursMapper.delete(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
+//                .eq(AuxiliaryOutputWorkingHours::getOrderId, enterOrderId));
+//
+//        // 娓呴櫎涔嬪墠鎶ュ憡
+//        insReportService.remove(Wrappers.<InsReport>lambdaQuery()
+//                .eq(InsReport::getInsOrderId, enterOrderId));
+//
+//        return true;
+//    }
+//
+//    /**
+//     * 鍘熸潗鏂欏搴︽挙閿�涓嬪崟
+//     * @param quarterOrderId
+//     * @return
+//     */
+//    @Override
+//    @Transactional(rollbackFor = Exception.class)
+//    public boolean repealQuarterRawOrder(Integer quarterOrderId) {
+//        // 鏌ヨ璁㈠崟
+//        InsOrder order = insOrderMapper.selectById(quarterOrderId);
+//
+//        Long count = insOrderMapper.selectCount(Wrappers.<InsOrder>lambdaQuery()
+//                .eq(InsOrder::getIfsInventoryId, order.getIfsInventoryId())
+//                .ne(InsOrder::getState, -1)
+//                .eq(InsOrder::getOrderType, InsOrderTypeConstants.ENTER_THE_FACTORY)
+//                .ne(InsOrder::getId, order.getId()));
+//        // 鍒ゆ柇涔嬪墠鏄惁鏈夎繘鍘傛楠�, 娌℃湁闇�瑕佷慨鏀瑰師鏉愭枡淇℃伅
+//        if (count == 0) {
+//            ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
+//                    .set(IfsInventoryQuantity::getState, 0)
+//                    .set(IfsInventoryQuantity::getIsQuarter, 1)
+//                    .eq(IfsInventoryQuantity::getId, order.getIfsInventoryId()));
+//        } else {
+//            ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
+//                    .set(IfsInventoryQuantity::getIsQuarter, 1)
+//                    .eq(IfsInventoryQuantity::getId, order.getIfsInventoryId()));
+//        }
+//
+//        insOrderService.update(Wrappers.<InsOrder>lambdaUpdate()
+//                .eq(InsOrder::getId, quarterOrderId)
+//                .set(InsOrder::getState, -1)
+//                .set(InsOrder::getEntrustCode, ""));// 鎾ら攢
+//        auxiliaryOutputWorkingHoursMapper.delete(Wrappers.<AuxiliaryOutputWorkingHours>lambdaQuery()
+//                .eq(AuxiliaryOutputWorkingHours::getOrderId, quarterOrderId));
+//        // 娓呴櫎涔嬪墠鎶ュ憡
+//        insReportService.remove(Wrappers.<InsReport>lambdaQuery()
+//                .eq(InsReport::getInsOrderId, quarterOrderId));
+//        return true;
+//    }
+//
+//    /**
+//     * 鍘熸潗鏂欐姤妫�鍏ㄩ儴淇℃伅瀵煎嚭
+//     * @param ifsInventoryQuantityDto
+//     * @param response
+//     */
+//    @Override
+//    public void rawAllExport(IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto, HttpServletResponse response) throws UnsupportedEncodingException {
+//        //鏌ヨ瀵煎嚭鐨勮垂鐢ㄧ粺璁℃暟鎹�
+//        String beginDeclareDate = ifsInventoryQuantityDto.getBeginDeclareDate();
+//        String endDeclareDate = ifsInventoryQuantityDto.getEndDeclareDate();
+//        ifsInventoryQuantityDto.setBeginDeclareDate(null);
+//        ifsInventoryQuantityDto.setEndDeclareDate(null);
+//        List<IfsInventoryQuantitySupplierDto> ifsByOverList = standardTreeMapper.getIfsByOverList(QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate);
+//
+//        for (IfsInventoryQuantitySupplierDto dto : ifsByOverList) {
+//            dto.setSendTimeString(dto.getSendTime() == null ? "" : dto.getSendTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+//            dto.setReceiverDateString(dto.getReceiverDate() == null ? "" : dto.getReceiverDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+//            dto.setDeclareDateString(dto.getDeclareDate() == null ? "" : dto.getDeclareDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+//            switch (dto.getInspectStatus()) {
+//                case 1:
+//                    dto.setInspectStatusString("鍚堟牸");
+//                    break;
+//                case 2:
+//                    dto.setInspectStatusString("涓嶅悎鏍�");
+//                    // 鏌ヨ涓嶅悎鏍奸」
+//                    List<String> unqualifiedList = insProductMapper.selectUnqualifiedList(dto.getEnterOrderId() == null ? dto.getQuarterOrderId() : dto.getEnterOrderId());
+//                    dto.setUnqualifiedItem(CollUtil.join(unqualifiedList, ","));
+//                    break;
+//                case 3:
+//                    dto.setInspectStatusString("鏈笅鍗�");
+//                    break;
+//                case 4:
+//                    dto.setInspectStatusString("璁╂鏀捐");
+//                    break;
+//                case 0:
+//                    dto.setInspectStatusString("妫�楠屼腑");
+//                    break;
+//
+//            }
+//        }
+//
+//
+//        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");
+//        try {
+//            //鏂板缓ExcelWriter
+//            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
+//            //鑾峰彇sheet0瀵硅薄
+//            WriteSheet mainSheet = EasyExcel.writerSheet(0, "鍘熸潗鏂欐娴嬩俊鎭鍑�").head(IfsInventoryQuantitySupplierDto.class).build();
+//
+//            //鍚憇heet0鍐欏叆鏁版嵁 浼犲叆绌簂ist杩欐牱鍙鍑鸿〃澶�
+//            excelWriter.write(ifsByOverList, mainSheet);
+//            //鍏抽棴娴�
+//            excelWriter.finish();
+//        } catch (IOException e) {
+//            throw new RuntimeException("瀵煎嚭澶辫触");
+//        }
+//    }
+//
+//    /**
+//     * 鍘熸潗鏂欐煡璇㈠彲浠ュ搴︽楠岀殑鍐呭
+//     * @param page
+//     * @param ifsInventoryQuantityDto
+//     * @return
+//     */
+//    @Override
+//    public IPage<IfsInventoryQuantitySupplierDto> getIfsByQuarter(Page page, IfsInventoryQuantitySupplierDto ifsInventoryQuantityDto) {
+//
+//        // todo: 鍙湅鎴�
+//        String beginDeclareDate = ifsInventoryQuantityDto.getBeginDeclareDate();
+//        String endDeclareDate = ifsInventoryQuantityDto.getEndDeclareDate();
+//        ifsInventoryQuantityDto.setBeginDeclareDate(null);
+//        ifsInventoryQuantityDto.setEndDeclareDate(null);
+//
+//        return standardTreeMapper.getIfsByQuarter(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate);
+//    }
+//
+//    /**
+//     * 鎻愬墠鍏ュ簱
+//     * @param ifsInventoryId
+//     * @return
+//     */
+//    @Override
+//    public boolean advancedGodown(Integer ifsInventoryId) {
+//        // 鏌ヨ鍘熸潗鏂欎俊鎭�
+//        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
+//        if (!ifsInventoryQuantity.getInspectStatus().equals(0)
+//                && !ifsInventoryQuantity.getInspectStatus().equals(3)) {
+//            throw new ErrorException("鏈娴嬪畬鎴愭暟鎹墠鑳芥彁鍓嶅叆搴�");
+//        }
+//
+//        // todo:闇�瑕佸垽鏂璷a娴佺▼鏄惁鏄姝ユ斁琛�
+//        String toLocation = insReportService.moveRawMaterial(ifsInventoryQuantity);
+//
+//        ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
+//                .set(IfsInventoryQuantity::getInspectStatus, 1)
+//                .set(IfsInventoryQuantity::getIsFinish, 1)
+//                .set(IfsInventoryQuantity::getToLocation, toLocation)
+//                .eq(IfsInventoryQuantity::getId, ifsInventoryId));
+//
+//        return true;
+//    }
+//
+//
+//    /**
+//     * 娣诲姞宸ユ椂
+//     * @param insOrder
+//     * @param ifsInventoryQuantity
+//     */
+//    private void addAuxiliary(InsOrder insOrder, IfsInventoryQuantity ifsInventoryQuantity) {
+//        AuxiliaryOutputWorkingHours auxiliaryOutputWorkingHours = new AuxiliaryOutputWorkingHours();
+//        auxiliaryOutputWorkingHours.setInspectionItemClass(ifsInventoryQuantity.getUpdateBatchNo() + "鍏嶆");//妫�娴嬮」鍒嗙被
+//        auxiliaryOutputWorkingHours.setSample(insOrder.getEntrustCode());//鏍峰搧缂栧彿
+//        auxiliaryOutputWorkingHours.setOrderId(insOrder.getId());//璁㈠崟id
+//        auxiliaryOutputWorkingHours.setOrderNo(insOrder.getEntrustCode());//闈炲姞鐝鎵樺崟鍙�
+//
+//        // 鍏嶆榛樿2
+//        auxiliaryOutputWorkingHours.setWorkTime(new BigDecimal("2"));//闈炲姞鐝伐鏃�
+//        auxiliaryOutputWorkingHours.setAmount(1);//闈炲姞鐝暟閲�
+//        auxiliaryOutputWorkingHours.setOutputWorkTime((ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getOvertimeWorkTime()) ? auxiliaryOutputWorkingHours.getOvertimeWorkTime() : BigDecimal.ZERO).add(ObjectUtils.isNotEmpty(auxiliaryOutputWorkingHours.getWorkTime()) ? auxiliaryOutputWorkingHours.getWorkTime() : BigDecimal.ZERO));//浜ч噺宸ユ椂
+//        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+//        DateTimeFormatter formatters = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+//        auxiliaryOutputWorkingHours.setDateTime(LocalDateTime.now().toLocalDate().atStartOfDay().format(formatters));//鏃ユ湡
+//        LocalDateTime localDateTime = LocalDateTime.now();
+//        DateTime parse = DateUtil.parse(localDateTime.format(formatter));
+//        auxiliaryOutputWorkingHours.setWeekDay(getWeek(localDateTime.format(formatters)));//鏄熸湡
+//        auxiliaryOutputWorkingHours.setWeek(String.valueOf(DateUtil.weekOfYear(DateUtil.offsetDay(parse, 1))));//鍛ㄦ
+//        auxiliaryOutputWorkingHours.setCheck(SecurityUtils.getUserId().intValue());//妫�娴嬩汉
+//        auxiliaryOutputWorkingHours.setPrice(new BigDecimal("1"));//鍗曚环
+//
+//        auxiliaryOutputWorkingHoursMapper.insert(auxiliaryOutputWorkingHours);
+//    }
+//
+//    public static String getWeek(String dayStr) {
+//        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+//        try {
+//            Date date = sdf.parse(dayStr);
+//            Calendar calendar = Calendar.getInstance();
+//            calendar.setTime(date);
+//            int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
+//            int day = calendar.get(Calendar.DAY_OF_MONTH);
+//            return getWeekDay(dayOfWeek);
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//        return null;
+//    }
+//
+//    public static String getWeekDay(int dayOfWeek) {
+//        switch (dayOfWeek) {
+//            case Calendar.MONDAY:
+//                return "鍛ㄤ竴";
+//            case Calendar.TUESDAY:
+//                return "鍛ㄤ簩";
+//            case Calendar.WEDNESDAY:
+//                return "鍛ㄤ笁";
+//            case Calendar.THURSDAY:
+//                return "鍛ㄥ洓";
+//            case Calendar.FRIDAY:
+//                return "鍛ㄤ簲";
+//            case Calendar.SATURDAY:
+//                return "鍛ㄥ叚";
+//            case Calendar.SUNDAY:
+//                return "鍛ㄦ棩";
+//            default:
+//                return "鏈煡";
+//        }
+//    }
+//}

--
Gitblit v1.9.3