From 0f769b47d8d71bd419ddf1733b0b2f21c82e86b1 Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期一, 07 十月 2024 10:33:30 +0800
Subject: [PATCH] 跨巷道移库

---
 src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java | 1398 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 1,388 insertions(+), 10 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
index 1923cd6..be1cef1 100644
--- a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -7,18 +7,18 @@
 import com.core.common.*;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
-import com.zy.asrs.entity.param.CombParam;
-import com.zy.asrs.entity.param.MobileAdjustParam;
-import com.zy.asrs.entity.param.OffSaleParam;
-import com.zy.asrs.entity.param.OpenOrderPakinParam;
+import com.zy.asrs.entity.param.*;
 import com.zy.asrs.mapper.ManLocDetlMapper;
+import com.zy.asrs.mapper.MatMapper;
+import com.zy.asrs.mapper.OrderDetlMapper;
 import com.zy.asrs.service.*;
 import com.zy.asrs.utils.MatUtils;
-import com.zy.common.CodeRes;
 import com.zy.common.constant.MesConstant;
 import com.zy.common.entity.Parameter;
 import com.zy.common.model.DetlDto;
+import com.zy.common.model.LocTypeDto;
 import com.zy.common.model.MesCombParam;
+import com.zy.common.model.StartupDto;
 import com.zy.common.service.CommonService;
 import com.zy.common.utils.HttpHandler;
 import lombok.extern.slf4j.Slf4j;
@@ -26,10 +26,9 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 绉诲姩绔湇鍔℃牳蹇冪被
@@ -39,8 +38,12 @@
 @Service
 public class MobileServiceImpl implements MobileService {
 
+
+
     @Autowired
     private MatService matService;
+    @Autowired
+    private MatMapper matMapper;
     @Autowired
     private WaitPakinService waitPakinService;
     @Autowired
@@ -77,13 +80,550 @@
     private ManLocDetlService manLocDetlService;
     @Autowired
     private ManLocDetlMapper manLocDetlMapper;
+    @Autowired
+    private DocTypeService docTypeService;
+    @Autowired
+    private LocDetlRullUpDetailService locDetlRullUpDetailService;
+    @Autowired
+    private TagService tagService;
+    @Autowired
+    private BasBoxTypeService basBoxTypeService;
+    @Autowired
+    private WrkMastLogService wrkMastLogService;
+
+    @Resource
+    private OpenServiceImpl openServiceImpl;
+
+    @Resource
+    private OrderDetlMapper orderDetlMapper;
+
+    @Override
+    @Transactional
+    public void trussComb(TrussCombParam param, Long userId) {
+        Date now = new Date();
+        if (param.getSouSta()==145){
+            param.setBarcode(String.valueOf(now.getTime()));
+        }else {
+            if (Cools.isEmpty(param.getBarcode())){
+                throw new CoolException("鍙傛暟锛氭墭鐩樼爜涓虹┖");
+            }
+        }
+        param.setPalletizingNo(147);
 
 
+
+        //鍒ゆ柇param鍙傛暟
+        if (Cools.isEmpty(param.getPalletizingNo())){
+            throw new CoolException("鍙傛暟锛氬師绔欑偣缂栧彿涓虹┖");
+        }else if (param.getSouSta()==145 && param.getMatList().size() != 1){
+            throw new CoolException("鍙傛暟锛氱墿鏂欐槑缁� matLists涓虹┖  鎴栬��  澶т簬1涓槑缁�");
+        }else if (Cools.isEmpty(param.getMatList()) || param.getMatList().size() > 2){
+            throw new CoolException("鍙傛暟锛氱墿鏂欐槑缁� matLists涓虹┖  鎴栬��  澶т簬2涓槑缁�");
+        }
+
+        String matnr = null;
+        List<WaitPakin> waitPakins = new ArrayList<>();
+        for (TrussCombParam.MatList matList:param.getMatList()){
+            long rollUp = new Date().getTime();
+            Mat mat = matService.selectByMatnr(matList.getMatnr());
+            if (Cools.isEmpty(mat)) {
+                throw new CoolException(matList.getMatnr() + "鍟嗗搧妗f涓嶅瓨鍦�");
+            }
+            matnr = mat.getMatnr();
+            WaitPakin waitPakin = new WaitPakin();
+            waitPakin.sync(mat);
+            waitPakin.setModel(matList.getModel());     //鎵规
+            waitPakin.setSpecs(matList.getSpecs());     //瑙勬牸
+            waitPakin.setBatch(matList.getBatch());       //鏈ㄧ缂栫爜
+            waitPakin.setBrand(param.getBoxType());     //鏈ㄧ绫诲瀷
+            waitPakin.setZpallet(param.getBarcode());   //鎵樼洏鐮�
+            waitPakin.setOrigin(matList.getPosition()); //鏈ㄧ鍦ㄦ墭鐩樹笂鐨勪綅缃�
+            waitPakin.setIoStatus("N");     // 鍏ュ嚭鐘舵��
+            waitPakin.setAnfme((double)matList.getAnfme());  // 鏈ㄧ涓摐绠旀暟閲�
+            waitPakin.setStatus("Y");    // 鐘舵��
+            waitPakin.setAppeUser(userId);
+            waitPakin.setAppeTime(now);
+            waitPakin.setModiUser(userId);
+            waitPakin.setModiTime(now);
+            waitPakin.setRollUp(rollUp);
+            if (!Cools.isEmpty(matList.getMatDetlList())){
+                for (TrussCombParam.MatDetlList matDetlList:matList.getMatDetlList()){
+                    LocDetlRullUpDetail locDetlRullUpDetail = new LocDetlRullUpDetail();
+                    locDetlRullUpDetail.setUuid(rollUp);
+                    locDetlRullUpDetail.setRollNo(matDetlList.getBoxNoDetl());
+                    locDetlRullUpDetail.setRollWeight(matDetlList.getWeightDetl().toString());
+                    locDetlRullUpDetailService.insert(locDetlRullUpDetail);
+                }
+            }
+            if (!waitPakinService.insert(waitPakin)) {
+                throw new CoolException("淇濆瓨鍏ュ簱閫氱煡妗eけ璐�");
+            }
+            waitPakins.add(waitPakin);
+        }
+
+        LocTypeDto locTypeDto = new LocTypeDto();
+        locTypeDto.setLocType1((short)1);
+
+        StartupDto dto = commonService.getLocNo(1, 1, param.getSouSta(), matnr,null,null, locTypeDto);
+
+        int workNo = dto.getWorkNo();
+        // 鐢熸垚宸ヤ綔妗�
+        WrkMast wrkMast = new WrkMast();
+        wrkMast.setWrkNo(workNo);
+        wrkMast.setIoTime(new Date());
+        wrkMast.setWrkSts(1L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱ID
+        wrkMast.setIoType(1); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱
+        wrkMast.setIoPri(13D); // 浼樺厛绾�
+        wrkMast.setCrnNo(dto.getCrnNo());
+        wrkMast.setSourceStaNo(dto.getSourceStaNo());
+        wrkMast.setStaNo(dto.getStaNo());
+        wrkMast.setLocNo(dto.getLocNo());
+        wrkMast.setBarcode(param.getBarcode()); // 鎵樼洏鐮�
+        wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
+        wrkMast.setPicking("N"); // 鎷f枡
+        wrkMast.setExitMk("N"); // 閫�鍑�
+        wrkMast.setEmptyMk("N"); // 绌烘澘
+        wrkMast.setLinkMis("Y");
+        wrkMast.setCtnType(0); // 瀹瑰櫒绫诲瀷
+        // 鎿嶄綔浜哄憳鏁版嵁
+        wrkMast.setAppeTime(now);
+        wrkMast.setModiTime(now);
+        boolean res = wrkMastService.insert(wrkMast);
+        if (!res) {
+            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+        }
+        // 鐢熸垚宸ヤ綔妗f槑缁�
+        waitPakins.forEach(waitPakin -> {
+            WrkDetl wrkDetl = new WrkDetl();
+            wrkDetl.sync(waitPakin);
+            wrkDetl.setWrkNo(wrkMast.getWrkNo());
+            wrkDetl.setIoTime(wrkMast.getIoTime());
+            wrkDetl.setAppeTime(now);
+            wrkDetl.setModiTime(now);
+            wrkDetl.setRollUp(waitPakin.getRollUp());
+            if (!wrkDetlService.insert(wrkDetl)) {
+                throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触");
+            }
+        });
+        // 鏇存柊鐩爣搴撲綅鐘舵��
+        LocMast locMast = locMastService.selectById(dto.getLocNo());
+        if (locMast.getLocSts().equals("O")){
+            locMast.setLocSts("S"); // S.鍏ュ簱棰勭害
+            locMast.setModiTime(now);
+            if (!locMastService.updateById(locMast)){
+                throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�");
+            }
+        } else {
+            throw new CoolException(dto.getLocNo()+"鐩爣搴撲綅宸茶鍗犵敤");
+        }
+    }
+
+    //wms鍏ュ簱缁勬墭  閫�搴撳崟閫�搴撶粍鎵�
+    @Override
+    @Transactional
+    public void trussCombOrder(TrussCombParam param, Long userId) {
+        Date now = new Date();
+        param.setBarcode(String.valueOf(now.getTime()));
+        param.setPalletizingNo(147);
+
+        //鍒ゆ柇param鍙傛暟
+        if (Cools.isEmpty(param.getPalletizingNo())){
+            throw new CoolException("鍙傛暟锛氱爜鍨涗綅缂栧彿 palletizingNo涓虹┖");
+        }else if (Cools.isEmpty(param.getOrderNo())){
+            throw new CoolException("鍙傛暟锛氶��璐у崟鍗曞彿 orderNo涓虹┖");
+        }else if (Cools.isEmpty(param.getMatList())){
+            throw new CoolException("鍙傛暟锛氱墿鏂欐槑缁� matLists涓虹┖");
+        }
+
+        Order order = orderService.selectByNo(param.getOrderNo());
+        if (Cools.isEmpty(order) || order.getSettle() > 2) {
+            throw new CoolException("鍗曟嵁缂栧彿宸茶繃鏈燂紝鍗曞彿锛�"+param.getOrderNo());
+        }
+        DocType docType = docTypeService.selectById(order.getDocType());
+        if (Cools.isEmpty(docType) || !docType.getDocName().equals("閫�璐у叆搴撳崟")){
+            throw new CoolException("鍗曞彿锛�"+param.getOrderNo()+"涓嶆槸閫�璐у叆搴撳崟");
+        }
+
+        List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order.getId());
+        if (Cools.isEmpty(orderDetls) || orderDetls.size()==0){
+            throw new CoolException("鏈煡璇㈠埌姝よ鍗曟槑缁嗭紝鍗曞彿锛�"+param.getOrderNo());
+        }
+        List<String> orderBoxNoList = new ArrayList<>();
+        for (OrderDetl orderDetl: orderDetls){
+            if (orderDetl.getWorkQty().equals(0.0)){
+                orderBoxNoList.add(orderDetl.getBatch());
+            }
+        }
+        if (orderBoxNoList.size()==0 || orderBoxNoList.size()<param.getMatList().size()){
+            throw new CoolException("鍗曞彿锛�"+param.getOrderNo()+" 閫�璐ф暟閲忓ぇ浜庢槑缁嗘暟閲�");
+        }
+        List<String> matListBoxNoList = new ArrayList<>();
+        for (TrussCombParam.MatList matList: param.getMatList()){
+            if (!orderBoxNoList.contains(matList.getBatch())){
+                throw new CoolException("鍗曞彿锛�"+param.getOrderNo()+" 绠卞彿锛�"+matList.getBatch()+"涓嶅睘浜庢璁㈠崟鎴栬�呭凡缁忓叆搴�");
+            }else {
+                matListBoxNoList.add(matList.getBatch());
+            }
+        }
+        List<OrderDetl> orderDetlList = new ArrayList<>();
+        for (OrderDetl orderDetl: orderDetls){
+            if (matListBoxNoList.contains(orderDetl.getBatch())){
+                orderDetlList.add(orderDetl);
+            }
+        }
+        List<WaitPakin> waitPakins = new ArrayList<>();
+
+        String matnrSign = "";
+        String brandSign = "";
+        for (OrderDetl orderDetl:orderDetlList){
+            if (Cools.isEmpty(orderDetl.getMatnr()) || Cools.isEmpty(orderDetl.getBrand())){
+                throw new CoolException(orderDetl.getOrderNo() + "鎵�閫夋槑缁嗗瓨鍦ㄦ湭鐭ヨ鏍兼垨鑰呮湭鐭ョ鍨嬶紝璇风淮鎶ゆ暟鎹紒");
+            }
+            if (matnrSign.equals("")){
+                matnrSign = orderDetl.getMatnr();
+                brandSign = orderDetl.getBrand();
+            }else {
+                if (!matnrSign.equals(orderDetl.getMatnr())){
+                    throw new CoolException(orderDetl.getMatnr() + "璇烽�夋嫨鍚屼竴涓鏍肩殑璐х墿锛侊紒锛�");
+                }
+                if (!brandSign.equals(orderDetl.getBrand())){
+                    throw new CoolException(orderDetl.getMatnr() + "璇烽�夋嫨鍚屼竴绉嶇鍨嬬殑璐х墿锛侊紒锛�");
+                }
+            }
+        }
+        Mat mat = matService.selectByMatnr(matnrSign);
+        if (Cools.isEmpty(mat)) {
+            throw new CoolException(matnrSign + "鍟嗗搧妗f涓嶅瓨鍦�");
+        }
+        for (OrderDetl orderDetl:orderDetlList){
+            WaitPakin waitPakin = new WaitPakin();
+            waitPakin.sync(mat);
+            waitPakin.setOrderNo(order.getOrderNo());   // 鍗曟嵁缂栧彿
+            waitPakin.setModel(orderDetl.getModel());     //鎵规
+            waitPakin.setSpecs(orderDetl.getSpecs());     //瑙勬牸
+            waitPakin.setBatch(orderDetl.getBatch());       //鏈ㄧ缂栫爜
+            waitPakin.setBrand(orderDetl.getBrand());     //鏈ㄧ绫诲瀷
+            waitPakin.setZpallet(param.getBarcode());   //鎵樼洏鐮�
+            waitPakin.setWeight(orderDetl.getWeight());  //鍑�閲�
+            waitPakin.setVolume(orderDetl.getVolume());  //姣涢噸
+            waitPakin.setPrice(orderDetl.getPrice());   //闀垮害
+            waitPakin.setSpecs(String.valueOf(orderDetl.getSpecs()));   //鎺ュご
+            waitPakin.setOrigin("1"); //鏈ㄧ鍦ㄦ墭鐩樹笂鐨勪綅缃�
+            waitPakin.setIoStatus("Y");     // 鍏ュ嚭鐘舵��
+            waitPakin.setAnfme(orderDetl.getAnfme());  // 鏈ㄧ涓摐绠旀暟閲�
+            waitPakin.setWeight(orderDetl.getWeight());  // 鏈ㄧ涓摐绠斿噣閲�
+            waitPakin.setStatus("Y");    // 鐘舵��
+            waitPakin.setAppeUser(userId);
+            waitPakin.setAppeTime(now);
+            waitPakin.setModiUser(userId);
+            waitPakin.setModiTime(now);
+            waitPakin.setZpallet(param.getBarcode());
+            if (!waitPakinService.insert(waitPakin)) {
+                throw new CoolException("淇濆瓨鍏ュ簱閫氱煡妗eけ璐�");
+            }
+            waitPakins.add(waitPakin);
+        }
+
+        LocTypeDto locTypeDto = new LocTypeDto();
+        locTypeDto.setLocType1((short)1);
+
+        StartupDto dto = commonService.getLocNo(1, 1, 145, matnrSign,null,null, locTypeDto);
+
+        int workNo = dto.getWorkNo();
+        // 鐢熸垚宸ヤ綔妗�
+        WrkMast wrkMast = new WrkMast();
+        wrkMast.setWrkNo(workNo);
+        wrkMast.setIoTime(new Date());
+        wrkMast.setWrkSts(1L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱ID
+        wrkMast.setIoType(1); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱
+        wrkMast.setIoPri(13D); // 浼樺厛绾�
+        wrkMast.setCrnNo(dto.getCrnNo());
+        wrkMast.setSourceStaNo(dto.getSourceStaNo());
+        wrkMast.setStaNo(dto.getStaNo());
+        wrkMast.setLocNo(dto.getLocNo());
+        wrkMast.setBarcode(param.getBarcode()); // 鎵樼洏鐮�
+        wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
+        wrkMast.setPicking("N"); // 鎷f枡
+        wrkMast.setExitMk("N"); // 閫�鍑�
+        wrkMast.setEmptyMk("N"); // 绌烘澘
+        wrkMast.setLinkMis("Y");
+        wrkMast.setCtnType(0); // 瀹瑰櫒绫诲瀷
+        wrkMast.setBarcode(param.getBarcode());
+        // 鎿嶄綔浜哄憳鏁版嵁
+        wrkMast.setAppeTime(now);
+        wrkMast.setModiTime(now);
+        boolean res = wrkMastService.insert(wrkMast);
+        if (!res) {
+            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+        }
+        // 鐢熸垚宸ヤ綔妗f槑缁�
+        waitPakins.forEach(waitPakin -> {
+            WrkDetl wrkDetl = new WrkDetl();
+            wrkDetl.sync(waitPakin);
+            wrkDetl.setOrderNo(order.getOrderNo());
+            wrkDetl.setWrkNo(wrkMast.getWrkNo());
+            wrkDetl.setIoTime(wrkMast.getIoTime());
+            wrkDetl.setAppeTime(now);
+            wrkDetl.setModiTime(now);
+            wrkDetl.setZpallet(param.getBarcode());
+            if (!wrkDetlService.insert(wrkDetl)) {
+                throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触");
+            }
+        });
+        // 鏇存柊鐩爣搴撲綅鐘舵��
+        LocMast locMast = locMastService.selectById(dto.getLocNo());
+        if (locMast.getLocSts().equals("O")){
+            locMast.setLocSts("S"); // S.鍏ュ簱棰勭害
+            locMast.setModiTime(now);
+            if (!locMastService.updateById(locMast)){
+                throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�");
+            }
+        } else {
+            throw new CoolException(dto.getLocNo()+"鐩爣搴撲綅宸茶鍗犵敤");
+        }
+        // 淇敼璁㈠崟浣滀笟鏁伴噺
+        if (!orderDetlService.increaseWorkQty(order.getId(), orderDetls.get(0).getMatnr(), orderDetls.get(0).getBatch(), orderDetls.get(0).getAnfme())) {
+            throw new CoolException("淇敼鍗曟嵁浣滀笟鏁伴噺澶辫触");
+        }
+        orderService.updateSettle(order.getId(), 2L, userId);
+    }
+
+    @Override
+    @Transactional
+    public void trussComb2Car(Integer staNo) {
+        if (staNo!=212){
+            throw new CoolException("鍙厑璁�212鍛煎彨鎵樼洏");
+        }
+        BasDevp basDevp = basDevpService.selectById(212);
+        if (!basDevp.getAutoing().equals("Y")){
+            throw new CoolException("212绔欑偣涓嶆槸鑷姩");
+        } else if (basDevp.getLoading().equals("Y")){
+            throw new CoolException("212绔欑偣鏈夌墿");
+        } else if (basDevp.getWrkNo()!=0){
+            throw new CoolException("212绔欑偣鏈夊伐浣滃彿");
+        }
+        WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 212));
+        if (!Cools.isEmpty(wrkMast1)){
+            throw new CoolException("浠诲姟妗f宸插瓨鍦紒璇风瓑寰�...");
+        }
+        int workNo = commonService.getWorkNo(6);
+        Date now = new Date();
+        // 鐢熸垚宸ヤ綔妗�
+        WrkMast wrkMast = new WrkMast();
+        wrkMast.setWrkNo(workNo);
+        wrkMast.setIoTime(new Date());
+        wrkMast.setWrkSts(61L); // 宸ヤ綔鐘舵�侊細61銆佺瓑寰呯┖鏉�
+        wrkMast.setIoType(212); // 鍏ュ嚭搴撶姸鎬侊細212.2妤�212鍛煎彨绌烘澘
+        wrkMast.setIoPri(10D); // 浼樺厛绾�
+        wrkMast.setStaNo(212);
+        wrkMast.setFullPlt("N"); // 婊℃澘锛歒
+        wrkMast.setPicking("N"); // 鎷f枡
+        wrkMast.setExitMk("N"); // 閫�鍑�
+        wrkMast.setEmptyMk("Y"); // 绌烘澘
+        wrkMast.setLinkMis("Y");
+        wrkMast.setCtnType(0); // 瀹瑰櫒绫诲瀷
+        // 鎿嶄綔浜哄憳鏁版嵁
+        wrkMast.setAppeTime(now);
+        wrkMast.setModiTime(now);
+        boolean res = wrkMastService.insert(wrkMast);
+        if (!res) {
+            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+        }
+    }
+    @Override
+    @Transactional
+    public void PalletizingCompleteTwoFloorParam(PalletizingCompleteTwoFloorParam param) {
+        Long userId = 7777L;//涓帶
+        param.setPalletizingNo(212);
+
+        WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
+                .eq("io_type", 1).eq("wrk_sts", 1).eq("source_sta_no",212));
+        if (!Cools.isEmpty(wrkMast1)){
+            throw new CoolException("瀛樺湪涓�绗斿伐浣滄。妗堬紝璇峰厛鍏ュ簱锛�");
+        }
+
+        //鍒ゆ柇param鍙傛暟
+        if (Cools.isEmpty(param.getBarcode())){
+            throw new CoolException("鍙傛暟锛氭墭鐩樼爜 barcode涓虹┖");
+        }else if (Cools.isEmpty(param.getPalletizingNo())){
+            throw new CoolException("鍙傛暟锛氱爜鍨涗綅缂栧彿 palletizingNo涓虹┖");
+        }else if (Cools.isEmpty(param.getBoxType())){
+            throw new CoolException("鍙傛暟锛氭湪绠辩被鍨� boxType涓虹┖");
+        }else if (Cools.isEmpty(param.getMatList()) || param.getMatList().size()==0){
+            throw new CoolException("鍙傛暟锛氱墿鏂欐槑缁� matLists涓虹┖");
+        }
+
+        String matnrOne = "";//鏈ㄧ鐩稿悓浣嶇疆 瑙勬牸 matnr鏍¢獙  1銆佸乏
+        String matnrTwo = "";//鏈ㄧ鐩稿悓浣嶇疆 瑙勬牸 matnr鏍¢獙  2銆佸彸
+        ArrayList<String> boxNos = new ArrayList<>();   //鏈ㄧ鍞竴缂栫爜鏌ラ噸  锛坆atch锛�
+        //鍒ゆ柇matLists鍙傛暟
+        for (PalletizingCompleteTwoFloorParam.MatList matList:param.getMatList()){
+            if (Cools.isEmpty(matList.getMatnr())){
+                throw new CoolException("鍙傛暟锛氳鏍� matnr涓虹┖");
+            }else if (Cools.isEmpty(matList.getPosition())){
+                throw new CoolException("瑙勬牸锛�"+matList.getMatnr()+"銆佸弬鏁帮細鐮佸灈浣嶇疆 position涓虹┖");
+            }else if (Cools.isEmpty(matList.getBatch())){
+                throw new CoolException("瑙勬牸锛�"+matList.getMatnr()+"銆佸弬鏁帮細鏈ㄧ缂栧彿 batch涓虹┖");
+            }else if (Cools.isEmpty(matList.getModel())){
+                throw new CoolException("瑙勬牸锛�"+matList.getMatnr()+"銆佸弬鏁帮細鍗峰彿 model涓虹┖");
+            }else if (Cools.isEmpty(matList.getBatch())){
+                throw new CoolException("瑙勬牸锛�"+matList.getMatnr()+"銆佸弬鏁帮細鏈ㄧ缂栧彿 boxNo涓虹┖");
+            }else if (Cools.isEmpty(matList.getWeight()) || matList.getWeight().equals(0D)){
+                throw new CoolException("瑙勬牸锛�"+matList.getMatnr()+"銆佸弬鏁帮細鍑�閲� weight涓虹┖");
+            }else if (Cools.isEmpty(matList.getRoughWeight()) || matList.getRoughWeight().equals(0D)){
+                throw new CoolException("瑙勬牸锛�"+matList.getMatnr()+"銆佸弬鏁帮細姣涢噸 roughWeight涓虹┖");
+            }else if (Cools.isEmpty(matList.getRollExtent()) || matList.getRollExtent().equals(0D)){
+                throw new CoolException("瑙勬牸锛�"+matList.getMatnr()+"銆佸弬鏁帮細鍗烽暱搴� rollExtent涓虹┖");
+            }
+
+            if (matList.getPosition().equals("1")){//1銆佸乏  2銆佸彸
+                if (!matnrOne.equals("")){
+                    if (!matnrOne.equals(matList.getMatnr())){
+                        throw new CoolException("鏈ㄧ浣嶇疆锛�"+matList.getPosition()+"瀛樺湪涓嶅悓瑙勬牸鍗蜂俊鎭�");
+                    }
+                }else {
+                    matnrOne=matList.getMatnr();
+                }
+            }else if (matList.getPosition().equals("2")){
+                if (!matnrTwo.equals("")){
+                    if (!matnrTwo.equals(matList.getMatnr())){
+                        throw new CoolException("鏈ㄧ浣嶇疆锛�"+matList.getPosition()+"瀛樺湪涓嶅悓瑙勬牸鍗蜂俊鎭�");
+                    }
+                }else {
+                    matnrTwo=matList.getMatnr();
+                }
+            }else {
+                throw new CoolException("鍙傛暟锛氭湪绠辩紪鍙� boxNo:"+matList.getBatch()+",鏈ㄧ浣嶇疆閿欒锛�"+matList.getPosition());
+            }
+
+            if (!boxNos.contains(matList.getBatch())){
+                boxNos.add(matList.getBatch());
+            }else {
+                throw new CoolException("鍙傛暟锛氭湪绠辩紪鍙� boxNo:"+matList.getBatch()+",鏈ㄧ缂栫爜瀛樺湪閲嶅");
+            }
+
+            if (locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("batch", matList.getBatch()))!=0
+                    || wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("batch", matList.getBatch()))!=0
+                    || waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("batch", matList.getBatch()))!=0){
+                throw new CoolException("鏈ㄧ缂栧彿锛�"+matList.getBatch()+"宸插瓨鍦紝璇峰嬁閲嶅鍏ュ簱");
+            }
+        }
+
+        if (locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet", param.getBarcode()))!=0
+                || wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet", param.getBarcode()))!=0
+                || waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet", param.getBarcode()))!=0){
+            throw new CoolException("鎵樼洏鏉$爜锛�"+param.getBarcode()+"宸插瓨鍦紝璇峰嬁閲嶅缁勬墭");
+        }
+
+        String matnr = null;
+        List<WaitPakin> waitPakins = new ArrayList<>();
+        Date now = new Date();
+        for (PalletizingCompleteTwoFloorParam.MatList matList:param.getMatList()){
+            Mat mat = matService.selectByMatnr(matList.getMatnr());
+            if (Cools.isEmpty(mat)) {
+                mat = new Mat();
+                mat.setMatnr(matList.getMatnr());
+                mat.setMaktx(matList.getMatnr());
+                mat.setTagId(tagService.getTop().getId());
+                mat.setBrand(param.getBoxType());
+                mat.setCreateBy(userId);
+                mat.setCreateTime(now);
+                mat.setUpdateBy(userId);
+                mat.setUpdateTime(now);
+                mat.setStatus(1);
+                if (!matService.insert(mat)) {
+                    throw new CoolException("瑙勬牸娣诲姞澶辫触锛岃鑱旂郴绠$悊鍛�");
+                }
+            }
+            matnr = matList.getMatnr();
+            WaitPakin waitPakin = new WaitPakin();
+            waitPakin.sync(mat);
+            waitPakin.setBatch(matList.getBatch());       //鏈ㄧ缂栫爜  //鎵规  鍞竴鍊�  绠卞彿
+            waitPakin.setModel(matList.getModel());       //鍗峰彿  鍞竴鍊�
+            waitPakin.setBrand(param.getBoxType());     //鏈ㄧ绫诲瀷
+            waitPakin.setZpallet(param.getBarcode());   //鎵樼洏鐮�
+            waitPakin.setOrigin(matList.getPosition()); //鏈ㄧ鍦ㄦ墭鐩樹笂鐨勪綅缃�
+            waitPakin.setWeight(matList.getWeight());  //鍑�閲�
+            waitPakin.setVolume(matList.getRoughWeight());  //姣涢噸
+            waitPakin.setPrice(matList.getRollExtent());   //闀垮害
+            waitPakin.setSpecs(String.valueOf(matList.getJoint()));   //鎺ュご
+            waitPakin.setIoStatus("Y");     // 鍏ュ嚭鐘舵��
+            waitPakin.setAnfme(matList.getAnfme());  // 鏁伴噺
+            waitPakin.setStatus("Y");    // 鐘舵��
+            waitPakin.setAppeUser(userId);
+            waitPakin.setAppeTime(now);
+            waitPakin.setModiUser(userId);
+            waitPakin.setModiTime(now);
+            if (!waitPakinService.insert(waitPakin)) {
+                throw new CoolException("淇濆瓨鍏ュ簱閫氱煡妗eけ璐�");
+            }
+            waitPakins.add(waitPakin);
+        }
+
+        LocTypeDto locTypeDto = new LocTypeDto();
+        locTypeDto.setLocType1((short)1);
+
+        StartupDto dto = commonService.getLocNo(1, 1, 212, matnr,null,null, locTypeDto);
+
+        int workNo = dto.getWorkNo();
+        // 鐢熸垚宸ヤ綔妗�
+        WrkMast wrkMast = new WrkMast();
+        wrkMast.setWrkNo(workNo);
+        wrkMast.setIoTime(new Date());
+        wrkMast.setWrkSts(1L); // 宸ヤ綔鐘舵�侊細鐢熸垚鍏ュ簱ID
+        wrkMast.setIoType(1); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱
+        wrkMast.setIoPri(13D); // 浼樺厛绾�
+        wrkMast.setCrnNo(dto.getCrnNo());
+        wrkMast.setSourceStaNo(dto.getSourceStaNo());
+        wrkMast.setStaNo(dto.getStaNo());
+        wrkMast.setLocNo(dto.getLocNo());
+        wrkMast.setBarcode(param.getBarcode()); // 鎵樼洏鐮�
+        wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
+        wrkMast.setPicking("N"); // 鎷f枡
+        wrkMast.setExitMk("N"); // 閫�鍑�
+        wrkMast.setEmptyMk("N"); // 绌烘澘
+        wrkMast.setLinkMis("Y");
+        wrkMast.setCtnType(0); // 瀹瑰櫒绫诲瀷
+        // 鎿嶄綔浜哄憳鏁版嵁
+        wrkMast.setAppeTime(now);
+        wrkMast.setModiTime(now);
+        boolean res = wrkMastService.insert(wrkMast);
+        if (!res) {
+            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+        }
+        // 鐢熸垚宸ヤ綔妗f槑缁�
+        waitPakins.forEach(waitPakin -> {
+            WrkDetl wrkDetl = new WrkDetl();
+            wrkDetl.sync(waitPakin);
+            wrkDetl.setWrkNo(wrkMast.getWrkNo());
+            wrkDetl.setIoTime(wrkMast.getIoTime());
+            wrkDetl.setAppeTime(now);
+            wrkDetl.setModiTime(now);
+            wrkDetl.setZpallet(param.getBarcode());
+            if (!wrkDetlService.insert(wrkDetl)) {
+                throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触");
+            }
+        });
+        // 鏇存柊鐩爣搴撲綅鐘舵��
+        LocMast locMast = locMastService.selectById(dto.getLocNo());
+        if (locMast.getLocSts().equals("O")){
+            locMast.setLocSts("S"); // S.鍏ュ簱棰勭害
+            locMast.setModiTime(now);
+            if (!locMastService.updateById(locMast)){
+                throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�");
+            }
+        } else {
+            throw new CoolException(dto.getLocNo()+"鐩爣搴撲綅宸茶鍗犵敤");
+        }
+    }
     @Override
     @Transactional
     public void comb(CombParam param, Long userId) {
         if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) {
             throw new CoolException(BaseRes.PARAM);
+        }
+        if(param.getCombMats().size()>1){
+            throw new CoolException("璇锋彁鍙栦竴涓晢鍝侊紝鎴栬�呭埛鏂伴噸鏂扮粍鎵橈紒");
         }
         // 鍒ゆ柇鏄惁鏈夌浉鍚屾潯鐮佺殑鏁版嵁
         if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>().
@@ -147,7 +687,7 @@
         // 鍏宠仈缁勬墭
         } else {
             Order order = orderService.selectByNo(param.getOrderNo());
-            if (order.getSettle() > 2) {
+            if (Cools.isEmpty(order) || order.getSettle() > 2) {
                 throw new CoolException("鍗曟嵁缂栧彿宸茶繃鏈�");
             }
             // 鐢熸垚鍏ュ簱閫氱煡妗�
@@ -592,6 +1132,10 @@
         wrkMast.setEmptyMk("N"); // 绌烘澘
         wrkMast.setLinkMis("N");
         wrkMast.setAppeUser(userId); // 鎿嶄綔浜哄憳鏁版嵁
+        wrkMast.setSheetNo("0");  //寰愬伐姹変簯鎷嗗灈鏍囪锛�0: 鍒濆  1: 鏈媶  2:宸叉媶 3锛氬凡澶勭悊鍙笅涓�姝ワ紙杞巻鍙叉。锛�
+        if (wrkMast.getStaNo()<118 || wrkMast.getStaNo()>121){
+            wrkMast.setSheetNo("3");
+        }
         wrkMast.setAppeTime(now);
         wrkMast.setModiUser(userId);
         wrkMast.setModiTime(now);
@@ -627,4 +1171,838 @@
             throw new CoolException(locDetl.getLocNo() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
         }
     }
+
+    @Override
+    @Transactional
+    public R pakoutFhqr(PdckqrParam param) {
+
+         // 鑾峰彇宸ヤ綔妗�
+        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode",param.getBarcode()));
+        if (wrkMast == null) {
+            throw new CoolException("宸ヤ綔妗d笉瀛樺湪锛�" + param.getBarcode());
+        }
+        if (wrkMast.getWrkSts() != 20) {
+            throw new CoolException(wrkMast.getWrkNo() + ",宸ヤ綔妗g被鍨嬶細" + wrkMast.getIoType() + "宸ヤ綔鐘舵�侊細" + wrkMast.getWrkSts() + ",涓嶅尮閰�");
+        }
+
+        List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
+        List<PdckqrParam.Material> materials = param.getMaterials();
+
+        boolean isFullyCancelled = compareAndCheckCancellation(wrkDetls, materials);
+        if (isFullyCancelled) {
+                // 澶嶆牳纭锛屾洿鏂扮姸鎬佷负15鍑哄簱瀹屾垚鏇存柊
+                wrkMast.setWrkSts(14L);
+                wrkMastService.updateById(wrkMast);
+        } else {
+            throw new CoolException("鍑哄彛澶嶆牳澶辫触");
+        }
+        return R.ok("鍑哄彛澶嶆牳鎴愬姛");
+    }
+
+    @Override
+    @Transactional
+    public R pdckqr(PdckqrParam param) {
+        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode",param.getBarcode()));
+        if (wrkMast == null) {
+            throw new CoolException("宸ヤ綔妗d笉瀛樺湪锛�" + param.getBarcode());
+        }
+        if (wrkMast.getIoType() != 107 || wrkMast.getWrkSts() != 2) {
+            throw new CoolException(wrkMast.getWrkNo() + "锛氬伐浣滅姸鎬佷笉鍖归厤");
+        }
+
+        List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
+        List<PdckqrParam.Material> materials = param.getMaterials();
+
+        boolean isFullyCancelled = compareAndCheckCancellation(wrkDetls, materials);
+        // todo 涓ょ鐩樹袱绠遍渶瑕佺‘瀹氫綅缃病閿�
+
+        if (isFullyCancelled) { // 鐩樼偣鐗╂枡纭垚鍔燂紝宸ヤ綔妗h浆鎹� 鐩樼偣鍑哄簱->鐩樼偣鍐嶅叆搴擄紝涓嬪彂鍥炲簱鍛戒护
+            // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
+            if (!wrkMastLogService.save(wrkMast.getWrkNo())) {
+                throw new CoolException("淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�");
+            }
+            // 鑾峰彇鐩爣绔�
+            Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
+                    .eq("type_no", wrkMast.getIoType() - 50)
+                    .eq("stn_no", wrkMast.getStaNo()) // 浣滀笟绔欑偣 = 鎷f枡鍑哄簱鐨勭洰鏍囩珯
+                    .eq("crn_no", wrkMast.getCrnNo()); // 鍫嗗灈鏈哄彿
+            StaDesc staDesc = staDescService.selectOne(wrapper);
+            if (Cools.isEmpty(staDesc)) {
+                throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
+            }
+            Date now = new Date();
+            // 鍫嗗灈鏈虹珯鐐�(鐩爣绔�)
+            Integer staNo = staDesc.getCrnStn();
+            // 鏇存柊宸ヤ綔妗f暟鎹姸鎬�
+            wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54,107->57
+            wrkMast.setWrkSts(14L); // 宸ヤ綔鐘舵��: 14.宸插嚭搴撴湭纭
+            wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 婧愮珯
+            wrkMast.setStaNo(staNo); // 鐩爣绔�
+            wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣�
+            wrkMast.setSourceLocNo(""); // 婧愬簱浣嶆竻绌�
+            wrkMast.setModiTime(now);
+            if (!wrkMastService.updateById(wrkMast)) {
+                throw new CoolException("鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
+            }
+            // 淇敼搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴�
+            LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
+            locMast.setLocSts("Q");
+            locMast.setModiTime(now);
+            if (!locMastService.updateById(locMast)) {
+                throw new CoolException("淇敼搴撲綅鐘舵�佸け璐�");
+            }
+
+            // 鎺ㄩ�佺粰gwcs鎵ц鍛戒护
+            openServiceImpl.pushStaNoToGwcs(wrkMast.getSourceStaNo(),wrkMast.getStaNo(),wrkMast.getWrkNo(),wrkMast.getBarcode(),"鐩樼偣纭鎴愬姛鎺ㄩ�乬wcs");
+
+            return R.ok("鐩樼偣纭鎴愬姛");
+
+        } else { // 鐗╂枡涓嶄竴鑷�
+            // 涓嶄竴鑷寸殑澶勭悊澶勭悊鏂规硶锛氬脊鍑鸿皟鏁寸晫闈�
+
+//            閲嶆柊鎵弿瀹炵墿涓婇潰鐨勭爜杩涜璋冩暣
+//            瀹炵墿鍦ㄥ簱瀛橀噷闈㈢殑鍦版柟娓呯┖锛屼换鍔℃墍鍦ㄥ簱瀛樻竻绌�
+//            灏嗗疄鐗╁拰褰撳墠鎵樼洏浣嶇疆鍜屽簱浣嶇粦瀹�
+//            涓�涓湪绠辨儏鍐电洿鎺ヨ皟鏁�
+//            涓や釜鏈ㄧ鍑轰袱涓� 閮借皟鏁�
+//            涓や釜鏈ㄧ鍑轰竴涓� 璋冩暣涓�涓�
+//            宸ヤ綔妗f爣璁板紓甯�->鍥炲簱
+
+            return R.error("鐩樼偣纭寮傚父");
+        }
+
+    }
+
+    @Override
+    @Transactional
+    public R pdaWarehousingNow(PdaWarehousingNowParam param, Long userId) {
+
+        String barcode = param.getBarcode();
+        Integer sourceStaNo = param.getSourceStaNo();
+
+        int zpalletCount = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet", barcode));
+        if (zpalletCount > 0) {
+            throw new CoolException("搴撳瓨鎵樼洏鐮佸凡瀛樺湪锛�" + barcode);
+        }
+
+        int barcodeCount = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("barcode", barcode));
+        if (barcodeCount > 0) {
+            throw new CoolException("宸ヤ綔妗e凡瀛樺湪璇ユ墭鐩樼爜锛�" + barcode);
+        }
+
+        Map<String, List<PdaWarehousingNowParam.Roll>> boxGroup = param.getBoxGroup();
+        List<PdaWarehousingNowParam.Roll> leftPosList = boxGroup.get("宸�");
+        List<PdaWarehousingNowParam.Roll> centrePosList = boxGroup.get("涓�");
+        List<PdaWarehousingNowParam.Roll> rightPosList = boxGroup.get("鍙�");
+
+        // 鏍规嵁绠卞彿鑾峰彇鍖呰缁勫彿
+        List<String> boxNoList = leftPosList.stream().map(PdaWarehousingNowParam.Roll::getBoxNo).distinct().collect(Collectors.toList());
+        boxNoList.addAll(centrePosList.stream().map(PdaWarehousingNowParam.Roll::getBoxNo).distinct().collect(Collectors.toList()));
+        boxNoList.addAll(rightPosList.stream().map(PdaWarehousingNowParam.Roll::getBoxNo).distinct().collect(Collectors.toList()));
+        Map<String, String> map = new HashMap<>();
+//        if (boxNoList.size() > 0) {
+//             map = getPackageGroupNoByGwms(boxNoList);
+//        }
+
+        LocTypeDto locTypeDto = new LocTypeDto();
+        locTypeDto.setLocType1((short)1);
+
+        // 鏍规嵁婧愮珯鐐瑰鎵惧簱浣�
+        StartupDto dto = commonService.getLocNo(1, sourceStaNo, locTypeDto,0);
+
+        int workNo = dto.getWorkNo();
+        Date now = new Date();
+        // 鐢熸垚宸ヤ綔妗�
+        WrkMast wrkMast = new WrkMast();
+        wrkMast.setWrkNo(workNo);
+        wrkMast.setIoTime(new Date());
+        wrkMast.setWrkSts(1L); // 宸ヤ綔鐘舵�侊細1.鐢熸垚鍏ュ簱id
+        wrkMast.setIoType(1); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱
+        wrkMast.setIoPri(13D); // 浼樺厛绾�
+        wrkMast.setCrnNo(dto.getCrnNo());
+        wrkMast.setSourceStaNo(dto.getSourceStaNo());
+        wrkMast.setStaNo(dto.getStaNo());
+        wrkMast.setLocNo(dto.getLocNo());
+        wrkMast.setBarcode(barcode); // 鎵樼洏鐮�
+        wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
+        wrkMast.setPicking("N"); // 鎷f枡
+        wrkMast.setExitMk("N"); // 閫�鍑�
+        wrkMast.setEmptyMk("N"); // 绌烘澘
+        wrkMast.setLinkMis("Y");
+        wrkMast.setCtnType(1); // 瀹瑰櫒绫诲瀷
+        // 鎿嶄綔浜哄憳鏁版嵁
+        wrkMast.setAppeTime(now);
+        wrkMast.setModiTime(now);
+        wrkMast.setAppeUser(userId);
+        wrkMast.setModiUser(userId);
+        boolean res = wrkMastService.insert(wrkMast);
+        if (!res) {
+            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+        }
+
+
+        for (PdaWarehousingNowParam.Roll roll: leftPosList) {
+            WrkDetl wrkDetl = new WrkDetl();
+            wrkDetl.setWrkNo(workNo);
+            wrkDetl.setMatnr(roll.getSpecs()); // 瑙勬牸
+            wrkDetl.setMaktx(roll.getSpecs()); //瑙勬牸
+            wrkDetl.setBatch(roll.getBoxNo()); // 绠卞彿
+            wrkDetl.setModel(roll.getRollNo()); // 鍗峰彿
+            wrkDetl.setBrand(map.get(roll.getBoxNo()) == null ? "" : map.get(roll.getBoxNo())); // 鍖呰缁勫彿
+            wrkDetl.setZpallet(barcode); // 鎵樼洏鍚�
+            wrkDetl.setOrigin("宸�"); // 鏈ㄧ鍦ㄦ墭鐩樹綅缃�
+            wrkDetl.setWeight(roll.getNetWeight()); // 鍑�閲�
+            wrkDetl.setVolume(roll.getGrossWeight()); // 姣涢噸
+            wrkDetl.setPrice(roll.getLength());
+            wrkDetl.setSpecs(String.valueOf(roll.getSplices()));
+            wrkDetl.setAnfme(1.0);
+            wrkDetl.setIoTime(now);
+            wrkDetl.setAppeTime(now);
+            wrkDetl.setModiTime(now);
+            wrkDetl.setAppeUser(userId);
+            wrkDetl.setModiUser(userId);
+            if (!wrkDetlService.insert(wrkDetl)) {
+                throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触");
+            }
+        }
+
+        for (PdaWarehousingNowParam.Roll roll: centrePosList) {
+            WrkDetl wrkDetl = new WrkDetl();
+            wrkDetl.setWrkNo(workNo);
+            wrkDetl.setMatnr(roll.getSpecs()); // 瑙勬牸
+            wrkDetl.setMaktx(roll.getSpecs()); //瑙勬牸
+            wrkDetl.setBatch(roll.getBoxNo()); // 绠卞彿
+            wrkDetl.setModel(roll.getRollNo()); // 鍗峰彿
+            wrkDetl.setBrand(map.get(roll.getBoxNo()) == null ? "" : map.get(roll.getBoxNo())); // 鍖呰缁勫彿
+            wrkDetl.setZpallet(barcode); // 鎵樼洏鍚�
+            wrkDetl.setOrigin("涓�"); // 鏈ㄧ鍦ㄦ墭鐩樹綅缃�
+            wrkDetl.setWeight(roll.getNetWeight()); // 鍑�閲�
+            wrkDetl.setVolume(roll.getGrossWeight()); // 姣涢噸
+            wrkDetl.setPrice(roll.getLength());
+            wrkDetl.setSpecs(String.valueOf(roll.getSplices()));
+            wrkDetl.setAnfme(1.0);
+            wrkDetl.setIoTime(now);
+            wrkDetl.setAppeTime(now);
+            wrkDetl.setModiTime(now);
+            wrkDetl.setAppeUser(userId);
+            wrkDetl.setModiUser(userId);
+            if (!wrkDetlService.insert(wrkDetl)) {
+                throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触");
+            }
+        }
+
+        for (PdaWarehousingNowParam.Roll roll: rightPosList) {
+            WrkDetl wrkDetl = new WrkDetl();
+            wrkDetl.setWrkNo(workNo);
+            wrkDetl.setMatnr(roll.getSpecs()); // 瑙勬牸
+            wrkDetl.setMaktx(roll.getSpecs()); //瑙勬牸
+            wrkDetl.setBatch(roll.getBoxNo()); // 绠卞彿
+            wrkDetl.setModel(roll.getRollNo()); // 鍗峰彿
+            wrkDetl.setBrand(map.get(roll.getBoxNo()) == null ? "" : map.get(roll.getBoxNo())); // 鍖呰缁勫彿
+            wrkDetl.setZpallet(barcode); // 鎵樼洏鍚�
+            wrkDetl.setOrigin("鍙�"); // 鏈ㄧ鍦ㄦ墭鐩樹綅缃�
+            wrkDetl.setWeight(roll.getNetWeight()); // 鍑�閲�
+            wrkDetl.setVolume(roll.getGrossWeight()); // 姣涢噸
+            wrkDetl.setPrice(roll.getLength());
+            wrkDetl.setSpecs(String.valueOf(roll.getSplices()));
+            wrkDetl.setAnfme(1.0);
+            wrkDetl.setIoTime(now);
+            wrkDetl.setAppeTime(now);
+            wrkDetl.setModiTime(now);
+            wrkDetl.setAppeUser(userId);
+            wrkDetl.setModiUser(userId);
+            if (!wrkDetlService.insert(wrkDetl)) {
+                throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触");
+            }
+        }
+
+        // 鏇存柊鐩爣搴撲綅鐘舵��
+        LocMast locMast = locMastService.selectById(dto.getLocNo());
+        if (locMast.getLocSts().equals("O")){
+            locMast.setLocSts("S"); // S.鍏ュ簱棰勭害
+            locMast.setModiTime(now);
+            if (!locMastService.updateById(locMast)){
+                throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�");
+            }
+        } else {
+            throw new CoolException(dto.getLocNo()+"鐩爣搴撲綅宸茶鍗犵敤");
+        }
+
+        // 鎺ㄩ�丟WCS鐩爣娑堟伅
+        openServiceImpl.pushStaNoToGwcs(sourceStaNo,dto.getStaNo(),dto.getWorkNo(),barcode,"pda缁勬墭绔嬪嵆鍏ュ簱鎺ㄩ�乬wcs");
+        return R.ok("鍏ュ簱鍚姩鎴愬姛");
+    }
+
+    @Override
+    public R pdaFxprk(FxprkParam param, Long userId) {
+
+        // 鏍规嵁鍖呰缁勫彿鑾峰彇鍒版湪绠卞嵎淇℃伅
+        List<String> groupNos = param.getBoxList().stream().map(FxprkParam.Box::getPackageGroupNo).collect(Collectors.toList());
+        List<Mat> list = matService.selectList(new EntityWrapper<Mat>().in("brand", groupNos));
+        if (list.isEmpty()) {
+            throw new CoolException("娌℃湁鏌ヨ鍒拌鍖呰缁勫彿淇℃伅锛�" + param.getBoxList().toString());
+        }
+
+        LocTypeDto locTypeDto = new LocTypeDto();
+        locTypeDto.setLocType1((short) 1);
+        StartupDto dto = commonService.getLocNo(1, param.getPalletizingNo(), locTypeDto, 0);
+
+        int workNo = dto.getWorkNo();
+        Date now = new Date();
+        // 鐢熸垚宸ヤ綔妗�
+        WrkMast wrkMast = new WrkMast();
+        wrkMast.setWrkNo(workNo);
+        wrkMast.setIoTime(new Date());
+        wrkMast.setWrkSts(1L); // 宸ヤ綔鐘舵�侊細璁惧涓婅蛋
+        wrkMast.setIoType(1); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱
+        wrkMast.setIoPri(13D); // 浼樺厛绾�
+        wrkMast.setCrnNo(dto.getCrnNo());
+        wrkMast.setSourceStaNo(param.getPalletizingNo());
+        wrkMast.setStaNo(dto.getStaNo());
+        wrkMast.setLocNo(dto.getLocNo());
+        wrkMast.setBarcode(param.getBarcode()); // 鎵樼洏鐮�
+        wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
+        wrkMast.setPicking("N"); // 鎷f枡
+        wrkMast.setExitMk("N"); // 閫�鍑�
+        wrkMast.setEmptyMk("N"); // 绌烘澘
+        wrkMast.setLinkMis("Y");
+        wrkMast.setCtnType(1); // 瀹瑰櫒绫诲瀷
+        // 鎿嶄綔浜哄憳鏁版嵁
+        wrkMast.setAppeTime(now);
+        wrkMast.setAppeUser(userId);
+        wrkMast.setModiUser(userId);
+        wrkMast.setModiTime(now);
+        boolean res = wrkMastService.insert(wrkMast);
+        if (!res) {
+            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+        }
+
+        for (Mat obj : list) {
+            WrkDetl wrkDetl = new WrkDetl();
+            wrkDetl.sync(obj);
+            wrkDetl.setWrkNo(wrkMast.getWrkNo());
+            wrkDetl.setAnfme(1.0);
+            // 閲嶆柊瀹氫綅鏈ㄧ浣嶇疆
+            for (FxprkParam.Box box :param.getBoxList()) {
+                if (box.getPackageGroupNo().equals(obj.getBrand())) {
+                    if (!box.getBoxPos().equals(obj.getOrigin()) || !wrkDetl.getZpallet().equals(param.getBarcode())) {
+                        wrkDetl.setOrigin(box.getBoxPos());
+                        wrkDetl.setZpallet(param.getBarcode());
+                        wrkDetl.setBarcode(param.getBarcode());
+                        matMapper.updateBoxPos(box.getPackageGroupNo(), box.getBoxPos(),param.getBarcode());
+                    }
+                    break;
+                }
+            }
+            wrkDetl.setIoTime(now);
+            wrkDetl.setAppeTime(now);
+            wrkDetl.setModiTime(now);
+            if (!wrkDetlService.insert(wrkDetl)) {
+                throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触");
+            }
+        }
+
+        // 鏇存柊鐩爣搴撲綅鐘舵��
+        LocMast locMast = locMastService.selectById(dto.getLocNo());
+        if (locMast.getLocSts().equals("O")) {
+            locMast.setLocSts("S"); // S.鍏ュ簱棰勭害
+            locMast.setModiTime(now);
+            if (!locMastService.updateById(locMast)) {
+                throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�");
+            }
+        } else {
+            throw new CoolException(dto.getLocNo() + "鐩爣搴撲綅宸茶鍗犵敤");
+        }
+
+        // 杩斿洖GWCS鐩爣淇℃伅
+        openServiceImpl.pushStaNoToGwcs(param.getPalletizingNo(), dto.getStaNo(), dto.getWorkNo(), param.getBarcode(),"浜屾ゼ杩斾慨鍏ュ簱鎺ㄩ�乬wcs");
+
+        // 涓�妤煎弽淇搧鍏ュ簱鐨勬湪绠遍�氳繃鍖呰缁勫彿闇�缁檓es鎺ㄩ�佸緟鍒�
+        pushDpToMes(groupNos);
+
+        return R.ok("鍏ュ簱鎴愬姛");
+    }
+
+    @Override
+    @Transactional
+    public R pdtz(PdtzParam param) {
+
+        String barcode = param.getBarcode();
+        Integer palletizingNo = param.getPalletizingNo();
+        List<PdtzParam.MatList> matList = param.getMatList();
+        // 澧炲姞鍐椾綑瀛楁锛岀粰mes鎺ㄩ�佹椂缁撴瀯鍜屽叆搴撲繚瀛樹竴鑷�
+        for (PdtzParam.MatList matList1 : matList) {
+            matList1.setBarcode(barcode);
+            matList1.setPalletizingNo(palletizingNo);
+        }
+
+        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode", barcode));
+        LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());
+
+        // 瀹炵墿鍖呰缁勫彿
+        List<String> groups = matList.stream().map(PdtzParam.MatList::getPackageGroupNo).distinct().collect(Collectors.toList());
+
+        // 搴撳瓨鏄庣粏鏈ㄧ浣嶇疆闆嗗悎
+        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("zpallet", barcode));
+        List<String> collect1 = locDetls.stream().map(LocDetl::getOrigin).distinct().collect(Collectors.toList());
+        // 宸ヤ綔鏄庣粏鏈ㄧ浣嶇疆闆嗗悎
+        List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("zpallet", barcode));
+        List<String> collect2 = wrkDetls.stream().map(WrkDetl::getOrigin).distinct().collect(Collectors.toList());
+        // 宸ヤ綔鐨勫寘瑁呯粍鍙�
+        List<String> wrkBrandlist = wrkDetls.stream().map(WrkDetl::getBrand).distinct().collect(Collectors.toList());
+        // 宸ヤ綔璁㈠崟鏄庣粏
+        List<OrderDetl> orderDetlList = orderDetlMapper.selectList(new EntityWrapper<OrderDetl>().in("brand", wrkBrandlist));
+
+        Date now = new Date();
+
+        // 鍒ゆ柇瑕佽皟鏁寸殑鏈ㄧ鎵�鍦ㄤ綅缃叧绯�
+        if (collect1.size() == 0 || collect2.size() == 0){
+            return R.parse(barcode+"锛氫换鍔″簱瀛樺紓甯革紒");
+        } else if(collect1.size() == 2 && collect2.size() == 1) { // 2鍑�1锛岄兘鏄崟绠辩殑
+            if (matList.size() == 0) { // 瀹炵墿鏄┖
+                // 鎶婅浠诲姟鍦ㄥ簱鏄庣粏鍒犻櫎
+                locDetlService.delete(new EntityWrapper<LocDetl>().in("brand",wrkBrandlist));
+                // todo 鏍囪寮傚父锛屾帹閫乵es锛屽洖搴�
+                for(OrderDetl orderDetl:orderDetlList) {
+                    orderDetl.setSource(1);
+                    orderDetlMapper.updateById(orderDetl);
+                }
+                JSONObject jsonObject = new JSONObject();
+                jsonObject.put("delete",wrkBrandlist);
+                kctzPushMes(jsonObject);
+                kctzReturn(wrkMast);
+            } else { // 瀹炵墿涓嶄负绌�
+               // 瀵绘壘瀹炵墿鐨勪綅缃�
+                List<LocDetl> locDetls1 = locDetlService.selectList(new EntityWrapper<LocDetl>().in("brand", groups).notIn("barcode",barcode));
+                if (locDetls1.size() == 0) { // 瀹炵墿鏃犲簱瀛�
+                    // 鎶婅浠诲姟鍦ㄥ簱鏄庣粏鍒犻櫎
+                    locDetlService.delete(new EntityWrapper<LocDetl>().in("brand",wrkBrandlist));
+                    // 琛ュ厖鏈ㄧ浣嶇疆
+                    matList.get(0).setBoxPos(collect2.get(0));
+                    // 鎶婂疄鐗╃墿鏂欎俊鎭斁鍏ヤ换鍔℃墍鍦ㄥ簱浣�
+                    insertLocDetl(locMast.getLocNo(),barcode,matList);
+                    // todo 鏍囪寮傚父锛屾帹閫乵es锛屽洖搴�
+                    for(OrderDetl orderDetl:orderDetlList) {
+                        orderDetl.setSource(1);
+                        orderDetlMapper.updateById(orderDetl);
+                    }
+                    JSONObject jsonObject = new JSONObject();
+                    jsonObject.put("delete",wrkBrandlist);
+                    jsonObject.put("insert",matList);
+                    kctzPushMes(jsonObject);
+                    kctzReturn(wrkMast);
+                }else { // 瀹炵墿鏈夊簱瀛�
+                    List<String> brandList = locDetls1.stream().map(LocDetl::getBrand).distinct().collect(Collectors.toList());
+                    return R.parse(brandList+"搴撳瓨宸插瓨鍦紝璇峰厛澶勭悊锛�");
+                }
+            }
+        } else if(collect1.size() == 1 && collect2.size() == 1) {
+            if (matList.size() == 0) { // 瀹炵墿涓虹┖
+                // 鎶婅浠诲姟鍦ㄥ簱鏄庣粏鍒犻櫎
+                locDetlService.delete(new EntityWrapper<LocDetl>().in("brand",wrkBrandlist));
+                // 瀹屾垚杩欐潯鐩樼偣浠诲姟锛氭洿鏂拌鍗曞畬鎴愭暟閲忥紝宸ヤ綔涓绘。5
+                for(WrkDetl wrkDetl:wrkDetls) {
+                    if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
+                        // 鏇存柊璁㈠崟瀹屾垚鏁伴噺
+                        orderDetlMapper.updateOrderDetlQtyByGroupNo(wrkDetl.getOrderNo(), wrkDetl.getBrand());
+                    }
+                }
+                if (locMast.getLocSts().equals("P")) {
+                    locMast.setLocSts("O");
+                    locMast.setBarcode("");
+                    locMast.setSheetNo("");
+                    locMast.setIoTime(now);
+                    locMast.setModiTime(now);
+                    locMastService.updateById(locMast);
+                }
+                // 淇敼宸ヤ綔涓绘。鐘舵��
+                wrkMast.setWrkSts(5L);
+                wrkMast.setModiTime(now);
+                wrkMastService.updateById(wrkMast);
+
+                // todo 鏍囪寮傚父锛屼笉鍥炲簱锛岀粰gwcs涓嬪彂鍘诲彔鐩樻満鍛戒护,鎺ㄩ�乵es
+                for(OrderDetl orderDetl:orderDetlList) {
+                    orderDetl.setSource(1);
+                    orderDetlMapper.updateById(orderDetl);
+                }
+
+                JSONObject jsonObject = new JSONObject();
+                jsonObject.put("delete",wrkBrandlist);
+                kctzPushMes(jsonObject);
+
+                // 鎺ㄩ�佺粰gwcs鎵ц鍛戒护
+                openServiceImpl.pushStaNoToGwcs(wrkMast.getSourceStaNo(),3013,wrkMast.getWrkNo(),wrkMast.getBarcode(),"鐩樼偣寮傚父璋冩暣鍚庡洖鍙犵洏鏈烘帹閫乬wcs");
+            } else { // 瀹炵墿涓嶄负绌�
+                // 瀵绘壘瀹炵墿鐨勪綅缃�
+                List<LocDetl> locDetls1 = locDetlService.selectList(new EntityWrapper<LocDetl>().in("brand", groups).notIn("barcode",barcode));
+                if (locDetls1.size() == 0) { // 瀹炵墿鏃犲簱瀛�
+                    // 鎶婅浠诲姟鍦ㄥ簱鏄庣粏鍒犻櫎
+                    locDetlService.delete(new EntityWrapper<LocDetl>().in("brand",wrkBrandlist));
+                    // 琛ュ厖鏈ㄧ浣嶇疆
+                    for (PdtzParam.MatList matList1:matList) {
+                        matList1.setBoxPos(collect2.get(0));
+                    }
+                    // 鎶婂疄鐗╃墿鏂欎俊鎭斁鍏ヤ换鍔℃墍鍦ㄥ簱浣�
+                    insertLocDetl(locMast.getLocNo(),barcode,matList);
+                    // todo 鏍囪寮傚父锛屽洖搴擄紝鎺ㄩ�乵es
+                    for(OrderDetl orderDetl:orderDetlList) {
+                        orderDetl.setSource(1);
+                        orderDetlMapper.updateById(orderDetl);
+                    }
+
+                    JSONObject jsonObject = new JSONObject();
+                    jsonObject.put("delete",wrkBrandlist);
+                    jsonObject.put("insert",matList);
+                    kctzPushMes(jsonObject);
+
+                    kctzReturn(wrkMast);
+                } else { // 瀹炵墿鏈夊簱瀛�
+                    List<String> brandList = locDetls1.stream().map(LocDetl::getBrand).distinct().collect(Collectors.toList());
+                    return R.parse(brandList+"搴撳瓨宸插瓨鍦紝璇峰厛澶勭悊锛�");
+                }
+            }
+        }  else if (collect1.size() == 2 && collect2.size() == 2) {
+            if (matList.size() == 0) { // 瀹炵墿涓虹┖
+                // 鎶婅浠诲姟鍦ㄥ簱鏄庣粏鍒犻櫎
+                locDetlService.delete(new EntityWrapper<LocDetl>().in("brand",wrkBrandlist));
+                // 瀹屾垚杩欐潯鐩樼偣浠诲姟锛氭洿鏂拌鍗曞畬鎴愭暟閲忥紝宸ヤ綔涓绘。5
+                for(WrkDetl wrkDetl:wrkDetls) {
+                    if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
+                        // 鏇存柊璁㈠崟瀹屾垚鏁伴噺
+                        orderDetlMapper.updateOrderDetlQtyByGroupNo(wrkDetl.getOrderNo(), wrkDetl.getBrand());
+                    }
+                }
+                if (locMast.getLocSts().equals("P")) {
+                    locMast.setLocSts("O");
+                    locMast.setBarcode("");
+                    locMast.setSheetNo("");
+                    locMast.setIoTime(now);
+                    locMast.setModiTime(now);
+                    locMastService.updateById(locMast);
+                }
+                // 淇敼宸ヤ綔涓绘。鐘舵��
+                wrkMast.setWrkSts(5L);
+                wrkMast.setModiTime(now);
+                wrkMastService.updateById(wrkMast);
+
+                // todo 鏍囪寮傚父锛屾帹閫乵es,涓嶅洖搴擄紝缁檊wcs涓嬪彂鍘诲彔鐩樻満鍛戒护
+                for(OrderDetl orderDetl:orderDetlList) {
+                    orderDetl.setSource(1);
+                    orderDetlMapper.updateById(orderDetl);
+                }
+                JSONObject jsonObject = new JSONObject();
+                jsonObject.put("delete",wrkBrandlist);
+                jsonObject.put("insert",matList);
+                kctzPushMes(jsonObject);
+
+                // 鎺ㄩ�佺粰gwcs鎵ц鍛戒护
+                openServiceImpl.pushStaNoToGwcs(wrkMast.getSourceStaNo(),3013,wrkMast.getWrkNo(),wrkMast.getBarcode(),"鐩樼偣寮傚父璋冩暣鍚庡洖鍙犵洏鏈烘帹閫乬wcs");
+            } else { // 瀹炵墿涓嶄负绌�
+                // 瀵绘壘瀹炵墿鐨勪綅缃�
+                List<LocDetl> locDetls1 = locDetlService.selectList(new EntityWrapper<LocDetl>().in("brand", groups).notIn("barcode",barcode));
+                if (locDetls1.size() == 0) { // 瀹炵墿鏃犲簱瀛�
+                    // 鎶婅浠诲姟鍦ㄥ簱鏄庣粏鍒犻櫎
+                    locDetlService.delete(new EntityWrapper<LocDetl>().in("brand",wrkBrandlist));
+                    // 琛ュ厖鏈ㄧ浣嶇疆
+                    matList.get(0).setBoxPos("宸�");
+                    matList.get(1).setBoxPos("鍙�");
+                    // 鎶婂疄鐗╃墿鏂欎俊鎭斁鍏ヤ换鍔℃墍鍦ㄥ簱浣�
+                    insertLocDetl(locMast.getLocNo(),barcode,matList);
+                    // todo 鏍囪寮傚父锛屽洖搴擄紝鎺ㄩ�乵es
+                    for(OrderDetl orderDetl:orderDetlList) {
+                        orderDetl.setSource(1);
+                        orderDetlMapper.updateById(orderDetl);
+                    }
+
+                    JSONObject jsonObject = new JSONObject();
+                    jsonObject.put("delete",wrkBrandlist);
+                    jsonObject.put("insert",matList);
+                    kctzPushMes(jsonObject);
+
+                    kctzReturn(wrkMast);
+                } else { // 瀹炵墿鏈夊簱瀛�
+                    List<String> brandList = locDetls1.stream().map(LocDetl::getBrand).distinct().collect(Collectors.toList());
+                    return R.parse(brandList+"搴撳瓨宸插瓨鍦紝璇峰厛澶勭悊锛�");
+                }
+            }
+        }
+
+       return R.ok("璋冩暣鎴愬姛");
+    }
+
+    // 鍚屾鐩樼偣寮傚父璋冩暣缁撴灉缁檓es
+    void kctzPushMes(JSONObject jsonObject) {
+        // 鎺ュ彛璇锋眰缁撴灉
+        boolean success = false;
+        // 鎺ュ彛璁板綍绌洪棿鍚嶇О
+        String message = "鍚屾鐩樼偣寮傚父璋冩暣缁撴灉缁檓es";
+
+        // 鏋勯�犺姹備綋
+        String body = jsonObject.toJSONString();
+        String response = "";
+        try {
+            response = new HttpHandler.Builder()
+                    .setUri(MesConstant.MES_CC_IP_PORT)
+                    .setPath(MesConstant.MES_CC_YCTZ_URL)
+                    .setJson(body)
+                    .build()
+                    .doPost();
+            if (!Cools.isEmpty(response)) {
+                JSONObject result = JSON.parseObject(response);
+                if (result.getInteger("code").equals(200)) {
+                    success = true;
+                }
+            } else {
+                log.error(message + "澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", MesConstant.MES_CC_IP_PORT + MesConstant.MES_CC_YCTZ_URL, body, response);
+            }
+        } catch (Exception e) {
+            log.error(message + "寮傚父锛歿}", e);
+        } finally {
+            try {
+                // 淇濆瓨鎺ュ彛鏃ュ織
+                apiLogService.save(
+                        message,
+                        MesConstant.MES_CC_IP_PORT + MesConstant.MES_CC_YCTZ_URL,
+                        null,
+                        "127.0.0.1",
+                        body,
+                        response,
+                        success
+                );
+            } catch (Exception e) {
+                log.error("", e);
+            }
+        }
+    }
+
+    // 鐩樼偣寮傚父鍥炲簱
+    @Transactional
+    public void kctzReturn(WrkMast wrkMast) {
+        if (!wrkMastLogService.save(wrkMast.getWrkNo())) {
+            throw new CoolException("淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�");
+        }
+        // 鑾峰彇鐩爣绔�
+        Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
+                .eq("type_no", wrkMast.getIoType() - 50)
+                .eq("stn_no", wrkMast.getStaNo())
+                .eq("crn_no", wrkMast.getCrnNo());
+        StaDesc staDesc = staDescService.selectOne(wrapper);
+        if (Cools.isEmpty(staDesc)) {
+            throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
+        }
+        Date now = new Date();
+        // 鍫嗗灈鏈虹珯鐐�(鐩爣绔�)
+        Integer staNo = staDesc.getCrnStn();
+        // 鏇存柊宸ヤ綔妗f暟鎹姸鎬�
+        wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54,107->57
+        wrkMast.setWrkSts(14L); // 宸ヤ綔鐘舵��: 14.宸插嚭搴撴湭纭
+        wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 婧愮珯
+        wrkMast.setStaNo(staNo); // 鐩爣绔�
+        wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣�
+        wrkMast.setSourceLocNo(""); // 婧愬簱浣嶆竻绌�
+        wrkMast.setModiTime(now);
+        if (!wrkMastService.updateById(wrkMast)) {
+            throw new CoolException("鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
+        }
+        // 淇敼搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴�
+        LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
+        locMast.setLocSts("Q");
+        locMast.setModiTime(now);
+        if (!locMastService.updateById(locMast)) {
+            throw new CoolException("淇敼搴撲綅鐘舵�佸け璐�");
+        }
+
+        // 鎺ㄩ�佺粰gwcs鎵ц鍛戒护
+        openServiceImpl.pushStaNoToGwcs(wrkMast.getSourceStaNo(),wrkMast.getStaNo(),wrkMast.getWrkNo(),wrkMast.getBarcode(),"鐩樼偣寮傚父璋冩暣鍚庢帹閫乬wcs");
+    }
+
+    /**
+     * 璋冩暣搴撳瓨鏄庣粏
+     */
+    @Transactional
+    void insertLocDetl(String locNo, String barcode, List<PdtzParam.MatList> matList) {
+        Date now = new Date();
+        for (PdtzParam.MatList mat : matList) {
+            LocDetl locDetl = new LocDetl();
+            locDetl.setBatch("");
+            locDetl.setLocNo(locNo);
+            locDetl.setMatnr(mat.getSpecs()); // 瑙勬牸
+            locDetl.setMaktx(mat.getSpecs()); //瑙勬牸
+            locDetl.setUnit(mat.getBoxNo()); // 绠卞彿
+            locDetl.setModel(mat.getRollNo()); // 鍗峰彿
+            locDetl.setBrand(mat.getPackageGroupNo()); // 鍖呰缁勫彿
+            locDetl.setZpallet(barcode); // 鎵樼洏鐮�
+            locDetl.setBarcode(barcode);
+            locDetl.setOrigin(mat.getBoxPos()); // 鏈ㄧ鍦ㄦ墭鐩樹綅缃�
+            locDetl.setColor(mat.getBoxType()); // 鏈ㄧ绫诲瀷
+            locDetl.setManu(mat.getRollType()); // 绠¤姱绫诲瀷
+            locDetl.setSku(mat.getWideInWidth()); // 瀹炴祴瀹藉箙
+            locDetl.setItemNum(mat.getThickness()); // 鐢熺當鍘氬害
+            locDetl.setManuDate(mat.getFqTime()); // 鍒嗗垏涓嬫枡鏃堕棿
+            locDetl.setWeight(mat.getNetWeight()); // 鍑�閲�
+            locDetl.setVolume(mat.getGrossWeight()); // 姣涢噸
+            locDetl.setLength(mat.getLength()); // 闀垮害
+            locDetl.setSpecs(String.valueOf(mat.getSplices())); // 鎺ュご
+            locDetl.setAnfme(1.0);
+//                    wrkDetl.setThreeCode(null); // 閫氳繃mes鎴杄xcel瀵煎叆妫�娴嬫槸鍚﹀悎鏍� 0涓嶅悎鏍硷紝1 鍚堟牸
+            locDetl.setAppeTime(now);
+            locDetl.setModiTime(now);
+            locDetlService.insert(locDetl);
+        }
+    }
+
+    /**
+     * 涓�妤煎弽淇搧鍏ュ簱鐨勬湪绠遍�氳繃鍖呰缁勫彿闇�缁檓es鎺ㄩ�佸緟鍒�
+     */
+    private void pushDpToMes(List<String> groupNos) {
+        boolean success = false;
+        // 鑾峰彇璇锋眰澶�
+        Map<String,Object> headers = new HashMap<>();
+        headers.put("Content-Type","application/json;charset=UTF-8");
+
+        // 鏋勯�犺姹備綋
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("groupNos", groupNos);
+        String body = jsonObject.toJSONString();
+
+        String response = "";
+        try {
+            response = new HttpHandler.Builder()
+                    .setUri(MesConstant.MES_CC_IP_PORT)
+                    .setPath(MesConstant.MES_CC_DP_URL)
+                    .setHeaders(headers)
+                    .setJson(body)
+                    .build()
+                    .doGet();
+            if (!Cools.isEmpty(response)) {
+                JSONObject jsonObject1 = JSONObject.parseObject(response);
+                int code = (int) jsonObject1.get("code");
+                boolean state  = jsonObject1.getBoolean("state");
+                String msg = (String) jsonObject1.get("message");
+                if (code == 200 && state) {
+                    success = true;
+                }
+                throw new CoolException(msg);
+            } else {
+                log.error("杩斾慨鍝佸叆搴撶粰mes鎺ㄩ�佸緟鍒ゅけ璐ワ紒锛侊紒url锛歿}锛況equest锛歿}锛況esponse锛歿}", MesConstant.MES_CC_IP_PORT + MesConstant.MES_CC_IP_PORT, body, response);
+                throw new CoolException("杩斾慨鍝佸叆搴撶粰mes鎺ㄩ�佸緟鍒ゅけ璐�");
+            }
+        } catch (Exception e) {
+            log.error("杩斾慨鍝佸叆搴撶粰mes鎺ㄩ�佸緟鍒ゅ紓甯革細{}", e.getMessage());
+        } finally {
+            try {
+                // 淇濆瓨鎺ュ彛鏃ュ織
+                apiLogService.save(
+                        "杩斾慨鍝佸叆搴撶粰mes鎺ㄩ�佸緟鍒�",
+                        MesConstant.MES_CC_IP_PORT + MesConstant.MES_CC_IP_PORT,
+                        null,
+                        "127.0.0.1",
+                        body,
+                        response,
+                        success
+                );
+            } catch (Exception e) {
+                log.error("", e);
+            }
+        }
+    }
+
+    private Map<String, String> getPackageGroupNoByGwms(List<String> boxNoList) {
+        Map<String, String> map = null;
+        Map<String, Object> headers = new HashMap<>();
+        headers.put("Content-Type", "application/json;charset=UTF-8");
+
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("boxNoList", JSONObject.toJSONString(boxNoList));
+        String body = jsonObject.toJSONString();
+        boolean success = false;
+        String response = "";
+        try {
+            response = new HttpHandler.Builder()
+                    .setUri(MesConstant.GWMS_IP_PORT)
+                    .setPath(MesConstant.GWMS_GET_GROUP_NO_URL)
+                    .setHeaders(headers)
+                    .setJson(body)
+                    .build()
+                    .doPost();
+            if (!Cools.isEmpty(response)) {
+                JSONObject jsonObject1 = JSONObject.parseObject(response);
+                int code = (int) jsonObject1.get("code");
+                String msg = (String) jsonObject1.get("msg");
+                 if (code != 200) {
+                     throw new CoolException(msg);
+                 }
+                map = (Map<String, String>) jsonObject1.get("data");
+                success = true;
+
+            } else {
+                log.error("pda缁勬墭鍏ュ簱璇锋眰gwms鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", MesConstant.URL + MesConstant.PAKIN_URL, body, response);
+            }
+        } catch (Exception e) {
+            log.error("pda缁勬墭鍏ュ簱璇锋眰gwms鎺ュ彛寮傚父锛屽伐浣滃彿锛歿}锛寋}", boxNoList.toString(), e.getMessage());
+        } finally {
+            try {
+                // 淇濆瓨鎺ュ彛鏃ュ織
+                apiLogService.save(
+                        "pda缁勬墭鍏ュ簱璇锋眰gwms鎺ュ彛",
+                        MesConstant.URL + MesConstant.PAKIN_URL,
+                        null,
+                        "127.0.0.1",
+                        body,
+                        response,
+                        success
+                );
+            } catch (Exception e) {
+                log.error("鎺ュ彛鏃ュ織淇濆瓨寮傚父", e);
+            }
+        }
+
+        if (map == null) {
+            throw new CoolException("璇锋眰gwcs鏌ヨ鍖呰缁勫彿寮傚父");
+        }
+        return map;
+    }
+
+    /**
+         * 姣旇緝涓や釜闆嗗悎鐨勭被鐨勫睘鎬э紝鐩稿悓鍒欐姷娑堬紝鏈�鍚庡垽鏂袱涓泦鍚堟槸鍚﹀畬鍏ㄦ姷娑�
+         */
+        public  boolean compareAndCheckCancellation(List<WrkDetl> list1, List<PdckqrParam.Material> list2) {
+            if (list1.size() != list2.size()) {
+                return false; // If lists are not of the same size, cancellation is not possible
+            }
+
+            List<PdckqrParam.Material> remainingList2 = new ArrayList<>(list2);
+
+            // Compare and cancel out elements
+            for (WrkDetl p1 : list1) {
+                boolean cancelled = false;
+                for (PdckqrParam.Material p2 : remainingList2) {
+                    if (p1.getUnit().equals(p2.getBoxNo()) && p1.getModel().equals(p2.getRollNo())) { // 鍗峰彿鍜岀鍙风浉鍚�
+                        remainingList2.remove(p2);
+                        cancelled = true;
+                        break;
+                    }
+                }
+                if (!cancelled) {
+                    return false; // If any element in list1 cannot be cancelled, return false
+                }
+            }
+
+            return remainingList2.isEmpty(); // Return true if all elements in list1 were cancelled out
+        }
+
+    @Override
+    @Transactional
+    public List<Map<String, Object>> boxTypeComb() {
+        EntityWrapper<BasBoxType> wrapper = new EntityWrapper<>();
+        List<Map<String, Object>> result = new ArrayList<>();
+        List<BasBoxType> basBoxTypes = basBoxTypeService.selectList(wrapper.orderBy("id",true));
+        for (BasBoxType basBoxType : basBoxTypes){
+            Map<String, Object> map = new HashMap<>();
+            map.put("boxType", basBoxType.getBoxType());
+            map.put("boxSpecs", basBoxType.getBoxSpecs());
+            result.add(map);
+        }
+        return result;
+    }
 }

--
Gitblit v1.9.1