From 559b2321be06967f32eb40ba434790b735d7fa33 Mon Sep 17 00:00:00 2001
From: zyx <zyx123456>
Date: 星期二, 07 十一月 2023 16:53:55 +0800
Subject: [PATCH] 出库时,检测到选择的站点没有空的暂存位,则等成等待任务,等待任务的出库站点暂时不分配。 新增定时处理等待任务

---
 src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java           |   17 ++++
 src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java     |   40 ++++++---
 src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java    |   22 +----
 src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java |    7 +
 src/main/java/com/zy/asrs/controller/OutController.java           |  139 ++--------------------------------
 src/main/java/com/zy/asrs/service/AgvBasDevpService.java          |    2 
 6 files changed, 66 insertions(+), 161 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/OutController.java b/src/main/java/com/zy/asrs/controller/OutController.java
index 3c368d0..67c8fe2 100644
--- a/src/main/java/com/zy/asrs/controller/OutController.java
+++ b/src/main/java/com/zy/asrs/controller/OutController.java
@@ -71,38 +71,6 @@
     @ManagerAuth
     public R pakoutPreview(@RequestBody List<Long> ids) {
 
-//        Order order = orderService.selectById(ids.get(0));
-//
-//        DocType docType = docTypeService.selectById(order.getDocType());
-//
-//        if("浜哄伐琛ヨ揣鍗�".equals(docType.getDocName())){
-//            List<OrderDetl> orderDetlList = orderDetlService.selectBatchIds(ids);
-//            //杩斿洖缁欏墠绔殑搴撲綅浠ュ強绔欑偣淇℃伅
-//            List<LocDto> locDtoList = new ArrayList<>();
-//
-//            for (OrderDetl orderDetl : orderDetlList) {
-//
-//                double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getQty()).orElse(0.0D);
-//                if (issued <= 0.0D) { continue; }
-//
-//                //浠庡钩搴撳鎵�
-//                //issued = manLocDetlService.queryStockAndSetLocDto(orderDetl.getMatnr(),orderDetl.getBatch(),orderDetl.getOrderNo(),locDtoList,issued,orderDetl.getThreeCode(),orderDetl.getDeadTime());
-//
-//                //鍏堟壘AGV鐨勫簱瀛橈紝濡傛灉杩斿洖鐨刬ssued澶т簬0锛屽垯鍘诲洓椤瑰簱鎵�
-//                //issued = agvLocDetlService.queryStockAndSetLocDto(orderDetl.getMatnr(),orderDetl.getBatch(),orderDetl.getOrderNo(),locDtoList,issued,orderDetl.getThreeCode(),orderDetl.getDeadTime());
-//
-//                //浠庡洓椤瑰簱鐨勫簱瀛橀噷闈㈡壘锛�
-//                issued = locDetlService.queryStockAndSetLocDto1(orderDetl.getMatnr(),orderDetl.getBatch(),orderDetl.getOrderNo(),locDtoList,issued,orderDetl.getThreeCode(),orderDetl.getDeadTime());
-//
-//                if (issued > 0) {
-//                    LocDto locDto = new LocDto(null, orderDetl.getMatnr(), orderDetl.getMaktx(), orderDetl.getBatch(), orderDetl.getOrderNo(), issued);
-//                    locDto.setLack(Boolean.TRUE);
-//                    locDtoList.add(locDto);
-//                }
-//            }
-//            return R.ok().add(locDtoList);
-//        }
-
         List<OrderDetl> orderDetlList = orderDetlService.selectBatchIds(ids);
         //杩斿洖缁欏墠绔殑搴撲綅浠ュ強绔欑偣淇℃伅
         List<LocDto> locDtoList = new ArrayList<>();
@@ -120,7 +88,6 @@
                     locDtoList.add(locDto);
                 }
             }else {
-                //double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getQty()).orElse(0.0D);
                 if (issued <= 0.0D) { continue; }
 
                 //浠庡钩搴撳鎵�
@@ -187,96 +154,6 @@
             workService.stockOut(staNo, taskDto, getUserId());
         }
         return R.ok();
-
-        /*
-        if (Cools.isEmpty(locDtos)) {
-            return R.parse(BaseRes.PARAM);
-        }
-        boolean lack = true;
-        for (LocDto locDto : locDtos) {
-            if (Cools.isEmpty(locDto.getStaNo()) && !locDto.isLack()) {
-                return R.error(locDto.getLocNo()+"搴撲綅璇烽�夋嫨鍑哄簱绔�");
-            }
-        }
-        for (LocDto locDto : locDtos) {
-            if (!locDto.isLack()) {
-                lack = false;
-                break;
-            }
-        }
-        if (lack) {
-            return R.error("搴撳瓨涓嶈冻");
-        }
-
-        Thread.sleep(500L);
-
-        // 璁㈠崟棰勬牎楠�  ===>> 1.璁㈠崟鐘舵�侊紱 2.璁㈠崟甯﹀嚭鏁伴噺
-        List<OrderDto> orderDtos = new ArrayList<>();
-        for (LocDto locDto : locDtos) {
-            if (!isJSON(locDto.getOrderNo())) {
-                if (Cools.isEmpty(locDto.getOrderNo())) { continue; }
-                OrderDto orderDto = new OrderDto(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch(), locDto.getAnfme());
-                if (OrderDto.has(orderDtos, orderDto)) {
-                    OrderDto dto = OrderDto.find(orderDtos, orderDto);
-                    assert dto != null;
-                    dto.setAnfme(dto.getAnfme() + orderDto.getAnfme());
-                } else {
-                    orderDtos.add(orderDto);
-                }
-            } else {
-                // 璁㈠崟鍚堝苟鍑哄簱
-                List<OrderDto> orderDtoList = JSON.parseArray(locDto.getOrderNo(), OrderDto.class);
-                for (OrderDto one : orderDtoList) {
-                    OrderDto orderDto = new OrderDto(one.getOrderNo(), locDto.getMatnr(), locDto.getBatch(), one.getAnfme());
-                    if (OrderDto.has(orderDtos, orderDto)) {
-                        OrderDto dto = OrderDto.find(orderDtos, orderDto);
-                        assert dto != null;
-                        dto.setAnfme(dto.getAnfme() + orderDto.getAnfme());
-                    } else {
-                        orderDtos.add(orderDto);
-                    }
-                }
-            }
-        }
-        for (OrderDto orderDto : orderDtos) {
-            Order order = orderService.selectByNo(orderDto.getOrderNo());
-            if (order.getSettle() > 2) {
-                return R.error(orderDto.getOrderNo() + "璁㈠崟宸插け鏁堬紝璇峰強鏃跺埛鏂伴〉闈�");
-            }
-//            OrderDetl orderDetl = orderDetlService.selectItemNoneOfBatch(orderDto.getOrderNo(), orderDto.getMatnr());
-//            if (orderDetl.getAnfme() - orderDetl.getQty() < orderDto.getAnfme()) {
-//                return R.ok(orderDto.getOrderNo() + "璁㈠崟宸蹭綔涓氾紝璇峰強鏃跺埛鏂伴〉闈�");
-//            }
-        }
-
-        List<TaskDto> taskDtos = new ArrayList<>();
-        // 鏍规嵁 锛堝簱浣� & 鍑哄簱绔欙級 鍒嗙粍锛� 鐞嗘兂鐘舵�侊細涓�缁勪负涓�娆″嚭搴撲换鍔�
-        for (LocDto locDto : locDtos) {
-            if (locDto.isLack()) { continue; }
-            // 闃叉鍓嶇椤甸潰鎻愬彇搴撲綅淇℃伅鍚庯紝鍦ㄥ叾浠栧湴鏂瑰璇ュ簱浣嶇敓鎴愪簡鍑哄簱浠诲姟(搴撲綅鐘舵�侀潪F鐘舵��)
-            LocMast locMast = locMastService.selectById(locDto.getLocNo());
-            if(!Cools.isEmpty(locMast) && !locMast.getLocSts().equals("F")){
-                return R.error("搴撲綅鍙烽潪鍦ㄥ簱鐘舵�侊紝璇烽噸鏂伴�夋嫨鍑哄簱搴撲綅===>>" + locDto.getLocNo());
-            }
-
-            TaskDto taskDto = new TaskDto(locDto.getLocNo(), locDto.getStaNo(), locDto);
-            if (TaskDto.has(taskDtos, taskDto)) {
-                TaskDto dto = TaskDto.find(taskDtos, taskDto);
-                assert dto != null;
-                dto.getLocDtos().addAll(taskDto.getLocDtos());
-            } else {
-                taskDtos.add(taskDto);
-            }
-        }
-
-        // -----------------------------------------------------------------------------------------------
-        List<String> excludeLocNos = taskDtos.stream().map(TaskDto::getLocNo).distinct().collect(Collectors.toList());
-        for (TaskDto taskDto : taskDtos) {
-            BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo());
-            workService.stockOut(staNo, taskDto, getUserId());
-            locMastService.breakUp(taskDto.getLocNo(), excludeLocNos);
-        }
-        return R.ok();*/
     }
 
 
@@ -389,17 +266,18 @@
         if(!Cools.isEmpty(agvLocMast) && !agvLocMast.getLocSts().equals("F")){
             throw new CoolException("搴撲綅鍙烽潪鍦ㄥ簱鐘舵�侊紝璇烽噸鏂伴�夋嫨鍑哄簱搴撲綅===>>" + locDto.getLocNo());
         }
-        AgvBasDevp agvBasDevp = agvBasDevpService.selectOne(new EntityWrapper<AgvBasDevp>()
-                .eq("station_code", locDto.getAgvStaNo())
-                .eq("loc_sts", "O"));
+        //瀵绘壘绌虹珯鐐逛綅缃�
+        AgvBasDevp agvBasDevp = agvBasDevpService.selectEmptyDevpByStation(locDto.getAgvStaNo());
         if(Cools.isEmpty(agvBasDevp)){
-            //TODO 鍋囧鍑哄簱绔欑偣涓嶈冻锛岃褰曟湭鍑哄簱鐨勫簱浣嶏紱
+            //濡傛灉娌℃湁鎵惧埌绌虹珯鐐癸紝鍒欑敓鎴愬噯澶囦换鍔�
+            TaskDto taskDto = new TaskDto(locDto.getLocNo(), locDto.getAgvStaNo(), locDto);
+            agvTaskDtos.add(taskDto);
             return;
         }
-        agvBasDevp.setLocSts("S");
-        agvBasDevpService.updateById(agvBasDevp);
+//        agvBasDevp.setLocSts("S");
+//        agvBasDevpService.updateById(agvBasDevp);
+        agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvBasDevp.getDevNo(),"S",null);
         TaskDto taskDto = new TaskDto(locDto.getLocNo(), agvBasDevp.getDevNo(), locDto);
-        //TODO 鏆備笉鑰冭檻搴撲綅娣疯浇鐘舵�侊紙鍚庣画鐪嬫儏鍐垫槸鍚﹂渶瑕佸垽鏂級
         agvTaskDtos.add(taskDto);
 
     }
@@ -433,6 +311,7 @@
         if (!Cools.isEmpty(manLocDetl) && !(locDto.getAnfme()>manLocDetl.getAnfme())) {
             manLocDetl.setStatus(0);
             manLocDetlService.update(manLocDetl, new EntityWrapper<ManLocDetl>().eq("loc_no", manLocDetl.getLocNo()).eq("matnr",manLocDetl.getMatnr()));
+            //addPakOUT 鐢熸垚鎷h揣鍗曟垚鍔�
             if (addPakOUT(locDto).equals(R.ok())) {
                 Order order = orderService.selectByNo(locDto.getOrderNo());
                 if (Cools.isEmpty(order)){
diff --git a/src/main/java/com/zy/asrs/service/AgvBasDevpService.java b/src/main/java/com/zy/asrs/service/AgvBasDevpService.java
index e3798be..820691d 100644
--- a/src/main/java/com/zy/asrs/service/AgvBasDevpService.java
+++ b/src/main/java/com/zy/asrs/service/AgvBasDevpService.java
@@ -19,4 +19,6 @@
     public List<String> getAvailableEmptyInSite();
 
     public AgvBasDevp getByDevNo(String devNo);
+
+    public AgvBasDevp selectEmptyDevpByStation(String stationCode);
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java
index 9c4db97..e899743 100644
--- a/src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java
@@ -194,4 +194,11 @@
         return this.selectOne(new EntityWrapper<AgvBasDevp>().eq("dev_no",devNo));
     }
 
+    @Override
+    public AgvBasDevp selectEmptyDevpByStation(String stationCode) {
+        return this.selectOne(new EntityWrapper<AgvBasDevp>()
+                .eq("station_code", stationCode)
+                .eq("loc_sts", "O"));
+    }
+
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
index 1faa1fc..764889e 100644
--- a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
@@ -533,8 +533,10 @@
     鏇存柊婧愮珯鐐逛俊鎭�
      */
     private void updateAgvBasDevp(AgvBasDevp agvBasDevp, String locSts){
-        agvBasDevp.setLocSts(locSts);
-        agvBasDevpService.updateById(agvBasDevp);
+        if(!Cools.isEmpty(agvBasDevp)){
+            agvBasDevp.setLocSts(locSts);
+            agvBasDevpService.updateById(agvBasDevp);
+        }
     }
 
     /*
@@ -599,9 +601,6 @@
      */
     private AgvWrkMast createWrkMast(int ioType, long wrkSts, String sourceLocNo, String locNo, String barcode,  Date now, Long userId, boolean isConveyor){
         AgvWrkMast wrkMast = new AgvWrkMast();
-        //鐢熸垚宸ヤ綔鍙�
-//        int workNo = agvCommonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
-//        wrkMast.setWrkNo();
         //宸ヤ綔鐘舵��
         wrkMast.setWrkSts(wrkSts);
         //鍏ュ嚭搴撶被鍨�
@@ -617,15 +616,6 @@
         wrkMast.setBarcode(barcode);
         //鏍囪鏄惁涓鸿緭閫佺嚎鍏ュ簱
         wrkMast.setMk(isConveyor ? "Y" : "N");
-        // 婊℃澘锛歒
-        //wrkMast.setFullPlt("Y");
-        // 鎷f枡
-        //wrkMast.setPicking("N");
-        // 閫�鍑�
-        //wrkMast.setExitMk("N");
-        // 绌烘澘
-        //wrkMast.setEmptyMk("N");
-        //wrkMast.setLinkMis("N");
         wrkMast.setAppeUser(userId);
         wrkMast.setAppeTime(now);
         wrkMast.setModiUser(userId);
@@ -634,10 +624,6 @@
         if (!agvWrkMastService.insertByIncrease(wrkMast)) {
             throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
         }
-
-        int i = agvWrkMastService.selectCount(new EntityWrapper<AgvWrkMast>());
-        log.info(i + "");
-
 
         wrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", locNo).eq("source_loc_no",sourceLocNo));
 
diff --git a/src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java b/src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java
index 4063c5e..626410c 100644
--- a/src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java
+++ b/src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java
@@ -100,6 +100,7 @@
         List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectPage(new Page<>(1, 50)
                 ,new EntityWrapper<AgvWrkMast>()
                         .eq("wrk_sts", 21)
+                        .like("loc_no","@")
                         .andNew().eq("io_type", 101)
                         .or().eq("io_type", 103)
                         .or().eq("io_type", 11)
@@ -114,4 +115,20 @@
             }
         }
     }
+
+    /*
+    瀹氭椂澶勭悊绛夊緟鎵ц鐨勪换鍔� 宸ヤ綔鐘舵�佷负21.鐢熸垚鍑哄簱浠诲姟 涓旂洰鏍囧簱浣嶄腑涓嶅惈@瀛楃
+     */
+    @Scheduled(cron = "0/5 * * * * ? ")
+    public void dealWatiWrk(){
+        List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().eq("wrk_sts", 21).like(false, "loc_no", "@"));
+        if(!Cools.isEmpty(agvWrkMastList)){
+            try {
+                ReturnT<String> returnT = agvWrkMastHandler.dealWatiWrk(agvWrkMastList);
+            } catch (IOException e) {
+                log.error(e.getMessage());
+            }
+        }
+
+    }
 }
diff --git a/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java b/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java
index a616b3d..76a8c0f 100644
--- a/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java
@@ -4,10 +4,7 @@
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Cools;
 import com.core.exception.CoolException;
-import com.zy.asrs.entity.AgvLocDetl;
-import com.zy.asrs.entity.AgvWaitPakin;
-import com.zy.asrs.entity.AgvWrkDetl;
-import com.zy.asrs.entity.AgvWrkMast;
+import com.zy.asrs.entity.*;
 import com.zy.asrs.service.*;
 import com.zy.asrs.task.AbstractHandler;
 import com.zy.asrs.task.core.ReturnT;
@@ -25,23 +22,25 @@
 public class AgvWrkMastHandler extends AbstractHandler<String> {
 
     @Autowired
-    AgvWrkMastService agvWrkMastService;
+    private AgvWrkMastService agvWrkMastService;
     @Autowired
-    AgvLocMastService agvLocMastService;
+    private AgvLocMastService agvLocMastService;
     @Autowired
-    AgvLocDetlService agvLocDetlService;
+    private AgvLocDetlService agvLocDetlService;
     @Autowired
-    AgvWrkMastLogService agvWrkMastLogService;
+    private AgvWrkMastLogService agvWrkMastLogService;
     @Autowired
-    AgvWrkDetlService agvWrkDetlService;
+    private AgvWrkDetlService agvWrkDetlService;
     @Autowired
-    AgvWrkDetlLogService agvWrkDetlLogService;
+    private AgvWrkDetlLogService agvWrkDetlLogService;
     @Autowired
-    AgvWaitPakinService agvWaitPakinService;
+    private AgvWaitPakinService agvWaitPakinService;
     @Autowired
-    AgvWaitPakinLogService agvWaitPakinLogService;
+    private AgvWaitPakinLogService agvWaitPakinLogService;
     @Autowired
-    OrderService orderService;
+    private OrderService orderService;
+    @Autowired
+    private AgvBasDevpService agvBasDevpService;
 
     @Transactional
     public ReturnT<String> completedPutWayWrk(AgvWrkMast agvWrkMast) {
@@ -192,6 +191,21 @@
         return FAIL;
     }
 
+    public ReturnT<String> dealWatiWrk(List<AgvWrkMast> agvWrkMastList) throws IOException {
+
+        agvWrkMastList.forEach(agvWrkMast -> {
+            //瀵绘壘绌虹珯鐐逛綅缃�
+            AgvBasDevp agvBasDevp = agvBasDevpService.selectEmptyDevpByStation(agvWrkMast.getLocNo());
+            if(!Cools.isEmpty(agvBasDevp)){
+                agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvBasDevp.getDevNo(),"S",null);
+                agvWrkMast.setLocNo(agvBasDevp.getDevNo());
+                agvWrkMastService.updateById(agvWrkMast);
+            }
+        });
+
+        return SUCCESS;
+    }
+
     private String getOrderNoByWrkNo(int wrkNo){
         AgvWrkDetl agvWrkDetl = agvWrkDetlService.selectOne(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", wrkNo));
         if(Cools.isEmpty(agvWrkDetl)){

--
Gitblit v1.9.1