From 33590e66e814b1c2e025e038410ef0006f4f38f7 Mon Sep 17 00:00:00 2001
From: cp <513960435@qq.com>
Date: 星期一, 21 十月 2024 16:37:55 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/nbncasrs' into nbncasrs

---
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/OrderController.java                                 |    8 
 zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/entity/param/WarehouseOutPickMergeParam.java      |   20 ++
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/OrderDetlController.java                             |   51 +++++
 zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/entity/dto/PickMergeOrderDto.java                 |   16 +
 zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/MobileService.java                            |    4 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/MobileController.java                                |   38 +++
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/MatController.java                                   |   41 ++++
 zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/entity/dto/MergeBoardManyDto.java                 |   17 +
 zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/entity/dto/PickMergeDto.java                      |   17 +
 zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/entity/param/WarehouseOutMergeBoardManyParam.java |   17 +
 zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/OrderService.java                             |    1 
 zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/MobileServiceImpl.java                   |  295 +++++++++++++++++++++++++++++
 zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/OrderServiceImpl.java                    |   33 +++
 13 files changed, 550 insertions(+), 8 deletions(-)

diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/entity/dto/MergeBoardManyDto.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/entity/dto/MergeBoardManyDto.java
new file mode 100644
index 0000000..e225a83
--- /dev/null
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/entity/dto/MergeBoardManyDto.java
@@ -0,0 +1,17 @@
+package com.zy.asrs.common.openapi.entity.dto;
+
+import com.zy.asrs.common.wms.entity.WrkDetl;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class MergeBoardManyDto {
+
+    private Double originAnfme;
+
+    private WrkDetl wrkDetl;
+
+    private List<PickMergeOrderDto> orders;
+
+}
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/entity/dto/PickMergeDto.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/entity/dto/PickMergeDto.java
new file mode 100644
index 0000000..f1f057e
--- /dev/null
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/entity/dto/PickMergeDto.java
@@ -0,0 +1,17 @@
+package com.zy.asrs.common.openapi.entity.dto;
+
+import com.zy.asrs.common.wms.entity.LocDetl;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class PickMergeDto {
+
+    private Double originAnfme;
+
+    private LocDetl locDetl;
+
+    private List<PickMergeOrderDto> orders;
+
+}
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/entity/dto/PickMergeOrderDto.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/entity/dto/PickMergeOrderDto.java
new file mode 100644
index 0000000..9f8dfd1
--- /dev/null
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/entity/dto/PickMergeOrderDto.java
@@ -0,0 +1,16 @@
+package com.zy.asrs.common.openapi.entity.dto;
+
+import lombok.Data;
+
+@Data
+public class PickMergeOrderDto {
+
+    private String orderNo;
+
+    private Double anfme;
+
+    public PickMergeOrderDto(String orderNo, Double anfme) {
+        this.orderNo = orderNo;
+        this.anfme = anfme;
+    }
+}
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/entity/param/WarehouseOutMergeBoardManyParam.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/entity/param/WarehouseOutMergeBoardManyParam.java
new file mode 100644
index 0000000..c6794e6
--- /dev/null
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/entity/param/WarehouseOutMergeBoardManyParam.java
@@ -0,0 +1,17 @@
+package com.zy.asrs.common.openapi.entity.param;
+
+import com.zy.asrs.common.wms.entity.OrderDetl;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class WarehouseOutMergeBoardManyParam {
+
+    // 鎵樼洏鐮�
+    private String barcode;
+
+    //缁勬墭鐗╂枡
+    private List<OrderDetl> combMats;
+
+}
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/entity/param/WarehouseOutPickMergeParam.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/entity/param/WarehouseOutPickMergeParam.java
new file mode 100644
index 0000000..bdaa031
--- /dev/null
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/entity/param/WarehouseOutPickMergeParam.java
@@ -0,0 +1,20 @@
+package com.zy.asrs.common.openapi.entity.param;
+
+import com.zy.asrs.common.wms.entity.OrderDetl;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class WarehouseOutPickMergeParam {
+
+    // 鍗曟嵁缂栧彿
+    private String orderNo;
+
+    // 搴撲綅缂栧彿
+    private String locNo;
+
+    //缁勬墭鐗╂枡
+    private List<OrderDetl> combMats;
+
+}
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/MobileService.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/MobileService.java
index 48271d1..261db2d 100644
--- a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/MobileService.java
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/MobileService.java
@@ -2,6 +2,8 @@
 
 import com.zy.asrs.common.domain.param.MobileAdjustParam;
 import com.zy.asrs.common.openapi.entity.param.CombParam;
+import com.zy.asrs.common.openapi.entity.param.WarehouseOutMergeBoardManyParam;
+import com.zy.asrs.common.openapi.entity.param.WarehouseOutPickMergeParam;
 import com.zy.asrs.framework.common.R;
 
 public interface MobileService {
@@ -20,4 +22,6 @@
 
     R WarehouseOut(CombParam combParam, Long hostId);
     R WarehouseOutV1(CombParam combParam, Long hostId);
+    R WarehouseOutPickMergeV1(WarehouseOutPickMergeParam param, Long hostId);
+    R WarehouseOutMergeBoardMany(WarehouseOutMergeBoardManyParam param, Long hostId);
 }
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/OrderService.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/OrderService.java
index 160e422..3bd6353 100644
--- a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/OrderService.java
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/OrderService.java
@@ -24,6 +24,7 @@
     void checkComplete(String orderNo, Long hostId);
 
 
+    List<OrderNameListDto> selectAllCombOrderNo(Long hostId);
     List<OrderNameListDto> selectAllorderNo(Long hostId);
     List<String> selectAllOutOrderNo(String orderNo,Long hostId);
 
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/MobileServiceImpl.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/MobileServiceImpl.java
index 057e514..1637675 100644
--- a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/MobileServiceImpl.java
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/MobileServiceImpl.java
@@ -3,7 +3,12 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.zy.asrs.common.domain.dto.DetlDto;
 import com.zy.asrs.common.domain.param.MobileAdjustParam;
+import com.zy.asrs.common.openapi.entity.dto.MergeBoardManyDto;
+import com.zy.asrs.common.openapi.entity.dto.PickMergeDto;
+import com.zy.asrs.common.openapi.entity.dto.PickMergeOrderDto;
 import com.zy.asrs.common.openapi.entity.param.CombParam;
+import com.zy.asrs.common.openapi.entity.param.WarehouseOutMergeBoardManyParam;
+import com.zy.asrs.common.openapi.entity.param.WarehouseOutPickMergeParam;
 import com.zy.asrs.common.wms.entity.*;
 import com.zy.asrs.common.wms.mapper.LocDetlMapper;
 import com.zy.asrs.common.wms.service.*;
@@ -20,10 +25,7 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
+import java.util.*;
 
 /**
  * 绉诲姩绔湇鍔℃牳蹇冪被
@@ -52,6 +54,8 @@
     private LocDetlService locDetlService;
     @Autowired
     private WaitPakinLogService waitPakinLogService;
+    @Autowired
+    private AdjDetlService adjDetlService;
 
     @Override
     @Transactional
@@ -157,7 +161,7 @@
                 waitPakin.setAppeTime(now);
                 waitPakin.setModiUser(userId);
                 waitPakin.setModiTime(now);
-                waitPakin.setOwner(param.getOwner());
+                waitPakin.setOwner(Optional.ofNullable(param.getOwner()).orElse(""));
                 if (!waitPakinService.save(waitPakin)) {
                     throw new CoolException("淇濆瓨鍏ュ簱閫氱煡妗eけ璐�");
                 }
@@ -451,7 +455,16 @@
             }
             try {
                 //澶勭悊搴撳瓨淇℃伅
+                AdjDetl adjDetl = new AdjDetl();
+                adjDetl.setLocNo(locDetl.getLocNo());
+                adjDetl.setMatnr(locDetl.getMatnr());
+                adjDetl.setBatch(locDetl.getBatch());
+                adjDetl.setOriQty(locDetl.getAnfme());
+                adjDetl.setMemo("WarehouseOutV1-pick");
+                adjDetl.setModiTime(new Date());
+
                 if (combMat.getAnfme().equals(locDetl.getAnfme())){
+                    adjDetl.setAdjQty(0D);
                     //搴撳瓨鐩哥瓑鍒犻櫎鏁版嵁
                     locDetlService.removeById(locDetl);
                     int count = locDetlService.count(new LambdaQueryWrapper<LocDetl>().eq(LocDetl::getLocNo,combParam.getLocno()).eq(LocDetl::getHostId, hostId));
@@ -464,6 +477,11 @@
                     BigDecimal subtract = BigDecimal.valueOf(locDetl.getAnfme()).subtract(BigDecimal.valueOf(combMat.getAnfme()));
                     locDetl.setAnfme(subtract.doubleValue());
                     locDetlService.updateById(locDetl);
+                    adjDetl.setAdjQty(subtract.doubleValue());
+                }
+
+                if (!adjDetlService.save(adjDetl)) {
+                    throw new CoolException("淇濆瓨搴撳瓨璋冩暣璁板綍澶辫触");
                 }
             }catch (Exception e){
                 throw new CoolException("鏇存柊搴撳瓨鏁版嵁鍑洪敊"+e.getMessage());
@@ -471,4 +489,271 @@
         }
         return R.ok();
     }
+
+    @Override
+    @Transactional
+    public R WarehouseOutPickMergeV1(WarehouseOutPickMergeParam param, Long hostId) {
+        //鍒ゆ柇搴撲綅鐘舵��
+        LocMast locMast = locMastService.getOne(new LambdaQueryWrapper<LocMast>().eq(LocMast::getLocNo, param.getLocNo()).eq(LocMast::getHostId,hostId).eq(LocMast::getWhsType,0L));
+        if (Cools.isEmpty(locMast)){
+            return R.error("璇ュ簱浣嶄笉瀛樺湪");
+        }
+        if (!locMast.getLocSts().equals("P")){
+            return R.error("璇ュ簱浣嶇姸鎬佷负锛�"+locMast.getLocSts()+",涓嶆弧瓒虫嫞鏂欓�斾腑骞舵澘鏉′欢锛侊紒锛�");
+        }
+
+        HashMap<String, OrderDetl> mapData = new HashMap<>();
+        for (OrderDetl orderDetl : param.getCombMats()) {
+            String key = orderDetl.getMatnr();
+            if (!Cools.isEmpty(orderDetl.getBatch())) {
+                key += "_" + orderDetl.getBatch();
+            }
+
+            OrderDetl value = mapData.get(key);
+            if(value == null){
+                mapData.put(key, orderDetl);
+            }else {
+                value.setAnfme(value.getAnfme() + orderDetl.getAnfme());
+                mapData.put(key, value);
+            }
+        }
+
+        List<LocDetl> locDetls = locDetlService.list(new LambdaQueryWrapper<LocDetl>().eq(LocDetl::getLocNo, locMast.getLocNo()));
+
+        HashMap<String, PickMergeDto> locData = new HashMap<>();
+        for (LocDetl locDetl : locDetls) {
+            String matKey = locDetl.getMatnr();
+            if (!Cools.isEmpty(locDetl.getBatch())) {
+                matKey += "_" + locDetl.getBatch();
+            }
+
+            PickMergeDto dto = new PickMergeDto();
+            dto.setOriginAnfme(locDetl.getAnfme());
+            dto.setLocDetl(locDetl);
+            dto.setOrders(new ArrayList<>());
+            locData.put(matKey, dto);
+        }
+
+        for (Map.Entry<String, OrderDetl> entry : mapData.entrySet()) {
+            OrderDetl orderDetl = entry.getValue();
+            LocDetl locDetl = new LocDetl();
+            locDetl.sync(orderDetl);
+            locDetl.setId(null);
+            locDetl.setLocNo(param.getLocNo());
+            locDetl.setBarcode(locMast.getBarcode());
+
+            String matKey = locDetl.getMatnr();
+            if (!Cools.isEmpty(locDetl.getBatch())) {
+                matKey += "_" + locDetl.getBatch();
+            }
+
+            PickMergeDto dto = locData.get(matKey);
+            if (dto == null) {
+                ArrayList<PickMergeOrderDto> orders = new ArrayList<>();
+                orders.add(new PickMergeOrderDto(locDetl.getOrderNo(), locDetl.getAnfme()));
+
+                dto = new PickMergeDto();
+                dto.setOriginAnfme(locDetl.getAnfme());
+                dto.setLocDetl(locDetl);
+                dto.setOrders(orders);
+
+                locData.put(matKey, dto);
+            }else {
+                LocDetl detl = dto.getLocDetl();
+                List<PickMergeOrderDto> orders = dto.getOrders();
+
+                detl.setAnfme(detl.getAnfme() + locDetl.getAnfme());
+                orders.add(new PickMergeOrderDto(locDetl.getOrderNo(), locDetl.getAnfme()));
+
+                dto.setLocDetl(detl);
+                dto.setOrders(orders);
+
+                locData.put(matKey, dto);
+            }
+        }
+
+
+        for (Map.Entry<String, PickMergeDto> entry : locData.entrySet()) {
+            PickMergeDto dto = entry.getValue();
+
+            Double originAnfme = dto.getOriginAnfme();
+            LocDetl locDetl = dto.getLocDetl();
+            List<PickMergeOrderDto> orders = dto.getOrders();
+
+            if (locDetl.getId() == null) {
+                if (!locDetlService.save(locDetl)) {
+                    throw new CoolException("骞舵澘搴撳瓨鎻掑叆澶辫触");
+                }
+            }else {
+                if (!locDetlService.updateById(locDetl)) {
+                    throw new CoolException("骞舵澘搴撳瓨鏇存柊澶辫触");
+                }
+            }
+
+            if (!orders.isEmpty()){
+                for (PickMergeOrderDto orderDto : orders) {
+                    Order order = orderService.selectByNo(orderDto.getOrderNo(), hostId);
+                    if (Cools.isEmpty(order)){
+                        continue;
+                    }
+                    if (order.getSettle() == 1){
+                        orderService.updateSettle(order.getId(), 2L, 9527L, hostId);
+                    }
+                    OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), locDetl.getMatnr(), locDetl.getBatch(),hostId);
+                    if (Cools.isEmpty(orderDetl)){
+                        continue;
+                    }
+                    if (orderDetl.getAnfme() < (orderDetl.getWorkQty() + orderDto.getAnfme())) {
+                        throw new CoolException("鎷i�夋暟閲忓嚭閿�,璁㈠崟鍓╀綑鍑哄簱鏁伴噺灏忎簬宸插嚭搴撴暟閲忎笌灏嗘嫞閫夋暟閲忎箣鍜岋紒锛侊紒");
+                    }
+                    // 淇敼璁㈠崟鏄庣粏浣滀笟鏁伴噺
+                    if (!orderDetlService.increaseWorkQtyByOrderNo(orderDto.getOrderNo(), locDetl.getMatnr(), locDetl.getBatch(), orderDto.getAnfme(), hostId)) {
+                        throw new CoolException("淇敼鍗曟嵁鏄庣粏宸ヤ綔鏁伴噺澶辫触");
+                    }
+                    // 淇敼璁㈠崟鏄庣粏瀹屾垚鏁伴噺
+                    if (!orderDetlService.increase(order.getId(), hostId, locDetl.getMatnr(), locDetl.getBatch(), orderDto.getAnfme())) {
+                        throw new CoolException("淇敼鍗曟嵁鏄庣粏瀹屾垚鏁伴噺澶辫触");
+                    }
+                    // 淇敼璁㈠崟鐘舵�� 浣滀笟涓� ===>> 宸插畬鎴�
+                    orderService.checkComplete(orderDto.getOrderNo(), hostId);
+                }
+            }
+
+            try {
+                //澶勭悊搴撳瓨淇℃伅
+                AdjDetl adjDetl = new AdjDetl();
+                adjDetl.setLocNo(locDetl.getLocNo());
+                adjDetl.setMatnr(locDetl.getMatnr());
+                adjDetl.setBatch(locDetl.getBatch());
+                adjDetl.setOriQty(originAnfme);
+                adjDetl.setAdjQty(locDetl.getAnfme());
+                adjDetl.setMemo("WarehouseOutV1-pick");
+                adjDetl.setModiTime(new Date());
+
+                if (!adjDetlService.save(adjDetl)) {
+                    throw new CoolException("淇濆瓨搴撳瓨璋冩暣璁板綍澶辫触");
+                }
+            }catch (Exception e){
+                e.printStackTrace();
+                throw new CoolException("鏇存柊搴撳瓨鏁版嵁鍑洪敊" + e.getMessage());
+            }
+        }
+        return R.ok();
+    }
+
+    @Override
+    @Transactional
+    public R WarehouseOutMergeBoardMany(WarehouseOutMergeBoardManyParam param, Long hostId) {
+        WrkMast wrkMast = wrkMastService.selectByBarcode(param.getBarcode(), hostId);
+        if (wrkMast == null) {
+            throw new CoolException("宸ヤ綔妗d笉瀛樺湪");
+        }
+
+        if (wrkMast.getIoType() != 104) {
+            throw new CoolException("宸ヤ綔绫诲瀷涓嶅睘浜庡苟鏉垮嚭搴�");
+        }
+
+        if (wrkMast.getWrkSts() != 199) {
+            throw new CoolException("宸ヤ綔鐘舵�佷笉婊¤冻澶氭骞舵澘鍏ュ簱鐘舵��");
+        }
+
+        List<WrkDetl> wrkDetls = wrkDetlService.list(new LambdaQueryWrapper<WrkDetl>().eq(WrkDetl::getWrkNo, wrkMast.getWrkNo()));
+
+        HashMap<String, MergeBoardManyDto> wrkData = new HashMap<>();
+        for (WrkDetl wrkDetl : wrkDetls) {
+            String matKey = wrkDetl.getMatnr();
+            if (!Cools.isEmpty(wrkDetl.getBatch())) {
+                matKey += "_" + wrkDetl.getBatch();
+            }
+
+            MergeBoardManyDto dto = new MergeBoardManyDto();
+            dto.setOriginAnfme(wrkDetl.getAnfme());
+            dto.setWrkDetl(wrkDetl);
+            dto.setOrders(new ArrayList<>());
+            wrkData.put(matKey, dto);
+        }
+
+        for (OrderDetl orderDetl : param.getCombMats()) {
+            String matKey = orderDetl.getMatnr();
+            if (!Cools.isEmpty(orderDetl.getBatch())) {
+                matKey += "_" + orderDetl.getBatch();
+            }
+
+            MergeBoardManyDto dto = wrkData.get(matKey);
+            if(dto == null){
+                WrkDetl wrkDetl = new WrkDetl();
+                wrkDetl.sync(orderDetl);
+                wrkDetl.setId(null);
+                wrkDetl.setWrkNo(wrkMast.getWrkNo());
+                wrkDetl.setWrkMastId(wrkMast.getId());
+                wrkDetl.setIoTime(new Date());
+
+                ArrayList<PickMergeOrderDto> orderDtos = new ArrayList<>();
+                orderDtos.add(new PickMergeOrderDto(orderDetl.getOrderNo(), orderDetl.getAnfme()));
+
+                dto = new MergeBoardManyDto();
+                dto.setOriginAnfme(orderDetl.getAnfme());
+                dto.setWrkDetl(wrkDetl);
+                dto.setOrders(orderDtos);
+            }else {
+                WrkDetl wrkDetl = dto.getWrkDetl();
+                List<PickMergeOrderDto> orders = dto.getOrders();
+
+                wrkDetl.setAnfme(wrkDetl.getAnfme() + orderDetl.getAnfme());
+                orders.add(new PickMergeOrderDto(orderDetl.getOrderNo(), orderDetl.getAnfme()));
+
+                dto.setWrkDetl(wrkDetl);
+                dto.setOrders(orders);
+            }
+
+            wrkData.put(matKey, dto);
+        }
+
+        for (Map.Entry<String, MergeBoardManyDto> entry : wrkData.entrySet()) {
+            MergeBoardManyDto dto = entry.getValue();
+            List<PickMergeOrderDto> orders = dto.getOrders();
+            WrkDetl wrkDetl = dto.getWrkDetl();
+
+            if (wrkDetl.getId() == null) {
+                if (!wrkDetlService.save(wrkDetl)) {
+                    throw new CoolException("澶氭骞舵澘鎻掑叆宸ヤ綔鏄庣粏澶辫触");
+                }
+            }else {
+                if (!wrkDetlService.updateById(wrkDetl)) {
+                    throw new CoolException("澶氭骞舵澘鏇存柊宸ヤ綔鏄庣粏澶辫触");
+                }
+            }
+
+            if (!orders.isEmpty()){
+                for (PickMergeOrderDto orderDto : orders) {
+                    Order order = orderService.selectByNo(orderDto.getOrderNo(), hostId);
+                    if (Cools.isEmpty(order)){
+                        continue;
+                    }
+                    if (order.getSettle() == 1){
+                        orderService.updateSettle(order.getId(), 2L, 9527L, hostId);
+                    }
+                    OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), wrkDetl.getMatnr(), wrkDetl.getBatch(),hostId);
+                    if (Cools.isEmpty(orderDetl)){
+                        continue;
+                    }
+                    if (orderDetl.getAnfme() < (orderDetl.getWorkQty() + orderDto.getAnfme())) {
+                        throw new CoolException("鎷i�夋暟閲忓嚭閿�,璁㈠崟鍓╀綑鍑哄簱鏁伴噺灏忎簬宸插嚭搴撴暟閲忎笌灏嗘嫞閫夋暟閲忎箣鍜岋紒锛侊紒");
+                    }
+                    // 淇敼璁㈠崟鏄庣粏浣滀笟鏁伴噺
+                    if (!orderDetlService.increaseWorkQtyByOrderNo(orderDto.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), orderDto.getAnfme(), hostId)) {
+                        throw new CoolException("淇敼鍗曟嵁鏄庣粏宸ヤ綔鏁伴噺澶辫触");
+                    }
+                    // 淇敼璁㈠崟鏄庣粏瀹屾垚鏁伴噺
+                    if (!orderDetlService.increase(order.getId(), hostId, wrkDetl.getMatnr(), wrkDetl.getBatch(), orderDto.getAnfme())) {
+                        throw new CoolException("淇敼鍗曟嵁鏄庣粏瀹屾垚鏁伴噺澶辫触");
+                    }
+                    // 淇敼璁㈠崟鐘舵�� 浣滀笟涓� ===>> 宸插畬鎴�
+                    orderService.checkComplete(orderDto.getOrderNo(), hostId);
+                }
+            }
+        }
+
+        return R.ok();
+    }
 }
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/OrderServiceImpl.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/OrderServiceImpl.java
index ccbd2b3..e44cfac 100644
--- a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/OrderServiceImpl.java
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/OrderServiceImpl.java
@@ -166,8 +166,33 @@
     }
 
     @Override
+    public List<OrderNameListDto> selectAllCombOrderNo(Long hostId) {
+        List<Order> list = list(new LambdaQueryWrapper<Order>().eq(Order::getHostId, hostId).orderByDesc(Order::getCreateTime));
+        if (Cools.isEmpty(list)){
+            return null;
+        }
+        ArrayList<OrderNameListDto> orderNameListDtos = new ArrayList<>();
+        for (Order order :list){
+            DocType docType = docTypeService.getOne(new LambdaQueryWrapper<DocType>().eq(DocType::getDocId, order.getDocType()));
+
+            if (order.getSettle() >= 4) {
+                continue;
+            }
+
+            if (docType.getPakin() == 1){
+                OrderNameListDto orderNameListDto = new OrderNameListDto();
+                orderNameListDto.setOrder_no(order.getOrderNo());
+                orderNameListDtos.add(orderNameListDto);
+            }
+        }
+
+        return orderNameListDtos;
+
+    }
+
+    @Override
     public List<OrderNameListDto> selectAllorderNo(Long hostId) {
-        List<Order> list = list(new LambdaQueryWrapper<Order>().eq(Order::getHostId, hostId));
+        List<Order> list = list(new LambdaQueryWrapper<Order>().eq(Order::getHostId, hostId).orderByDesc(Order::getCreateTime));
         if (Cools.isEmpty(list)){
             return null;
         }
@@ -191,10 +216,12 @@
         List<Order> list = list(new LambdaQueryWrapper<Order>()
                 .eq(Order::getHostId, hostId)
                 .like(Order::getOrderNo, orderNo)
+                .orderByDesc(Order::getCreateTime)
         );
         if (Cools.isEmpty(orderNo) || orderNo.isEmpty()){
             list = list(new LambdaQueryWrapper<Order>()
                     .eq(Order::getHostId, hostId)
+                    .orderByDesc(Order::getCreateTime)
             );
         }
         if (Cools.isEmpty(list)){
@@ -204,6 +231,10 @@
         for (Order order :list){
             DocType docType = docTypeService.getOne(new LambdaQueryWrapper<DocType>().eq(DocType::getDocId, order.getDocType()));
 
+            if (order.getSettle() >= 4) {
+                continue;
+            }
+
             if (docType.getPakout() == 1){
                 orderNameListDtos.add(order.getOrderNo());
             }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/MatController.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/MatController.java
index ddce902..d3ac1d2 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/MatController.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/MatController.java
@@ -5,8 +5,12 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.zy.asrs.common.utils.TreeUtils;
+import com.zy.asrs.common.wms.entity.LocDetl;
+import com.zy.asrs.common.wms.entity.LocMast;
 import com.zy.asrs.common.wms.entity.Mat;
 import com.zy.asrs.common.wms.entity.OrderDetl;
+import com.zy.asrs.common.wms.service.LocDetlService;
+import com.zy.asrs.common.wms.service.LocMastService;
 import com.zy.asrs.common.wms.service.MatService;
 import com.zy.asrs.framework.annotations.ManagerAuth;
 import com.zy.asrs.framework.common.Cools;
@@ -27,6 +31,10 @@
     private MatService matService;
     @Autowired
     private TreeUtils treeUtils;
+    @Autowired
+    private LocDetlService locDetlService;
+    @Autowired
+    private LocMastService locMastService;
 
     @RequestMapping(value = "/mat/{id}/auth")
     @ManagerAuth
@@ -201,4 +209,37 @@
         return R.ok().add(matService.page(new Page<>(curr, limit), wrapper));
     }
 
+    @RequestMapping(value = "/mat/pad/search")
+    @ManagerAuth
+    public R padSearch(@RequestParam("matnr") String matnr) {
+        List<Mat> list = matService.list(new LambdaQueryWrapper<Mat>()
+                .like(Mat::getMatnr, matnr)
+                .eq(Mat::getHostId, getHostId()));
+        if (list.isEmpty()){
+            return R.error("鏈煡璇㈠埌鐩稿叧鐗╂枡");
+        }
+        return R.ok(list);
+    }
+
+    @RequestMapping(value = "/mat/pad/searchLoc")
+    @ManagerAuth
+    public R padSearchLoc(@RequestParam("matnr") String matnr) {
+        List<LocDetl> list = locDetlService.list(new LambdaQueryWrapper<LocDetl>().eq(LocDetl::getMatnr, matnr).eq(LocDetl::getHostId, getHostId()));
+
+        ArrayList<LocDetl> locDetls = new ArrayList<>();
+        for (LocDetl locDetl : list) {
+            LocMast one = locMastService.getOne(new LambdaQueryWrapper<LocMast>().eq(LocMast::getLocNo, locDetl.getLocNo()).eq(LocMast::getHostId, locDetl.getHostId()));
+            if (one == null) {
+                continue;
+            }
+
+            if (!one.getLocSts().equals("F")) {
+                continue;
+            }
+
+            locDetls.add(locDetl);
+        }
+        return R.ok(locDetls);
+    }
+
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/MobileController.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/MobileController.java
index 8249d61..b7a2f30 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/MobileController.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/MobileController.java
@@ -10,6 +10,8 @@
 import com.zy.asrs.common.domain.param.PickConfirmParam;
 import com.zy.asrs.common.domain.param.PickMatParam;
 import com.zy.asrs.common.openapi.entity.param.CombParam;
+import com.zy.asrs.common.openapi.entity.param.WarehouseOutMergeBoardManyParam;
+import com.zy.asrs.common.openapi.entity.param.WarehouseOutPickMergeParam;
 import com.zy.asrs.common.sys.service.StaDescService;
 import com.zy.asrs.common.web.BaseController;
 import com.zy.asrs.common.wms.entity.*;
@@ -80,6 +82,18 @@
     @ManagerAuth
     public R WarehouseOutV1(@RequestBody CombParam combParam){
         return mobileService.WarehouseOutV1(combParam,getHostId());
+    }
+
+    @RequestMapping("/pda/WarehouseOutPickMerge/v1")
+    @ManagerAuth
+    public R WarehouseOutPickMergeV1(@RequestBody WarehouseOutPickMergeParam param){
+        return mobileService.WarehouseOutPickMergeV1(param, getHostId());
+    }
+
+    @RequestMapping("/pda/WarehouseOutMergeBoardMany/v1")
+    @ManagerAuth
+    public R WarehouseOutMergeBoardManyV1(@RequestBody WarehouseOutMergeBoardManyParam param){
+        return mobileService.WarehouseOutMergeBoardMany(param, getHostId());
     }
 
     @RequestMapping("/menu/pda/auth")
@@ -574,4 +588,28 @@
         return R.ok().add(wrkMastArrayList);
     }
 
+    @RequestMapping("/barcode/list/pick")
+    @ManagerAuth(memo = "鎷f枡鍏ュ簱閫斾腑骞舵澘")
+    @Transactional
+    public R orderOutListOrderPick(@RequestBody String barcode) {
+        ArrayList<WrkMast> wrkMastArrayList = new ArrayList<>();
+        if (Cools.isEmpty(barcode) || barcode.isEmpty()){
+            List<WrkMast> wrkMasts = wrkMastService.list(new LambdaQueryWrapper<WrkMast>()
+                    .eq(WrkMast::getHostId, getHostId())
+                    .eq(WrkMast::getWrkSts, 199L)
+                    .eq(WrkMast::getIoType, 103));
+            wrkMastArrayList.addAll(wrkMasts);
+        } else {
+            List<WrkMast> wrkMasts = wrkMastService.list(new LambdaQueryWrapper<WrkMast>()
+                    .like(WrkMast::getBarcode, barcode)
+                    .eq(WrkMast::getHostId, getHostId())
+                    .eq(WrkMast::getWrkSts, 199L)
+                    .eq(WrkMast::getIoType, 103)
+            );
+            wrkMastArrayList.addAll(wrkMasts);
+        }
+
+        return R.ok().add(wrkMastArrayList);
+    }
+
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/OrderController.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/OrderController.java
index f659893..b49cbb0 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/OrderController.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/OrderController.java
@@ -57,7 +57,7 @@
     @RequestMapping(value = "/order/list/orderNo")
     public R orderListorderNo(@RequestParam String orderNo) {
         //鏁伴噺淇敼鎴愪负瀹屾垚鏁伴噺
-        List<OrderDetl> orderDetl1=orderDetlService.list(new LambdaQueryWrapper<OrderDetl>().eq(OrderDetl::getOrderNo,orderNo));
+        List<OrderDetl> orderDetl1 = orderDetlService.list(new LambdaQueryWrapper<OrderDetl>().eq(OrderDetl::getOrderNo, orderNo));
         List<OrderDetl> orderDetls= new ArrayList<OrderDetl>();
         for (OrderDetl o: orderDetl1) {
             BigDecimal c1 = new BigDecimal(o.getEnableQty()).setScale(2,BigDecimal.ROUND_HALF_UP);
@@ -76,6 +76,12 @@
         return R.ok(orderService.selectAllorderNo(getHostId()));
     }
 
+    @RequestMapping(value = "/order/comb/list/all")
+    @ManagerAuth
+    public R orderListComb() {
+        return R.ok(orderService.selectAllCombOrderNo(getHostId()));
+    }
+
 //    @RequestMapping(value = "/outOrder/list/all")
 //    @ManagerAuth
 //    public R orderOutList() {
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/OrderDetlController.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/OrderDetlController.java
index b552720..9b88462 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/OrderDetlController.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/OrderDetlController.java
@@ -99,11 +99,60 @@
         if (orderDetlList.size()>1){
             return R.error("姝よ鍗曟鐗╂枡鏁版嵁鏁版嵁澶т簬1鏉★紝涓轰繚璇佹暟鎹噯纭�э紝璇风敤姝e父娴佺▼鍑哄簱锛侊紒锛�");
         }
+        ArrayList<OrderDetl> orderDetls = new ArrayList<>();
         for(OrderDetl orderDetl:orderDetlList){
             double count = orderDetl.getAnfme() - orderDetl.getWorkQty();
+            if (count <= 0D) {
+                continue;
+            }
             orderDetl.setAnfme(count);
+            orderDetls.add(orderDetl);
         }
-        return R.ok(orderDetlList);
+        return R.ok(orderDetls);
+    }
+
+    @RequestMapping(value = "/orderDetl/forOrderNo/mergePakin/v1")
+    @ManagerAuth
+    public R forOrderNoMergePakinV1(@RequestParam String orderNo) {
+        List<DocType> docTypes = docTypeService.list(new LambdaQueryWrapper<DocType>().eq(DocType::getPakin, 1));
+        ArrayList<Long> docTypeIds = new ArrayList<>();
+        for (DocType docType : docTypes) {
+            docTypeIds.add(docType.getDocId());
+        }
+
+        if (docTypeIds.isEmpty()) {
+            return R.error("鍗曟嵁绫诲瀷涓嶅瓨鍦�");
+        }
+
+        List<Order> orders = orderService.list(new LambdaQueryWrapper<Order>().in(Order::getDocType, docTypeIds).in(Order::getSettle, 0, 1, 2));
+        if (orders.isEmpty()) {
+            return R.error("鏈煡璇㈠埌璁㈠崟");
+        }
+
+        ArrayList<Long> orderIds = new ArrayList<>();
+        for (Order order : orders) {
+            orderIds.add(order.getId());
+        }
+
+        List<OrderDetl> orderDetlList = orderDetlService.list(new LambdaQueryWrapper<OrderDetl>()
+                .eq(OrderDetl::getHostId, getHostId())
+                .in(OrderDetl::getOrderId, orderIds)
+                .like(OrderDetl::getOrderNo, orderNo)
+        );
+        if (Cools.isEmpty(orderDetlList)){
+            return R.error("鏈煡璇㈠埌姝よ鍗曟鐗╂枡鏁版嵁");
+        }
+
+        ArrayList<OrderDetl> orderDetls = new ArrayList<>();
+        for(OrderDetl orderDetl:orderDetlList){
+            double count = orderDetl.getAnfme() - orderDetl.getWorkQty();
+            if (count <= 0D) {
+                continue;
+            }
+            orderDetl.setAnfme(count);
+            orderDetls.add(orderDetl);
+        }
+        return R.ok(orderDetls);
     }
 
 

--
Gitblit v1.9.1