From 6e18b1e086f202512eeb9aa988a8b9026cfccec3 Mon Sep 17 00:00:00 2001
From: zwl <1051256694@qq.com>
Date: 星期六, 28 三月 2026 20:28:27 +0800
Subject: [PATCH] 修复

---
 src/main/java/com/zy/api/service/HmesApiService.java                |    2 
 src/main/java/com/zy/api/service/impl/HmesApiServiceImpl.java       |   20 ++++++
 src/main/java/com/zy/asrs/task/handler/OrderMoveHistoryHandler.java |   81 +++++++++++++++++++++++++++
 src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java        |   36 ++++++-----
 src/main/java/com/zy/api/controller/HmesApiController.java          |   13 ++++
 src/main/java/com/zy/asrs/task/OrderMoveHistoryScheduler.java       |    8 ++
 6 files changed, 143 insertions(+), 17 deletions(-)

diff --git a/src/main/java/com/zy/api/controller/HmesApiController.java b/src/main/java/com/zy/api/controller/HmesApiController.java
index b672bcc..4d2ba8e 100644
--- a/src/main/java/com/zy/api/controller/HmesApiController.java
+++ b/src/main/java/com/zy/api/controller/HmesApiController.java
@@ -80,6 +80,19 @@
     }
 
     /**
+     * 瑙e喕鎵�鏈夋満鍙板伐浣�
+     * @author Ryan
+     * @date 2026/3/28 20:45
+     * @return com.core.common.R
+     */
+//    @ManagerAuth
+    @ApiOperation("瑙e喕鎵�鏈夋満鍙板伐浣�")
+    @PostMapping("/work/release/lock/all")
+    public R releaseAllLocks() {
+        return hmesApiService.releaseAllLocks();
+    }
+
+    /**
      * 鑾峰彇鏈哄彴鍙婂搴斿伐浣嶅喕缁撴儏鍐�
      * @author Ryan
      * @date 2026/3/20 11:06
diff --git a/src/main/java/com/zy/api/service/HmesApiService.java b/src/main/java/com/zy/api/service/HmesApiService.java
index e97cb22..3adef8c 100644
--- a/src/main/java/com/zy/api/service/HmesApiService.java
+++ b/src/main/java/com/zy/api/service/HmesApiService.java
@@ -11,6 +11,8 @@
 
     R releaseLock(ReceviceTaskParams params);
 
+    R releaseAllLocks();
+
     R getDeviceFreezeStatus(String devNo);
 
     R backLoc(HmesBackLocParams params);
diff --git a/src/main/java/com/zy/api/service/impl/HmesApiServiceImpl.java b/src/main/java/com/zy/api/service/impl/HmesApiServiceImpl.java
index 28b58d9..36abd52 100644
--- a/src/main/java/com/zy/api/service/impl/HmesApiServiceImpl.java
+++ b/src/main/java/com/zy/api/service/impl/HmesApiServiceImpl.java
@@ -251,6 +251,26 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R releaseAllLocks() {
+        EntityWrapper<LocAroundBind> frozenWrapper = new EntityWrapper<>();
+        frozenWrapper.eq("freeze", 1);
+        int frozenCount = locAroundBindService.selectCount(frozenWrapper);
+        if (frozenCount <= 0) {
+            return R.ok("鍏ㄩ儴鏈哄彴宸ヤ綅鍧囨湭鍐荤粨");
+        }
+
+        LocAroundBind updateEntity = new LocAroundBind();
+        updateEntity.setFreeze(0);
+        EntityWrapper<LocAroundBind> updateWrapper = new EntityWrapper<>();
+        updateWrapper.eq("freeze", 1);
+        if (!locAroundBindService.update(updateEntity, updateWrapper)) {
+            throw new CoolException("鍏ㄩ儴鏈哄彴宸ヤ綅瑙e喕澶辫触锛岃妫�鏌ュ悗鍐嶆搷浣滐紒锛�");
+        }
+        return R.ok("鍏ㄩ儴鏈哄彴宸ヤ綅瑙e喕鎴愬姛锛屽叡澶勭悊" + frozenCount + "涓伐浣�");
+    }
+
+    @Override
     public R getDeviceFreezeStatus(String devNo) {
         EntityWrapper<BasDevice> deviceWrapper = new EntityWrapper<>();
         deviceWrapper.eq("status", 1);
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 2c70265..805b2db 100644
--- a/src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java
+++ b/src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java
@@ -207,23 +207,25 @@
                         wrkMastService.updateById(wrkMast);
                         //鍑哄簱涓烘満鍙板伐浣嶆椂锛屽喕缁撶浉瀵规湁鐨勫簱浣�,鍙婄浉閭诲簱浣�
                         String s = Utils.convertLocFormat(params.getLocNo());
-                        LocAroundBind bind = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>()
-                                .eq("b_loc_no", s));
-                        if (!Objects.isNull(bind)) {
-                            bind.setFreeze(1);
-                            locAroundBindService.updateById(bind);
-                            //鍐荤粨鐩搁偦搴撲綅
-                            Integer[] aroundIds = freezeLocAround(bind.getOrderNo());
-                            if (aroundIds != null) {
-                                for (Integer id : aroundIds) {
-                                    if (id != null && id > 0) {
-                                        LocAroundBind aroundBind = locAroundBindService.selectOne(
-                                                new EntityWrapper<LocAroundBind>()
-                                                        .eq("dev_id", bind.getDevId())
-                                                        .eq("order_no", id));
-                                        if (aroundBind != null) {
-                                            aroundBind.setFreeze(1);
-                                            locAroundBindService.updateById(aroundBind);
+                        if(Cools.isEmpty(wrkMast.getLocNo())){
+                            LocAroundBind bind = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>()
+                                    .eq("b_loc_no", s));
+                            if (!Objects.isNull(bind)) {
+                                bind.setFreeze(1);
+                                locAroundBindService.updateById(bind);
+                                //鍐荤粨鐩搁偦搴撲綅
+                                Integer[] aroundIds = freezeLocAround(bind.getOrderNo());
+                                if (aroundIds != null) {
+                                    for (Integer id : aroundIds) {
+                                        if (id != null && id > 0) {
+                                            LocAroundBind aroundBind = locAroundBindService.selectOne(
+                                                    new EntityWrapper<LocAroundBind>()
+                                                            .eq("dev_id", bind.getDevId())
+                                                            .eq("order_no", id));
+                                            if (aroundBind != null) {
+                                                aroundBind.setFreeze(1);
+                                                locAroundBindService.updateById(aroundBind);
+                                            }
                                         }
                                     }
                                 }
diff --git a/src/main/java/com/zy/asrs/task/OrderMoveHistoryScheduler.java b/src/main/java/com/zy/asrs/task/OrderMoveHistoryScheduler.java
index c2a7f49..f233f2b 100644
--- a/src/main/java/com/zy/asrs/task/OrderMoveHistoryScheduler.java
+++ b/src/main/java/com/zy/asrs/task/OrderMoveHistoryScheduler.java
@@ -26,4 +26,12 @@
     public void executeOrder(){
         orderMoveHistoryHandler.startOrder();
     }
+
+    /**
+     * 姣忓ぉ 0 鐐瑰皢鏈墽琛岀殑鍑哄簱鍗曡浆鍏ュ巻鍙叉。锛屽苟鎵撲笂绯荤粺鑷姩鍒犻櫎鏍囪
+     */
+    @Scheduled(cron = "0 0 0 * * ?", zone = "Asia/Shanghai")
+    public void executePakoutAutoArchive() {
+        orderMoveHistoryHandler.startPakoutAutoArchive();
+    }
 }
diff --git a/src/main/java/com/zy/asrs/task/handler/OrderMoveHistoryHandler.java b/src/main/java/com/zy/asrs/task/handler/OrderMoveHistoryHandler.java
index 11c0b25..b1023c7 100644
--- a/src/main/java/com/zy/asrs/task/handler/OrderMoveHistoryHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/OrderMoveHistoryHandler.java
@@ -11,7 +11,10 @@
 import com.zy.asrs.utils.OrderInAndOutUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import java.util.Date;
 import java.util.List;
@@ -31,6 +34,8 @@
     private OrderDetlPakinServiceImpl orderDetlPakinService;
     @Autowired
     private OrderDetlPakoutService orderDetlPakoutService;
+    @Autowired
+    private JdbcTemplate jdbcTemplate;
 
     public ReturnT<String> start(){
 //        List<Order> settleEqual6 = orderService.selectList(new EntityWrapper<Order>()
@@ -60,6 +65,82 @@
         return SUCCESS;
     }
 
+    /**
+     * 姣忓ぉ 0 鐐瑰皢鏈墽琛岀殑鍑哄簱鍗曡浆鍏ュ巻鍙叉。锛屽苟鏍囪涓虹郴缁熻嚜鍔ㄥ垹闄ゃ��
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public ReturnT<String> startPakoutAutoArchive() {
+        try {
+            Integer orderCount = jdbcTemplate.queryForObject(
+                    "select count(1) from man_order_pakout where settle = 1",
+                    Integer.class
+            );
+            if (orderCount == null || orderCount == 0) {
+                return SUCCESS;
+            }
+
+            int detailLogCount = jdbcTemplate.update(
+                    "insert into man_order_detl_log_pakout " +
+                            "select * from man_order_detl_pakout " +
+                            "where order_id in (select id from man_order_pakout where settle = 1)"
+            );
+            jdbcTemplate.update(
+                    "update logDetl " +
+                            "set logDetl.memo = case " +
+                            "when logDetl.memo is null or logDetl.memo = '' " +
+                            "then '绯荤粺0鐐硅嚜鍔ㄥ垹闄よ縼绉籟' + convert(varchar(19), getdate(), 120) + ']' " +
+                            "else logDetl.memo + ';绯荤粺0鐐硅嚜鍔ㄥ垹闄よ縼绉籟' + convert(varchar(19), getdate(), 120) + ']' " +
+                            "end, " +
+                            "logDetl.update_by = 0, " +
+                            "logDetl.update_time = getdate() " +
+                            "from man_order_detl_log_pakout logDetl " +
+                            "where exists (" +
+                            "select 1 " +
+                            "from man_order_detl_pakout detl " +
+                            "inner join man_order_pakout pakout on detl.order_id = pakout.id " +
+                            "where pakout.settle = 1 and detl.id = logDetl.id)"
+            );
+            int detailDeleteCount = jdbcTemplate.update(
+                    "delete from man_order_detl_pakout " +
+                            "where order_id in (select id from man_order_pakout where settle = 1)"
+            );
+
+            int orderLogCount = jdbcTemplate.update(
+                    "insert into man_order_log_pakout " +
+                            "select * from man_order_pakout " +
+                            "where settle = 1"
+            );
+            jdbcTemplate.update(
+                    "update logOrder " +
+                            "set logOrder.memo = case " +
+                            "when logOrder.memo is null or logOrder.memo = '' " +
+                            "then '绯荤粺0鐐硅嚜鍔ㄥ垹闄よ縼绉籟' + convert(varchar(19), getdate(), 120) + ']' " +
+                            "else logOrder.memo + ';绯荤粺0鐐硅嚜鍔ㄥ垹闄よ縼绉籟' + convert(varchar(19), getdate(), 120) + ']' " +
+                            "end, " +
+                            "logOrder.update_by = 0, " +
+                            "logOrder.update_time = getdate() " +
+                            "from man_order_log_pakout logOrder " +
+                            "where exists (" +
+                            "select 1 " +
+                            "from man_order_pakout pakout " +
+                            "where pakout.settle = 1 and pakout.id = logOrder.id)"
+            );
+            int orderDeleteCount = jdbcTemplate.update(
+                    "delete from man_order_pakout where settle = 1"
+            );
+
+            log.info(
+                    "0鐐硅嚜鍔ㄨ縼绉诲嚭搴撳崟鑷冲巻鍙叉。瀹屾垚, 璁㈠崟鏁�={}, 璁㈠崟鍘嗗彶鏁�={}, 鏄庣粏鍘嗗彶鏁�={}, 璁㈠崟鍒犻櫎鏁�={}, 鏄庣粏鍒犻櫎鏁�={}",
+                    orderCount, orderLogCount, detailLogCount, orderDeleteCount, detailDeleteCount
+            );
+            return SUCCESS;
+        } catch (Exception e) {
+            log.error("0鐐硅嚜鍔ㄨ縼绉诲嚭搴撳崟鑷冲巻鍙叉。澶辫触", e);
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            return FAIL.setMsg(e.getMessage());
+        }
+    }
+
     private void moveBoth(Order order, List<OrderDetl> orderDetls){
         Date now = new Date();
         if (!Cools.isEmpty(orderDetls)) {

--
Gitblit v1.9.1