From 3793ba4a9b6be8faa6df0d4a76c06763ac03f873 Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期三, 29 十月 2025 15:06:04 +0800
Subject: [PATCH] 外购成品报检相关问题调整

---
 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/RawMaterialOrderServiceImpl.java |  280 ++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 224 insertions(+), 56 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 43fcea6..176775d 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,14 +1,18 @@
 package com.ruoyi.inspect.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 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.io.IoUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.support.ExcelTypeEnum;
 import com.alibaba.excel.write.metadata.WriteSheet;
 import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
@@ -18,22 +22,33 @@
 import com.ruoyi.basic.dto.*;
 import com.ruoyi.basic.pojo.IfsInventoryQuantity;
 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.properties.WechatProperty;
+import com.ruoyi.common.config.WechatProperty;
+import com.ruoyi.common.enums.OrderType;
 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.common.utils.api.IfsApiUtils;
+import com.ruoyi.common.utils.api.MesApiUtils;
 import com.ruoyi.inspect.dto.CopperInsOrderDto;
+import com.ruoyi.inspect.dto.OrderSplitDTO;
 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.excel.OrderSplitExcelData;
+import com.ruoyi.inspect.excel.OrderSplitExcelListener;
 import com.ruoyi.inspect.mapper.InsOrderMapper;
 import com.ruoyi.inspect.mapper.InsProductMapper;
 import com.ruoyi.inspect.mapper.InsSampleMapper;
+import com.ruoyi.inspect.mapper.InsUnqualifiedHandlerMapper;
+import com.ruoyi.inspect.pojo.IfsSplitOrderRecord;
 import com.ruoyi.inspect.pojo.InsOrder;
 import com.ruoyi.inspect.pojo.InsReport;
+import com.ruoyi.inspect.pojo.InsUnqualifiedHandler;
+import com.ruoyi.inspect.service.IfsSplitOrderRecordService;
 import com.ruoyi.inspect.service.InsOrderService;
 import com.ruoyi.inspect.service.InsReportService;
 import com.ruoyi.inspect.service.RawMaterialOrderService;
@@ -45,13 +60,18 @@
 import lombok.AllArgsConstructor;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.UnsupportedEncodingException;
 import java.math.BigDecimal;
 import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
 import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
@@ -80,43 +100,31 @@
     private InsProductMapper insProductMapper;
     private AuxiliaryOutputWorkingHoursMapper auxiliaryOutputWorkingHoursMapper;
 
+    private IfsApiUtils ifsApiUtils;
+
+    private IfsSplitOrderRecordService ifsSplitOrderRecordService;
+
+    private InsUnqualifiedHandlerMapper insUnqualifiedHandlerMapper;
+
 
     @Override
-    public RawMaterialStandardTreeDto selectStandardTreeListByPartNo(String partNo) {
-        if (StringUtils.isBlank(partNo)) {
-            throw new ErrorException("闆朵欢鍙蜂涪澶�");
-        }
+    public Result selectStandardTreeListByPartNo(String partNo) {
         List<FactoryDto> factoryDtos = standardTreeMapper.selectStandardTreeListByPartNo(partNo);
         if (CollectionUtil.isEmpty(factoryDtos)) {
-            throw new ErrorException("闆朵欢鍙蜂负" + partNo + "鐨勫師鏉愭枡娌℃湁瀵瑰簲鐨勬爣鍑嗗簱閰嶇疆");
+            return Result.success(null, "闆朵欢鍙蜂负" + partNo + "鐨勫師鏉愭枡娌℃湁瀵瑰簲鐨勬爣鍑嗗簱閰嶇疆");
         }
         RawMaterialStandardTreeDto rawMaterialStandardTreeDto = new RawMaterialStandardTreeDto();
-        Set<String> sampleTypeValues = new HashSet<>();
         for (FactoryDto factoryDto : factoryDtos) {
             for (LaboratoryDto laboratoryDto : factoryDto.getChildren()) {
                 for (SampleTypeDto sampleTypeDto : laboratoryDto.getChildren()) {
                     if (sampleTypeDto.getChildren().size() == 0) {
-                        sampleTypeValues.add(sampleTypeDto.getValue());
-                    }
-                }
-            }
-        }
-        // 鎵归噺鏌ヨ鎵�鏈� sampleTypeDto 鐨勬暟鎹�
-        List<SampleDto> standardList = standardTreeMapper.getStandardTree3Batch(sampleTypeValues);
-        Map<String, List<SampleDto>> standardTreeMap = standardList.stream().collect(Collectors.groupingBy(SampleDto::getValue));
-
-        for (FactoryDto factoryDto : factoryDtos) {
-            for (LaboratoryDto laboratoryDto : factoryDto.getChildren()) {
-                for (SampleTypeDto sampleTypeDto : laboratoryDto.getChildren()) {
-                    List<SampleDto> standardTreeList = standardTreeMap.get(sampleTypeDto.getValue());
-                    if (sampleTypeDto.getChildren().size() == 0) {
-                        sampleTypeDto.getChildren().addAll(standardTreeList);
+                        sampleTypeDto.setChildren(standardTreeMapper.getStandardTree3(sampleTypeDto.getValue()));
                     }
                     // 鍒ゆ柇缁戝畾鐨勬槸鍚︽槸褰撳墠闆朵欢鍙�
                     if (sampleTypeDto.getPartNo() != null && sampleTypeDto.getPartNo().equals(partNo)) {
                         // 娣诲姞瀵硅薄
-                        rawMaterialStandardTreeDto.setTreeName(factoryDto.getValue() + "-"
-                                + laboratoryDto.getValue() + "-"
+                        rawMaterialStandardTreeDto.setTreeName(factoryDto.getValue() + " - "
+                                + laboratoryDto.getValue() + " - "
                                 + sampleTypeDto.getValue());
                         rawMaterialStandardTreeDto.setCode(sampleTypeDto.getCode());
                         rawMaterialStandardTreeDto.setLabel(sampleTypeDto.getLabel());
@@ -126,9 +134,9 @@
                         for (SampleDto sampleDto : sampleTypeDto.getChildren()) {
                             if (sampleDto.getPartNo() != null && sampleDto.getPartNo().equals(partNo)) {
                                 // 娣诲姞瀵硅薄
-                                rawMaterialStandardTreeDto.setTreeName(factoryDto.getValue() + "-"
-                                        + laboratoryDto.getValue() + "-"
-                                        + sampleTypeDto.getValue() + "-"
+                                rawMaterialStandardTreeDto.setTreeName(factoryDto.getValue() + " - "
+                                        + laboratoryDto.getValue() + " - "
+                                        + sampleTypeDto.getValue() + " - "
                                         + sampleDto.getValue());
                                 rawMaterialStandardTreeDto.setCode(sampleDto.getCode());
                                 rawMaterialStandardTreeDto.setLabel(sampleDto.getLabel());
@@ -140,16 +148,20 @@
                 }
             }
         }
-        return rawMaterialStandardTreeDto;
+        return Result.success(rawMaterialStandardTreeDto);
     }
 
     @Override
     public IPage<IfsInventoryQuantity> getWarehouseSubmit(IPage<IfsInventoryQuantity> page, IfsInventoryQuantity ifsInventoryQuantity) {
+        if(ifsInventoryQuantity.getIsInspect().equals(1)){
+            ifsInventoryQuantity.setOrderType(OrderType.RAW.getValue());
+        }
         return standardTreeMapper.selectIfsPage(page, QueryWrappers.queryWrappers(ifsInventoryQuantity));
     }
 
     @Override
     public IPage<IfsInventoryQuantityDto> getIfsByStateOne(IPage<IfsInventoryQuantityDto> page, IfsInventoryQuantityDto ifsInventoryQuantityDto) {
+        ifsInventoryQuantityDto.setOrderType(OrderType.RAW.getValue());
         return standardTreeMapper.getIfsByStateOne(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto));
     }
 
@@ -160,13 +172,14 @@
      * @return
      */
     @Override
-    public int inspectionReport(List<Integer> ids) {
+    public int inspectionReport(List<Long> ids,String orderType) {
         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::getOrderType,orderType)
                 .set(IfsInventoryQuantity::getDeclareDate, LocalDateTime.now())
         );
         threadPoolTaskExecutor.execute(() -> {
@@ -203,7 +216,7 @@
      * @return
      */
     @Override
-    public int revokeInspectionReport(Integer id) {
+    public int revokeInspectionReport(Long id) {
         return ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
                 .eq(IfsInventoryQuantity::getId, id)
                 .set(IfsInventoryQuantity::getIsInspect, 0)
@@ -228,6 +241,12 @@
     @Override
     public int inspectionReportOne(IfsInventoryQuantity ifsInventoryQuantity) {
         Integer userId = SecurityUtils.getUserId().intValue();
+        boolean validateValue = OrderType.validateValue(ifsInventoryQuantity.getOrderType());
+        if(!validateValue){
+            throw new ErrorException("鎶ユ澶辫触锛岄潪娉曠殑閿�鍞鍗曞垎绫绘灇涓�");
+        }
+        //鎵规鍙峰瓧姣嶈浆澶у啓
+        ifsInventoryQuantity.setUpdateBatchNo(ifsInventoryQuantity.getUpdateBatchNo().toUpperCase(Locale.ROOT));
         ifsInventoryQuantityMapper.update(null, Wrappers.<IfsInventoryQuantity>lambdaUpdate()
                 .eq(IfsInventoryQuantity::getId, ifsInventoryQuantity.getId())
                 .set(IfsInventoryQuantity::getDeclareUser, userMapper.selectById(userId).getName())
@@ -235,6 +254,7 @@
                 .set(IfsInventoryQuantity::getIsInspect, 1)
                 .set(IfsInventoryQuantity::getDeclareDate, LocalDateTime.now())
                 .set(IfsInventoryQuantity::getUpdateBatchNo, ifsInventoryQuantity.getUpdateBatchNo())
+                .set(IfsInventoryQuantity::getOrderType,ifsInventoryQuantity.getOrderType())
         );
 
         threadPoolTaskExecutor.execute(() -> {
@@ -266,7 +286,7 @@
      * @return
      */
     @Override
-    public boolean repealRawOrder(Integer ifsInventoryId) {
+    public boolean repealRawOrder(Long ifsInventoryId) {
         // 鏌ヨ鍒ゆ柇鏄惁鏄摐鍗曚笣
         IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
         if (ifsInventoryQuantity.getIsCopper() != null && ifsInventoryQuantity.getIsCopper().equals(1)) {
@@ -306,7 +326,7 @@
         String code = "Y";
         // 鐢熸垚缂栧彿
         String no = numberGenerator.generateNumberWithPrefix(3,
-                "JCZX/ZB-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
+                "JCZX/NS-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
                 InsOrder::getEntrustCode);
 
         insOrderMapper.insert(insOrder); // 涓昏〃
@@ -356,7 +376,7 @@
         addAuxiliary(insOrder, ifsInventoryQuantity);
 
         // todo: ifs鐩存帴绉诲簱
-        insReportService.isRawMaterial(insOrder);
+        insReportService.isRawMaterial(insOrder,true,true);
 
         return insOrder.getId();
     }
@@ -386,8 +406,10 @@
         String endDeclareDate = ifsInventoryQuantityDto.getEndDeclareDate();
         ifsInventoryQuantityDto.setBeginDeclareDate(null);
         ifsInventoryQuantityDto.setEndDeclareDate(null);
-
-        return standardTreeMapper.getIfsByOver(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate);
+        ifsInventoryQuantityDto.setOrderType(OrderType.RAW.getValue());
+        IPage<IfsInventoryQuantitySupplierDto> ifsByOver = standardTreeMapper.getIfsByOver(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate);
+        ifsByOver.getRecords().forEach(r->r.setOrderTypeName(OrderType.getLabelByValue(r.getOrderType())));
+        return ifsByOver;
     }
 
     /**
@@ -407,7 +429,7 @@
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public boolean rawOrderRelease(Integer ifsInventoryId, String partDetail) {
+    public boolean rawOrderRelease(Long ifsInventoryId, String partDetail) {
         // 淇敼鍘熸潗鏂欐暟鎹洿鎺ヤ负宸叉楠�
         ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
                 .set(IfsInventoryQuantity::getState, 2)
@@ -426,7 +448,7 @@
         String code = "Y";
         // 鐢熸垚缂栧彿
         String no = numberGenerator.generateNumberWithPrefix(3,
-                "JCZX/ZB-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
+                "JCZX/NS-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
                 InsOrder::getEntrustCode);
         insOrder.setExamineTime(LocalDateTime.now());
         insOrder.setEntrustCode(no);
@@ -449,7 +471,7 @@
         addAuxiliary(insOrder, ifsInventoryQuantity);
 
         // todo: ifs鐩存帴绉诲簱
-        insReportService.isRawMaterial(insOrder);
+        insReportService.isRawMaterial(insOrder,true,true);
         return true;
     }
 
@@ -461,7 +483,7 @@
      * @return
      */
     @Override
-    public int notificationRawOrder(Integer ifsInventoryId) {
+    public int notificationRawOrder(Long ifsInventoryId) {
         IfsInventoryQuantity ifsInventory = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
         // 鏌ヨ褰撳墠鎵规, 渚涘簲鍟�, 闆朵欢鍙风殑鍘熸潗鏂欐槸鍚﹁秴杩囦簡20鍚�, 瓒呰繃浜�20鍚ㄩ渶瑕佽繘琛屽娆℃楠屾彁閱�
         List<IfsInventoryQuantity> quantityList = ifsInventoryQuantityMapper.selectList(Wrappers.<IfsInventoryQuantity>lambdaQuery()
@@ -503,6 +525,9 @@
         ifsInventoryQuantity.setIsSource(0);
         ifsInventoryQuantity.setState(0);
         ifsInventoryQuantity.setIsFinish(0);
+        if(!OrderType.validateValue(ifsInventoryQuantity.getOrderType())){
+            throw new ErrorException("鏂板鎶ユ淇℃伅澶辫触锛岄潪娉曠殑閿�鍞鍗曞垎绫绘灇涓�");
+        }
         ifsInventoryQuantityMapper.insert(ifsInventoryQuantity);
     }
 
@@ -528,7 +553,7 @@
         String code = "Y";
         // 鐢熸垚缂栧彿
         String no = numberGenerator.generateNumberWithPrefix(3,
-                "JCZX/ZB-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
+                "JCZX/NS-" + code + LimsDateUtil.resetDate(LocalDateTime.now()),
                 InsOrder::getEntrustCode);
 
         insOrderMapper.insert(insOrder); // 涓昏〃
@@ -587,22 +612,19 @@
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public boolean concessionRelease(Integer ifsInventoryId) {
+    public boolean concessionRelease(Long ifsInventoryId) {
         // 鏌ヨ鍘熸潗鏂欎俊鎭�
         IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
         if (!ifsInventoryQuantity.getInspectStatus().equals(2)) {
             throw new ErrorException("涓嶅悎鏍肩殑鍘熸潗鏂欐墠鑳借姝ユ斁琛�");
         }
-
         // todo:闇�瑕佸垽鏂璷a娴佺▼鏄惁鏄姝ユ斁琛�
-        String toLocation = insReportService.moveRawMaterial(ifsInventoryQuantity);
+        String toLocation = insOrderService.moveRawMaterial(ifsInventoryQuantity);
 
-        ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
+        return ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
                 .set(IfsInventoryQuantity::getInspectStatus, 4)
                 .set(IfsInventoryQuantity::getToLocation, toLocation)
-                .eq(IfsInventoryQuantity::getId, ifsInventoryId));
-
-        return true;
+                .eq(IfsInventoryQuantity::getId, ifsInventoryId))>0;
     }
 
     /**
@@ -690,12 +712,19 @@
      */
     @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);
+        // 鍒ゆ柇鏄惁鏄牴鎹�夋嫨鐨勫鍑�
+        List<IfsInventoryQuantitySupplierDto> ifsByOverList = new ArrayList<>();
+        if (StringUtils.isNotBlank(ifsInventoryQuantityDto.getIds())) {
+            List<String> ifsIds = StrUtil.split(ifsInventoryQuantityDto.getIds(), ",");
+            ifsByOverList = standardTreeMapper.getIfsByIds(ifsIds);
+        } else {
+            String beginDeclareDate = ifsInventoryQuantityDto.getBeginDeclareDate();
+            String endDeclareDate = ifsInventoryQuantityDto.getEndDeclareDate();
+            ifsInventoryQuantityDto.setBeginDeclareDate(null);
+            ifsInventoryQuantityDto.setEndDeclareDate(null);
+            ifsInventoryQuantityDto.setIds(null);
+            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")));
@@ -759,7 +788,7 @@
         String endDeclareDate = ifsInventoryQuantityDto.getEndDeclareDate();
         ifsInventoryQuantityDto.setBeginDeclareDate(null);
         ifsInventoryQuantityDto.setEndDeclareDate(null);
-
+        ifsInventoryQuantityDto.setOrderType(OrderType.RAW.getValue());
         return standardTreeMapper.getIfsByQuarter(page, QueryWrappers.queryWrappers(ifsInventoryQuantityDto), beginDeclareDate, endDeclareDate);
     }
 
@@ -769,7 +798,7 @@
      * @return
      */
     @Override
-    public boolean advancedGodown(Integer ifsInventoryId) {
+    public boolean advancedGodown(Long ifsInventoryId) {
         // 鏌ヨ鍘熸潗鏂欎俊鎭�
         IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsInventoryId);
         if (!ifsInventoryQuantity.getInspectStatus().equals(0)
@@ -778,7 +807,7 @@
         }
 
         // todo:闇�瑕佸垽鏂璷a娴佺▼鏄惁鏄姝ユ斁琛�
-        String toLocation = insReportService.moveRawMaterial(ifsInventoryQuantity);
+        String toLocation = insOrderService.moveRawMaterial(ifsInventoryQuantity);
 
         ifsInventoryQuantityMapper.update(null, new LambdaUpdateWrapper<IfsInventoryQuantity>()
                 .set(IfsInventoryQuantity::getInspectStatus, 1)
@@ -789,6 +818,145 @@
         return true;
     }
 
+    @Override
+    public void downloadTemplate(HttpServletResponse response) {
+        response.reset();
+        try{
+            String fileName = "璁㈠崟鎷嗗垎瀵煎叆妯℃澘" + ExcelTypeEnum.XLSX.getValue();
+            fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString());
+            response.setContentType("application/vnd.ms-excel");
+            response.setHeader("Cache-Control", "no-cache");
+            response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
+            response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
+            //璁㈠崟鎷嗗垎瀵煎叆妯℃澘鏂囦欢
+            InputStream inputStream = this.getClass().getResourceAsStream("/static/split_order_import_template.xlsx");
+            IoUtil.copy(inputStream,response.getOutputStream());
+            inputStream.close();
+        }catch (Exception e){
+            e.printStackTrace();
+            throw new RuntimeException("妯℃澘涓嬭浇澶辫触");
+        }
+    }
+
+    @Override
+    public Result importSplitOrderData(MultipartFile file,Long ifsId, HttpServletRequest request) {
+        try {
+            IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(ifsId);
+            OrderSplitExcelListener listener = new OrderSplitExcelListener(ifsInventoryQuantity);
+            EasyExcel.read(file.getInputStream(), listener).sheet().headRowNumber(2).doRead();
+            if(StringUtils.isNotBlank(listener.errorMsg)){
+                return Result.fail(201,listener.errorMsg);
+            }
+            return Result.success(listener.getDataList());
+        } catch (IOException e) {
+            e.printStackTrace();
+            throw new RuntimeException("瀵煎叆澶辫触:"+e.getMessage());
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED)
+    public boolean confirmSplitOrder(OrderSplitDTO orderSplitDTO) {
+        //1.鏌ヨifs璁㈠崟淇℃伅
+        IfsInventoryQuantity ifsInventoryQuantity = ifsInventoryQuantityMapper.selectById(orderSplitDTO.getIfsId());
+        if(Objects.isNull(ifsInventoryQuantity)){
+            throw new RuntimeException("鏈煡璇㈠埌璇FS璁㈠崟淇℃伅");
+        }
+        //2.瀵规帴ifs閲囪喘鎺ユ敹鏇存敼鎵瑰彿鎺ュ彛
+        //缁勮璇锋眰鍙傛暟inAttr
+        List<String> newLotBathNo = new ArrayList<>();//鏂版壒鍙峰垪琛�
+        Map<String,Object> inAttrMap = new HashMap<>();
+        inAttrMap.put("RECORD_ID",UUID.randomUUID().toString());
+        inAttrMap.put("SYSCODE","LIMS_NS");
+        inAttrMap.put("SYSMODEL","鑰愪笣LIMS璁㈠崟鎷嗗垎");
+        List<Map<String,Object>> batchInfoData = new ArrayList<>();
+        if(Objects.nonNull(orderSplitDTO.getSplitDetailList()) && !orderSplitDTO.getSplitDetailList().isEmpty()){
+            for (OrderSplitExcelData data : orderSplitDTO.getSplitDetailList()) {
+                Map<String, Object> infoMap = new HashMap<>();
+                infoMap.put("ORDER_NO",ifsInventoryQuantity.getOrderNo());
+                infoMap.put("LINE_NO",ifsInventoryQuantity.getLineNo());
+                infoMap.put("RELEASE_NO",ifsInventoryQuantity.getReleaseNo());
+                infoMap.put("RECEIPT_NO",ifsInventoryQuantity.getReceiptNo());
+                infoMap.put("PART_NO",ifsInventoryQuantity.getPartNo());
+                infoMap.put("CONFIGURATION_ID",ifsInventoryQuantity.getConfigurationId());
+                infoMap.put("LOCATION_NO",ifsInventoryQuantity.getLocationNo());
+                infoMap.put("LOT_BATCH_NO",ifsInventoryQuantity.getLotBatchNo());
+                infoMap.put("NEW_LOT_BATCH_NO",data.getLotBatchNo());
+                newLotBathNo.add(data.getLotBatchNo());
+                infoMap.put("SERIAL_NO",ifsInventoryQuantity.getSerialNo());
+                infoMap.put("ENG_CHG_LEVEL",ifsInventoryQuantity.getEngChgLevel());
+                infoMap.put("WAIV_DEV_REJ_NO",ifsInventoryQuantity.getWaivDevRejNo());
+                infoMap.put("ACTIVITY_SEQ",ifsInventoryQuantity.getActivitySeq());
+                infoMap.put("QTY_TO_CHANGE",data.getQtyStock());
+                batchInfoData.add(infoMap);
+            }
+        }
+        inAttrMap.put("BATCH_INFO", batchInfoData);
+        String inAttr = JSONObject.toJSONString(inAttrMap);
+        //璋冪敤ifs鎺ュ彛
+        Result result = ifsApiUtils.updateMoveReceiptLot(inAttr);
+        if(result.getCode()!=200){
+            throw new RuntimeException("IFS閲囪喘鎺ユ敹鏇存敼鎵瑰彿璇锋眰寮傚父锛�"+result.getMessage());
+        }
+        //鏇存柊涓昏鍗曠殑鎶佃揪閲囪喘鏁伴噺
+        BigDecimal purQtyInStore = orderSplitDTO.getSplitDetailList()
+                .stream()
+                .map(OrderSplitExcelData::getQtyStock)
+                .reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
+        BigDecimal newPurQtyInStore = ifsInventoryQuantity.getPurQtyInStore().subtract(purQtyInStore);
+        //濡傛灉鎷嗗垎鍚庯紝鍓╀綑鐨勫簱瀛樻暟閲忎负0锛屽垯鍒犻櫎鎵瑰彿涓�*鐨勮鍗曚俊鎭�
+        if(newPurQtyInStore.compareTo(BigDecimal.ZERO)==0){
+            ifsInventoryQuantityMapper.deleteById(ifsInventoryQuantity.getId());
+        }else{
+            ifsInventoryQuantityMapper.update(null,Wrappers.<IfsInventoryQuantity>lambdaUpdate()
+                    .set(IfsInventoryQuantity::getPurQtyInStore,newPurQtyInStore)
+                    .set(IfsInventoryQuantity::getInvQtyInStore,newPurQtyInStore)
+                    .eq(IfsInventoryQuantity::getId,ifsInventoryQuantity.getId())
+            );
+        }
+        //ifs鏇存敼鎵瑰彿鎺ュ彛璋冪敤鎴愬姛锛屾媺鍙栨柊鎷嗗垎鐨刬fs璁㈠崟骞舵姤妫�
+        Map<String, Object> map = new HashMap<>();
+        map.put("LOCATION_NO","1302");
+        map.put("STATE_DB","To be Inspected");
+        map.put("PART_NO",ifsInventoryQuantity.getPartNo());
+        map.put("ORDER_NO",ifsInventoryQuantity.getOrderNo());
+        map.put("LINE_NO",ifsInventoryQuantity.getLineNo());
+        map.put("RELEASE_NO",ifsInventoryQuantity.getReleaseNo());
+        map.put("RECEIPT_NO",ifsInventoryQuantity.getReceiptNo());
+        map.put("LOT_BATCH_NO",String.join(";",newLotBathNo));
+        insOrderService.getIfsOrder(map,true);
+        //鏌ヨ鏂版媶鍒嗙殑璁㈠崟淇℃伅
+        List<IfsInventoryQuantity> splitOrderList = ifsInventoryQuantityMapper.selectList(Wrappers.<IfsInventoryQuantity>lambdaQuery()
+                .eq(IfsInventoryQuantity::getLocationNo, "1302")
+                .eq(IfsInventoryQuantity::getStatusDb, "To be Inspected")
+                .eq(IfsInventoryQuantity::getPartNo, ifsInventoryQuantity.getPartNo())
+                .eq(IfsInventoryQuantity::getOrderNo, ifsInventoryQuantity.getOrderNo())
+                .eq(IfsInventoryQuantity::getLineNo, ifsInventoryQuantity.getLineNo())
+                .eq(IfsInventoryQuantity::getReleaseNo, ifsInventoryQuantity.getReleaseNo())
+                .eq(IfsInventoryQuantity::getReceiptNo, ifsInventoryQuantity.getReceiptNo())
+                .in(IfsInventoryQuantity::getLotBatchNo, newLotBathNo)
+        );
+        //鎵ц鎶ユ鎿嶄綔
+        if(Objects.nonNull(splitOrderList) && !splitOrderList.isEmpty()){
+            List<Long> ids = splitOrderList.stream().map(IfsInventoryQuantity::getId).collect(Collectors.toList());
+            ids.add(ifsInventoryQuantity.getId());
+            this.inspectionReport(ids,OrderType.RAW.getValue());
+        }
+        //鍕鹃�夊悓姝ュ埌MES锛屼繚瀛樿鍗曟媶鍒嗚褰�
+        if(orderSplitDTO.getPushToMes()){
+            List<IfsSplitOrderRecord> collect = orderSplitDTO.getSplitDetailList().stream().map(m -> {
+                IfsSplitOrderRecord record = new IfsSplitOrderRecord();
+                BeanUtil.copyProperties(m, record);
+                record.setOrderNo(ifsInventoryQuantity.getOrderNo());
+                record.setLineNo(ifsInventoryQuantity.getLineNo());
+                record.setReleaseNo(ifsInventoryQuantity.getReleaseNo());
+                record.setReceiptNo(ifsInventoryQuantity.getReceiptNo());
+                return record;
+            }).collect(Collectors.toList());
+            return ifsSplitOrderRecordService.saveBatch(collect);
+        }
+        return false;
+    }
 
     /**
      * 娣诲姞宸ユ椂

--
Gitblit v1.9.3