From 57936e11434f6614f818a0a0a495918dc1af6dd6 Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期一, 02 十二月 2024 08:07:01 +0800
Subject: [PATCH] 单据出库完成

---
 src/main/java/com/zy/asrs/entity/param/CombParam.java             |   23 ++
 src/main/java/com/zy/asrs/mapper/LocDetlMapper.java               |    5 
 src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java             |    1 
 src/main/webapp/static/js/saasLog/saasLog.js                      |   10 
 src/main/resources/mapper/LocDetlMapper.xml                       |   74 +++++++
 src/main/webapp/static/js/manLocDetl/manLocDetl.js                |    6 
 src/main/java/com/zy/asrs/controller/MobileController.java        |  124 ++++++++++++
 src/main/java/com/zy/asrs/service/impl/ManLocDetlServiceImpl.java |    2 
 src/main/java/com/zy/asrs/controller/WaitPakinController.java     |   11 +
 src/main/resources/mapper/ManLocDetlMapper.xml                    |   12 +
 src/main/resources/mapper/OrderDetlMapper.xml                     |   15 +
 src/main/java/com/zy/system/entity/SaasLog.java                   |   18 +
 src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java      |   24 --
 src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java     |  187 ++++++++++++++++++
 src/main/java/com/zy/asrs/service/impl/NodeServiceImpl.java       |    8 
 src/main/webapp/static/js/common.js                               |   10 
 src/main/java/com/zy/asrs/controller/OutController.java           |   25 ++
 src/main/java/com/zy/asrs/service/MobileService.java              |   11 +
 src/main/java/com/zy/asrs/utils/SaasUtils.java                    |    3 
 19 files changed, 515 insertions(+), 54 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/MobileController.java b/src/main/java/com/zy/asrs/controller/MobileController.java
index 88f3b53..84f7452 100644
--- a/src/main/java/com/zy/asrs/controller/MobileController.java
+++ b/src/main/java/com/zy/asrs/controller/MobileController.java
@@ -22,6 +22,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 绉诲姩绔帴鍙f帶鍒跺櫒
@@ -56,6 +57,129 @@
     @Autowired
     private WrkDetlLogService wrkDetlLogService;
 
+    @PostMapping("/pda/OutOrder")
+    @ManagerAuth(memo = "鑾峰緱鍑哄簱鍗�")
+    @Transactional
+    public R OutOrder(@RequestParam String orderNo) {
+        List<Order> orders=new ArrayList<Order>();
+        List<Order> OrderList=new ArrayList<Order>();
+        if(Cools.isEmpty(orderNo)){
+            orders= orderService.selectList(new EntityWrapper<Order>()
+                    .in("settle",1,2)
+            );
+        }else{
+            orders= orderService.selectList(new EntityWrapper<Order>()
+                            .like("order_no",orderNo)
+                            .in("settle",1,2)
+            );
+        }
+        if(Cools.isEmpty(orders)){
+            return R.parse("鏃犳暟鎹�");
+        }
+        for (Order o:orders
+        ) {
+            DocType docType=docTypeService.selectOne(new EntityWrapper<DocType>()
+                    .eq("doc_id",o.getDocType()));
+            if(docType.getPakout()==1){
+                OrderList.add(o);
+            }
+        }
+
+
+        return R.ok(OrderList);
+    }
+
+    @PostMapping("/pda/OutLocNo")
+    @ManagerAuth(memo = "鑾峰緱骞冲簱鍑哄簱鐨勫搴斿簱浣嶅彿")
+    @Transactional
+    public R OutLocNo(@RequestParam Long orderId) {
+        List<OrderDetl> orderDetls = orderDetlService.selectList(new EntityWrapper<OrderDetl>()
+                .eq("order_id", orderId)
+        );
+        if (Cools.isEmpty(orderDetls)) {
+            return R.error("璁㈠崟鏄庣粏涓嶅瓨鍦�");
+        }
+        List<String> list = new ArrayList<>();
+        for (OrderDetl o : orderDetls
+        ) {
+            if (o.getAnfme() <= o.getWorkQty()) {
+                continue;
+            } else {
+                //鏌ョ湅搴撲綅鏄庣粏涓湁鐨勭墿鏂�
+                List<ManLocDetl> locDetls = manLocDetlMapper.selectList(new EntityWrapper<ManLocDetl>()
+                        .eq("matnr", o.getMatnr()).eq("batch",o.getBatch())
+                );
+                if (Cools.isEmpty(locDetls)) {
+                    continue;
+                } else {
+                    for (ManLocDetl l : locDetls
+                    ) {
+                        String s = l.getLocNo().substring(0, 2);
+                        if (Integer.parseInt(s) > 8) {
+                            list.add(l.getLocNo());
+                        }
+                    }
+                }
+            }
+        }
+        List<String> myList = list.stream().distinct().collect(Collectors.toList());
+        return R.ok(myList);
+    }
+
+    @PostMapping("/pda/OrderDetlContrastLocDetl")
+    @ManagerAuth(memo = "鑾峰緱璁㈠崟鏄庣粏瀵瑰簲鐨勫簱瀛樻槑缁�")
+    @Transactional
+    public R OrderDetlContrastLocDetl(@RequestParam Long orderId, @RequestParam String locNo) {
+        List<ManLocDetl> locDetlList = new ArrayList<ManLocDetl>();
+        List<OrderDetl> orderDetls = orderDetlService.selectList(new EntityWrapper<OrderDetl>()
+                .eq("order_id", orderId)
+        );
+        if (Cools.isEmpty(orderDetls)) {
+            return R.error("璁㈠崟鏄庣粏涓嶅瓨鍦�");
+        }
+        List<ManLocDetl> locDetls = manLocDetlMapper.selectList(new EntityWrapper<ManLocDetl>()
+                .eq("loc_no", locNo));
+        if (Cools.isEmpty(locDetls)) {
+            return R.error("搴撲綅涓虹┖");
+        }
+        for (OrderDetl o : orderDetls
+        ) {
+            if(o.getAnfme().equals(o.getQty())){
+                continue;
+            }
+            for (ManLocDetl l : locDetls
+            ) {
+                if (o.getMatnr().equals(l.getMatnr()) && o.getBatch().equals(l.getBatch())) {
+                    if (o.getAnfme() - o.getWorkQty() >= l.getAnfme()) {
+
+                    } else {
+                        l.setAnfme(o.getAnfme() - o.getWorkQty());
+                    }
+                    locDetlList.add(l);
+                    break;
+                }
+            }
+        }
+        return R.ok(locDetlList);
+    }
+
+    /**
+     * 骞冲韩涓嬫灦
+     */
+    @RequestMapping("/pda/WarehouseOut")
+    @ManagerAuth
+    public R WarehouseOut(@RequestBody CombParam combParam) {
+        return mobileService.WarehouseOut(combParam, getUserId());
+    }
+
+    /**
+     * 骞冲韩涓婃灦
+     */
+    @RequestMapping("/pda/WarehouseIn")
+    @ManagerAuth
+    public R WarehouseIn(@RequestParam String locNo, @RequestParam String barcode) {
+        return mobileService.WarehouseIn(locNo, barcode, getUserId());
+    }
 
     // 鍟嗗搧涓婃灦
     @RequestMapping("/mat/onSale/auth")
diff --git a/src/main/java/com/zy/asrs/controller/OutController.java b/src/main/java/com/zy/asrs/controller/OutController.java
index 23fb3a9..ef24fc4 100644
--- a/src/main/java/com/zy/asrs/controller/OutController.java
+++ b/src/main/java/com/zy/asrs/controller/OutController.java
@@ -7,6 +7,7 @@
 import com.zy.asrs.entity.BasDevp;
 import com.zy.asrs.entity.LocDetl;
 import com.zy.asrs.entity.OrderDetl;
+import com.zy.asrs.mapper.LocDetlMapper;
 import com.zy.asrs.service.*;
 import com.zy.common.model.LocDto;
 import com.zy.common.model.TaskDto;
@@ -17,6 +18,7 @@
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -41,6 +43,9 @@
     private WorkService workService;
     @Autowired
     private BasDevpService basDevpService;
+
+    @Resource
+    private LocDetlMapper locDetlMapper;
 
 
     @PostMapping("/out/pakout/orderDetlIds/auth")
@@ -79,6 +84,22 @@
                     break;
                 }
             }
+            List<LocDetl> locDetls2 = locDetlMapper.queryStockByManLoc(orderDetl.getMatnr(), orderDetl.getBatch(), null, exist);
+            for (LocDetl locDetl : locDetls2) {
+                if (issued > 0) {
+                    LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(),
+                            issued >= locDetl.getAnfme() ? locDetl.getAnfme() : issued);
+//                    List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl.getLocNo(), issued >= locDetl.getAnfme() ? 101 : 103);
+//                    locDto.setStaNos(staNos);
+                    locDto.setLocNo("骞冲簱" + locDetl.getLocNo());
+                    locDtos.add(locDto);
+                    exist.add(locDetl.getLocNo());
+                    // 鍓╀綑寰呭嚭鏁伴噺閫掑噺
+                    issued = issued - locDetl.getAnfme();
+                } else {
+                    break;
+                }
+            }
             if (issued > 0) {
                 LocDto locDto = new LocDto(null, orderDetl.getMatnr(), orderDetl.getMaktx(), orderDetl.getBatch(), orderDetl.getOrderNo(), issued);
                 locDto.setLack(Boolean.TRUE);
@@ -94,6 +115,10 @@
         if (Cools.isEmpty(locDtos)) {
             return R.parse(BaseRes.PARAM);
         }
+        locDtos = locDtos.stream().filter(locDto -> locDto.getLocNo() != null && !locDto.getLocNo().startsWith("骞冲簱")).collect(Collectors.toList());
+        if (Cools.isEmpty(locDtos)) {
+            return R.parse("骞冲簱搴撳瓨/搴撳瓨涓嶈冻");
+        }
         boolean lack = true;
         for (LocDto locDto : locDtos) {
             if (!locDto.isLack()) {
diff --git a/src/main/java/com/zy/asrs/controller/WaitPakinController.java b/src/main/java/com/zy/asrs/controller/WaitPakinController.java
index 7d994d8..9535756 100644
--- a/src/main/java/com/zy/asrs/controller/WaitPakinController.java
+++ b/src/main/java/com/zy/asrs/controller/WaitPakinController.java
@@ -11,7 +11,6 @@
 import com.core.common.DateUtils;
 import com.core.common.R;
 import com.zy.asrs.entity.WaitPakin;
-import com.zy.asrs.entity.WrkDetl;
 import com.zy.asrs.entity.WrkMast;
 import com.zy.asrs.service.OrderDetlService;
 import com.zy.asrs.service.WaitPakinService;
@@ -36,6 +35,16 @@
     @Autowired
     private WrkMastService wrkMastService;
 
+    @RequestMapping(value = "/waitPakin/forBarcode/auth")
+    @ManagerAuth
+    public R forBarcode(@RequestParam("barcode") String barcode) {
+        List<WaitPakin> list = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", barcode));
+        if (Cools.isEmpty(list)){
+            return R.error("鏈壘鍒扮粍鎵樹俊鎭�");
+        }
+        return R.ok(list);
+    }
+
     @RequestMapping(value = "/waitPakin/{id}/auth")
     @ManagerAuth
     public R get(@PathVariable("id") String id) {
diff --git a/src/main/java/com/zy/asrs/entity/param/CombParam.java b/src/main/java/com/zy/asrs/entity/param/CombParam.java
index d1d5cfd..684882f 100644
--- a/src/main/java/com/zy/asrs/entity/param/CombParam.java
+++ b/src/main/java/com/zy/asrs/entity/param/CombParam.java
@@ -1,6 +1,5 @@
 package com.zy.asrs.entity.param;
 
-import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.util.List;
@@ -20,10 +19,30 @@
     // 搴撲綅缂栧彿
     private String locno;
 
+    // 璐т富
+    private String owner;
+
+    //缁勬墭鐗╂枡
     private List<CombMat> combMats;
+
+    /*
+    婊℃澘
+     */
+    private String fullPlt;
 
     @Data
     public static class CombMat {
+
+        private String orderNo;
+
+        //鏂欐兂鐮�
+        private String containerCode;
+
+        //閿�鍞鍗曞彿
+        private String csocode;
+
+        //閿�鍞鍗曡鍙�
+        private String isoseq;
 
         // 鐗╂枡缂栧彿
         private String matnr;
@@ -40,6 +59,8 @@
         // 瑙勬牸
         private String specs;
 
+        private String zpallet;
+
     }
 
 }
diff --git a/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java b/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java
index 2b7255c..26a92fc 100644
--- a/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/LocDetlMapper.java
@@ -58,6 +58,11 @@
 
     List<LocDetl> queryStock(@Param("matnr")String matnr, @Param("batch")String batch, @Param("orderNo")String orderNo, @Param("locNos") Set<String> locNos);
 
+    /**
+     * 鍦ㄥ钩搴撻噷闈㈡煡璇㈠簱瀛�
+     */
+    List<LocDetl> queryStockByManLoc(@Param("matnr")String matnr, @Param("batch")String batch, @Param("orderNo")String orderNo, @Param("locNos") Set<String> locNos);
+
     Double queryStockAnfme(String matnr, String batch);
 
     List<StockVo> queryStockTotal();
diff --git a/src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java b/src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java
index 51c99ad..efe12c0 100644
--- a/src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java
@@ -32,6 +32,7 @@
     int addToLogTable(OrderDetl orderDetl);
 
     int increaseQtyByOrderNo(@Param("orderNo")String orderNo, @Param("matnr")String matnr, @Param("batch")String batch, @Param("qty")Double qty);
+    int increaseWorkQtyByOrderNo(@Param("orderNo") String orderNo, @Param("matnr") String matnr, @Param("batch") String batch, @Param("qty") Double qty);
 
     int increaseWorkQty(@Param("orderId")Long orderId, @Param("matnr")String matnr, @Param("batch")String batch, @Param("workQty")Double workQty);
 }
diff --git a/src/main/java/com/zy/asrs/service/MobileService.java b/src/main/java/com/zy/asrs/service/MobileService.java
index f5d0585..d1f060c 100644
--- a/src/main/java/com/zy/asrs/service/MobileService.java
+++ b/src/main/java/com/zy/asrs/service/MobileService.java
@@ -1,6 +1,7 @@
 package com.zy.asrs.service;
 
 import com.alibaba.fastjson.JSONObject;
+import com.core.common.R;
 import com.zy.asrs.entity.BasDevp;
 import com.zy.asrs.entity.LocDetl;
 import com.zy.asrs.entity.OrderDetl;
@@ -38,4 +39,14 @@
 
     void stockOut(OrderDetl orderDetl, BasDevp staNo, LocDetl locDetl,
                   Double curOutQty, Integer ioType, Long userId, Date now);
+
+    /**
+     * 骞冲簱涓嬫灦
+     */
+    R WarehouseOut(CombParam combParam, Long userId);
+
+    /**
+     * 骞冲簱涓婃灦
+     */
+    R WarehouseIn(String locNo, String barcode, Long userId);
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/ManLocDetlServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/ManLocDetlServiceImpl.java
index 90316d8..7b2ecea 100644
--- a/src/main/java/com/zy/asrs/service/impl/ManLocDetlServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/ManLocDetlServiceImpl.java
@@ -172,7 +172,7 @@
             manLocDetl.setUnit(mat.getUnit());
             manLocDetl.setBarcode(mat.getBarcode());
             manLocDetl.setPrice(mat.getPrice());
-            SaasUtils.insertLog(3,manLocDetl.getLocNo(), manLocDetl.getMatnr(),manLocDetl.getAnfme(),userId);
+            SaasUtils.insertLog(3,manLocDetl.getLocNo(), manLocDetl.getMatnr(),manLocDetl.getAnfme(),userId,manLocDetl.getBatch());
             this.baseMapper.insert(manLocDetl);
         }
     }
diff --git a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
index 3b652a7..e4c1241 100644
--- a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -12,6 +12,7 @@
 import com.zy.asrs.entity.param.OffSaleParam;
 import com.zy.asrs.entity.param.OpenOrderPakinParam;
 import com.zy.asrs.mapper.ManLocDetlMapper;
+import com.zy.asrs.mapper.OrderDetlMapper;
 import com.zy.asrs.service.*;
 import com.zy.asrs.utils.MatUtils;
 import com.zy.asrs.utils.SaasUtils;
@@ -26,6 +27,8 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.Iterator;
@@ -43,6 +46,10 @@
     private MatService matService;
     @Autowired
     private WaitPakinService waitPakinService;
+
+    @Resource
+    private WaitPakinLogService waitPakinLogService;
+
     @Autowired
     private OrderService orderService;
     @Autowired
@@ -78,6 +85,182 @@
     @Autowired
     private ManLocDetlMapper manLocDetlMapper;
 
+    @Resource
+    private OrderDetlMapper orderDetlMapper;
+
+    @Override
+    @Transactional
+    public R WarehouseOut(CombParam combParam, Long userId) {
+
+        //鏌ヨ搴撳瓨鏁版嵁
+        for (CombParam.CombMat combMat : combParam.getCombMats()) {
+            ManLocDetl locDetl = manLocDetlService.selectOne(new EntityWrapper<ManLocDetl>()
+                            .eq("loc_no", combParam.getLocno())
+                            .eq("zpallet", combMat.getZpallet())
+                            .eq("matnr", combMat.getMatnr())
+//                    .eq(LocDetl::getBatch, combMat.getBatch())
+            );
+            if (Cools.isEmpty(locDetl)) {
+                return R.error("鏈煡璇㈠埌搴撳瓨鏁版嵁");
+            }
+            if (combMat.getAnfme() > locDetl.getAnfme()) {
+                return R.error("涓嬫灦鏁伴噺閿欒锛岃秴鍑哄簱瀛樻暟閲�");
+            }
+            if (!Cools.isEmpty(combParam.getOrderNo())) {
+                Order order = orderService.selectByNo(combParam.getOrderNo());
+                if (Cools.isEmpty(order)) {
+                    continue;
+                }
+                if (order.getSettle() == 1) {
+                    orderService.updateSettle(order.getId(), 2L, userId);
+                }
+                OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), combMat.getMatnr(), combMat.getBatch());
+                if (Cools.isEmpty(orderDetl)) {
+                    continue;
+                }
+                if (orderDetl.getAnfme() < orderDetl.getWorkQty() + combMat.getAnfme()) {
+                    combMat.setAnfme(orderDetl.getAnfme() - orderDetl.getWorkQty());
+                }
+                // 淇敼璁㈠崟鏄庣粏浣滀笟鏁伴噺
+                if (orderDetlMapper.increaseWorkQtyByOrderNo(combParam.getOrderNo(), combMat.getMatnr(), combMat.getBatch(), combMat.getAnfme()) <= 0) {
+                    throw new CoolException("淇敼鍗曟嵁鏄庣粏宸ヤ綔鏁伴噺澶辫触");
+                }
+                // 淇敼璁㈠崟鏄庣粏瀹屾垚鏁伴噺
+                if (!orderDetlService.increase(order.getId(), combMat.getMatnr(), combMat.getBatch(), combMat.getAnfme())) {
+                    throw new CoolException("淇敼鍗曟嵁鏄庣粏瀹屾垚鏁伴噺澶辫触");
+                }
+                // 淇敼璁㈠崟鐘舵�� 浣滀笟涓� ===>> 宸插畬鎴�
+                orderService.checkComplete(combParam.getOrderNo());
+            }
+            try {
+                double i = 0.0;
+                double j = locDetl.getAnfme();
+                //澶勭悊搴撳瓨淇℃伅
+                if (combMat.getAnfme().equals(locDetl.getAnfme())) {
+                    //搴撳瓨鐩哥瓑鍒犻櫎鏁版嵁
+                    manLocDetlMapper.deleteLocNo0(combParam.getLocno(), combMat.getMatnr());
+                    int count = manLocDetlMapper.selectCount(new EntityWrapper<ManLocDetl>().eq("loc_no", combParam.getLocno()));
+                    if (count == 0) {
+                        Node node = nodeService.selectByUuid(combParam.getLocno());
+                        node.setUpdateTime(new Date());
+                        node.setUpdateBy(userId);
+                        node.setBarcode("");
+                        nodeService.updateById(node);
+                    }
+                } else {
+                    BigDecimal subtract = BigDecimal.valueOf(locDetl.getAnfme()).subtract(BigDecimal.valueOf(combMat.getAnfme()));
+                    i = subtract.byteValue();
+                    locDetl.setAnfme(subtract.doubleValue());
+                    // 鏇存柊搴撳瓨
+                    manLocDetlMapper.updateAnfme(subtract.doubleValue(), combParam.getLocno(), combMat.getMatnr(), combMat.getBatch());
+                }
+                // 璁板綍鏃ュ織
+                SaasUtils.insertLog(1, combParam.getLocno(), combMat.getMatnr(), combMat.getAnfme(), userId,combMat.getBatch());
+            } catch (Exception e) {
+                throw new CoolException("鏇存柊搴撳瓨鏁版嵁鍑洪敊" + e.getMessage());
+            }
+        }
+        return R.ok();
+    }
+
+    @Override
+    @Transactional
+    public R WarehouseIn(String locNo, String barcode, Long userId) {
+
+        //鏌ヨ缁勬墭鏁版嵁
+        List<WaitPakin> list = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", barcode));
+        if (Cools.isEmpty(list)) {
+            return R.error("鏈壘鍒扮粍鎵樹俊鎭�");
+        }
+        Date now = new Date();
+
+        //鎻掑叆搴撳瓨鏁版嵁
+        for (WaitPakin waitPakin : list) {
+
+            Mat mat = matService.selectOne(new EntityWrapper<Mat>()
+                    .eq("matnr", waitPakin.getMatnr()));
+
+            ManLocDetl locDetl1 = manLocDetlService.selectOne(new EntityWrapper<ManLocDetl>().eq("loc_no", locNo).eq("matnr", waitPakin.getMatnr()).
+                    eq("batch", waitPakin.getBatch()));
+
+            Node node = nodeService.selectByUuid(locNo);
+            if (Cools.isEmpty(node)) {
+                throw new CoolException(locNo + ":搴撲綅涓嶅瓨鍦�");
+            }
+            if (!Cools.isEmpty(locDetl1)) {
+                locDetl1.setAnfme(waitPakin.getAnfme() + waitPakin.getAnfme());
+                locDetl1.setUpdateBy(userId);
+                locDetl1.setModiTime(now);
+                manLocDetlService.update(locDetl1, new EntityWrapper<ManLocDetl>().eq("loc_no", locNo).eq("matnr", waitPakin.getMatnr()).
+                        eq("batch", waitPakin.getBatch()));
+            } else {
+                ManLocDetl manLocDetl = new ManLocDetl();
+                manLocDetl.setLocNo(locNo);
+//            manLocDetl.setBarcode(barcode);
+                manLocDetl.setZpallet(barcode);
+                manLocDetl.setNodeId(node.getId());
+                manLocDetl.setMaktx(mat.getMaktx());
+                manLocDetl.setMatnr(mat.getMatnr());
+                manLocDetl.setSpecs(mat.getSpecs());
+                manLocDetl.setBatch(Cools.isEmpty(waitPakin.getBatch()) ? "" : waitPakin.getBatch());
+                manLocDetl.setAnfme(waitPakin.getAnfme());
+                manLocDetl.setCreateBy(userId);
+                manLocDetl.setCreateTime(now);
+                manLocDetl.setUpdateBy(userId);
+                manLocDetl.setModiTime(now);
+                if (!manLocDetlService.insert(manLocDetl)) {
+                    throw new CoolException("鍟嗗搧涓婃灦澶辫触锛�");
+                }
+
+                // 鏇存柊搴撲綅鏉$爜
+                node.setBarcode(barcode);
+                node.setUpdateBy(userId);
+                node.setUpdateTime(now);
+                nodeService.updateById(node);
+            }
+
+            // 璁板綍鏃ュ織
+            SaasUtils.insertLog(0, locNo, waitPakin.getMatnr(), waitPakin.getAnfme(), userId,waitPakin.getBatch());
+
+            //鏄惁灞炰簬璁㈠崟鏁版嵁
+//            if (!Cools.isEmpty(waitPakin.getOrderNo())){
+//                Order order = orderService.selectByNo(waitPakin.getOrderNo(), hostId);
+//                if (Cools.isEmpty(order)){
+//                    continue;
+//                }
+//                OrderDetl orderDetl = orderDetlService.selectItem(order.getId(), waitPakin.getMatnr(), waitPakin.getBatch(),hostId);
+//                if (Cools.isEmpty(orderDetl)){
+//                    continue;
+//                }
+//                // 淇敼璁㈠崟鏄庣粏瀹屾垚鏁伴噺
+//                if (!orderDetlService.increase(order.getId(), hostId, waitPakin.getMatnr(), waitPakin.getBatch(), waitPakin.getAnfme())) {
+//                    throw new CoolException("淇敼鍗曟嵁鏄庣粏鏁伴噺澶辫触");
+//                }
+//                // 淇敼璁㈠崟鐘舵�� 浣滀笟涓� ===>> 宸插畬鎴�
+//                orderService.checkComplete(waitPakin.getOrderNo(), hostId);
+//
+//            }
+
+            // 鏇存柊鍏ュ簱宸ヤ綔妗�
+            waitPakin.setLocNo(locNo);
+            waitPakin.setIoStatus("Y");
+            waitPakin.setModiUser(userId);
+            waitPakin.setModiTime(now);
+            waitPakinService.update(waitPakin,new EntityWrapper<WaitPakin>().eq("zpallet", barcode).eq("matnr",waitPakin.getMatnr())
+                    .eq("batch",waitPakin.getBatch()));
+
+            // 淇濆瓨鍏ュ簱閫氱煡妗e巻鍙叉。
+            if (!waitPakinLogService.save(barcode)) {
+                throw new CoolException("淇濆瓨缁勬墭鏁版嵁澶辫触");
+            }
+            // 鍒犻櫎鍏ュ簱閫氱煡妗�
+            if (!waitPakinService.delete(new EntityWrapper<WaitPakin>().eq("zpallet", barcode))) {
+                throw new CoolException("鍒犻櫎缁勬墭鏁版嵁澶辫触");
+            }
+        }
+
+        return R.ok("涓婃灦鎴愬姛");
+    }
 
     @Override
     @Transactional
@@ -252,7 +435,7 @@
             node.setUpdateBy(userId);
             node.setUpdateTime(now);
             nodeService.updateById(node);
-            SaasUtils.insertLog(0,manLocDetl.getLocNo(), manLocDetl.getMatnr(),combMat.getAnfme(),userId);
+            SaasUtils.insertLog(0,manLocDetl.getLocNo(), manLocDetl.getMatnr(),combMat.getAnfme(),userId,manLocDetl.getBatch());
 
         }
     }
@@ -268,7 +451,7 @@
         if (anfme < 0) {
             throw new CoolException("鍟嗗搧搴撳瓨涓嶈冻锛�");
         } else if (anfme == 0){
-            SaasUtils.insertLog(1,manLocDetl.getLocNo(), manLocDetl.getMatnr(),offSaleParam.getAnfme(),userId);
+            SaasUtils.insertLog(1,manLocDetl.getLocNo(), manLocDetl.getMatnr(),offSaleParam.getAnfme(),userId,manLocDetl.getBatch());
             manLocDetlMapper.deleteLocNo0(offSaleParam.getLocNo(), offSaleParam.getMatnr());
             // 娓呯┖搴撲綅鏉$爜
             Node node = nodeService.selectByUuid(offSaleParam.getLocNo());
diff --git a/src/main/java/com/zy/asrs/service/impl/NodeServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/NodeServiceImpl.java
index 3399e9b..0a4695f 100644
--- a/src/main/java/com/zy/asrs/service/impl/NodeServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/NodeServiceImpl.java
@@ -112,7 +112,7 @@
                 manLocDetl.setCreateTime(now);
                 manLocDetl.setModiTime(now);
                 manLocDetl.setCreateBy(userId);
-                SaasUtils.insertLog(0,manLocDetl.getLocNo(),manLocDetl.getMatnr(), manLocDetl.getAnfme(),userId);
+                SaasUtils.insertLog(0,manLocDetl.getLocNo(),manLocDetl.getMatnr(), manLocDetl.getAnfme(),userId, manLocDetl.getBatch());
                 manLocDetlService.insert(manLocDetl);
             }else {
                 check.setAnfme(dto.getCount() + check.getAnfme());
@@ -146,7 +146,7 @@
                 if (manLocDetl.getAnfme() - param.getCount() < 0) {
                     return R.error("鐗╂枡:"+ param.getMatnr() + " 鍦ㄥ簱浣嶄腑鏁伴噺涓嶈冻");
                 } else if (manLocDetl.getAnfme() - param.getCount() == 0) {
-                    SaasUtils.insertLog(1,manLocDetl.getLocNo(), manLocDetl.getMatnr(),param.getCount(),userId);
+                    SaasUtils.insertLog(1,manLocDetl.getLocNo(), manLocDetl.getMatnr(),param.getCount(),userId,manLocDetl.getBatch());
                     manLocDetlService.delete(new EntityWrapper<ManLocDetl>()
                             .eq("loc_no",node.getUuid())
                             .eq("matnr",param.getMatnr()));
@@ -161,7 +161,7 @@
                     manLocDetlService.update(manLocDetl,new EntityWrapper<ManLocDetl>()
                             .eq("loc_no",node.getUuid())
                             .eq("matnr",param.getMatnr()));
-                    SaasUtils.insertLog(1,manLocDetl.getLocNo(), manLocDetl.getMatnr(),param.getCount(),userId);
+                    SaasUtils.insertLog(1,manLocDetl.getLocNo(), manLocDetl.getMatnr(),param.getCount(),userId,manLocDetl.getBatch());
                 }
             }
         }
@@ -189,7 +189,7 @@
                 source.setLocNo(targetNode.getUuid());
                 source.setNodeId(targetNode.getId());
 
-                SaasUtils.insertLog(2,source.getLocNo(), source.getMatnr(), source.getAnfme(),userId);
+                SaasUtils.insertLog(2,source.getLocNo(), source.getMatnr(), source.getAnfme(),userId,source.getBatch());
                 manLocDetlService.insert(source);
             }else {
                 check.setAnfme(check.getAnfme() + source.getAnfme());
diff --git a/src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java
index ce2a799..5ef460b 100644
--- a/src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java
@@ -71,30 +71,6 @@
             }
         }
         if (complete) {
-            // 鍑哄簱璁㈠崟閲嶆柊鏁寸悊鏄庣粏
-            DocType docType = docTypeService.selectById(order.getDocType());
-            if (null != docType && docType.getPakout() == 1) {
-                if (!orderDetlService.delete(new EntityWrapper<OrderDetl>().eq("order_id", order.getId()))) {
-                    throw new CoolException("閲嶆暣鍑哄簱璁㈠崟銆恛rderNo = " + order.getOrderNo() + "銆戞槑缁嗗け璐�");
-                }
-                List<WrkDetl> wrkDetls = wrkDetlService.selectAndLogByOrderNo(orderNo);
-                for (WrkDetl wrkDetl : wrkDetls) {
-                    OrderDetl orderDetl = new OrderDetl();
-                    orderDetl.sync(wrkDetl);
-                    orderDetl.setQty(orderDetl.getAnfme());
-                    orderDetl.setOrderId(order.getId());
-                    orderDetl.setOrderNo(orderNo);
-                    orderDetl.setStatus(1);
-                    orderDetl.setCreateTime(order.getCreateTime());
-                    orderDetl.setCreateBy(order.getCreateBy());
-                    orderDetl.setUpdateTime(order.getUpdateTime());
-                    orderDetl.setUpdateBy(order.getUpdateBy());
-                    if (!orderDetlService.insert(orderDetl)) {
-                        throw new CoolException("閲嶆暣鍑哄簱璁㈠崟銆恛rderNo = " + order.getOrderNo() + "銆戞槑缁嗗け璐�");
-                    }
-                }
-            }
-
             if (!this.updateSettle(order.getId(), 4L, null)) {
                 throw new CoolException("淇敼璁㈠崟銆恛rderNo = " + order.getOrderNo() + "銆戠姸鎬佷负宸插畬鎴愬け璐�");
             }
diff --git a/src/main/java/com/zy/asrs/utils/SaasUtils.java b/src/main/java/com/zy/asrs/utils/SaasUtils.java
index b2e018f..3865f1f 100644
--- a/src/main/java/com/zy/asrs/utils/SaasUtils.java
+++ b/src/main/java/com/zy/asrs/utils/SaasUtils.java
@@ -7,7 +7,7 @@
 import java.util.Date;
 
 public class SaasUtils {
-    public static void insertLog(Integer type, String locNo, String matnr,Double anfme, Long userId){
+    public static void insertLog(Integer type, String locNo, String matnr,Double anfme, Long userId,String batch){
         SaasLogService bean = SpringUtils.getBean(SaasLogService.class);
         SaasLog saasLog = new SaasLog();
         saasLog.setType(type);
@@ -16,6 +16,7 @@
         saasLog.setIoTime(new Date());
         saasLog.setAnfme(anfme);
         saasLog.setCreateBy(userId);
+        saasLog.setBatch(batch);
         bean.insert(saasLog);
     }
 }
diff --git a/src/main/java/com/zy/system/entity/SaasLog.java b/src/main/java/com/zy/system/entity/SaasLog.java
index 36d64e3..2069e4e 100644
--- a/src/main/java/com/zy/system/entity/SaasLog.java
+++ b/src/main/java/com/zy/system/entity/SaasLog.java
@@ -1,16 +1,17 @@
 package com.zy.system.entity;
 
-import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId;
-import com.baomidou.mybatisplus.enums.IdType;
 import com.baomidou.mybatisplus.annotations.TableField;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import org.springframework.format.annotation.DateTimeFormat;
-
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+import com.core.common.Cools;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-import com.baomidou.mybatisplus.annotations.TableName;
+import org.springframework.format.annotation.DateTimeFormat;
+
 import java.io.Serializable;
+import java.text.SimpleDateFormat;
+import java.util.Date;
 
 @Data
 @TableName("sys_saas_log")
@@ -38,6 +39,9 @@
     @ApiModelProperty(value= "")
     private String matnr;
 
+    @ApiModelProperty(value= "鎵规")
+    private String batch;
+
     @ApiModelProperty(value= "")
     @TableField("io_time")
     @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
diff --git a/src/main/resources/mapper/LocDetlMapper.xml b/src/main/resources/mapper/LocDetlMapper.xml
index 4b0009d..2dafee4 100644
--- a/src/main/resources/mapper/LocDetlMapper.xml
+++ b/src/main/resources/mapper/LocDetlMapper.xml
@@ -401,5 +401,79 @@
         and lm.row1 in (31,32)
         order by row1
     </select>
+    <select id="queryStockByManLoc" resultMap="BaseResultMap">
+        select a.*
+        from man_loc_detl a
+        where 1=1
+        and a.matnr = #{matnr}
+        <if test="batch != null and batch != ''">
+            and a.batch = #{batch}
+        </if>
+        <if test="orderNo != null and orderNo != ''">
+            and a.doc_num = #{orderNo}
+        </if>
+        <if test="locNos != null and locNos.size > 0">
+            and a.loc_no not in
+            <foreach item="item" collection="locNos" index="index"  separator="," open="(" close=")">
+                #{item}
+            </foreach>
+        </if>
+        order by
+        DATEPART(yyyy,a.modi_time),DATEPART(mm,a.modi_time),DATEPART(dd,a.modi_time), a.anfme
+        desc,
+        NEWID(),
+        case
+        when (left(a.loc_no, 2) = '01') then 0
+        when (left(a.loc_no, 2) = '02') then 1
+        when (left(a.loc_no, 2) = '03') then 1
+        when (left(a.loc_no, 2) = '04') then 0
+        when (left(a.loc_no, 2) = '05') then 0
+        when (left(a.loc_no, 2) = '06') then 1
+        when (left(a.loc_no, 2) = '07') then 1
+        when (left(a.loc_no, 2) = '08') then 0
+        when (left(a.loc_no, 2) = '09') then 0
+        when (left(a.loc_no, 2) = '10') then 1
+        when (left(a.loc_no, 2) = '11') then 1
+        when (left(a.loc_no, 2) = '12') then 0
+        when (left(a.loc_no, 2) = '13') then 0
+        when (left(a.loc_no, 2) = '14') then 1
+        when (left(a.loc_no, 2) = '15') then 1
+        when (left(a.loc_no, 2) = '16') then 0
+        when (left(a.loc_no, 2) = '17') then 0
+        when (left(a.loc_no, 2) = '18') then 1
+        when (left(a.loc_no, 2) = '19') then 1
+        when (left(a.loc_no, 2) = '20') then 0
+        when (left(a.loc_no, 2) = '21') then 0
+        when (left(a.loc_no, 2) = '22') then 1
+        when (left(a.loc_no, 2) = '23') then 1
+        when (left(a.loc_no, 2) = '24') then 0
+        when (left(a.loc_no, 2) = '25') then 0
+        when (left(a.loc_no, 2) = '26') then 1
+        when (left(a.loc_no, 2) = '27') then 1
+        when (left(a.loc_no, 2) = '28') then 0
+        when (left(a.loc_no, 2) = '29') then 0
+        when (left(a.loc_no, 2) = '30') then 1
+        when (left(a.loc_no, 2) = '31') then 1
+        when (left(a.loc_no, 2) = '32') then 0
+        when (left(a.loc_no, 2) = '33') then 0
+        when (left(a.loc_no, 2) = '34') then 1
+        when (left(a.loc_no, 2) = '35') then 1
+        when (left(a.loc_no, 2) = '36') then 0
+        when (left(a.loc_no, 2) = '37') then 0
+        when (left(a.loc_no, 2) = '38') then 1
+        when (left(a.loc_no, 2) = '39') then 1
+        when (left(a.loc_no, 2) = '40') then 0
+        when (left(a.loc_no, 2) = '41') then 0
+        when (left(a.loc_no, 2) = '42') then 1
+        when (left(a.loc_no, 2) = '43') then 1
+        when (left(a.loc_no, 2) = '44') then 0
+        when (left(a.loc_no, 2) = '45') then 0
+        when (left(a.loc_no, 2) = '46') then 1
+        when (left(a.loc_no, 2) = '47') then 1
+        when (left(a.loc_no, 2) = '48') then 0
+        else 0
+        end
+        desc
+    </select>
 
 </mapper>
diff --git a/src/main/resources/mapper/ManLocDetlMapper.xml b/src/main/resources/mapper/ManLocDetlMapper.xml
index 5a4b28c..fa9b7c1 100644
--- a/src/main/resources/mapper/ManLocDetlMapper.xml
+++ b/src/main/resources/mapper/ManLocDetlMapper.xml
@@ -343,5 +343,17 @@
         update man_loc_detl set anfme = #{anfme}
         where node_id = #{nodeId} ;
     </update>
+    <update id="updateAnfme">
+        update man_loc_detl set anfme = #{anfme}
+        where loc_no = #{locNo} and matnr = #{matnr}
+        <choose>
+            <when test="batch != null and batch != ''">
+                and batch = #{batch}
+            </when>
+            <otherwise>
+                and (batch IS NULL OR batch = '')
+            </otherwise>
+        </choose>
+    </update>
 
 </mapper>
diff --git a/src/main/resources/mapper/OrderDetlMapper.xml b/src/main/resources/mapper/OrderDetlMapper.xml
index 74ebaf0..8c855f7 100644
--- a/src/main/resources/mapper/OrderDetlMapper.xml
+++ b/src/main/resources/mapper/OrderDetlMapper.xml
@@ -199,5 +199,20 @@
             </otherwise>
         </choose>
     </update>
+    <update id="increaseWorkQtyByOrderNo">
+        update man_order_detl
+        set work_qty = work_qty + #{qty}
+        where 1=1
+        and order_no = #{orderNo}
+        and matnr = #{matnr}
+        <choose>
+            <when test="batch != null and batch != ''">
+                and batch = #{batch}
+            </when>
+            <otherwise>
+                and (batch IS NULL OR batch = '')
+            </otherwise>
+        </choose>
+    </update>
 
 </mapper>
diff --git a/src/main/webapp/static/js/common.js b/src/main/webapp/static/js/common.js
index 547c43b..4dbf2d1 100644
--- a/src/main/webapp/static/js/common.js
+++ b/src/main/webapp/static/js/common.js
@@ -222,18 +222,18 @@
 ]
 
 var detlCols = [
-    {field: 'matnr', align: 'center',title: '鍟嗗搧缂栧彿锛堝搧鍙凤級', sort:true}
-    ,{field: 'maktx', align: 'center',title: '鍟嗗搧鍚嶇О锛堝搧鍚嶏級', sort:true}
+    {field: 'zpallet', align: 'center',title: '鎵樼洏鏉$爜', hide: false}
     ,{field: 'orderNo', align: 'center',title: '鍗曟嵁缂栧彿', hide: false}
-    ,{field: 'batch', align: 'center',title: '璐у搧鐗瑰緛', sort:true}
+    ,{field: 'matnr', align: 'center',title: '鍟嗗搧缂栧彿锛堝搧鍙凤級', sort:true}
+    ,{field: 'maktx', align: 'center',title: '鍟嗗搧鍚嶇О锛堝搧鍚嶏級', sort:true}
+    ,{field: 'batch', align: 'center',title: '鎵规', sort:true}
     ,{field: 'anfme', align: 'center',title: '鏁伴噺', hide: false}
-    ,{field: 'zpallet', align: 'center',title: '鎵樼洏鏉$爜', hide: false}
-
     ,{field: 'specs', align: 'center',title: '瑙勬牸', hide: false}
     ,{field: 'model', align: 'center',title: '浠g爜', hide: true}
     ,{field: 'color', align: 'center',title: '棰滆壊', hide: true}
     ,{field: 'brand', align: 'center',title: '鍝佺墝', hide: true}
     ,{field: 'unit', align: 'center',title: '鍗曚綅', hide: false}
+    ,{field: 'locNo', align: 'center',title: '搴撲綅', hide: false}
     ,{field: 'price', align: 'center',title: '鍗曚环', hide: true}
     ,{field: 'sku', align: 'center',title: 'sku', hide: true}
     ,{field: 'units', align: 'center',title: '鍗曚綅閲�', hide: true}
diff --git a/src/main/webapp/static/js/manLocDetl/manLocDetl.js b/src/main/webapp/static/js/manLocDetl/manLocDetl.js
index c906140..2743c87 100644
--- a/src/main/webapp/static/js/manLocDetl/manLocDetl.js
+++ b/src/main/webapp/static/js/manLocDetl/manLocDetl.js
@@ -2,12 +2,12 @@
 function getCol() {
     var cols = [
         {field: 'locNo', align: 'center',title: '搴撲綅鍙�'},
+        {field: 'zpallet', align: 'center',title: '鎵樼洏鏉$爜'},
         {field: 'matnr', align: 'center',title: '鍟嗗搧缂栧彿', sort:true}
         ,{field: 'maktx', align: 'center',title: '鍟嗗搧鍚嶇О', sort:true}
         ,{field: 'anfme', align: 'center',title: '鏁伴噺'}
-        ,{field: 'orderNo', align: 'center',title: '鍗曟嵁缂栧彿', hide: false}
-        ,{field: 'batch', align: 'center',title: '鎵瑰彿', width: 300, sort:true}
-        //,{field: 'zpallet', align: 'center',title: '鎵樼洏鏉$爜'}
+        ,{field: 'orderNo', align: 'center',title: '鍗曟嵁缂栧彿', hide: true}
+        ,{field: 'batch', align: 'center',title: '鎵瑰彿', sort:true}
         ,{field: 'specs', align: 'center',title: '瑙勬牸'}
         ,{field: 'model', align: 'center',title: '浠g爜', hide: true}
         ,{field: 'color', align: 'center',title: '棰滆壊', hide: true}
diff --git a/src/main/webapp/static/js/saasLog/saasLog.js b/src/main/webapp/static/js/saasLog/saasLog.js
index 6d2833e..5505981 100644
--- a/src/main/webapp/static/js/saasLog/saasLog.js
+++ b/src/main/webapp/static/js/saasLog/saasLog.js
@@ -23,14 +23,14 @@
         cols: [[
             {type: 'checkbox'}
             ,{field: 'id', align: 'center',title: 'id', hide:true}
-            ,{field: 'locNo', align: 'center',title: '搴撲綅'}
             ,{field: 'type$', align: 'center',title: '鎿嶄綔绫诲瀷'}
-            ,{field: 'matnr', align: 'center',title: '鐗╂枡鍙�'}
+            ,{field: 'locNo', align: 'center',title: '搴撲綅'}
+            ,{field: 'matnr', align: 'center',title: '鐗╂枡'}
+            ,{field: 'batch', align: 'center',title: '鎵规'}
             ,{field: 'anfme', align: 'center',title: '鏁伴噺'}
+            ,{field: 'createBy', align: 'center',title: '鎿嶄綔璐﹀彿'}
             ,{field: 'ioTime$', align: 'center',title: '鎿嶄綔鏃堕棿'}
-            ,{field: 'createBy', align: 'center',title: '', hide:true}
-
-            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:120}
+            // ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:120}
         ]],
         request: {
             pageName: 'curr',

--
Gitblit v1.9.1