From b6681bc12173c1179d0185805ba461211472ac18 Mon Sep 17 00:00:00 2001
From: zwl <1051256694@qq.com>
Date: 星期日, 04 一月 2026 09:31:16 +0800
Subject: [PATCH] 1.完善出库任务呼叫agv 2.完善agv任务下发 3.等等

---
 src/main/java/com/zy/asrs/controller/MobileController.java |  430 ++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 390 insertions(+), 40 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/MobileController.java b/src/main/java/com/zy/asrs/controller/MobileController.java
index 1dedaf7..06df109 100644
--- a/src/main/java/com/zy/asrs/controller/MobileController.java
+++ b/src/main/java/com/zy/asrs/controller/MobileController.java
@@ -1,5 +1,6 @@
 package com.zy.asrs.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.mapper.Wrapper;
@@ -9,20 +10,28 @@
 import com.core.common.R;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
-import com.zy.asrs.entity.param.CombParam;
-import com.zy.asrs.entity.param.MobileAdjustParam;
-import com.zy.asrs.entity.param.OffSaleParam;
+import com.zy.asrs.entity.param.*;
 import com.zy.asrs.entity.result.MobileAdjustResult;
 import com.zy.asrs.mapper.ManLocDetlMapper;
 import com.zy.asrs.service.*;
+import com.zy.asrs.service.impl.OrderDetlPakinServiceImpl;
+import com.zy.asrs.service.impl.OrderDetlPakoutServiceImpl;
+import com.zy.asrs.service.impl.OrderPakinServiceImpl;
+import com.zy.asrs.service.impl.OrderPakoutServiceImpl;
+import com.zy.asrs.utils.OrderInAndOutUtil;
 import com.zy.common.model.WrkDto;
+import com.zy.common.utils.HttpHandler;
 import com.zy.common.web.BaseController;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
 import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
 import java.util.*;
-import java.util.List;
 
 /**
  * 绉诲姩绔帴鍙f帶鍒跺櫒
@@ -54,7 +63,95 @@
     private PackService packService;
     @Autowired
     private ManLocDetlMapper manLocDetlMapper;
+    @Autowired
+    private WrkDetlLogService wrkDetlLogService;
 
+    @Resource
+    private StaDescService staDescService;
+    @Autowired
+    private OrderPakinServiceImpl orderPakinService;
+    @Autowired
+    private TaskService taskService;
+    @Autowired
+    private OrderDetlPakinServiceImpl orderDetlPakinService;
+    @Autowired
+    private OrderPakoutServiceImpl orderPakoutService;
+    @Autowired
+    private OrderDetlPakoutServiceImpl orderDetlPakoutService;
+    @Value("${wcs.url}")
+    private String WCS_URL;
+
+    @RequestMapping("/pda/WarehouseOut/v1")
+    @ManagerAuth(memo = "骞舵澘閫斾腑鎷f枡-鍙傝�冨康鍒�")
+    public R WarehouseOutV1(@RequestBody CombParam combParam) {
+        return mobileService.WarehouseOutV1(combParam, getHostId(), getUserId());
+    }
+
+    @RequestMapping("/pda/WarehouseOutPickMerge/v1")
+    @ManagerAuth(memo = "鎷f枡閫斾腑骞舵澘")
+    public R WarehouseOutPickMergeV1(@RequestBody WarehouseOutPickMergeParam param) {
+        if (Cools.isEmpty(param,param.getLocNo(),param.getBarcode(),param.getCombMats())) {
+            return R.parse("鍙傛暟涓嶈兘涓虹┖锛�");
+        }
+        return mobileService.WarehouseOutPickMergeV1(param, getHostId(), getUserId());
+    }
+
+    @RequestMapping("/pick/in")
+    @ManagerAuth(memo = "骞舵澘鍏ュ簱")
+    public R pickConfirm(@RequestBody PickConfirmParam param) {
+
+        if(Cools.isEmpty(param,param.getList(),param.getLocNo(),param.getStaNo())) {
+            return R.parse("鍙傛暟涓嶅畬鏁�");
+        }
+        return mobileService.pickConfirm(param, getUserId());
+    }
+
+    @RequestMapping("/barcode/list/all")
+    @ManagerAuth(memo = "骞舵澘鍏ュ簱閫斾腑鎷f枡鍑哄簱鑾峰彇浠诲姟淇℃伅")
+    public R orderOutListOrder(@RequestParam(required = false) String barcode) {
+        return mobileService.orderOutListOrder(barcode, getUserId());
+    }
+
+    @RequestMapping("/barcode/list/pick")
+    @ManagerAuth(memo = "鎷f枡鍏ュ簱閫斾腑骞舵澘鑾峰彇浠诲姟淇℃伅")
+    public R orderOutListOrderPick(@RequestParam(required = false) String barcode) {
+        return mobileService.orderOutListOrderPick(barcode, getUserId());
+    }
+
+    @RequestMapping("/loc/f/list")
+    @ManagerAuth(memo = "鑾峰彇鍦ㄥ簱搴撲綅")
+    public R locNoF(@RequestParam(required = false) String locNo) {
+        Wrapper<LocMast> wrapper = new EntityWrapper<LocMast>()
+                .eq("loc_sts", "F");
+        if (!Cools.isEmpty(locNo)) {
+            wrapper.like("loc_no", locNo);
+        }
+        List<LocMast> list = locMastService.selectList(wrapper);
+        return R.ok().add(list);
+    }
+
+    @RequestMapping("/pick/sta/list")
+    @ManagerAuth(memo = "鑾峰彇骞舵澘绔�")
+    public R pickSta() {
+        List<StaDesc> list = staDescService.selectList(new EntityWrapper<StaDesc>()
+                .eq("type_no", 104));
+        return R.ok().add(list);
+    }
+
+    @RequestMapping("/pick/mat/list")
+    @ManagerAuth(memo = "鑾峰彇骞舵澘鐗╂枡")
+    public R pickMats(@RequestParam(required = false) String matnr, @RequestParam(required = false) String orderNo) {
+        return mobileService.pickMats(matnr, orderNo);
+    }
+
+    @PostMapping("/scan/order/mats")
+    @ManagerAuth(memo = "鎵爜鑾峰彇缁勬墭鐗╂枡")
+    public R scanMats(@RequestBody PakinMatsByQRParams params) {
+        if (Objects.isNull(params)) {
+            return R.parse("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        return mobileService.getMatsByQRcode(params);
+    }
 
     // 鍟嗗搧涓婃灦
     @RequestMapping("/mat/onSale/auth")
@@ -71,6 +168,35 @@
         return R.ok("涓嬫灦鎴愬姛");
     }
 
+
+    @GetMapping("/cache/locs")
+    @ManagerAuth
+    @ApiOperation("鑾峰彇缂撳瓨鍖哄簱浣嶄俊鎭�")
+    public R getCacheLocs() {
+        return mobileService.getCacheLocs();
+    }
+
+
+    @PostMapping("/cache/agv/call")
+    @ApiOperation("鍛煎彨AGV鎼繍")
+    @ManagerAuth
+    public R callAgvMove(@RequestBody AgvCallParams params) {
+        if (Objects.isNull(params)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        return mobileService.callAgvMove(params, getUserId());
+    }
+
+
+    @PostMapping("/cache/out/call")
+    @ApiOperation("鍛煎彨AGV鎼繍")
+    @ManagerAuth
+    public R OutCallAgv(@RequestBody AgvCallParams params) {
+        if (Objects.isNull(params)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        return mobileService.OutCallAgv(params, getUserId());
+    }
 
 
     // 缁勬墭 ----------------------------------------------------------------------------------------------------
@@ -102,44 +228,50 @@
     @RequestMapping("/order/search/orderNo/auth")
     @ManagerAuth
     public R orderSearchByBarcode(@RequestParam String orderNo){
-        if (Cools.isEmpty(orderNo)){
-            orderNo=null;
-        }
-        List<Order> orders = orderService.selectorderNoL(orderNo);
-        if (Cools.isEmpty(orders)){
+        OrderPakin orderPakin = orderPakinService.selectByNo(orderNo);
+        if (orderPakin == null) {
             return R.ok();
         }
-        LinkedList<CombParam> combParams = new LinkedList<>();
-        if (!Cools.isEmpty(orders)){
-            for (Order order:orders){
-                CombParam combParam=new CombParam();
-                if (order == null) {
-                    continue;
-                }
-                DocType docType = docTypeService.selectById(order.getDocType());
-                if (docType.getPakin() == null || docType.getPakin() != 1) {
-                    continue;
-                }
-                if (order.getSettle() > 2) {
-                    continue;
-                }
-                List<OrderDetl> orderDetls = orderService.selectWorkingDetls(order.getId());
-                if (!Cools.isEmpty(orderDetls)) {
-                    LinkedList<CombParam.CombMat> combMats = new LinkedList<>();
-                    for (OrderDetl orderDetl:orderDetls){
-                        CombParam.CombMat combMat = new CombParam.CombMat();
-                        combMat.setMatnr(orderDetl.getMatnr());
-                        combMat.setBatch(orderDetl.getBatch());
-                        combMat.setAnfme(orderDetl.getAnfme());
-                        combMats.add(combMat);
-                    }
-                    combParam.setCombMats(combMats);
-                }
-                combParam.setOrderNo(order.getOrderNo());
-                combParams.add(combParam);
-            }
+        DocType docType = docTypeService.selectById(orderPakin.getDocType());
+        if (docType.getPakin() != 1) {
+            return R.ok();
         }
-        return R.ok().add(combParams);
+
+        List<OrderDetlPakin> orderDetlPakins = orderPakinService.selectWorkingDetls(orderPakin.getId());
+        if (Cools.isEmpty(orderDetlPakins)) {
+            return R.ok();
+        }
+        List<OrderDetlPakin> orderDetls1= new ArrayList<>();
+        for (OrderDetlPakin orderDetl : orderDetlPakins) {
+            if(orderDetl.getAnfme()-orderDetl.getWorkQty()>0){
+                orderDetls1.add(orderDetl);
+            }
+
+        }
+        return R.ok().add(orderDetls1);
+    }
+
+    @RequestMapping("/order/search/orderNo/out/auth")
+    @ManagerAuth
+    public R orderSearchByBarcodeOut(@RequestParam String orderNo){
+        OrderPakout orderPakout = orderPakoutService.selectByNo(orderNo);
+        if (orderPakout == null) {
+            return R.ok();
+        }
+        DocType docType = docTypeService.selectById(orderPakout.getDocType());
+
+        List<OrderDetlPakout> orderDetlPakouts = orderPakoutService.selectWorkingDetls(orderPakout.getId());
+        if (Cools.isEmpty(orderDetlPakouts)) {
+            return R.ok();
+        }
+        List<OrderDetlPakout> orderDetls1= new ArrayList<>();
+        for (OrderDetlPakout orderDetl : orderDetlPakouts) {
+            if(orderDetl.getAnfme()-orderDetl.getWorkQty()>0){
+                orderDetls1.add(orderDetl);
+            }
+
+        }
+        return R.ok().add(orderDetls1);
     }
 
     @RequestMapping("/comb/auth")
@@ -215,6 +347,41 @@
         return R.ok();
     }
 
+    /**
+     * 鍑哄簱纭 - 鎵揣鐗�  骞垮痉瀹滅鐗�
+     * 1.鍏ㄦ澘 杩斿洖 101
+     * 2.鎷f枡 杩斿洖 103
+     */
+    @RequestMapping("/pakout/confirm/goods/auth")       //寰呭畬鍠�  鍘熷洜锛堝鎴锋湭缁欏嚭璇︾粏淇℃伅锛�
+    @ManagerAuth
+    public R pakoutQueryByGoods(@RequestBody GDYKConfirmGoodsParam combParam){
+        if (Cools.isEmpty(combParam)) {
+            return R.ok();
+        }
+//        List<Order> orders = orderService.selectorderNoL(batch);
+//        OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("matnr", combParam.getMatnr()).eq("batch", combParam.getBatch()).eq("order_no",combParam.getOrderNo()));
+        Order order = OrderInAndOutUtil.selectByNo(Boolean.FALSE, combParam.getOrderNo());
+        List<OrderDetl> orderDetlList = OrderInAndOutUtil.selectByOrderId(Boolean.FALSE, order.getId());
+        OrderDetl orderDetl = null;
+        for (OrderDetl orderDetl1 : orderDetlList){
+            if (combParam.getMatnr().equals(orderDetl1.getMatnr()) && combParam.getBatch().equals(orderDetl1.getBatch())){
+                orderDetl = orderDetl1;
+                break;
+            }
+        }
+        if (Cools.isEmpty(orderDetl)){
+            return R.error("鏈煡鍒版暟鎹�");
+        }
+        if (!orderDetl.getQty$().equals("宸插畬鎴�")){
+            return R.error("浠诲姟鏈畬鎴�");
+        }
+        //澶嶆牳鏁�
+        orderDetl.setSource(1);
+//        orderDetlService.updateById(orderDetl);
+        OrderInAndOutUtil.updateOrderDetl(Boolean.FALSE,order,orderDetl);
+        return R.ok();
+    }
+
     // 鏍规嵁搴撲綅鐮佸拰鍟嗗搧鐮佹悳绱㈠晢鍝�
     @RequestMapping("/mat/find/auth")
     public R find(@RequestParam(required = false) String locNo
@@ -231,7 +398,7 @@
     @RequestMapping("/pakout/confirm/pick/auth")
     @ManagerAuth
     public R pakoutQueryByBarcode(@RequestParam(required = false) Integer wrkNo
-                                , @RequestParam(required = false) String matnr){
+            , @RequestParam(required = false) String matnr){
         if (Cools.isEmpty(wrkNo)) {
             return R.ok();
         }
@@ -381,4 +548,187 @@
         return R.ok("鍑哄簱鎴愬姛");
     }
 
+    /**
+     * 琛ョ┖鏉�
+     *
+     * @param locNo 鐩爣绔欑偣
+     * @param size  鎵樼洏澶у皬 1锛氬皬鎵樼洏  2锛氬ぇ鎵樼洏
+     * @return
+     */
+    // pda鍛煎彨绌烘枡妗嗗嚭搴�
+    @PostMapping("/callEmptyBinOutBound")
+    @ManagerAuth(memo = "pda鍛煎彨绌烘枡妗嗗嚭搴�")
+    public synchronized R callEmptyBinOutBound(@RequestParam(required = false) String locNo
+            , @RequestParam(required = false) String size) {
+        if (Cools.isEmpty(locNo) || Cools.isEmpty(size)) {
+            return R.error("绔欑偣鎴栬�呭ぇ灏忎笉鑳戒负绌�");
+        }
+        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 110).eq("memo", locNo));
+        if (wrkMast != null) {
+            return R.error("璇ョ珯鐐�="+locNo+"宸茬粡鏈夌┖鏉垮嚭搴撲换鍔★紝涓轰簡涓嶅牭濉炲爢鍨涙満鎺ラ┏绔欑偣锛岀姝笅鍙戝涓┖鏉垮嚭搴撲换鍔�");
+        }
+        return mobileService.callEmptyBinOutBound(locNo,size,getUserId());
+    }
+
+    /**
+     * 绌烘澘鍥炲簱鎴栬�呮嫞鏂欏洖搴�
+     *
+     * @param sourceStaNo
+     * @param staNo
+     * @return
+     */
+    @RequestMapping("/AGVStartReturn")
+    public synchronized R AGVStartReturn(@RequestParam(required = false) String sourceStaNo
+            , @RequestParam(required = false) String staNo
+            , @RequestParam(required = false) String taskNo) {
+        if (Cools.isEmpty(sourceStaNo) || Cools.isEmpty(staNo)) {
+            return R.error("婧愮珯鐐瑰拰鎵樼洏鐮佷笉鑳戒负绌�");
+        }
+        List<Task> tasks = taskService.selectList(new EntityWrapper<Task>().eq("source_sta_no", sourceStaNo).eq("barcode", staNo));
+        if (tasks.size() > 0) {
+            return R.error("璇ユ墭鐩�="+staNo+"宸茬粡瀛樺湪鎼繍浠诲姟锛岃涓嶈閲嶅涓嬪彂");
+        }
+
+        String barcode = staNo.substring(0,1);
+        if(barcode.equals("3")){
+            taskNo = "307";
+        }else if(barcode.equals("4")){
+            taskNo = "402";
+        }else if(barcode.equals("5")){
+            taskNo = "401";
+        }
+
+        R r = R.ok();
+        //鐢熸垚AGV鎼繍鍑哄簱浠诲姟
+        // 淇濆瓨宸ヤ綔妗�
+        Task task = new Task();
+        Date date = new Date();
+        String TaskNo = 555555 + "aa" + date.getTime();
+        task.setWrkNo((int) date.getTime())
+                .setTaskNo(TaskNo)
+                .setIoTime(date)
+                .setWrkSts(301L) // 宸ヤ綔鐘舵�侊細301.浠诲姟涓嬪彂
+                .setIoType(3) // 鍏ュ嚭搴撶姸鎬侊細 3.绔欏埌绔�  4.绔欏埌鍖哄煙
+                .setTaskType("agv")
+                .setIoPri(10D)
+                .setFullPlt("Y") // 婊℃澘锛歒
+                .setPicking("N") // 鎷f枡
+                .setExitMk("N")// 閫�鍑�
+                .setStaNo(taskNo)
+                .setSourceStaNo(sourceStaNo)//agv鍙栬揣绔欑偣
+                .setEmptyMk("N")// 绌烘澘
+                .setBarcode(staNo)// 鎵樼洏鐮�
+                .setLinkMis("N")
+                .setAppeUser(9945L)
+                .setAppeTime(date)
+                .setModiUser(9945L)
+                .setModiTime(date);
+        if (!taskService.insert(task)) {
+            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+        }
+
+        return r;
+    }
+
+    @RequestMapping("/orderIn")
+    public synchronized R AGVOrderInReturn() {
+        List<OrderPakin> settle = orderPakinService.selectList(new EntityWrapper<OrderPakin>().in("settle", 1, 2));
+        List<String> list = new ArrayList<>();
+        for (OrderPakin orderPakin : settle) {
+            if (orderPakin.getSettle()==2){
+                List<OrderDetlPakin> orderId = orderDetlPakinService.selectList(new EntityWrapper<OrderDetlPakin>().eq("order_id", orderPakin.getId()));
+                Boolean boo=true;
+                for (OrderDetlPakin orderDetlPakin : orderId) {
+                    if (orderDetlPakin.getAnfme()>orderDetlPakin.getWorkQty()){
+                        boo=false;
+                        break;
+                    }
+                }
+                if (boo) {
+                    settle.remove(orderPakin);
+                }else {
+                    list.add(orderPakin.getOrderNo());
+                }
+            }else {
+                list.add(orderPakin.getOrderNo());
+            }
+        }
+        return R.ok(list);
+    }
+
+    @RequestMapping("/orderOut")
+    public synchronized R AGVOrderOutReturn() {
+        List<OrderPakout> settle = orderPakoutService.selectList(new EntityWrapper<OrderPakout>().in("settle", 1, 2).eq("doc_type",11));
+        List<String> list = new ArrayList<>();
+        for (OrderPakout orderPakout: settle) {
+            if (orderPakout.getSettle()==2){
+                List<OrderDetlPakout> orderId = orderDetlPakoutService.selectList(new EntityWrapper<OrderDetlPakout>().eq("order_id", orderPakout.getId()));
+                Boolean boo=true;
+                for (OrderDetlPakout orderDetlPakout: orderId) {
+                    if (orderDetlPakout.getAnfme()>orderDetlPakout.getWorkQty()){
+                        boo=false;
+                        break;
+                    }
+                }
+                if (boo) {
+                    settle.remove(orderPakout);
+                }else {
+                    list.add(orderPakout.getOrderNo());
+                }
+            }else {
+                list.add(orderPakout.getOrderNo());
+            }
+        }
+        return R.ok(list);
+    }
+
+    /**
+     * 杈撻�佺嚎浠诲姟涓嬪彂
+     * @return
+     */
+
+    @RequestMapping("/toInSta")
+    public synchronized R AGVOrderOutReturn(@RequestParam(required = false) Integer staNo) {
+        BasDevp devNo = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", staNo));
+        if (Cools.isEmpty(devNo)) {
+            return R.error("娌℃湁璇ョ珯鐐�");
+        }
+        //鏌ョ湅鏄惁宸茬粡涓嬪彂浠诲姟锛屾垨鑰呭凡缁忔湁鍑哄簱浠诲姟姝e湪杩愯绂佹缁欒緭閫佷笅涓嬪彂浠诲姟
+        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().in("io_type", 101, 103).eq("wrk_sts",12));
+        if (!Cools.isEmpty(wrkMast)) {
+            return R.error("褰撳墠杈撻�佺嚎鏈夊爢鍨涙満姝e湪浣滀笟绂佹鍏ュ簱");
+        }
+        Integer wrkNo = 0;
+        switch (staNo) {
+            case 301: wrkNo = 9991; break;
+            case 302: wrkNo = 9992; break;
+            case 303: wrkNo = 9993; break;
+            case 304: wrkNo = 9994; break;
+            case 305: wrkNo = 9995; break;
+            case 306: wrkNo = 9996; break;
+            case 307: wrkNo = 9997; break;
+        }
+        try {
+            HashMap<String,Object> hashMap=new HashMap<>();
+            hashMap.put("staNo",staNo);
+            hashMap.put("wrkNo",wrkNo);
+            String response = new HttpHandler.Builder()
+                    .setUri(WCS_URL)
+                    .setPath("/open/toInSta")
+                    .setJson(JSON.toJSONString(hashMap))
+                    .build()
+                    .doPost();
+            JSONObject jsonObject = JSON.parseObject(response);
+            if (jsonObject.getInteger("code").equals(200)) {
+            } else {
+                return  R.error(jsonObject.getString("msg"));
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+        }
+        return R.ok(staNo);
+    }
+
+
 }

--
Gitblit v1.9.1