From 891f521b76049f9b013971cc4e3399300fd1082f Mon Sep 17 00:00:00 2001
From: lsh <lsh@163.com>
Date: 星期日, 23 十一月 2025 14:25:45 +0800
Subject: [PATCH] *分拣流程orderNo由唯一降级为不唯一

---
 src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java |  341 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 336 insertions(+), 5 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 80f085f..a3f05dd 100644
--- a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -13,9 +13,11 @@
 import com.zy.asrs.service.*;
 import com.zy.asrs.utils.MatUtils;
 import com.zy.asrs.utils.OrderInAndOutUtil;
+import com.zy.asrs.utils.Utils;
 import com.zy.common.constant.MesConstant;
 import com.zy.common.entity.Parameter;
 import com.zy.common.model.DetlDto;
+import com.zy.common.model.LocDto;
 import com.zy.common.model.MesCombParam;
 import com.zy.common.model.enums.WorkNoType;
 import com.zy.common.service.CommonService;
@@ -544,17 +546,17 @@
         if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) {
             throw new CoolException(BaseRes.PARAM);
         }
-        if(param.getCombMats().size()>1){
-            throw new CoolException("璇锋彁鍙栦竴涓晢鍝侊紝鎴栬�呭埛鏂伴噸鏂扮粍鎵橈紒");
-        }
+//        if(param.getCombMats().size()>1){
+//            throw new CoolException("璇锋彁鍙栦竴涓晢鍝侊紝鎴栬�呭埛鏂伴噸鏂扮粍鎵橈紒");
+//        }
         // 鍒ゆ柇鏄惁鏈夌浉鍚屾潯鐮佺殑鏁版嵁
         if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>().
                 eq("zpallet", param.getBarcode()).eq("io_status", "N")) > 0) {
             throw new CoolException(param.getBarcode() + "鏁版嵁姝e湪杩涜鍏ュ簱");
         }
 
-        if(param.getBarcode().length()!=8){
-            throw new CoolException("鏉$爜闀垮害涓嶆槸8浣�===>>" + param.getBarcode());
+        if(param.getBarcode().length()!=6){
+            throw new CoolException("鏉$爜闀垮害涓嶆槸6浣�===>>" + param.getBarcode());
         }
 //        if (param.getCombMats().size()>1){
 //            throw new CoolException("涓嶅厑璁告贩鏂�===>>" + param.getBarcode());
@@ -603,6 +605,12 @@
                 waitPakin.setAppeTime(now);
                 waitPakin.setModiUser(userId);
                 waitPakin.setModiTime(now);
+                waitPakin.setStandby1(detlDto.getStandby1());
+                waitPakin.setStandby2(detlDto.getStandby2());
+                waitPakin.setStandby3(detlDto.getStandby3());
+                waitPakin.setBoxType1(detlDto.getBoxType1());
+                waitPakin.setBoxType2(detlDto.getBoxType2());
+                waitPakin.setBoxType3(detlDto.getBoxType3());
                 if (!waitPakinService.insert(waitPakin)) {
                     throw new CoolException("淇濆瓨鍏ュ簱閫氱煡妗eけ璐�");
                 }
@@ -658,6 +666,12 @@
                 waitPakin.setAppeTime(now);
                 waitPakin.setModiUser(userId);
                 waitPakin.setModiTime(now);
+                waitPakin.setStandby1(detlDto.getStandby1());
+                waitPakin.setStandby2(detlDto.getStandby2());
+                waitPakin.setStandby3(detlDto.getStandby3());
+                waitPakin.setBoxType1(detlDto.getBoxType1());
+                waitPakin.setBoxType2(detlDto.getBoxType2());
+                waitPakin.setBoxType3(detlDto.getBoxType3());
                 if (!waitPakinService.insert(waitPakin)) {
                     throw new CoolException("淇濆瓨鍏ュ簱閫氱煡妗eけ璐�");
                 }
@@ -668,6 +682,323 @@
 
     }
 
+    @Override
+    @Transactional
+    public void combAuto(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>().
+                eq("zpallet", param.getBarcode()).eq("io_status", "N")) > 0) {
+            throw new CoolException(param.getBarcode() + "鏁版嵁姝e湪杩涜鍏ュ簱");
+        }
+
+        if(param.getBarcode().length()!=6){
+            throw new CoolException("鏉$爜闀垮害涓嶆槸6浣�===>>" + param.getBarcode());
+        }
+//        if (param.getCombMats().size()>1){
+//            throw new CoolException("涓嶅厑璁告贩鏂�===>>" + param.getBarcode());
+//        }
+
+        int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",param.getBarcode()));
+        int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet",param.getBarcode()));
+        int countwait = waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet",param.getBarcode()));
+        if (countLoc > 0 || countWrk > 0 || countwait > 0) {
+            throw new CoolException("缁勬墭妗�/宸ヤ綔妗�/搴撳瓨鏉$爜鏁版嵁宸插瓨鍦�===>>" + param.getBarcode());
+        }
+
+        Date now = new Date();
+
+        String orderNo = null;
+        for (CombParam.CombMat combMat : param.getCombMats()) {
+            List<OrderDetlPakin> orderDetlPakins = orderDetlPakinService.selectList(new EntityWrapper<OrderDetlPakin>()
+                    .eq("matnr", combMat.getMatnr()).eq("boxType3", combMat.getOrderNo())
+                    .eq("standby1", combMat.getStandby1()).eq("standby2", combMat.getStandby2())
+                    .eq("standby3", combMat.getStandby3()));
+            if (orderDetlPakins.size() > 0) {
+                orderNo = orderDetlPakins.get(0).getOrderNo();
+                combMat.setBoxType1(orderDetlPakins.get(0).getBoxType1());
+                combMat.setBoxType2(orderDetlPakins.get(0).getBoxType2());
+                combMat.setBoxType3(orderDetlPakins.get(0).getBoxType3());
+            } else {
+                throw new CoolException("鏈煡璇㈠埌鐩稿叧璁㈠崟===>>" + param.getBarcode());
+            }
+        }
+
+
+
+//        Order order = orderService.selectByNo(param.getOrderNo());
+        Order order = OrderInAndOutUtil.selectByNo(Boolean.TRUE, orderNo);
+        if (Cools.isEmpty(order) || order.getSettle() > 2) {
+            throw new CoolException("鍗曟嵁缂栧彿宸茶繃鏈�");
+        }
+        // 鐢熸垚鍏ュ簱閫氱煡妗�
+        List<DetlDto> detlDtos = new ArrayList<>();
+        param.getCombMats().forEach(elem -> {
+
+            // 璁㈠崟鏄庣粏鏁伴噺鏍¢獙
+//                OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), elem.getMatnr(), elem.getBatch());
+            OrderDetl orderDetl = OrderInAndOutUtil.selectItem(Boolean.TRUE, order.getId(), elem.getMatnr(), elem.getBatch(),elem.getBrand(),elem.getStandby1(),elem.getStandby2(),elem.getStandby3(),
+                    elem.getBoxType1(),elem.getBoxType2(),elem.getBoxType3());
+            if (elem.getAnfme() > orderDetl.getEnableQty()) {
+                throw new CoolException(orderDetl.getMatnr() + "鍏ュ簱鏁伴噺涓嶅悎娉�");
+            }
+            // 淇敼璁㈠崟浣滀笟鏁伴噺
+//                if (!orderDetlService.increaseWorkQty(order.getId(), elem.getMatnr(), elem.getBatch(), elem.getAnfme())) {
+//                    throw new CoolException("淇敼鍗曟嵁浣滀笟鏁伴噺澶辫触");
+//                }
+            OrderInAndOutUtil.increaseWorkQty(Boolean.TRUE,order.getId(), elem.getMatnr(), elem.getBatch(),elem.getBrand(),elem.getStandby1(),elem.getStandby2(),elem.getStandby3(),
+                    elem.getBoxType1(),elem.getBoxType2(),elem.getBoxType3(), elem.getAnfme());
+            DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(),elem.getBrand(),elem.getStandby1(),elem.getStandby2(),elem.getStandby3(),
+                    elem.getBoxType1(),elem.getBoxType2(),elem.getBoxType3(),  elem.getAnfme());
+            if (DetlDto.has(detlDtos, detlDto)) {
+                DetlDto one = DetlDto.findDto(detlDtos, detlDto);
+                assert one != null;
+                one.setAnfme(one.getAnfme() + detlDto.getAnfme());
+            } else {
+                detlDtos.add(detlDto);
+            }
+        });
+        for (DetlDto detlDto : detlDtos) {
+            Mat mat = matService.selectByMatnr(detlDto.getMatnr());
+            if (Cools.isEmpty(mat)) {
+                throw new CoolException(detlDto.getMatnr() + "鍟嗗搧妗f涓嶅瓨鍦�");
+            }
+            WaitPakin waitPakin = new WaitPakin();
+            waitPakin.sync(mat);
+            waitPakin.setOrderNo(orderNo);   // 鍗曟嵁缂栧彿
+            waitPakin.setBatch(detlDto.getBatch());     // 搴忓垪鐮�
+            waitPakin.setZpallet(param.getBarcode());   // 鎵樼洏鐮�
+            waitPakin.setIoStatus("N");     // 鍏ュ嚭鐘舵��
+            waitPakin.setAnfme(detlDto.getAnfme());  // 鏁伴噺
+            waitPakin.setStatus("Y");    // 鐘舵��
+            waitPakin.setAppeUser(userId);
+            waitPakin.setAppeTime(now);
+            waitPakin.setModiUser(userId);
+            waitPakin.setModiTime(now);
+            waitPakin.setStandby1(detlDto.getStandby1());
+            waitPakin.setStandby2(detlDto.getStandby2());
+            waitPakin.setStandby3(detlDto.getStandby3());
+            waitPakin.setBoxType1(detlDto.getBoxType1());
+            waitPakin.setBoxType2(detlDto.getBoxType2());
+            waitPakin.setBoxType3(detlDto.getBoxType3());
+            if (!waitPakinService.insert(waitPakin)) {
+                throw new CoolException("淇濆瓨鍏ュ簱閫氱煡妗eけ璐�");
+            }
+        }
+//            orderService.updateSettle(order.getId(), 2L, userId);
+        OrderInAndOutUtil.updateOrder(Boolean.TRUE,order.getId(), 2L, userId);
+
+
+    }
+
+    @Override
+    @Transactional
+    public R kittingQuery(CombParam combParam, Long userId) {
+        List<Map<String, Object>> result = new ArrayList<>();
+        List<LocDetl> locDetlResultList = new ArrayList<>();
+        List<LocDetl> locDetlResultListHalf = new ArrayList<>();
+        List<CombParam.CombMat> combMats = combParam.getCombMats();
+        for (CombParam.CombMat combMat : combMats){
+            Wrapper<LocDetl> wrapper = new EntityWrapper<LocDetl>()
+                    .eq("matnr", combMat.getMatnr())
+                    .eq("specs", combMat.getSpecs())
+                    .eq("sku", combMat.getSku())
+                    .eq("origin", "涓嶅湪搴�");
+            List<LocDetl> locDetlList = locDetlService.selectList(wrapper);
+            for (LocDetl locDetl : locDetlList){
+                LocDetlFusion locDetlFusion = getLocDetlFusion(combParam, locDetl.getLocNo());
+                if (locDetlFusion.sign != 0 && locDetlFusion.sign != 9999){
+                    if (locDetlFusion.sign == combMats.size()){
+                        locDetlResultList.add(locDetlFusion.locDetl);
+                    } else {
+                        locDetlResultListHalf.add(locDetlFusion.locDetl);
+                    }
+                }
+            }
+        }
+        for (LocDetl locDetl : locDetlResultList){
+            Map<String, Object> map = new HashMap<>();
+            map.put("locNo", locDetl.getLocNo());
+            map.put("matnr", locDetl.getMatnr());
+            map.put("sku", locDetl.getSku());
+            map.put("anfme", locDetl.getAnfme());
+            map.put("memo", locDetl.getMemo());
+            result.add(map);
+        }
+        for (LocDetl locDetl : locDetlResultListHalf){
+            Map<String, Object> map = new HashMap<>();
+            map.put("locNo", locDetl.getLocNo());
+            map.put("matnr", locDetl.getMatnr());
+            map.put("sku", locDetl.getSku());
+            map.put("anfme", locDetl.getAnfme());
+            map.put("memo", locDetl.getMemo());
+            result.add(map);
+        }
+
+        return R.ok().add(result);
+    }
+
+    public class LocDetlFusion{
+        public Integer sign;
+        public LocDetl locDetl;
+
+        public LocDetlFusion(Integer sign, LocDetl locDetl) {
+            this.sign = sign;
+            this.locDetl = locDetl;
+        }
+    }
+
+    public LocDetlFusion getLocDetlFusion(CombParam combParam,String locNo){
+        LocDetl locDetl = new LocDetl();
+        locDetl.setLocNo(locNo);
+        locDetl.setAnfme(0D);
+        Integer sign = 0;
+        Map<Integer, LocDetl> map = new HashMap<>();
+        List<LocDetl> locDetls= new ArrayList<>();
+
+        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locNo));
+        if (locMast.getLocSts().equals("F")){
+            List<LocDetl> locDetlList = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", locNo));
+            for (CombParam.CombMat combMatNow : combParam.getCombMats()){
+                boolean flag = true;
+                while (flag){
+                    flag = false;
+                    for (LocDetl locDetlNow : locDetlList){
+                        if (locDetlNow.getOrigin().equals("涓嶅湪搴�")){
+                            if (combMatNow.getMatnr().equals(locDetlNow.getMatnr())){
+                                if (combMatNow.getAnfme().equals(locDetlNow.getAnfme())){
+                                    LocDetl locDetlAdd = new LocDetl();
+
+                                    locDetlAdd.sync(locDetlNow);
+                                    locDetls.add(locDetlAdd);
+                                    locDetlList.remove(locDetlNow);
+
+                                    sign++;
+                                    combMatNow.setMemo("瀹屽叏鍖归厤");
+                                    break;
+                                } else if (combMatNow.getAnfme()>locDetlNow.getAnfme()){
+                                    double anfme = combMatNow.getAnfme() - locDetlNow.getAnfme();
+                                    combMatNow.setAnfme(anfme);
+
+                                    LocDetl locDetlAdd = new LocDetl();
+                                    locDetlAdd.sync(locDetlNow);
+                                    locDetls.add(locDetlAdd);
+
+                                    locDetlList.remove(locDetlNow);
+                                    flag = true;
+                                    break;
+                                } else if (combMatNow.getAnfme()<locDetlNow.getAnfme()){
+                                    double anfme = locDetlNow.getAnfme() - combMatNow.getAnfme();
+                                    locDetlNow.setAnfme(combMatNow.getAnfme());
+
+                                    LocDetl locDetlAdd = new LocDetl();
+                                    locDetlAdd.sync(locDetlNow);
+                                    locDetls.add(locDetlAdd);
+
+                                    locDetlNow.setAnfme(anfme);
+                                    sign++;
+                                    combMatNow.setMemo("瀹屽叏鍖归厤");
+                                    break;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            if (sign == combParam.getCombMats().size()){
+                if (locDetlList.size() == 0 ){
+                    locDetl.setMemo("瀹屽叏鍖归厤");
+                } else {
+                    locDetl.setMemo("婧㈠嚭鍖归厤");
+                }
+            } else if (locDetls.size() != 0 ){
+                locDetl.setMemo("鏈畬鍏ㄥ尮閰�");
+                sign = 99999999;
+            }
+        }
+        for (LocDetl locDetlNow : locDetls){
+            if (Cools.isEmpty(locDetl.getMatnr())){
+                locDetl.setMatnr(locDetlNow.getMatnr());
+            } else {
+                locDetl.setMatnr(locDetl.getMatnr() + "," + locDetlNow.getMatnr());
+            }
+            if (Cools.isEmpty(locDetl.getSku())){
+                locDetl.setSku(locDetlNow.getSku());
+            } else {
+                locDetl.setSku(locDetl.getSku() + "," + locDetlNow.getSku());
+            }
+            locDetl.setAnfme(locDetlNow.getAnfme() + locDetl.getAnfme());
+        }
+        return new LocDetlFusion(sign,locDetl);
+    }
+
+    @Override
+    @Transactional
+    public void kittingCall(String locNo, Long userId) {
+        try{
+            List<StockOutParam.LocDetl> locDetls = new ArrayList<>();
+
+            LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locNo));
+            if (locMast.getLocSts().equals("F")){
+                List<LocDetl> locDetlList = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", locNo));
+                for (LocDetl locDetl:locDetlList){
+                    StockOutParam.LocDetl locDto = new StockOutParam.LocDetl();
+                    locDto.setLocNo(locDetl.getLocNo());
+                    locDto.setMatnr(locDetl.getMatnr());
+                    locDto.setBatch(locDetl.getBatch());
+                    locDto.setBrand(locDetl.getBrand());
+                    locDto.setCount(locDetl.getAnfme());
+                    locDto.setStandby1(locDetl.getStandby1());
+                    locDto.setStandby2(locDetl.getStandby2());
+                    locDto.setStandby3(locDetl.getStandby3());
+                    locDto.setBoxType1(locDetl.getBoxType1());
+                    locDto.setBoxType2(locDetl.getBoxType2());
+                    locDto.setBoxType3(locDetl.getBoxType3());
+                    locDetls.add(locDto);
+                }
+            }
+            StockOutParam param = new StockOutParam();
+            param.setOutSite(101);
+            param.setLocDetls(locDetls);
+            WorkService workService = SpringUtils.getBean(WorkService.class);
+            workService.locCheckOut(param,userId);
+        } catch (Exception e){
+            throw new CoolException("鐩樼偣鍚姩澶辫触锛侊紒锛�");
+        }
+    }
+
+    @Override
+    @Transactional
+    public R locOriginInOut(LocDetl locDetl, Long userId) {
+        try{
+            Wrapper<LocDetl> wrapper = new EntityWrapper<LocDetl>()
+                    .eq("loc_no", locDetl.getLocNo())
+                    .eq("zpallet", locDetl.getZpallet())
+                    .eq("matnr", locDetl.getMatnr())
+                    .eq("specs", locDetl.getSpecs())
+                    .eq("batch", locDetl.getBatch())
+                    .eq("origin", locDetl.getOrigin());
+            LocDetl locDetl1 = locDetlService.selectOne(wrapper);
+            if (Cools.isEmpty(locDetl1)){
+                return R.error();
+            } else if (locDetl1.getOrigin().equals("涓嶅湪搴�")){
+                locDetl1.setOrigin("鍦ㄥ簱");
+            }else{
+                locDetl1.setOrigin("涓嶅湪搴�");
+            }
+            if (locDetlService.update(locDetl1,wrapper)){
+                return R.ok();
+            }
+        } catch (Exception e){
+
+        }
+        return R.error();
+    }
     // 鍟嗗搧涓婃灦
     @Override
     public void onSale(CombParam param) {

--
Gitblit v1.9.1