From 4467a17cc4d92a5cbcbe1a617d7dad588461ceed Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期四, 04 一月 2024 16:33:42 +0800
Subject: [PATCH] #

---
 zy-asrs-common/src/main/java/com/zy/asrs/common/wms/entity/WrkMast.java                  |    6 
 zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/OrderDetlMapper.java          |    2 
 zy-asrs-common/src/main/java/com/zy/asrs/common/domain/param/MobileAdjustParam.java      |   20 +
 zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/MobileService.java           |   18 +
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/MobileController.java               |  269 ++++++++++++++++++++++
 zy-asrs-common/src/main/java/com/zy/asrs/common/wms/entity/OrderDetl.java                |    7 
 zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/WrkDetlMapper.java            |    8 
 zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/WrkDetlService.java          |    6 
 zy-asrs-common/src/main/java/com/zy/asrs/common/domain/entity/MobileAdjustResult.java    |   20 +
 zy-asrs-common/src/main/java/com/zy/asrs/common/wms/entity/WrkMastLog.java               |    6 
 zy-asrs-common/src/main/java/com/zy/asrs/common/domain/dto/WrkDto.java                   |   26 ++
 zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/WrkMastService.java          |    2 
 zy-asrs-common/src/main/resources/mapper/wms/OrderDetlMapper.xml                         |    7 
 zy-asrs-common/src/main/resources/mapper/wms/WrkDetlMapper.xml                           |   42 +++
 zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/OrderService.java            |    3 
 zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/entity/param/CombParam.java      |    3 
 zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/MobileServiceImpl.java  |  225 ++++++++++++++++++
 zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/WrkDetlServiceImpl.java |   19 +
 zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/WrkMastServiceImpl.java |   10 
 zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/OrderServiceImpl.java   |    5 
 20 files changed, 701 insertions(+), 3 deletions(-)

diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/domain/dto/WrkDto.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/domain/dto/WrkDto.java
new file mode 100644
index 0000000..e353eb5
--- /dev/null
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/domain/dto/WrkDto.java
@@ -0,0 +1,26 @@
+package com.zy.asrs.common.domain.dto;
+
+import com.zy.asrs.common.wms.entity.WrkDetl;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by vincent on 2022/5/13
+ */
+@Data
+public class WrkDto {
+
+    private Integer wrkNo;
+
+    private List<WrkDetl> wrkDetls = new ArrayList<>();
+
+    public WrkDto() {
+    }
+
+    public WrkDto(Integer wrkNo, WrkDetl wrkDetl) {
+        this.wrkNo = wrkNo;
+        this.wrkDetls .add(wrkDetl);
+    }
+}
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/domain/entity/MobileAdjustResult.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/domain/entity/MobileAdjustResult.java
new file mode 100644
index 0000000..6175d5a
--- /dev/null
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/domain/entity/MobileAdjustResult.java
@@ -0,0 +1,20 @@
+package com.zy.asrs.common.domain.entity;
+
+import com.zy.asrs.common.wms.entity.WrkDetl;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * Created by vincent on 2022/4/13
+ */
+@Data
+public class MobileAdjustResult {
+
+    private Integer staNo;
+
+    private Integer wrkNo;
+
+    private List<WrkDetl> wrkDetls;
+
+}
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/domain/param/MobileAdjustParam.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/domain/param/MobileAdjustParam.java
new file mode 100644
index 0000000..11610a4
--- /dev/null
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/domain/param/MobileAdjustParam.java
@@ -0,0 +1,20 @@
+package com.zy.asrs.common.domain.param;
+
+import com.zy.asrs.common.wms.entity.WrkDetl;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * Created by vincent on 2022/4/13
+ */
+@Data
+public class MobileAdjustParam {
+
+    private Integer staNo;
+
+    private Integer wrkNo;
+
+    private List<WrkDetl> wrkDetls;
+
+}
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/entity/param/CombParam.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/entity/param/CombParam.java
index 9af7847..13642e6 100644
--- a/zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/entity/param/CombParam.java
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/openapi/entity/param/CombParam.java
@@ -22,9 +22,6 @@
     //缁勬墭鐗╂枡
     private List<CombMat> combMats;
 
-    //浠撳簱ID
-    private Long hostId;
-
     @Data
     public static class CombMat {
 
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/entity/OrderDetl.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/entity/OrderDetl.java
index 9cc0db0..417cba5 100644
--- a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/entity/OrderDetl.java
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/entity/OrderDetl.java
@@ -478,6 +478,13 @@
         return null;
     }
 
+    public Double getEnableQty() {
+        if (null != this.anfme && this.qty != null) {
+            return this.anfme - this.qty;
+        }
+        return null;
+    }
+
     public void sync(Object source) {
         Synchro.Copy(source, this);
     }
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/entity/WrkMast.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/entity/WrkMast.java
index 042e7ab..80e9f1a 100644
--- a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/entity/WrkMast.java
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/entity/WrkMast.java
@@ -180,6 +180,12 @@
     @ApiModelProperty(value= "鎺堟潈鍟嗘埛")
     private Long hostId;
 
+    @ApiModelProperty(value= "oveMk")
+    private String oveMk;
+
+    @ApiModelProperty(value= "invWh")
+    private String invWh;
+
     public WrkMast() {}
 
     public WrkMast(Integer wrkNo,Long wrkSts,Integer ioType,Double ioPri,String locNo,Integer staNo,Integer sourceStaNo,String sourceLocNo,String picking,String exitMk,Integer pltType,String emptyMk,Date ioTime,Integer ctnType,String modiUser,Date modiTime,String appeUser,Date appeTime,Date errorTime,String errorMemo,String manuType,String memo,String barcode,String fullPlt,Long hostId) {
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/entity/WrkMastLog.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/entity/WrkMastLog.java
index f328b2b..d996070 100644
--- a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/entity/WrkMastLog.java
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/entity/WrkMastLog.java
@@ -179,6 +179,12 @@
     @ApiModelProperty(value= "鎺堟潈鍟嗘埛")
     private Long hostId;
 
+    @ApiModelProperty(value= "oveMk")
+    private String oveMk;
+
+    @ApiModelProperty(value= "invWh")
+    private String invWh;
+
     public WrkMastLog() {}
 
     public WrkMastLog(Long id,Integer wrkNo,Long wrkSts,Integer ioType,Double ioPri,String locNo,Integer staNo,Integer sourceStaNo,String sourceLocNo,String picking,String exitMk,Integer pltType,String emptyMk,Date ioTime,Integer ctnType,String modiUser,Date modiTime,String appeUser,Date appeTime,Date errorTime,String errorMemo,String manuType,String memo,String barcode,String fullPlt,Long hostId) {
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/OrderDetlMapper.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/OrderDetlMapper.java
index 76ed994..56add91 100644
--- a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/OrderDetlMapper.java
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/OrderDetlMapper.java
@@ -15,6 +15,8 @@
 @Repository
 public interface OrderDetlMapper extends BaseMapper<OrderDetl> {
 
+    List<OrderDetl> selectWorkingDetls(Long orderId);
+
     OrderDetl selectItem(@Param("orderId") Long orderId, @Param("matnr") String matnr, @Param("batch") String batch);
 
     IPage<OrderDetl> getPakoutPage(Page<OrderDetl> page ,Map<String, Object> map);
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/WrkDetlMapper.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/WrkDetlMapper.java
index b6cff65..72b45c6 100644
--- a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/WrkDetlMapper.java
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/WrkDetlMapper.java
@@ -18,4 +18,12 @@
 
     List<WrkDetl> selectAndLogByOrderNo(String orderNo, Long hostId);
 
+    List<WrkDetl> selectPakoutQuery(@Param("staNo") Integer staNo, @Param("matnr") String matnr, @Param("hostId") Long hostId);
+
+    int updateInspect(@Param("wrkNo") Integer wrkNo, @Param("matnr") String matnr, @Param("batch") String batch, @Param("hostId") Long hostId);
+
+    int deleteItem(@Param("wrkNo") Integer wrkNo, @Param("matnr") String matnr, @Param("batch") String batch, @Param("hostId") Long hostId);
+
+    int updateAnfme(@Param("anfme") Double anfme, @Param("wrkNo") Integer wrkNo, @Param("matnr") String matnr, @Param("batch") String batch, @Param("hostId") Long hostId);
+
 }
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
new file mode 100644
index 0000000..5a3c79b
--- /dev/null
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/MobileService.java
@@ -0,0 +1,18 @@
+package com.zy.asrs.common.wms.service;
+
+import com.zy.asrs.common.domain.param.MobileAdjustParam;
+import com.zy.asrs.common.openapi.entity.param.CombParam;
+
+public interface MobileService {
+
+    /**
+     * 缁勬墭
+     */
+    void comb(CombParam param, Long userId, Long hostId);
+
+    /**
+     * 鐩樼偣
+     */
+    void adjust(MobileAdjustParam param, Long userId, 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 83c9bb0..13b876c 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
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.zy.asrs.common.wms.entity.Order;
+import com.zy.asrs.common.wms.entity.OrderDetl;
 import com.zy.asrs.common.wms.entity.WrkDetl;
 import com.zy.asrs.common.wms.entity.WrkMast;
 
@@ -9,6 +10,8 @@
 
 public interface OrderService extends IService<Order> {
 
+    List<OrderDetl> selectWorkingDetls(Long orderId);
+
     void updateOrder1(Long orderId,Long userId);
 
     Order selectByNo(String orderNo, Long hostId);
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/WrkDetlService.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/WrkDetlService.java
index 05d51da..aecceaa 100644
--- a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/WrkDetlService.java
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/WrkDetlService.java
@@ -13,4 +13,10 @@
 
     List<WrkDetl> selectAndLogByOrderNo(String orderNo, Long hostId);
 
+    List<WrkDetl> selectPakoutQuery(Integer staNo, String matnr, Long hostId);
+
+    boolean updateInspect(Integer wrkNo, String matnr, String batch, Long hostId);
+
+    boolean updateAnfme(Double anfme, Integer wrkNo, String matnr, String batch, Long hostId);
+
 }
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/WrkMastService.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/WrkMastService.java
index e867856..dd3ad57 100644
--- a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/WrkMastService.java
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/WrkMastService.java
@@ -11,4 +11,6 @@
 
     List<WrkMast> selectToBeHistoryData();
 
+    WrkMast selectByBarcode(String barcode, 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
new file mode 100644
index 0000000..9aaacf0
--- /dev/null
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/MobileServiceImpl.java
@@ -0,0 +1,225 @@
+package com.zy.asrs.common.wms.service.impl;
+
+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.param.CombParam;
+import com.zy.asrs.common.wms.entity.*;
+import com.zy.asrs.common.wms.service.*;
+import com.zy.asrs.framework.common.BaseRes;
+import com.zy.asrs.framework.common.Cools;
+import com.zy.asrs.framework.exception.CoolException;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * 绉诲姩绔湇鍔℃牳蹇冪被
+ */
+@Slf4j
+@Service
+public class MobileServiceImpl implements MobileService {
+
+    @Autowired
+    private WaitPakinService waitPakinService;
+    @Autowired
+    private MatService matService;
+    @Autowired
+    private OrderService orderService;
+    @Autowired
+    private OrderDetlService orderDetlService;
+    @Autowired
+    private BasDevpService basDevpService;
+    @Autowired
+    private WrkMastService wrkMastService;
+    @Autowired
+    private WrkDetlService wrkDetlService;
+
+    @Override
+    @Transactional
+    public void comb(CombParam param, Long userId, Long hostId) {
+        if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) {
+            throw new CoolException(BaseRes.PARAM);
+        }
+        // 鍒ゆ柇鏄惁鏈夌浉鍚屾潯鐮佺殑鏁版嵁
+        if (waitPakinService.count(new LambdaQueryWrapper<WaitPakin>().
+                eq(WaitPakin::getZpallet, param.getBarcode()).eq(WaitPakin::getIoStatus, "N")) > 0) {
+            throw new CoolException(param.getBarcode() + "鏁版嵁姝e湪杩涜鍏ュ簱");
+        }
+        Date now = new Date();
+
+        // 鏃犲崟缁勬墭
+        if (Cools.isEmpty(param.getOrderNo())) {
+
+            // 鐢熸垚鍏ュ簱閫氱煡妗�
+            List<DetlDto> detlDtos = new ArrayList<>();
+            param.getCombMats().forEach(elem -> {
+                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme());
+                if (DetlDto.has(detlDtos, detlDto)) {
+                    DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch());
+                    assert one != null;
+                    one.setAnfme(one.getAnfme() + detlDto.getAnfme());
+                } else {
+                    detlDtos.add(detlDto);
+                }
+            });
+
+
+            for (DetlDto detlDto : detlDtos) {
+                Mat mat = matService.getOne(new LambdaQueryWrapper<Mat>().eq(Mat::getMatnr, detlDto.getMatnr()).eq(Mat::getHostId, hostId));
+                if (Cools.isEmpty(mat)) {
+                    throw new CoolException(detlDto.getMatnr() + "鍟嗗搧妗f涓嶅瓨鍦�");
+                }
+                WaitPakin waitPakin = new WaitPakin();
+                waitPakin.sync(mat);
+                waitPakin.setBatch(detlDto.getBatch());
+                waitPakin.setZpallet(param.getBarcode());   // 鎵樼洏鐮�
+                waitPakin.setIoStatus("N");     // 鍏ュ嚭鐘舵��
+                waitPakin.setAnfme(detlDto.getAnfme());  // 鏁伴噺
+                waitPakin.setStatus("Y");    // 鐘舵��
+                waitPakin.setAppeUser(userId);
+                waitPakin.setAppeTime(now);
+                waitPakin.setModiUser(userId);
+                waitPakin.setModiTime(now);
+                if (!waitPakinService.save(waitPakin)) {
+                    throw new CoolException("淇濆瓨鍏ュ簱閫氱煡妗eけ璐�");
+                }
+            }
+            // 鍏宠仈缁勬墭
+        } else {
+            Order order = orderService.selectByNo(param.getOrderNo(), hostId);
+            if (order.getSettle() > 2) {
+                throw new CoolException("鍗曟嵁缂栧彿宸茶繃鏈�");
+            }
+            // 鐢熸垚鍏ュ簱閫氱煡妗�
+            List<DetlDto> detlDtos = new ArrayList<>();
+            param.getCombMats().forEach(elem -> {
+
+                // 璁㈠崟鏄庣粏鏁伴噺鏍¢獙
+                OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), elem.getMatnr(), elem.getBatch());
+                if (elem.getAnfme() > orderDetl.getEnableQty()) {
+                    throw new CoolException(orderDetl.getMatnr() + "鍏ュ簱鏁伴噺涓嶅悎娉�");
+                }
+                // 淇敼璁㈠崟鏄庣粏鏁伴噺
+                if (!orderDetlService.increase(order.getId(), hostId, elem.getMatnr(), elem.getBatch(), elem.getAnfme())) {
+                    throw new CoolException("淇敼鍗曟嵁鏄庣粏鏁伴噺澶辫触");
+                }
+
+                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme());
+                if (DetlDto.has(detlDtos, detlDto)) {
+                    DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch());
+                    assert one != null;
+                    one.setAnfme(one.getAnfme() + detlDto.getAnfme());
+                } else {
+                    detlDtos.add(detlDto);
+                }
+            });
+            for (DetlDto detlDto : detlDtos) {
+                Mat mat = matService.getOne(new LambdaQueryWrapper<Mat>().eq(Mat::getMatnr, detlDto.getMatnr()).eq(Mat::getHostId, hostId));
+                if (Cools.isEmpty(mat)) {
+                    throw new CoolException(detlDto.getMatnr() + "鍟嗗搧妗f涓嶅瓨鍦�");
+                }
+                WaitPakin waitPakin = new WaitPakin();
+                waitPakin.sync(mat);
+                waitPakin.setOrderNo(order.getOrderNo());   // 鍗曟嵁缂栧彿
+                waitPakin.setBatch(detlDto.getBatch());     // 搴忓垪鐮�
+                waitPakin.setZpallet(param.getBarcode());   // 鎵樼洏鐮�
+                waitPakin.setIoStatus("N");     // 鍏ュ嚭鐘舵��
+                waitPakin.setAnfme(detlDto.getAnfme());  // 鏁伴噺
+                waitPakin.setStatus("Y");    // 鐘舵��
+                waitPakin.setAppeUser(userId);
+                waitPakin.setAppeTime(now);
+                waitPakin.setModiUser(userId);
+                waitPakin.setModiTime(now);
+                if (!waitPakinService.save(waitPakin)) {
+                    throw new CoolException("淇濆瓨鍏ュ簱閫氱煡妗eけ璐�");
+                }
+            }
+            orderService.updateSettle(order.getId(), 2L, userId, hostId);
+        }
+
+    }
+
+    @Override
+    public void adjust(MobileAdjustParam param, Long userId, Long hostId) {
+        BasDevp basDevp = basDevpService.getOne(new LambdaQueryWrapper<BasDevp>().eq(BasDevp::getDevNo, param.getStaNo()).eq(BasDevp::getHostId, hostId));
+        if (null == basDevp || basDevp.getWrkNo() == null) {
+            throw new CoolException(param.getStaNo() + "鐩樼偣绔欐棤鏁�");
+        }
+        if (!param.getWrkNo().equals(basDevp.getWrkNo())) {
+            throw new CoolException(param.getStaNo() + "鐩樼偣绔欐洿鏂帮紝璇烽噸鏂版绱�");
+        }
+        WrkMast wrkMast = wrkMastService.getOne(new LambdaQueryWrapper<WrkMast>().eq(WrkMast::getWrkNo, param.getWrkNo()).eq(WrkMast::getHostId, hostId));
+        if (wrkMast.getWrkSts() < 10) {
+            throw new CoolException("鐩樼偣鏃犳晥锛屼换鍔″凡鐩樼偣鍐嶅叆搴�");
+        }
+        Date now = new Date();
+        List<WrkDetl> wrkDetls = wrkDetlService.list(new LambdaQueryWrapper<WrkDetl>().eq(WrkDetl::getWrkNo, wrkMast.getWrkNo()).eq(WrkDetl::getHostId, hostId));
+
+        List<WrkDetl> list = param.getWrkDetls();
+
+        // 淇敼鏁伴噺
+        Iterator<WrkDetl> iterator = wrkDetls.iterator();
+        while (iterator.hasNext()) {
+            WrkDetl wrkDetl = iterator.next();
+            Iterator<WrkDetl> iterator1 = list.iterator();
+            while (iterator1.hasNext()) {
+                WrkDetl wrkDetl1 = iterator1.next();
+                if (wrkDetl1.getAnfme() == 0) {
+                    iterator1.remove();
+                }
+                if (wrkDetl.getMatnr().equals(wrkDetl1.getMatnr()) && Cools.eq(wrkDetl.getBatch(), wrkDetl1.getBatch())) {
+                    if (!wrkDetl.getAnfme().equals(wrkDetl1.getAnfme())) {
+                        // todo 鐩樼偣璁板綍銆佷繚瀛樿皟鏁磋褰�
+                        // 淇敼鏄庣粏
+                        if (!wrkDetlService.updateAnfme(wrkDetl1.getAnfme(), wrkMast.getWrkNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), hostId)) {
+                            throw new CoolException(wrkMast.getWrkNo() + "鐩樼偣浠诲姟锛�" + wrkDetl.getMatnr() + "鍟嗗搧锛�" + wrkDetl.getBatch() + "搴忓垪鐮佷慨鏀规暟閲忓け璐�");
+                        }
+                    }
+                    iterator.remove();
+                    iterator1.remove();
+                }
+            }
+        }
+
+        // 鍒犻櫎鏄庣粏
+        for (WrkDetl wrkDetl : wrkDetls) {
+            // todo 鐩樼偣璁板綍銆佷繚瀛樿皟鏁磋褰�
+            if (!wrkDetlService.updateAnfme(-1.0D, wrkMast.getWrkNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), hostId)) {
+                throw new CoolException("鍒犻櫎" + wrkMast.getWrkNo() + "鐩樼偣浠诲姟锛�" + wrkDetl.getMatnr() + "鍟嗗搧锛�" + wrkDetl.getBatch() + "搴忓垪鐮佷换鍔℃槑缁嗗け璐�");
+            }
+        }
+
+        // 娣诲姞鏄庣粏
+        for (WrkDetl wrkDetl : list) {
+            if (wrkDetl.getAnfme() == 0.0D) { continue; }
+            // todo 鐩樼偣璁板綍銆佷繚瀛樿皟鏁磋褰�
+            String orderNo = wrkDetl.getOrderNo();
+            Mat mat = matService.getOne(new LambdaQueryWrapper<Mat>().eq(Mat::getMatnr, wrkDetl.getMatnr()).eq(Mat::getHostId, hostId));
+            wrkDetl.sync(mat);
+            wrkDetl.setOrderNo(orderNo);
+            wrkDetl.setModiTime(now);
+            wrkDetl.setModiUser(userId);
+            wrkDetl.setAppeTime(now);
+            wrkDetl.setAppeUser(userId);
+            if (!wrkDetlService.save(wrkDetl)) {
+                throw new CoolException("娣诲姞" + wrkMast.getWrkNo() + "鐩樼偣浠诲姟锛�" + wrkDetl.getMatnr() + "鍟嗗搧锛�" + wrkDetl.getBatch() + "搴忓垪鐮佷换鍔℃槑缁嗗け璐�");
+            }
+        }
+
+        // 淇敼鐩樼偣浠诲姟涓绘。鐘舵��
+        wrkMast.setFullPlt(wrkDetlService.count(new LambdaQueryWrapper<WrkDetl>().eq(WrkDetl::getWrkNo, wrkMast.getWrkNo()).eq(WrkDetl::getHostId, hostId)) != 0 ? "Y" : "N");
+        wrkMast.setModiTime(now);
+        wrkMast.setModiUser(String.valueOf(userId));
+        if (!wrkMastService.updateById(wrkMast)) {
+            throw new CoolException("淇敼鐩樼偣浠诲姟涓绘。澶辫触");
+        }
+
+    }
+}
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 61e4b7d..1428c9a 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
@@ -36,6 +36,11 @@
     private DocTypeService docTypeService;
 
     @Override
+    public List<OrderDetl> selectWorkingDetls(Long orderId) {
+        return orderDetlMapper.selectWorkingDetls(orderId);
+    }
+
+    @Override
     public void updateOrder1(Long orderId,Long userId) {
         this.baseMapper.updateOrder1(orderId, userId);
     }
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/WrkDetlServiceImpl.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/WrkDetlServiceImpl.java
index da46700..ba3aafb 100644
--- a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/WrkDetlServiceImpl.java
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/WrkDetlServiceImpl.java
@@ -25,4 +25,23 @@
     public List<WrkDetl> selectAndLogByOrderNo(String orderNo, Long hostId) {
         return this.baseMapper.selectAndLogByOrderNo(orderNo, hostId);
     }
+
+    @Override
+    public List<WrkDetl> selectPakoutQuery(Integer staNo, String matnr, Long hostId) {
+        return this.baseMapper.selectPakoutQuery(staNo, matnr, hostId);
+    }
+
+    @Override
+    public boolean updateInspect(Integer wrkNo, String matnr, String batch, Long hostId) {
+        return this.baseMapper.updateInspect(wrkNo, matnr, batch, hostId) > 0;
+    }
+
+    @Override
+    public boolean updateAnfme(Double anfme, Integer wrkNo, String matnr, String batch, Long hostId) {
+        if (anfme <= 0) {
+            return this.baseMapper.deleteItem(wrkNo, matnr, batch, hostId) > 0;
+        } else {
+            return baseMapper.updateAnfme(anfme, wrkNo, matnr, batch, hostId) > 0;
+        }
+    }
 }
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/WrkMastServiceImpl.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/WrkMastServiceImpl.java
index 23c9f88..fa411da 100644
--- a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/WrkMastServiceImpl.java
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/WrkMastServiceImpl.java
@@ -1,9 +1,11 @@
 package com.zy.asrs.common.wms.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.zy.asrs.common.wms.mapper.WrkMastMapper;
 import com.zy.asrs.common.wms.entity.WrkMast;
 import com.zy.asrs.common.wms.service.WrkMastService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zy.asrs.framework.common.Cools;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -21,4 +23,12 @@
         return this.baseMapper.selectToBeHistoryData();
     }
 
+    @Override
+    public WrkMast selectByBarcode(String barcode, Long hostId) {
+        List<WrkMast> wrkMasts = this.list(new LambdaQueryWrapper<WrkMast>().eq(WrkMast::getBarcode, barcode).eq(WrkMast::getHostId, hostId));
+        if (Cools.isEmpty(wrkMasts)) {
+            return null;
+        }
+        return wrkMasts.get(0);
+    }
 }
diff --git a/zy-asrs-common/src/main/resources/mapper/wms/OrderDetlMapper.xml b/zy-asrs-common/src/main/resources/mapper/wms/OrderDetlMapper.xml
index e9eefa3..e8a6247 100644
--- a/zy-asrs-common/src/main/resources/mapper/wms/OrderDetlMapper.xml
+++ b/zy-asrs-common/src/main/resources/mapper/wms/OrderDetlMapper.xml
@@ -17,6 +17,13 @@
         </if>
     </sql>
 
+    <select id="selectWorkingDetls" resultType="com.zy.asrs.common.wms.entity.OrderDetl">
+        select * from wms_order_detl
+        where 1=1
+        and order_id = #{orderId}
+        and qty &lt; anfme
+    </select>
+
     <select id="selectItem" resultType="com.zy.asrs.common.wms.entity.OrderDetl">
         select * from wms_order_detl
         where 1=1
diff --git a/zy-asrs-common/src/main/resources/mapper/wms/WrkDetlMapper.xml b/zy-asrs-common/src/main/resources/mapper/wms/WrkDetlMapper.xml
index 33a25e8..c2c758a 100644
--- a/zy-asrs-common/src/main/resources/mapper/wms/WrkDetlMapper.xml
+++ b/zy-asrs-common/src/main/resources/mapper/wms/WrkDetlMapper.xml
@@ -54,4 +54,46 @@
           and (awml.manu_type is null or awml.manu_type != '鎵嬪姩鍙栨秷')
     </select>
 
+    <select id="selectPakoutQuery" resultType="com.zy.asrs.common.wms.entity.WrkDetl">
+        select
+            awd.*
+        from wms_wrk_detl awd
+                 left join asr_wrk_mast awm on awd.wrk_no = awm.wrk_no
+        where 1=1
+          and awm.wrk_sts = 199
+          and (awd.inspect is null or awd.inspect = 0)
+          and awm.sta_no = #{staNo}
+          and awd.matnr + '-' + awd.batch = #{matnr}
+    </select>
+
+    <update id="updateInspect">
+        update wms_wrk_detl
+        set inspect = 1
+        where 1=1
+        and wrk_no = #{wrkNo}
+        and matnr = #{matnr}
+        and host_id = #{hostId}
+        <include refid="batchSeq"></include>
+    </update>
+
+    <delete id="deleteItem">
+        delete from wms_wrk_detl
+        where 1=1
+        and wrk_no = #{wrkNo}
+        and matnr = #{matnr}
+        and host_id = #{hostId}
+        <include refid="batchSeq"></include>
+    </delete>
+
+    <update id="updateAnfme">
+        update wms_wrk_detl
+        set anfme = #{anfme}
+        , modi_time = getdate()
+        where 1=1
+        and wrk_no = #{wrkNo}
+        and matnr = #{matnr}
+        and host_id = #{hostId}
+        <include refid="batchSeq"></include>
+    </update>
+
 </mapper>
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
new file mode 100644
index 0000000..979c419
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/MobileController.java
@@ -0,0 +1,269 @@
+package com.zy.asrs.wms.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zy.asrs.common.domain.dto.WrkDto;
+import com.zy.asrs.common.domain.entity.MobileAdjustResult;
+import com.zy.asrs.common.domain.param.MobileAdjustParam;
+import com.zy.asrs.common.openapi.entity.param.CombParam;
+import com.zy.asrs.common.web.BaseController;
+import com.zy.asrs.common.wms.entity.*;
+import com.zy.asrs.common.wms.service.*;
+import com.zy.asrs.framework.annotations.ManagerAuth;
+import com.zy.asrs.framework.common.Cools;
+import com.zy.asrs.framework.common.R;
+import com.zy.asrs.framework.exception.CoolException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.*;
+
+/**
+ * 绉诲姩绔帴鍙f帶鍒跺櫒
+ */
+@RestController
+@RequestMapping("mobile")
+public class MobileController extends BaseController {
+
+    @Autowired
+    private MobileService mobileService;
+    @Autowired
+    private OrderService orderService;
+    @Autowired
+    private DocTypeService docTypeService;
+    @Autowired
+    private WrkDetlService wrkDetlService;
+    @Autowired
+    private WrkMastService wrkMastService;
+    @Autowired
+    private LocDetlService locDetlService;
+    @Autowired
+    private BasDevpService basDevpService;
+
+    /**
+     * 鏍规嵁鍗曞彿妫�绱㈠崟鎹暟鎹�
+     */
+    @RequestMapping("/order/search/orderNo/auth")
+    @ManagerAuth
+    public R orderSearchByBarcode(@RequestParam String orderNo){
+        Order order = orderService.selectByNo(orderNo, getHostId());
+        if (order == null) {
+            return R.ok();
+        }
+        DocType docType = docTypeService.getById(order.getDocType());
+        if (docType.getPakin() == null || docType.getPakin() != 1) {
+            return R.ok();
+        }
+        if (order.getSettle() > 2) {
+            return R.ok();
+        }
+        List<OrderDetl> orderDetls = orderService.selectWorkingDetls(order.getId());
+        if (Cools.isEmpty(orderDetls)) {
+            return R.ok();
+        }
+        return R.ok().add(orderDetls);
+    }
+
+    @RequestMapping("/comb/auth")
+    @ManagerAuth(memo = "缁勬墭")
+    public R comb(@RequestBody CombParam combParam){
+        mobileService.comb(combParam, getUserId(), getHostId());
+        return R.ok("缁勬墭鎴愬姛");
+    }
+
+    @RequestMapping("/pakout/query/auth")
+    @ManagerAuth
+    @Deprecated
+    public R pakoutQuery(@RequestParam(required = false) String barcode,
+                         @RequestParam(required = false) Integer staNo,
+                         @RequestParam(required = false) String matnr){
+        if (Cools.isEmpty(barcode) && Cools.isEmpty(matnr)) {
+            return R.ok();
+        }
+        Long hostId = getHostId();
+        if (!Cools.isEmpty(barcode)) {
+            List<WrkDetl> wrkDetls = wrkDetlService.list(new LambdaQueryWrapper<WrkDetl>().eq(WrkDetl::getZpallet, barcode).eq(WrkDetl::getHostId, hostId));
+            return R.ok().add(wrkDetls);
+        }
+        if (!Cools.isEmpty(matnr)) {
+            if (!Cools.isEmpty(staNo)) {
+                List<WrkDetl> wrkDetls = wrkDetlService.selectPakoutQuery(staNo, matnr, hostId);
+                return R.ok().add(wrkDetls);
+            }
+        }
+        return R.ok();
+    }
+
+    /**
+     * 鍑哄簱纭 - 鎵墭鐩樼爜
+     * 1.鍏ㄦ澘 杩斿洖 101
+     * 2.鎷f枡 杩斿洖 103
+     */
+    @RequestMapping("/pakout/confirm/barcode/auth")
+    @ManagerAuth
+    public R pakoutQueryByBarcode(@RequestParam(required = false) String barcode){
+        if (Cools.isEmpty(barcode)) {
+            return R.ok();
+        }
+        Long hostId = getHostId();
+        WrkMast wrkMast = wrkMastService.selectByBarcode(barcode, hostId);
+        if (wrkMast != null) {
+            List<WrkDetl> wrkDetls = wrkDetlService.list(new LambdaQueryWrapper<WrkDetl>().eq(WrkDetl::getWrkNo, wrkMast.getWrkNo()).eq(WrkDetl::getHostId, hostId));
+            // 鍘婚櫎宸插嚭搴撶‘璁ょ殑鏄庣粏
+            wrkDetls.removeIf(wrkDetl -> wrkDetl.getInspect() != null && wrkDetl.getInspect() != 0);
+            return R.ok().add(Cools.add("wrkNo", wrkMast.getWrkNo()).add("ioType", wrkMast.getIoType()).add("list", wrkDetls));
+        }
+        return R.ok();
+    }
+
+    /**
+     * 鍑哄簱纭 - 鎷f枡鍑哄簱 - 閫夋嫨鍏蜂綋鏉$爜鍟嗗搧
+     */
+    @RequestMapping("/pakout/confirm/pick/auth")
+    @ManagerAuth
+    public R pakoutQueryByBarcode(@RequestParam(required = false) Integer wrkNo
+            , @RequestParam(required = false) String matnr){
+        if (Cools.isEmpty(wrkNo)) {
+            return R.ok();
+        }
+        if (Cools.isEmpty(matnr)) {
+            return R.ok();
+        }
+        Long hostId = getHostId();
+        WrkMast wrkMast = wrkMastService.getOne(new LambdaQueryWrapper<WrkMast>().eq(WrkMast::getWrkNo, wrkNo).eq(WrkMast::getHostId, hostId));
+        if (wrkMast == null) {
+            return R.ok();
+        }
+        String orderNo = null;
+        List<WrkDetl> wrkDetls = wrkDetlService.list(new LambdaQueryWrapper<WrkDetl>().eq(WrkDetl::getWrkNo, wrkMast.getWrkNo()).eq(WrkDetl::getHostId, hostId));
+        for (WrkDetl wrkDetl : wrkDetls) {
+            if (Cools.isEmpty(orderNo)) {
+                orderNo = wrkDetl.getOrderNo();
+            }
+            if ((wrkDetl.getMatnr() + "-" + wrkDetl.getBatch()).equals(matnr)) {
+                return R.ok().add(wrkDetl);
+            }
+        }
+        // 鏇挎崲 鏄庣粏
+        List<LocDetl> locDetls = locDetlService.list(new LambdaQueryWrapper<LocDetl>().eq(LocDetl::getLocNo, wrkMast.getSourceLocNo()).eq(LocDetl::getHostId, hostId));
+        for (LocDetl locDetl : locDetls) {
+            if ((locDetl.getMatnr() + "-" + locDetl.getBatch()).equals(matnr)) {
+                WrkDetl wrkDetl = new WrkDetl();
+                wrkDetl.sync(locDetl);
+                wrkDetl.setOrderNo(orderNo);
+                wrkDetl.setIoTime(wrkMast.getIoTime());
+                wrkDetl.setWrkNo(wrkNo);
+                return R.ok().add(wrkDetl);
+            }
+        }
+        return R.error("绯荤粺閿欒锛屾潯鐮佷笉瀛樺湪");
+    }
+
+    @RequestMapping("/pakout/confirm/auth")
+    @ManagerAuth
+    @Transactional
+    public R pakoutConfirm(@RequestBody List<WrkDetl> list) {
+        if (Cools.isEmpty(list)) {
+            return R.ok();
+        }
+        Long hostId = getHostId();
+        Set<Integer> wrkNos = new HashSet<>();
+        List<WrkDto> dtos = new ArrayList<>();
+        for (WrkDetl wrkDetl : list) {
+            if (wrkNos.contains(wrkDetl.getWrkNo())) {
+                for (WrkDto dto : dtos) {
+                    if (dto.getWrkNo().equals(wrkDetl.getWrkNo())) {
+                        dto.getWrkDetls().add(wrkDetl);
+                        break;
+                    }
+                }
+            } else {
+                wrkNos.add(wrkDetl.getWrkNo());
+                dtos.add(new WrkDto(wrkDetl.getWrkNo(), wrkDetl));
+            }
+        }
+
+        for (WrkDto dto : dtos) {
+            WrkMast wrkMast = wrkMastService.getOne(new LambdaQueryWrapper<WrkMast>().eq(WrkMast::getWrkNo, dto.getWrkNo()).eq(WrkMast::getHostId, hostId));
+            if (wrkMast != null) {
+                // 101
+                if (wrkMast.getIoType() == 101) {
+                    for (WrkDetl wrkDetl : dto.getWrkDetls()) {
+                        wrkDetlService.updateInspect(wrkDetl.getWrkNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), hostId);
+                    }
+                }
+                // 103
+                if (wrkMast.getIoType() == 103) {
+                    if (!wrkDetlService.remove(new LambdaQueryWrapper<WrkDetl>().eq(WrkDetl::getWrkNo, wrkMast.getWrkNo()).eq(WrkDetl::getHostId, hostId))) {
+                        throw new CoolException("鎷f枡鍑哄簱纭澶辫触");
+                    }
+                    for (WrkDetl wrkDetl : dto.getWrkDetls()) {
+                        wrkDetl.setInspect(1);
+                        if (!wrkDetlService.save(wrkDetl)) {
+                            throw new CoolException("鎷f枡鍑哄簱纭澶辫触");
+                        }
+                    }
+                }
+            }
+        }
+
+        for (Integer wrkNo : wrkNos) {
+            WrkMast wrkMast = wrkMastService.getOne(new LambdaQueryWrapper<WrkMast>().eq(WrkMast::getWrkNo, wrkNo).eq(WrkMast::getHostId, hostId));
+            if (wrkMast.getWrkSts() == 14 && (Cools.isEmpty(wrkMast.getInvWh()) || wrkMast.getInvWh().equals("N"))) {
+                List<WrkDetl> wrkDetls = wrkDetlService.list(new LambdaQueryWrapper<WrkDetl>().eq(WrkDetl::getWrkNo, wrkNo).eq(WrkDetl::getHostId, hostId));
+                boolean complete = true;
+                for (WrkDetl wrkDetl : wrkDetls) {
+                    if (wrkDetl.getInspect() == null || wrkDetl.getInspect() == 0) {
+                        complete = false;
+                        break;
+                    }
+                }
+                if (complete) {
+                    wrkMast.setInvWh("Y");
+                    wrkMast.setModiTime(new Date());
+                    if (!wrkMastService.updateById(wrkMast)) {
+                        throw new CoolException("淇敼宸ヤ綔妗�" + wrkNo + "澶辫触");
+                    }
+                }
+            }
+        }
+        return R.ok("瀹屾垚纭");
+    }
+
+    // 鐩樼偣 ----------------------------------------------------------------------------------------------------
+
+    @RequestMapping("/checkDetl/auth")
+    @ManagerAuth
+    public R getCheckDetl(@RequestParam(required = false) Integer staNo) {
+        if (null == staNo || staNo == 0) {
+            return R.ok();
+        }
+        Long hostId = getHostId();
+        BasDevp basDevp = basDevpService.getOne(new LambdaQueryWrapper<BasDevp>().eq(BasDevp::getDevNo, staNo).eq(BasDevp::getHostId, hostId));
+        if (null != basDevp && basDevp.getWrkNo() != null) {
+            WrkMast wrkMast = wrkMastService.getOne(new LambdaQueryWrapper<WrkMast>().eq(WrkMast::getWrkNo, basDevp.getWrkNo()).eq(WrkMast::getHostId, hostId));
+            if (wrkMast != null && wrkMast.getIoType() == 107) {
+                List<WrkDetl> wrkDetls = wrkDetlService.list(new LambdaQueryWrapper<WrkDetl>().eq(WrkDetl::getWrkNo, wrkMast.getWrkNo()).eq(WrkDetl::getHostId, hostId));
+                if (!Cools.isEmpty(wrkDetls)) {
+                    MobileAdjustResult result = new MobileAdjustResult();
+                    result.setStaNo(staNo);
+                    result.setWrkNo(wrkMast.getWrkNo());
+                    result.setWrkDetls(wrkDetls);
+                    return R.ok().add(result);
+                }
+            }
+        }
+        return R.ok();
+    }
+
+    @RequestMapping("/adjust/auth")
+    @ManagerAuth(memo = "鐩樼偣")
+    public R adjust(@RequestBody MobileAdjustParam combParam){
+        mobileService.adjust(combParam, getUserId(), getHostId());
+        return R.ok("鐩樼偣鎴愬姛");
+    }
+
+}

--
Gitblit v1.9.1