From d87f68eb535935814f287b3740474e7eb24b3643 Mon Sep 17 00:00:00 2001
From: zyx <zyx123456>
Date: 星期三, 22 十一月 2023 09:10:23 +0800
Subject: [PATCH] 自动补货流程更新

---
 src/main/java/com/zy/asrs/service/AgvLocDetlService.java             |    2 
 src/main/java/com/zy/asrs/mapper/AgvLocDetlMapper.java               |    3 +
 src/main/java/com/zy/asrs/service/impl/AgvLocDetlServiceImpl.java    |    5 +
 src/main/java/com/zy/asrs/service/LocDetlService.java                |    2 
 src/main/java/com/zy/asrs/task/handler/AutoReplenishmentHandler.java |  103 ++++++++++++++++++++++++++++++++--
 src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java       |    4 
 src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java     |   13 ++++
 src/main/webapp/static/js/common.js                                  |    2 
 src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java       |   25 ++++++++
 9 files changed, 149 insertions(+), 10 deletions(-)

diff --git a/src/main/java/com/zy/asrs/mapper/AgvLocDetlMapper.java b/src/main/java/com/zy/asrs/mapper/AgvLocDetlMapper.java
index 7523098..defa219 100644
--- a/src/main/java/com/zy/asrs/mapper/AgvLocDetlMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/AgvLocDetlMapper.java
@@ -37,6 +37,9 @@
     @Select("SELECT SUM(anfme) FROM agv_loc_detl WHERE loc_no = #{locNo}")
     Double sumByLocNo(@Param("locNo")String locNo);
 
+    @Select("SELECT SUM(anfme) FROM agv_loc_detl WHERE matnr = #{matnr}")
+    Double sumByMatnr(@Param("matnr")String matnr);
+
     int updateAnfme(@Param("locNo")String locNo, @Param("anfme")Double anfme, @Param("matnr")String matnr, @Param("batch")String batch, @Param("csocode")String csocode, @Param("isocode")String isocode);
 
     int deleteLocDetl(@Param("locNo")String locNo, @Param("anfme")Double anfme, @Param("matnr")String matnr, @Param("batch")String batch, @Param("csocode")String csocode, @Param("isocode")String isocode);
diff --git a/src/main/java/com/zy/asrs/service/AgvLocDetlService.java b/src/main/java/com/zy/asrs/service/AgvLocDetlService.java
index 3deaf54..76dc097 100644
--- a/src/main/java/com/zy/asrs/service/AgvLocDetlService.java
+++ b/src/main/java/com/zy/asrs/service/AgvLocDetlService.java
@@ -39,6 +39,8 @@
 
     public Double selectSumAnfmeByLocNo(String locNo);
 
+    public Double selectSumAnfmeByMatnr(String matnr);
+
     public AgvLocDetl selectLocdetl(String locNo,String matnr,String batch,String csocode,String isocode);
 
     public void compareToEss(MultipartFile file) throws IOException;
diff --git a/src/main/java/com/zy/asrs/service/LocDetlService.java b/src/main/java/com/zy/asrs/service/LocDetlService.java
index 1761c93..89da6e2 100644
--- a/src/main/java/com/zy/asrs/service/LocDetlService.java
+++ b/src/main/java/com/zy/asrs/service/LocDetlService.java
@@ -71,7 +71,7 @@
 
     List<String> selectLocNo(String matnr);
 
-    Set<String> selectLocNo(String matnr, String batch, String csocode, String isocode);
+    Set<String> selectLocNos(String matnr);
 
     LocDetl selectByContainerCode(String containerCode);
 
diff --git a/src/main/java/com/zy/asrs/service/impl/AgvLocDetlServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvLocDetlServiceImpl.java
index fae83c0..f6b5c47 100644
--- a/src/main/java/com/zy/asrs/service/impl/AgvLocDetlServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/AgvLocDetlServiceImpl.java
@@ -198,6 +198,11 @@
     }
 
     @Override
+    public Double selectSumAnfmeByMatnr(String matnr) {
+        return this.baseMapper.sumByMatnr(matnr);
+    }
+
+    @Override
     public AgvLocDetl selectLocdetl(String locNo, String matnr, String batch, String csocode, String isocode) {
         return this.baseMapper.selectLocdetl(locNo,matnr,batch,csocode,isocode);
     }
diff --git a/src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java b/src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java
index ff1c6b5..c98b79c 100644
--- a/src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java
+++ b/src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java
@@ -45,6 +45,9 @@
     @Value("${agv.containerArrivedPath}")
     private String containerArrivedPath;
 
+    @Value("${agvBasDev.maxWorkNum}")
+    private int maxWrokNum;
+
     @Autowired
     AgvWrkMastMapper agvWrkMastMapper;
     @Autowired
@@ -73,6 +76,9 @@
     }
 
     public int startWrk(List<AgvWrkMast> agvWrkMastList, String taskType) throws IOException {
+
+        //浠诲姟杩囨护锛岃繃婊ゆ帀宸插瓨鍦ㄧ浉鍚岀洰鏍囧簱浣嶇殑宸ヤ綔妗�
+        agvWrkMastList = filter(agvWrkMastList);
 
         AgvTaskCreateParam agvTaskCreateParam = new AgvTaskCreateParam();
         agvTaskCreateParam.setTaskType(taskType);
@@ -148,6 +154,13 @@
         return this.selectOne(new EntityWrapper<AgvWrkMast>().eq("barcode",containerCode));
     }
 
+    private List<AgvWrkMast> filter(List<AgvWrkMast> agvWrkMastList){
+        return agvWrkMastList.stream().filter(agvWrkMast -> {
+            int num = this.selectCount(new EntityWrapper<AgvWrkMast>().eq("loc_no", agvWrkMast.getLocNo()));
+            return num <= maxWrokNum;
+        }).collect(Collectors.toList());
+    }
+
     private void getContainerMoveParam(List<AgvWrkMast> agvWrkMastList,List<Map<String,String>> positionCodeMapList){
         //寰�瀹瑰櫒鍏ュ満鍙傛暟涓斁鍏ユ簮绔欑偣浣嶇疆
         for(AgvWrkMast agvWrkMast : agvWrkMastList){
diff --git a/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
index da0d56d..af9589a 100644
--- a/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
@@ -224,10 +224,10 @@
         return this.baseMapper.selectLocNo(matnr);
     }
 
-    public Set<String> selectLocNo(String matnr, String batch, String csocode, String isocode) {
+    public Set<String> selectLocNos(String matnr) {
 
         Wrapper<LocDetl> wrapper = new EntityWrapper<LocDetl>().eq("matnr", matnr);
-        Utils.confirmOnlyMat(wrapper,matnr,batch,csocode,isocode);
+        //Utils.confirmOnlyMat(wrapper,matnr,batch,csocode,isocode);
         List<LocDetl> locDetls = this.selectList(wrapper);
 
         Set<String> locNos = new HashSet<>();
diff --git a/src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java b/src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java
index de1f0d1..d0ab451 100644
--- a/src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java
+++ b/src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java
@@ -3,7 +3,9 @@
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Cools;
 import com.zy.asrs.entity.DocType;
+import com.zy.asrs.entity.Mat;
 import com.zy.asrs.entity.Order;
+import com.zy.asrs.service.AgvLocDetlService;
 import com.zy.asrs.service.DocTypeService;
 import com.zy.asrs.service.MatService;
 import com.zy.asrs.service.OrderService;
@@ -27,13 +29,36 @@
     private AutoReplenishmentHandler autoReplenishmentHandler;
     @Autowired
     private MatService matService;
+    @Autowired
+    private AgvLocDetlService agvLocDetlService;
 
     /*
     瀹氭椂渚垮埄搴撳瓨锛岀敓鎴愯嚜鍔ㄨˉ璐у崟鎹�
      */
     //@Scheduled(cron = "0/5 * * * * ? ")
     public void createOrder(){
+        //妫�娴嬫槸鍚︽湁鏈畬鎴愮殑琛ヨ揣鍗曟嵁
+        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("settle",1));
+        if(count > 0){
+            return;
+        }
 
+        //鏌ヨ鎵�鏈夐渶瑕佽ˉ璐х殑鐗╂枡
+        List<Mat> matList = matService.selectList(new EntityWrapper<Mat>().eq(false, "store_min", 0));
+        if(!Cools.isEmpty(matList)){
+            for (Mat mat : matList){
+                //鏌ヨ褰撳墠鐗╂枡鏄惁鍦╝gv搴撳皬浜庡簱瀛樹笂闄�
+                Double anfmeSum = agvLocDetlService.selectSumAnfmeByMatnr(mat.getMatnr());
+                if(anfmeSum < mat.getStoreMin()){
+                    autoReplenishmentHandler.create(mat,mat.getStoreMax() - anfmeSum);
+                    break;
+                }
+            }
+        }
     }
 
     /*
diff --git a/src/main/java/com/zy/asrs/task/handler/AutoReplenishmentHandler.java b/src/main/java/com/zy/asrs/task/handler/AutoReplenishmentHandler.java
index cd21bd0..044917d 100644
--- a/src/main/java/com/zy/asrs/task/handler/AutoReplenishmentHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/AutoReplenishmentHandler.java
@@ -2,6 +2,8 @@
 
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Cools;
+import com.core.common.DateUtils;
+import com.core.common.SnowflakeIdWorker;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.service.*;
@@ -34,7 +36,26 @@
     private WrkDetlService wrkDetlService;
     @Autowired
     private OrderService orderService;
+    @Autowired
+    private SnowflakeIdWorker snowflakeIdWorker;
 
+
+    @Transactional
+    public ReturnT<String> create(Mat mat, double anfme) {
+        //鍒涘缓涓�涓柊鐨勮嚜鍔ㄨˉ璐у崟鎹�
+        Order order = createOrder();
+        OrderDetl orderDetl = createOrderDetl(order);
+        orderDetl.setMatnr(mat.getMatnr());
+        orderDetl.setMaktx(mat.getMaktx());
+        orderDetl.setSpecs(mat.getSpecs());
+        orderDetl.setAnfme(anfme);
+        orderDetl.setQty(0.0);
+
+        orderService.insert(order);
+        orderDetlService.insert(orderDetl);
+
+        return SUCCESS;
+    }
 
     @Transactional
     public ReturnT<String> start(Order order) {
@@ -58,8 +79,64 @@
         order.setSettle(2L);
         orderService.updateById(order);
 
-
         return SUCCESS;
+    }
+
+    private Order createOrder(){
+        Date now = new Date();
+        return new Order(
+                String.valueOf(snowflakeIdWorker.nextId()),    // 缂栧彿[闈炵┖]
+                "AUTO" + snowflakeIdWorker.nextId(),    // 璁㈠崟缂栧彿
+                DateUtils.convert(now),    // 鍗曟嵁鏃ユ湡
+                21L,    // 鍗曟嵁绫诲瀷 21.鑷姩琛ヨ揣鍗�
+                null,    // 椤圭洰缂栧彿
+                null,    //
+                null,    // 璋冩嫧椤圭洰缂栧彿
+                null,    // 鍒濆绁ㄦ嵁鍙�
+                null,    // 绁ㄦ嵁鍙�
+                null,    // 瀹㈡埛缂栧彿
+                null,    // 瀹㈡埛
+                null,    // 鑱旂郴鏂瑰紡
+                null,    // 鎿嶄綔浜哄憳
+                null,    // 鍚堣閲戦
+                null,    // 浼樻儬鐜�
+                null,    // 浼樻儬閲戦
+                null,    // 閿�鍞垨閲囪喘璐圭敤鍚堣
+                null,    // 瀹炰粯閲戦
+                null,    // 浠樻绫诲瀷
+                null,    // 涓氬姟鍛�
+                null,    // 缁撶畻澶╂暟
+                null,    // 閭垂鏀粯绫诲瀷
+                null,    // 閭垂
+                null,    // 浠樻鏃堕棿
+                null,    // 鍙戣揣鏃堕棿
+                null,    // 鐗╂祦鍚嶇О
+                null,    // 鐗╂祦鍗曞彿
+                1L,    // 璁㈠崟鐘舵��
+                1,    // 鐘舵��
+                9999L,    // 娣诲姞浜哄憳
+                now,    // 娣诲姞鏃堕棿
+                9999L,    // 淇敼浜哄憳
+                now,    // 淇敼鏃堕棿
+                null    // 澶囨敞
+        );
+
+    }
+
+    private OrderDetl createOrderDetl(Order order){
+        Date now = new Date();
+        OrderDetl orderDetl = new OrderDetl();
+
+        orderDetl.setOrderId(order.getId());
+        orderDetl.setOrderNo(order.getOrderNo());
+        orderDetl.setCreateBy(order.getCreateBy());
+        orderDetl.setCreateTime(now);
+        orderDetl.setUpdateBy(order.getCreateBy());
+        orderDetl.setUpdateTime(now);
+        orderDetl.setStatus(1);
+        orderDetl.setQty(0.0D);
+
+        return orderDetl;
     }
 
     private Set<String> pakoutLoc(Order order){
@@ -74,14 +151,11 @@
             }
 
             String matnr = orderDetl.getMatnr();
-            String batch = orderDetl.getBatch();
-            String csocode = orderDetl.getThreeCode();
-            String isocode = orderDetl.getDeadTime();
 
-            Double orderAnfme = orderDetl.getAnfme();
+            double orderAnfme = orderDetl.getAnfme();
 
             //List<String> locNosSearch = locDetlService.selectLocNo(matnr);
-            Set<String> locNosSearch = locDetlService.selectLocNo(matnr, batch, csocode, isocode);
+            Set<String> locNosSearch = locDetlService.selectLocNos(matnr);
 
             //閲嶆柊鎺掑簭 骞朵笖妫�娴嬭搴撲綅鏄惁鍚病鏈夋枡绠辩爜鐨勭墿鏂欙紝濡傛湁鏈夊垯涓嶅厑璁稿嚭搴�
             Set<String> resort = resort(locNosSearch);
@@ -92,6 +166,17 @@
                 for (LocDetl locDetl :locDetls){
                     if(matnr.equals(locDetl.getMatnr())){
                         orderAnfme -= locDetl.getAnfme();
+                    }else {
+                        OrderDetl odNew = createOrderDetl(order);
+                        odNew.setMatnr(locDetl.getMatnr());
+                        odNew.setMaktx(locDetl.getMaktx());
+                        odNew.setBatch(locDetl.getBatch());
+                        odNew.setThreeCode(locDetl.getThreeCode());
+                        odNew.setDeadTime(locDetl.getDeadTime());
+                        odNew.setSpecs(locDetl.getSpecs());
+                        odNew.setAnfme(0.0);
+                        odNew.setQty(locDetl.getAnfme());
+                        orderDetlService.insert(odNew);
                     }
                 }
                 if(orderAnfme <= 0){
@@ -99,6 +184,11 @@
                     orderDetlService.updateById(orderDetl);
                     break;
                 }
+            }
+            if(orderAnfme > 0){
+                orderDetl.setAnfme(orderDetl.getAnfme() - orderAnfme);
+                orderDetl.setQty(orderDetl.getAnfme());
+                orderDetlService.updateById(orderDetl);
             }
         }
 
@@ -165,6 +255,7 @@
         //wrkMast.setModiUser(userId);
         wrkMast.setModiTime(now);
 
+        //琛ヨ揣鏍囪瘑
         wrkMast.setMk("Y");
         if (!wrkMastService.insert(wrkMast)) {
             throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐ワ紝鍑哄簱搴撲綅鍙凤細"+locNo);
diff --git a/src/main/webapp/static/js/common.js b/src/main/webapp/static/js/common.js
index fb4d280..cc817a0 100644
--- a/src/main/webapp/static/js/common.js
+++ b/src/main/webapp/static/js/common.js
@@ -203,7 +203,7 @@
     // ,{field: 'barcode', align: 'center',title: '鏉$爜', hide: true}
     // ,{field: 'manu', align: 'center',title: '鍘傚', hide: true}
     // ,{field: 'itemNum', align: 'center',title: '鍝侀」鏁�', hide: true}
-    // ,{field: 'safeQty', align: 'center',title: '瀹夊叏搴撳瓨閲�', hide: true}
+    ,{field: 'safeQty', align: 'center',title: '瀹夊叏搴撳瓨閲�', hide: true}
     // ,{field: 'length', align: 'center',title: '鍗曠姣涢噸', hide: true}
     // ,{field: 'volume', align: 'center',title: '鍗曠浣撶Н', hide: true}
     // ,{field: 'threeCode', align: 'center',title: '绠卞瓙灏哄', hide: true}

--
Gitblit v1.9.1