From 43efe016c156158b9fc3a8b647810f612fb126e6 Mon Sep 17 00:00:00 2001
From: zwl <1051256694@qq.com>
Date: 星期二, 02 九月 2025 11:39:52 +0800
Subject: [PATCH] 自动补货单新增 1.订单中只能生成两笔自动补货单 2.CTU库是否有足够的空库位,空库位数需要大于100才会生成自动补货单 3.在补货时加上订单明细的数量进行判断

---
 src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java |  113 ++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 105 insertions(+), 8 deletions(-)

diff --git a/src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java b/src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java
index de1f0d1..273d223 100644
--- a/src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java
+++ b/src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java
@@ -2,18 +2,17 @@
 
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Cools;
-import com.zy.asrs.entity.DocType;
-import com.zy.asrs.entity.Order;
-import com.zy.asrs.service.DocTypeService;
-import com.zy.asrs.service.MatService;
-import com.zy.asrs.service.OrderService;
+import com.zy.asrs.entity.*;
+import com.zy.asrs.service.*;
 import com.zy.asrs.task.handler.AutoReplenishmentHandler;
+import com.zy.common.entity.Parameter;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
+import java.util.Set;
 
 @Slf4j
 @Component
@@ -22,24 +21,122 @@
     @Autowired
     private OrderService orderService;
     @Autowired
+    private OrderDetlService orderDetlService;
+    @Autowired
     private DocTypeService docTypeService;
     @Autowired
     private AutoReplenishmentHandler autoReplenishmentHandler;
     @Autowired
     private MatService matService;
+    @Autowired
+    private AgvLocDetlService agvLocDetlService;
+    @Autowired
+    private AgvLocMastService agvLocMastService;
+    @Autowired
+    private LocDetlService locDetlService;
 
     /*
-    瀹氭椂渚垮埄搴撳瓨锛岀敓鎴愯嚜鍔ㄨˉ璐у崟鎹�
+    瀹氭椂閬嶅巻搴撳瓨锛岀敓鎴愯嚜鍔ㄨˉ璐у崟鎹�
      */
-    //@Scheduled(cron = "0/5 * * * * ? ")
+    @Scheduled(cron = "0 */1 * * * ? ")
     public void createOrder(){
 
+        if(!"Y".equals(Parameter.get().getAutoReplenishment())){
+            return;
+        }
+
+        //妫�娴嬫槸鍚︽湁鏈畬鎴愮殑琛ヨ揣鍗曟嵁
+        DocType docType = docTypeService.selectOne(new EntityWrapper<DocType>().eq("doc_name", "鑷姩琛ヨ揣鍗�"));
+        int count = orderService.selectCount(new EntityWrapper<Order>()
+                .eq("doc_type", docType.getDocId())
+                .andNew().eq("settle",2)
+                .or().eq("settle",1));
+        if(count > 2){
+            return;
+        }
+        
+        //鍒ゆ柇CTU搴撴槸鍚︽湁瓒冲鐨勭┖搴撲綅锛岀┖搴撲綅鏁伴渶瑕佸ぇ浜�100
+        int i = agvLocMastService.selectCount(new EntityWrapper<AgvLocMast>().eq("loc_sts", "O"));
+        if(i < 100){
+            return;
+        }
+
+        //鏌ヨ鎵�鏈夐渶瑕佽ˉ璐х殑鐗╂枡
+        List<Mat> matList = matService.selectList(new EntityWrapper<Mat>().gt( "store_min", 0));
+        if(!Cools.isEmpty(matList)){
+            for (Mat mat : matList){
+                //妫�娴嬫槸鍚︽湁鏈畬鎴愮殑琛ヨ揣鍗曟嵁
+                DocType docType1 = docTypeService.selectOne(new EntityWrapper<DocType>().eq("doc_name", "鑷姩琛ヨ揣鍗�"));
+                int count1 = orderService.selectCount(new EntityWrapper<Order>()
+                        .eq("doc_type", docType1.getDocId())
+                        .andNew().eq("settle",2)
+                        .or().eq("settle",1));
+                if(count1 > 2){
+                    break;
+                }
+
+                //鍒ゆ柇CTU搴撴槸鍚︽湁瓒冲鐨勭┖搴撲綅锛岀┖搴撲綅鏁伴渶瑕佸ぇ浜�100
+                int j = agvLocMastService.selectCount(new EntityWrapper<AgvLocMast>().eq("loc_sts", "O"));
+                if(j < 100){
+                    return;
+                }
+
+                //鏀堕泦褰撳墠鐗╂枡鑷姩琛ヨ揣鍗曟槑缁嗘暟閲�
+                Double orderDetlCount = 0.0;
+                List<Order> orders = orderService.selectList(new EntityWrapper<Order>()
+                        .eq("doc_type", docType1.getDocId())
+                        .andNew().eq("settle", 2)
+                        .or().eq("settle", 1));
+                if(!Cools.isEmpty(orders)){
+                    for (Order order : orders){
+                        List<OrderDetl> orderDetls = orderDetlService.selectList(new EntityWrapper<OrderDetl>()
+                                .eq("matnr", mat.getMatnr())
+                                .eq("order_no", order.getOrderNo()));
+                        if(Cools.isEmpty(orderDetls)){
+                            continue;
+                        }
+                        for (OrderDetl orderDetl : orderDetls){
+                            orderDetlCount=orderDetlCount+orderDetl.getQty();
+                        }
+                    }
+                }
+                //鏌ヨ褰撳墠鐗╂枡鏄惁鍦╝gv搴撳皬浜庡簱瀛樹笂闄�
+                Double anfmeSum = agvLocDetlService.selectSumAnfmeByMatnr(mat.getMatnr());
+                if(Cools.isEmpty(anfmeSum)){
+                    anfmeSum = 0.0;
+                }
+                //褰撳墠鐗╂枡涓嶉渶瑕佽ˉ璐�
+                if(anfmeSum+orderDetlCount > mat.getStoreMin()){
+                    continue;
+                }
+                //鏌ヨ褰撳墠鐗╂枡鍥涢」搴撴槸鍚﹀瓨鍦�,骞朵笖鎵樼洏涓嶅惈鏈夐潪鏂欑鐗╂枡
+                if(Cools.isEmpty(locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("matnr", mat.getMatnr())))){
+                    continue;
+                }
+
+                Set<String> locNosSearch = locDetlService.selectLocNos(mat.getMatnr());
+                //鏄惁鍚湁鍙ˉ璐у嚭搴撶殑搴撲綅
+                boolean flag = false;
+                for (String locNo : locNosSearch){
+                    //log.info("闇�瑕佹嫞鏂欑殑璐т綅锛�" + locNo +"锛岄渶瑕佽ˉ璐х殑鐗╂枡锛�" + mat.getMatnr());
+                    if(Cools.isEmpty(locDetlService.selectByLocWithoutContainer(locNo))){
+                        flag = true;
+                        continue;
+                    }
+                }
+
+                if(flag){
+                    autoReplenishmentHandler.create(mat,mat.getStoreMax() - anfmeSum);
+                    break;
+                }
+            }
+        }
     }
 
     /*
     瀹氭椂澶勭悊鑷姩琛ヨ揣鍗曟嵁
      */
-    @Scheduled(cron = "0/5 * * * * ? ")
+    @Scheduled(cron = "0/10 * * * * ? ")
     public void excuteOrder(){
         DocType docType = docTypeService.selectOne(new EntityWrapper<DocType>().eq("doc_name", "鑷姩琛ヨ揣鍗�"));
         List<Order> orderList = orderService.selectList(new EntityWrapper<Order>()

--
Gitblit v1.9.1