From 029ffbf20db7196d4f460bc741fd5f36a80689ae Mon Sep 17 00:00:00 2001
From: skyouc <creaycat@gmail.com>
Date: 星期四, 15 一月 2026 19:55:45 +0800
Subject: [PATCH] 空板回库称重再校验

---
 src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java       |   24 ++++---
 src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java      |   73 ++++++++++++++++++------
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java       |   63 +++++++++++----------
 src/main/resources/mapper/LocDetlMapper.xml                       |    1 
 src/main/java/com/zy/asrs/controller/LocAroundBindController.java |   10 +++
 5 files changed, 113 insertions(+), 58 deletions(-)

diff --git a/src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java b/src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java
index 7bbff68..0a51e9e 100644
--- a/src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java
+++ b/src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java
@@ -10,15 +10,18 @@
 import com.zy.api.service.WcsApiService;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.service.*;
+import com.zy.asrs.service.impl.LocDetlServiceImpl;
 import com.zy.asrs.service.impl.MatServiceImpl;
 import com.zy.asrs.service.impl.WrkDetlServiceImpl;
 import com.zy.common.constant.MesConstant;
 import com.zy.common.utils.HttpHandler;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
+import java.util.Date;
 import java.util.List;
 import java.util.Objects;
 import java.util.Set;
@@ -41,6 +44,8 @@
     private WrkDetlService wrkDetlService;
     @Autowired
     private MatService matService;
+    @Autowired
+    private LocDetlService locDetlService;
 
     /**
      * 閫氱煡WCS閿佸畾搴撲綅锛屽強绂佹褰撳墠搴撲綅鐨勪竴鍒囨搷浣�
@@ -214,25 +219,57 @@
         } else if (params.getNotifyType().equals("weight")) {
             //绉伴噸
             if (mast.getWrkSts() == 2) {
-                WrkDetl wrkDetl = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("wrk_no", mast.getWrkNo()));
-                if (Objects.isNull(wrkDetl)) {
-                    throw new CoolException("鏁版嵁閿欒锛屼换鍔℃槑缁嗕笉瀛樺湪锛侊紒");
-                }
-                Mat matnr = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", wrkDetl.getMatnr()));
-                if (Objects.isNull(matnr)) {
-                    throw new CoolException("鐗╂枡鍩虹淇℃伅涓嶅瓨鍦紒锛�");
-                }
-                Double val = Math.round((params.getWeight() - matnr.getSafeQty()) * 10000) / 10000.0;
-                if (val.compareTo(0.0) > 0) {
-                    //浣欐枡闀垮害
-                    wrkDetl.setRealQty(val * matnr.getVolume());
+                if (mast.getIoType() == 10) {
+                    //绌烘澘鍏ュ簱浠诲姟妗�
+                    LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", mast.getSourceLocNo()));
+                    if (Objects.isNull(locDetl)) {
+                        throw new CoolException("鏄庣粏鏁版嵁涓嶅瓨鍦紒锛�");
+                    }
+                    Mat matnr = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", locDetl.getMatnr()));
+                    if (Objects.isNull(matnr)) {
+                        throw new CoolException("鐗╂枡鍩虹淇℃伅涓嶅瓨鍦紒锛�");
+                    }
+                    Double val = Math.round((params.getWeight() - matnr.getSafeQty()) * 10000) / 10000.0;
+                    if (val.compareTo(0.0) > 0) {
+                        WrkDetl wrkDetl = new WrkDetl();
+                        BeanUtils.copyProperties(locDetl, wrkDetl);
+                        wrkDetl.setWrkNo(mast.getWrkNo());
+                        wrkDetl.setIoTime(new Date());
+                        wrkDetl.setWeight(params.getWeight());
+                        //浣欐枡闀垮害
+                        wrkDetl.setRealQty(val * matnr.getVolume());
+                        mast.setIoType(1);
+                        mast.setIsSuplus(1);
+                        if (!wrkMastService.updateById(mast)) {
+                            throw new CoolException("涓绘。鐘舵�佷慨鏀瑰け璐�");
+                        }
+                        if (!wrkDetlService.insert(wrkDetl)) {
+                            throw new CoolException("鏄庣粏淇濆瓨澶辫触锛侊紒");
+                        }
+                    }
                 } else {
-                    //绌烘澘
-                    wrkDetl.setRealQty(0.0);
-                }
-                wrkDetl.setWeight(params.getWeight());
-                if (!wrkDetlService.update(wrkDetl, new EntityWrapper<WrkDetl>().eq("wrk_no", mast.getWrkNo()).eq("matnr", wrkDetl.getMatnr()).eq("barcode", wrkDetl.getBarcode()))) {
-                    throw new CoolException("浠诲姟妗f槑缁嗕慨鏀瑰け璐ワ紒锛�");
+                    WrkDetl wrkDetl = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("wrk_no", mast.getWrkNo()));
+                    if (Objects.isNull(wrkDetl)) {
+                        throw new CoolException("鏁版嵁閿欒锛屼换鍔℃槑缁嗕笉瀛樺湪锛侊紒");
+                    }
+                    Mat matnr = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", wrkDetl.getMatnr()));
+                    if (Objects.isNull(matnr)) {
+                        throw new CoolException("鐗╂枡鍩虹淇℃伅涓嶅瓨鍦紒锛�");
+                    }
+                    Double val = Math.round((params.getWeight() - matnr.getSafeQty()) * 10000) / 10000.0;
+                    if (val.compareTo(0.0) > 0) {
+                        //浣欐枡闀垮害
+                        wrkDetl.setRealQty(val * matnr.getVolume());
+
+                    } else {
+                        //绌烘澘
+                        wrkDetl.setRealQty(0.0);
+                    }
+
+                    wrkDetl.setWeight(params.getWeight());
+                    if (!wrkDetlService.update(wrkDetl, new EntityWrapper<WrkDetl>().eq("wrk_no", mast.getWrkNo()).eq("matnr", wrkDetl.getMatnr()).eq("barcode", wrkDetl.getBarcode()))) {
+                        throw new CoolException("浠诲姟妗f槑缁嗕慨鏀瑰け璐ワ紒锛�");
+                    }
                 }
             } else {
                 throw new CoolException("鏁版嵁閿欒锛屽綋鍓嶄换鍔$姸鎬佹湁璇� 锛�");
diff --git a/src/main/java/com/zy/asrs/controller/LocAroundBindController.java b/src/main/java/com/zy/asrs/controller/LocAroundBindController.java
index 90de26c..d07f384 100644
--- a/src/main/java/com/zy/asrs/controller/LocAroundBindController.java
+++ b/src/main/java/com/zy/asrs/controller/LocAroundBindController.java
@@ -6,6 +6,7 @@
 import com.baomidou.mybatisplus.plugins.Page;
 import com.core.common.DateUtils;
 import com.zy.asrs.entity.LocAroundBind;
+import com.zy.asrs.entity.LocDetl;
 import com.zy.asrs.entity.LocMast;
 import com.zy.asrs.entity.param.InitDeviceLocParams;
 import com.zy.asrs.enums.LocStsType;
@@ -14,6 +15,8 @@
 import com.core.common.BaseRes;
 import com.core.common.Cools;
 import com.core.common.R;
+import com.zy.asrs.service.LocDetlService;
+import com.zy.asrs.service.impl.LocDetlServiceImpl;
 import com.zy.asrs.service.impl.LocMastServiceImpl;
 import com.zy.common.web.BaseController;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -28,6 +31,8 @@
     private LocAroundBindService locAroundBindService;
     @Autowired
     private LocMastServiceImpl locMastService;
+    @Autowired
+    private LocDetlService locDetlService;
 
     @RequestMapping(value = "/locAroundBind/{id}/auth")
     @ManagerAuth
@@ -95,6 +100,11 @@
         if (Cools.isEmpty(locAroundBind) || null == locAroundBind.getId()) {
             return R.error();
         }
+
+        if (locAroundBind.getLocType().equals(LocStsType.LOC_STS_TYPE_O.type)) {
+            locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", locAroundBind.getBlocNo()));
+        }
+
         locAroundBindService.updateById(locAroundBind);
         return R.ok();
     }
diff --git a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
index dde3022..91df095 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -453,42 +453,44 @@
             throw new CoolException("鏈哄彴淇℃伅涓嶅瓨鍦ㄦ垨宸茬鐢紒锛�");
         }
 
-        List<LocAroundBind> binds = locAroundBindService.selectList(new EntityWrapper<LocAroundBind>()
-                .eq("dev_no", basDevice.getDevNo())
-                .eq("is_default", 1));
+        LocAroundBind binds = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>()
+                .eq("dev_no", basDevice.getDevNo()).orderBy("is_default", false));
 
-        if (Objects.isNull(binds) || binds.isEmpty()) {
+        if (Objects.isNull(binds)) {
             throw new CoolException("鏈哄彴鏈缃粯璁ゅ伐浣滀綅锛侊紒");
         }
+//
+//        Set<String> locs = binds.stream().map(LocAroundBind::getBlocNo).collect(Collectors.toSet());
 
-        Set<String> locs = binds.stream().map(LocAroundBind::getBlocNo).collect(Collectors.toSet());
+//        LocMast locMasts = locMastService.selectOne(new EntityWrapper<LocMast>()
+//                .in("loc_no", locs)
+//                .eq("loc_sts", LocStsType.LOC_STS_TYPE_O.type)
+//                .orderAsc(Arrays.asList("loc_no")));
 
-        LocMast locMasts = locMastService.selectOne(new EntityWrapper<LocMast>()
-                .in("loc_no", locs)
-                .eq("loc_sts", LocStsType.LOC_STS_TYPE_O.type)
-                .orderAsc(Arrays.asList("loc_no")));
+//        if (Objects.isNull(locMasts)) {
+//            binds = locAroundBindService.selectList(new EntityWrapper<LocAroundBind>()
+//                    .eq("dev_no", basDevice.getDevNo()));
+//
+//            Set<String> nlocs = binds.stream().map(LocAroundBind::getBlocNo).collect(Collectors.toSet());
+//
+//            locMasts = locMastService.selectOne(new EntityWrapper<LocMast>()
+//                    .in("loc_no", nlocs)
+//                    .eq("loc_sts", LocStsType.LOC_STS_TYPE_O.type)
+//                    .orderAsc(Arrays.asList("loc_no")));
+//            if (Objects.isNull(locMasts)) {
+//                throw new CoolException("鏆傛棤鍙敤宸ヤ綔浣嶏紒锛�");
+//            }
+//        }
 
-        if (Objects.isNull(locMasts)) {
-            binds = locAroundBindService.selectList(new EntityWrapper<LocAroundBind>()
-                    .eq("dev_no", basDevice.getDevNo()));
-
-            Set<String> nlocs = binds.stream().map(LocAroundBind::getBlocNo).collect(Collectors.toSet());
-
-            locMasts = locMastService.selectOne(new EntityWrapper<LocMast>()
-                    .in("loc_no", nlocs)
-                    .eq("loc_sts", LocStsType.LOC_STS_TYPE_O.type)
-                    .orderAsc(Arrays.asList("loc_no")));
-            if (Objects.isNull(locMasts)) {
-                throw new CoolException("鏆傛棤鍙敤宸ヤ綔浣嶏紒锛�");
-            }
-        }
-
-        LocAroundBind bLocNo = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>().eq("b_loc_no", locMasts.getLocNo()));
+        LocAroundBind bLocNo = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>().eq("b_loc_no", binds.getBlocNo()));
         bLocNo.setLocType(LocStsType.LOC_STS_TYPE_S.type);
 
         if (!locAroundBindService.updateById(bLocNo)) {
             throw new CoolException("宸ヤ綅棰勭害澶辫触锛侊紒");
         }
+
+        LocMast locMasts = locMastService.selectOne(new EntityWrapper<LocMast>()
+                .eq("loc_no", bLocNo.getBlocNo()));
 
         locMasts.setLocSts(LocStsType.LOC_STS_TYPE_S.type);
         locMasts.setModiUser(userId);
@@ -1533,11 +1535,12 @@
         if (!locMastService.updateById(locMast)) {
             throw new CoolException("淇敼搴撲綅鐘舵�佸け璐�");
         }
-//        wrkMast.setWrkCode(null);
-//
-//        if (!wrkMastService.updateById(wrkMast)) {
-//            throw new CoolException("浠诲姟妗f洿鏂板け璐ワ紒锛�");
-//        }
+
+        wrkMast.setWrkCode(null);
+
+        if (!wrkMastService.updateById(wrkMast)) {
+            throw new CoolException("浠诲姟妗f洿鏂板け璐ワ紒锛�");
+        }
     }
 
 
diff --git a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
index bb1db08..f76c634 100644
--- a/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -97,11 +97,6 @@
                             return FAIL.setMsg("绌烘澘鍏ュ簱 ===>> 淇敼搴撲綅鐘舵�佸け璐�; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
                         }
                     }
-
-
-
-
-
                     break;
                 // 鍏ㄦ澘鍏ュ簱
                 case 1:
@@ -133,9 +128,9 @@
                             locDetl.sync(wrkDetl);
                             locDetl.setLocNo(wrkMast.getLocNo()); // 搴撲綅鍙�
                             if (!Objects.isNull(wrkMast.getWrkCode())) {
-                                locDetl.setAnfme(wrkDetl.getAnfme()); // 鏁伴噺
-                            } else {
                                 locDetl.setAnfme(wrkDetl.getRealQty());
+                            } else {
+                                locDetl.setAnfme(wrkDetl.getAnfme()); // 鏁伴噺
                             }
                             locDetl.setZpallet(wrkDetl.getZpallet()); // 鎵樼洏鏉$爜
                             locDetl.setModiTime(now);
@@ -148,8 +143,9 @@
                         }
 
                         //鍒ゆ柇鍖归厤缂栫爜涓嶄负绌猴紝涓斾换鍔$紪鐮佸寘鍚�-2锛岀‘璁や负鏈変笂缁勪换鍔�
-                        if (!Objects.isNull(wrkMast.getWrkCode()) && wrkMast.getWrkCode().contains("-2")) {
+                        if (!Objects.isNull(wrkMast.getWrkCode())) {
                             //涓嶉渶瑕佹洿鏂板崟鎹俊鎭紙瀛愪换鍔℃棤鍗曟嵁
+
                         } else {
                             //姝e父鍗曟嵁鎵嶅瓨瀛樺叆搴撳崟锛屼綔鍏ュ簱鍗曟嵁淇℃伅鏇存柊
                             // 鏇存柊璁㈠崟瀹屾垚鏁伴噺
@@ -452,15 +448,23 @@
         }
 
         /***/
-        if (Objects.isNull(wrkMast.getWrkCode())) {
+        if (!Objects.isNull(wrkMast.getWrkCode())) {
             LocMast lcmst = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", wrkMast.getSourceLocNo()));
             lcmst.setLocSts(LocStsType.LOC_STS_TYPE_O.type);
             if (!locMastService.updateById(lcmst)) {
                 throw new CoolException("搴撲綅鐘舵�佷慨鏀瑰け璐ワ紒锛�");
             }
-            
 
+            LocAroundBind bLocNo = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>().eq("b_loc_no", wrkMast.getSourceLocNo()));
+            if (Objects.isNull(bLocNo)) {
+                throw new CoolException("宸ヤ綅涓嶅瓨鍦� 锛侊紒");
+            }
+            bLocNo.setLocType(LocStsType.LOC_STS_TYPE_O.type);
+            if (!locAroundBindService.updateById(bLocNo)) {
+                throw new CoolException("宸ヤ綅鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+            }
 
+            locDetlService.delete(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getSourceLocNo()));
         }
 
         return SUCCESS;
diff --git a/src/main/resources/mapper/LocDetlMapper.xml b/src/main/resources/mapper/LocDetlMapper.xml
index 6fc681c..0072278 100644
--- a/src/main/resources/mapper/LocDetlMapper.xml
+++ b/src/main/resources/mapper/LocDetlMapper.xml
@@ -550,6 +550,7 @@
                 #{item}
             </foreach>
         </if>
+            and b.deleted = 0 and b.frozen = 0
 
         order by
         DATEPART(yyyy,a.modi_time),DATEPART(mm,a.modi_time),DATEPART(dd,a.modi_time), a.anfme

--
Gitblit v1.9.1