From 0fc6123a213aa5568d3afb524f578d754de5933c Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期三, 19 十一月 2025 19:58:36 +0800
Subject: [PATCH] #盘点

---
 src/main/java/com/zy/asrs/service/WorkService.java                |    2 
 src/main/java/com/zy/asrs/service/impl/CheckOrderServiceImpl.java |    1 
 src/main/webapp/views/checkOrder/checkOrder.html                  |   26 ++++--
 src/main/resources/mapper/CheckOrderDetlMapper.xml                |    9 ++
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java       |  106 +++++++++++++++++++++++++
 src/main/java/com/zy/asrs/service/CheckOrderService.java          |    1 
 src/main/webapp/static/js/checkOrder/checkOrder.js                |   30 +++++++
 src/main/java/com/zy/asrs/controller/OutController.java           |   62 +++++++++++++++
 8 files changed, 223 insertions(+), 14 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/OutController.java b/src/main/java/com/zy/asrs/controller/OutController.java
index 60b2dec..48e8775 100644
--- a/src/main/java/com/zy/asrs/controller/OutController.java
+++ b/src/main/java/com/zy/asrs/controller/OutController.java
@@ -5,12 +5,14 @@
 import com.core.common.BaseRes;
 import com.core.common.Cools;
 import com.core.common.R;
+import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.service.*;
 import com.zy.common.model.LocDto;
 import com.zy.common.model.TaskDto;
 import com.zy.common.web.BaseController;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -46,6 +48,9 @@
 
     @Resource
     private OrderPakoutService orderPakOutService;
+    @Autowired
+    private CheckOrderService checkOrderService;
+
 
 
     @PostMapping("/out/pakout/orderDetlIds/auth")
@@ -220,4 +225,61 @@
         return R.ok();
     }
 
+    @PostMapping("/out/checkPakOut/auth")
+    @ManagerAuth(memo = "璁㈠崟鍑哄簱")
+    public synchronized R checkPakOut(@RequestBody List<LocDto> locDtos) throws InterruptedException {
+        if (Cools.isEmpty(locDtos)) {
+            return R.parse(BaseRes.PARAM);
+        }
+        List<LocDto> locDtoArrayList = new ArrayList<>();
+        for (LocDto locDto : locDtos){
+            if (locDto.getFrozen()!=1 && locDto.getFrozenLoc()!=1){
+                locDtoArrayList.add(locDto);
+            }
+        }
+        locDtos = locDtoArrayList;
+        if (Cools.isEmpty(locDtos)) {
+            return R.parse("搴撳瓨/搴撲綅琚喕缁擄紝璇峰鐞嗗悗鍑哄簱锛侊紒锛�");
+        }
+        boolean lack = true;
+        for (LocDto locDto : locDtos) {
+            if (!locDto.isLack()) {
+                lack = false;
+                break;
+            }
+        }
+        if (lack) {
+            return R.error("搴撳瓨涓嶈冻");
+        }
+
+        Thread.sleep(1000L);
+
+        List<TaskDto> taskDtos = new ArrayList<>();
+        // 鏍规嵁 锛堝簱浣� & 鍑哄簱绔欙級 鍒嗙粍锛� 鐞嗘兂鐘舵�侊細涓�缁勪负涓�娆″嚭搴撲换鍔�
+        for (LocDto locDto : locDtos) {
+            if (locDto.isLack()) { continue; }
+            TaskDto taskDto = new TaskDto(locDto.getLocNo(), locDto.getStaNo(), locDto);
+            if (TaskDto.has(taskDtos, taskDto)) {
+                TaskDto dto = TaskDto.find(taskDtos, taskDto);
+                assert dto != null;
+                dto.getLocDtos().addAll(taskDto.getLocDtos());
+            } else {
+                taskDtos.add(taskDto);
+            }
+        }
+        // -----------------------------------------------------------------------------------------------
+        for (TaskDto taskDto : taskDtos) {
+            BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo());
+            workService.checkStockOut(staNo, taskDto, getUserId());
+        }
+
+        String orderNo = taskDtos.get(0).getLocDtos().get(0).getOrderNo();
+        CheckOrder checkOrder = checkOrderService.selectOne(new EntityWrapper<CheckOrder>().eq("order_no", orderNo));
+        checkOrder.setSettle(11L);
+        if (!checkOrderService.updateById(checkOrder)) {
+            throw new CoolException("鏇存柊鐩樼偣鍗曠姸鎬佸け璐�");
+        }
+        return R.ok();
+    }
+
 }
diff --git a/src/main/java/com/zy/asrs/service/CheckOrderService.java b/src/main/java/com/zy/asrs/service/CheckOrderService.java
index 472ac66..520e858 100644
--- a/src/main/java/com/zy/asrs/service/CheckOrderService.java
+++ b/src/main/java/com/zy/asrs/service/CheckOrderService.java
@@ -2,7 +2,6 @@
 
 import com.zy.asrs.entity.CheckOrder;
 import com.baomidou.mybatisplus.service.IService;
-import com.zy.asrs.entity.CheckOrderDetl;
 import com.zy.common.model.LocDto;
 
 import java.util.List;
diff --git a/src/main/java/com/zy/asrs/service/WorkService.java b/src/main/java/com/zy/asrs/service/WorkService.java
index 8d34c6e..361e76f 100644
--- a/src/main/java/com/zy/asrs/service/WorkService.java
+++ b/src/main/java/com/zy/asrs/service/WorkService.java
@@ -42,6 +42,8 @@
 
     void stockOut(BasDevp staNo, TaskDto taskDto, Long userId);
 
+    void checkStockOut(BasDevp staNo, TaskDto taskDto, Long userId);
+
     /**
      * 绌烘澘鍏ュ簱
      * @return 搴撲綅鍙�
diff --git a/src/main/java/com/zy/asrs/service/impl/CheckOrderServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/CheckOrderServiceImpl.java
index 778076d..4f650e4 100644
--- a/src/main/java/com/zy/asrs/service/impl/CheckOrderServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/CheckOrderServiceImpl.java
@@ -1,6 +1,7 @@
 package com.zy.asrs.service.impl;
 
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.plugins.Page;
 import com.core.common.Cools;
 import com.core.exception.CoolException;
 import com.zy.asrs.entity.*;
diff --git a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
index ebb91c0..669e524 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -18,6 +18,7 @@
 import com.zy.asrs.utils.OrderInAndOutUtil;
 import com.zy.asrs.utils.Utils;
 import com.zy.common.model.*;
+import com.zy.common.model.enumUtils.OrderEnumVo;
 import com.zy.common.model.enums.IoWorkType;
 import com.zy.common.model.enums.WorkNoType;
 import com.zy.common.properties.SlaveProperties;
@@ -93,6 +94,12 @@
 
     @Resource
     private OrderPakoutService orderPakOutService;
+
+    @Autowired
+    private CheckOrderService checkOrderService;
+
+    @Autowired
+    private CheckOrderDetlService checkOrderDetlService;
 
     @Override
     @Transactional
@@ -390,7 +397,7 @@
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public void stockOut(BasDevp staNo, TaskDto taskDto, Long userId) {
         Date now = new Date();
         List<LocDto> locDtos = taskDto.getLocDtos();
@@ -403,8 +410,9 @@
         LocMast locMast = locMastService.selectById(taskDto.getLocNo());
         // 鍒ゆ柇鏄惁鏄洏鐐瑰崟
         String orderNo = taskDto.getLocDtos().get(0).getOrderNo();
-        OrderPakout orderPakout = orderPakOutService.selectByNo(orderNo);
-        int ioType = orderPakout.getDocType() == 8 ? 107 : (taskDto.isAll() ? 101 : 103);
+//        OrderPakout orderPakout = orderPakOutService.selectByNo(orderNo);
+        CheckOrder checkOrder = checkOrderService.selectOne(new EntityWrapper<CheckOrder>().eq("order_no", orderNo));
+        int ioType = checkOrder.getDocType() == 8 ? 107 : (taskDto.isAll() ? 101 : 103);
         StaDesc staDesc = staDescService.queryCrnStnAuto(ioType, locMast.getCrnNo(), staNo.getDevNo());
         // 鐢熸垚宸ヤ綔鍙�
         int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
@@ -486,6 +494,98 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void checkStockOut(BasDevp staNo, TaskDto taskDto, Long userId) {
+        Date now = new Date();
+        List<LocDto> locDtos = taskDto.getLocDtos();
+        for (LocDto locDto : locDtos) {
+            if (!taskDto.getLocNo().equals(locDto.getLocNo()) && !taskDto.getStaNo().equals(locDto.getStaNo())) {
+                throw new CoolException("璁㈠崟鍑哄簱寮傚父锛岃鑱旂郴绠$悊鍛�");
+            }
+        }
+        // 鑾峰彇搴撲綅
+        LocMast locMast = locMastService.selectById(taskDto.getLocNo());
+        int ioType = 107;
+        StaDesc staDesc = staDescService.queryCrnStnAuto(ioType, locMast.getCrnNo(), staNo.getDevNo());
+        // 鐢熸垚宸ヤ綔鍙�
+        int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
+        // 鐢熸垚宸ヤ綔妗�
+        WrkMast wrkMast = new WrkMast();
+        wrkMast.setWrkNo(workNo);
+        wrkMast.setIoTime(now);
+        wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
+        wrkMast.setIoType(ioType); // 鍏ュ嚭搴撶姸鎬�
+        wrkMast.setIoPri(13D); // 浼樺厛绾э細13
+        wrkMast.setCrnNo(locMast.getCrnNo());
+        wrkMast.setSourceStaNo(staDesc.getCrnStn() + ""); // 婧愮珯
+        wrkMast.setStaNo(staDesc.getStnNo() + ""); // 鐩爣绔�
+        wrkMast.setSourceLocNo(taskDto.getLocNo()); // 婧愬簱浣�
+        wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
+        wrkMast.setPicking("N"); // 鎷f枡
+        wrkMast.setExitMk("N"); // 閫�鍑�
+        wrkMast.setEmptyMk("N"); // 绌烘澘
+        wrkMast.setLinkMis("N");
+        wrkMast.setBarcode(locMast.getBarcode());
+        wrkMast.setAppeUser(userId); // 鎿嶄綔浜哄憳鏁版嵁
+        wrkMast.setAppeTime(now);
+        wrkMast.setModiUser(userId);
+        wrkMast.setModiTime(now);
+        if (!wrkMastService.insert(wrkMast)) {
+            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐ワ紝鍑哄簱搴撲綅鍙凤細" + taskDto.getLocNo());
+        }
+        // 鐢熸垚宸ヤ綔妗f槑缁�
+        for (LocDto locDto : taskDto.getLocDtos()) {
+            if (locDto.getAnfme() == null || locDto.getAnfme() <= 0.0D) {
+                continue;
+            }
+
+            List<CheckOrderDetl> checkOrderDetls = checkOrderDetlService.selectList(new EntityWrapper<CheckOrderDetl>()
+                    .eq("loc_no", locDto.getLocNo())
+                    .eq("matnr", locDto.getMatnr())
+                    .eq("batch", locDto.getBatch())
+                    .eq("order_no", locDto.getOrderNo())
+            );
+
+            if (checkOrderDetls.size() > 1) {
+                throw new CoolException("鏁版嵁澶т簬1,璇锋鏌ユ暟鎹�");
+            }
+
+            WrkDetl wrkDetl = new WrkDetl();
+            wrkDetl.sync(checkOrderDetls.get(0));
+            wrkDetl.setZpallet(wrkMast.getBarcode());
+            wrkDetl.setIoTime(now);
+            wrkDetl.setWrkNo(workNo);
+            wrkDetl.setBatch(locDto.getBatch());
+            wrkDetl.setOrderNo(locDto.getOrderNo());
+            wrkDetl.setAnfme(locDto.getAnfme()); // 鏁伴噺
+            wrkDetl.setAppeTime(now);
+            wrkDetl.setAppeUser(userId);
+            wrkDetl.setModiTime(now);
+            wrkDetl.setModiUser(userId);
+            if (!wrkDetlService.insert(wrkDetl)) {
+                throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+            }
+            // 淇敼璁㈠崟鏄庣粏
+            checkOrderDetls.get(0).setStatus(2);
+            if (!checkOrderDetlService.updateById(checkOrderDetls.get(0))){
+                throw new CoolException("淇濆瓨璁㈠崟鏄庣粏澶辫触");
+            }
+        }
+        // 淇敼搴撲綅鐘舵��:   F.鍦ㄥ簱 ====>>> R.鍑哄簱棰勭害/P.鎷f枡/鐩樼偣/骞舵澘鍑哄簱涓�
+        locMast = locMastService.selectById(taskDto.getLocNo());
+        if (locMast.getLocSts().equals("F")) {
+            locMast.setLocSts(ioType == 101 ? "R" : "P");
+            locMast.setModiUser(userId);
+            locMast.setModiTime(now);
+            if (!locMastService.updateById(locMast)) {
+                throw new CoolException("棰勭害搴撲綅鐘舵�佸け璐ワ紝搴撲綅鍙凤細" + taskDto.getLocNo());
+            }
+        } else {
+            throw new CoolException(taskDto.getLocNo() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
+        }
+    }
+
+    @Override
     @Transactional
     public String emptyPlateIn(Integer devpNo, Long userId) {
         // 婧愮珯鐐圭姸鎬佹娴�
diff --git a/src/main/resources/mapper/CheckOrderDetlMapper.xml b/src/main/resources/mapper/CheckOrderDetlMapper.xml
index e58eb14..91fe3dc 100644
--- a/src/main/resources/mapper/CheckOrderDetlMapper.xml
+++ b/src/main/resources/mapper/CheckOrderDetlMapper.xml
@@ -20,7 +20,7 @@
         <result column="price" property="price" />
         <result column="sku" property="sku" />
         <result column="units" property="units" />
-        <result column="barcode" property="barcode" />
+        <result column="zpallet" property="zpallet" />
         <result column="origin" property="origin" />
         <result column="manu" property="manu" />
         <result column="manu_date" property="manuDate" />
@@ -52,6 +52,13 @@
         <result column="line_number" property="lineNumber" />
         <result column="loc_no" property="locNo" />
         <result column="version" property="version" />
+        <result column="standby1" property="standby1" />
+        <result column="standby2" property="standby2" />
+        <result column="standby3" property="standby3" />
+        <result column="box_type1" property="boxType1" />
+        <result column="box_type2" property="boxType2" />
+        <result column="box_type3" property="boxType3" />
+        <result column="loc_detl_id" property="locDetlId" />
 
     </resultMap>
 
diff --git a/src/main/webapp/static/js/checkOrder/checkOrder.js b/src/main/webapp/static/js/checkOrder/checkOrder.js
index 6642cbe..d752f36 100644
--- a/src/main/webapp/static/js/checkOrder/checkOrder.js
+++ b/src/main/webapp/static/js/checkOrder/checkOrder.js
@@ -1,7 +1,9 @@
 var insTbCount = 0;
 layui.config({
     base: baseUrl + "/static/layui/lay/modules/"
-}).use(['layer', 'form', 'table', 'util', 'admin', 'xmSelect', 'laydate','tableMerge'], function () {
+}).extend({
+    notice: 'notice/notice',
+}).use(['layer', 'form', 'table', 'util', 'admin', 'xmSelect', 'laydate','tableMerge','notice'], function () {
     var $ = layui.jquery;
     var layer = layui.layer;
     var form = layui.form;
@@ -12,6 +14,7 @@
     var layDate = layui.laydate;
     var laytpl = layui.laytpl;
     var tableMerge = layui.tableMerge;
+    var notice = layui.notice;
 
     // 娓叉煋鎼滅储妯℃澘
     $.ajax({
@@ -598,6 +601,31 @@
         })
     }
 
+    function pakout(tableCache, layerIndex) {
+        // let loadIndex = layer.load(2);
+        notice.msg('姝e湪鐢熸垚鐩樼偣鍑哄簱浠诲姟......', {icon: 4});
+        $.ajax({
+            url: baseUrl + "/out/checkPakOut/auth",
+            headers: {'token': localStorage.getItem('token')},
+            contentType: 'application/json;charset=UTF-8',
+            data: JSON.stringify(tableCache),
+            method: 'POST',
+            success: function (res) {
+                notice.destroy();
+                if (res.code === 200) {
+                    layer.close(layerIndex);
+                    layer.msg(res.msg, {icon: 1});
+                    insTb.reload({where: null});
+                    insTb2.reload({where: null, page: {curr: 1}});
+                } else if (res.code === 403) {
+                    top.location.href = baseUrl + "/";
+                } else {
+                    layer.msg(res.msg, {icon: 2})
+                }
+            }
+        });
+    }
+
 
     function createTask(orderId) {
         let loadIndex = layer.msg('璇锋眰涓�...', {icon: 16, shade: 0.01, time: false});
diff --git a/src/main/webapp/views/checkOrder/checkOrder.html b/src/main/webapp/views/checkOrder/checkOrder.html
index 498e2f5..354848a 100644
--- a/src/main/webapp/views/checkOrder/checkOrder.html
+++ b/src/main/webapp/views/checkOrder/checkOrder.html
@@ -37,14 +37,9 @@
         .btn-delete {
             display: none;
         }
-        /* 闄愬埗涓嬫媺妗嗗ぇ灏忥紝涓嶈秴鍑鸿〃鏍� */
-        .ew-select-fixed select {
-            max-width: 100%;
-            width: 100%;
-        }
-        .ew-select-fixed .layui-form-select dl {
-            max-height: 200px;
-            overflow-y: auto;
+        .layui-table-view .layui-table-cell .layui-select-title .layui-input {
+            height: 28px;
+            line-height: 28px;
         }
     </style>
 </head>
@@ -239,6 +234,21 @@
         </select>
     </div>
 </script>
+
+<script type="text/html" id="staBatchSelectDialog">
+    <form class="layui-form" style="padding: 25px 50px 30px 50px;text-align: center">
+        <select id="batchSelectStaBox" name="batchSta" lay-vertype="tips" lay-verify="required" required="">
+        </select>
+        <button style="margin-top: 30px" class="layui-btn" lay-filter="staBatchSelectConfirm" lay-submit="">纭畾</button>
+    </form>
+</script>
+
+<script type="text/template" id="batchStaSelectTpl">
+    <option value="">閫夋嫨鍑哄簱绔�</option>
+    {{#each list}}
+    <option value="{{this}}">{{this}}</option>
+    {{/each}}
+</script>
 <script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
 <script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script>
 <script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>

--
Gitblit v1.9.1