From 31ee3ad1f501f72f8a7aacabd4e0d427fc6110e7 Mon Sep 17 00:00:00 2001
From: mrzhssss <pro6@qq.com>
Date: 星期二, 22 三月 2022 09:38:39 +0800
Subject: [PATCH] #

---
 src/main/java/zy/cloud/wms/manager/controller/WaveController.java    |   15 ++
 src/main/webapp/static/js/wave/wave.js                               |   77 ++++++++++++++
 src/main/java/zy/cloud/wms/manager/service/impl/WaveServiceImpl.java |   10 +
 src/main/webapp/views/wave/wave.html                                 |    7 +
 src/main/java/zy/cloud/wms/manager/service/impl/WorkServiceImpl.java |   37 +++++++
 src/main/java/zy/cloud/wms/manager/service/WorkService.java          |    2 
 src/main/java/zy/cloud/wms/common/model/WaveStoDto.java              |   33 ++++++
 src/main/java/zy/cloud/wms/manager/service/WaveService.java          |    3 
 src/main/java/zy/cloud/wms/common/service/MainService.java           |   76 +++++++++++++++
 9 files changed, 253 insertions(+), 7 deletions(-)

diff --git a/src/main/java/zy/cloud/wms/common/model/WaveStoDto.java b/src/main/java/zy/cloud/wms/common/model/WaveStoDto.java
new file mode 100644
index 0000000..8a49715
--- /dev/null
+++ b/src/main/java/zy/cloud/wms/common/model/WaveStoDto.java
@@ -0,0 +1,33 @@
+package zy.cloud.wms.common.model;
+
+import lombok.Data;
+import zy.cloud.wms.manager.entity.OrderDetl;
+import zy.cloud.wms.manager.entity.WaveDetl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+public class WaveStoDto {
+
+    private String orderNo;
+
+    private List<MatnrDto> dtos;
+
+    public WaveStoDto() {
+    }
+
+    public WaveStoDto create(String id, List<WaveDetl> orderDetls){
+        this.setOrderNo(id);
+        List<MatnrDto> matnrDtos = new ArrayList<>();
+        for (WaveDetl waveDetl : orderDetls) {
+            MatnrDto matnrDto = new MatnrDto();
+            matnrDto.setMatnr(waveDetl.getMatnr());
+            matnrDto.setCount(waveDetl.getAnfme());
+            matnrDto.setBatch(waveDetl.getBatch());
+            matnrDtos.add(matnrDto);
+        }
+        this.setDtos(matnrDtos);
+        return this;
+    }
+}
diff --git a/src/main/java/zy/cloud/wms/common/service/MainService.java b/src/main/java/zy/cloud/wms/common/service/MainService.java
index 1ee698d..d3e184d 100644
--- a/src/main/java/zy/cloud/wms/common/service/MainService.java
+++ b/src/main/java/zy/cloud/wms/common/service/MainService.java
@@ -10,6 +10,7 @@
 import zy.cloud.wms.common.model.MatnrDto;
 import zy.cloud.wms.common.model.OrderStoDto;
 import zy.cloud.wms.common.model.ReceiveStoDto;
+import zy.cloud.wms.common.model.WaveStoDto;
 import zy.cloud.wms.common.utils.VersionUtils;
 import zy.cloud.wms.manager.entity.*;
 import zy.cloud.wms.manager.service.*;
@@ -503,4 +504,79 @@
             }
         }
     }
+
+    public Object waveOutPreview(WaveStoDto waveStoDto, Long hostId) {
+        if (Cools.isEmpty(waveStoDto) || Cools.isEmpty(waveStoDto.getDtos())) {
+            throw new CoolException("鏁版嵁寮傚父锛岃鑱旂郴绠$悊鍛�");
+        }
+        List<StoPreTab> res = new ArrayList<>();
+        // 妫�鏌ュ簱瀛樻槸鍚﹁冻澶�
+//        locDetlService.checkLocDetlCount(orderStoDto.getDtos());
+
+        for (MatnrDto matnrDto : waveStoDto.getDtos()) {
+            // 鍒ゆ柇鐗╂枡鏄惁瀛樺湪
+            Mat mat = matService.selectByMatnr(hostId, matnrDto.getMatnr());
+            if (null == mat) {
+                throw new CoolException(matnrDto.getMatnr() + "鐗╂枡灏氭湭鏇存柊銆�" + waveStoDto.getOrderNo() +"鍗曟嵁鍥犳涓柇锛�");
+            }
+
+            Double sumAnfme = Optional.ofNullable(locDetlService.selectCountByMatnr(mat.getMatnr(), hostId)).orElse(0.0D);
+            double lack = 0.0D;
+            // 缂鸿揣
+            if (sumAnfme < matnrDto.getCount()) {
+                lack = matnrDto.getCount() - sumAnfme;
+                // 瑙嗗浘瀵硅薄
+                StoPreTab tab = new StoPreTab();
+                tab.setTitle(mat.getMaktx() + "锛�" + mat.getMatnr() + "锛�");
+                tab.setMatnr(mat.getMatnr());
+                tab.setMaktx(mat.getMaktx());
+                tab.setAnfme(matnrDto.getCount());
+                tab.setLocNo("缂鸿揣");
+                tab.setTotal(lack);
+                tab.setReduce(lack);
+                tab.setRemQty(0.0D);
+                tab.setPrior(false);
+                tab.setPrior$("脳");
+                tab.setType(0);
+                res.add(tab);
+            }
+
+            // 鏌ヨ瀛樻湁褰撳墠鐗╂枡鐨勮揣浣�
+            List<LocDetl> locDetls = locDetlService.findOfSort(hostId, mat.getMatnr());
+            double issued = Optional.of(matnrDto.getCount() - lack).orElse(0.0D) ;
+            double anfme = issued;
+            for (LocDetl locDetl : locDetls) {
+                if (issued > 0) {
+                    // 瑙嗗浘瀵硅薄
+                    StoPreTab tab = new StoPreTab();
+                    tab.setTitle(mat.getMaktx() + "锛�" + mat.getMatnr() + "锛�");
+                    tab.setMatnr(mat.getMatnr());
+                    tab.setMaktx(mat.getMaktx());
+                    tab.setAnfme(matnrDto.getCount());
+
+                    tab.setLocNo(locDetl.getLocNo());
+                    tab.setNodeId(locDetl.getNodeId());
+                    tab.setTotal(locDetl.getAnfme());
+                    tab.setReduce(issued>=locDetl.getAnfme()?locDetl.getAnfme():issued);
+                    tab.setRemQty(tab.getTotal() - tab.getReduce());
+                    tab.setPrior(locDetlService.isPrior(locDetl.getNodeId(), mat.getMatnr()));
+                    tab.setPrior$(tab.getPrior()?"鉁�":"脳");
+                    tab.setType(1);
+                    res.add(tab);
+                    // 鍓╀綑寰呭嚭鏁伴噺閫掑噺
+                    issued = issued - locDetl.getAnfme();
+                }
+            }
+
+        }
+        res.sort(new Comparator<StoPreTab>() {
+            @Override
+            public int compare(StoPreTab o1, StoPreTab o2) {
+//                return o1.getMatnr().length() - o2.getMatnr().length();
+                return (int) (o1.getAnfme() - o2.getAnfme());
+            }
+        });
+        return res;
+
+    }
 }
diff --git a/src/main/java/zy/cloud/wms/manager/controller/WaveController.java b/src/main/java/zy/cloud/wms/manager/controller/WaveController.java
index 2f34179..3982916 100644
--- a/src/main/java/zy/cloud/wms/manager/controller/WaveController.java
+++ b/src/main/java/zy/cloud/wms/manager/controller/WaveController.java
@@ -8,6 +8,7 @@
 import com.core.common.DateUtils;
 import zy.cloud.wms.manager.entity.Wave;
 import zy.cloud.wms.manager.entity.WaveDetl;
+import zy.cloud.wms.manager.entity.param.StockOutParam;
 import zy.cloud.wms.manager.service.OrderService;
 import zy.cloud.wms.manager.service.WaveDetlService;
 import zy.cloud.wms.manager.service.WaveService;
@@ -18,8 +19,10 @@
 import zy.cloud.wms.common.web.BaseController;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+import zy.cloud.wms.manager.service.WorkService;
 
 import java.util.*;
+
 
 @RestController
 public class WaveController extends BaseController {
@@ -30,6 +33,8 @@
     private WaveDetlService waveDetlService;
     @Autowired
     private OrderService orderService;
+    @Autowired
+    private WorkService workService;
 
     @RequestMapping(value = "/wave/{id}/auth")
     @ManagerAuth
@@ -158,8 +163,14 @@
     @RequestMapping("/wave/createOut")
     @ManagerAuth
     public R createWaveOut(@RequestBody Wave wave){
-        waveService.createOut(wave,getUserId(),getHostId());
-        return R.ok();
+
+        return waveService.createOut(wave,getUserId(),getHostId());
+    }
+
+    @RequestMapping("/wave/preview")
+    @ManagerAuth
+    public R createWavePreview(@RequestBody StockOutParam stockOutParam){
+        return workService.wavePreview(stockOutParam, getUserId(), getHostId());
     }
 
 }
diff --git a/src/main/java/zy/cloud/wms/manager/service/WaveService.java b/src/main/java/zy/cloud/wms/manager/service/WaveService.java
index 9030a70..fa52561 100644
--- a/src/main/java/zy/cloud/wms/manager/service/WaveService.java
+++ b/src/main/java/zy/cloud/wms/manager/service/WaveService.java
@@ -1,9 +1,10 @@
 package zy.cloud.wms.manager.service;
 
+import com.core.common.R;
 import zy.cloud.wms.manager.entity.Wave;
 import com.baomidou.mybatisplus.service.IService;
 
 public interface WaveService extends IService<Wave> {
 
-    void createOut(Wave wave, Long userId, Long hostId);
+    R createOut(Wave wave, Long userId, Long hostId);
 }
diff --git a/src/main/java/zy/cloud/wms/manager/service/WorkService.java b/src/main/java/zy/cloud/wms/manager/service/WorkService.java
index 0b09670..8c0691c 100644
--- a/src/main/java/zy/cloud/wms/manager/service/WorkService.java
+++ b/src/main/java/zy/cloud/wms/manager/service/WorkService.java
@@ -42,4 +42,6 @@
     R stockCheckAuditing(Long checkId, Long userId, Long hostId);
 
     R initOutOrder(InitOrderParam param, Long userId, Long hostId);
+
+    R wavePreview(StockOutParam stockOutParam, Long userId, Long hostId);
 }
diff --git a/src/main/java/zy/cloud/wms/manager/service/impl/WaveServiceImpl.java b/src/main/java/zy/cloud/wms/manager/service/impl/WaveServiceImpl.java
index 841a1cb..cdce31c 100644
--- a/src/main/java/zy/cloud/wms/manager/service/impl/WaveServiceImpl.java
+++ b/src/main/java/zy/cloud/wms/manager/service/impl/WaveServiceImpl.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Cools;
+import com.core.common.R;
 import com.core.exception.CoolException;
 import org.springframework.beans.factory.annotation.Autowired;
 import zy.cloud.wms.manager.entity.WaveDetl;
@@ -33,7 +34,7 @@
      * @param hostId
      */
     @Override
-    public void createOut(Wave wave, Long userId, Long hostId) {
+    public R createOut(Wave wave, Long userId, Long hostId) {
         HashSet<String> orderIds = new HashSet<>();
         /**
          * 鎺х
@@ -63,5 +64,12 @@
         wave.setStatus((short) 1);
         waveService.update(wave,new EntityWrapper<Wave>()
                 .eq("id",wave.getId()));
+
+        /**
+         * 鐢熸垚鎷h揣鍗�
+         */
+
+
+        return R.ok();
     }
 }
diff --git a/src/main/java/zy/cloud/wms/manager/service/impl/WorkServiceImpl.java b/src/main/java/zy/cloud/wms/manager/service/impl/WorkServiceImpl.java
index d167f48..9e5baaf 100644
--- a/src/main/java/zy/cloud/wms/manager/service/impl/WorkServiceImpl.java
+++ b/src/main/java/zy/cloud/wms/manager/service/impl/WorkServiceImpl.java
@@ -14,6 +14,7 @@
 import zy.cloud.wms.common.model.MatnrDto;
 import zy.cloud.wms.common.model.OrderStoDto;
 import zy.cloud.wms.common.model.ReceiveStoDto;
+import zy.cloud.wms.common.model.WaveStoDto;
 import zy.cloud.wms.common.service.MainService;
 import zy.cloud.wms.common.utils.VersionUtils;
 import zy.cloud.wms.manager.entity.*;
@@ -62,6 +63,10 @@
     private ReceiveDetlService receiveDetlService;
     @Autowired
     ReceiveLogService receiveLogService;
+    @Autowired
+    private WaveService waveService;
+    @Autowired
+    private WaveDetlService waveDetlService;
 
 
     @Override
@@ -1093,4 +1098,36 @@
         return R.ok("鍒涘缓璁㈠崟鎴愬姛");
     }
 
+    @Override
+    public R wavePreview(StockOutParam stockOutParam, Long userId, Long hostId) {
+        Wrapper<Wave> wrapper = new EntityWrapper<Wave>()
+                .eq("id", stockOutParam.getOrderNo());
+
+        if (hostId != null) {
+            wrapper.eq("host_id", hostId);
+        }
+        Wave wave = waveService.selectOne(wrapper);
+
+        if (wave.getStatus() != 0){
+            return R.error("姝ゅ崟鎹棤娉曠敓鎴愭嫞璐у崟");
+        }
+//        Order order = orderService.selectByOrderNo(param.getOrderNo(), hostId);
+//        if (order.getSettle() != 1) {
+//            return R.error("姝ゅ崟鎹棤娉曠敓鎴愭嫞璐у崟");
+//        }
+        List<WaveDetl> waveDetls = waveDetlService.selectList(new EntityWrapper<WaveDetl>()
+                .eq("wave_id", stockOutParam.getOrderNo()));
+        if (Cools.isEmpty(waveDetls)) {
+            return R.error("姝ゅ崟鎹凡澶辨晥锛岃鑱旂郴绠$悊鍛�");
+        }
+//        List<OrderDetl> orderDetls = orderDetlService.selectByOrderNo(order.getOrderNo(), hostId);
+//        if (Cools.isEmpty(orderDetls)) {
+//            return R.error("姝ゅ崟鎹凡澶辨晥锛岃鑱旂郴绠$悊鍛�");
+//        }
+
+        WaveStoDto waveStoDto = new WaveStoDto().create(stockOutParam.getOrderNo(),waveDetls);
+//        OrderStoDto dto = new OrderStoDto().create(order.getOrderNo(), orderDetls);
+        return R.ok().add(mainService.waveOutPreview(waveStoDto, hostId));
+    }
+
 }
diff --git a/src/main/webapp/static/js/wave/wave.js b/src/main/webapp/static/js/wave/wave.js
index 776afdc..e78a5f0 100644
--- a/src/main/webapp/static/js/wave/wave.js
+++ b/src/main/webapp/static/js/wave/wave.js
@@ -1,13 +1,14 @@
 var pageCurr;
 layui.config({
     base: baseUrl + "/static/layui/lay/modules/"
-}).use(['table','laydate', 'form', 'admin'], function(){
+}).use(['table','laydate', 'form', 'admin','tableMerge'], function(){
     var table = layui.table;
     var $ = layui.jquery;
     var layer = layui.layer;
     var layDate = layui.laydate;
     var form = layui.form;
     var admin = layui.admin;
+    var tableMerge = layui.tableMerge;
 
     // 鏁版嵁娓叉煋
     tableIns = table.render({
@@ -128,7 +129,78 @@
         }
     });
 
-    function createWaveOut(mData) {
+    function createWaveOut(data) {
+        console.log(data)
+        var loadIndex = layer.load(2);
+        $.ajax({
+            url: baseUrl + "/wave/preview",
+            headers: {'token': localStorage.getItem('token')},
+            contentType: 'application/json;charset=UTF-8',
+            data: JSON.stringify({
+                orderNo: data.id
+            }),
+            method: 'POST',
+            success: function (res) {
+                layer.close(loadIndex);
+                if (res.code === 200){
+                    layer.open({
+                        type: 1
+                        ,title: false
+                        ,closeBtn: false
+                        ,offset: '100px'
+                        ,area: '1000px'
+                        ,shade: 0.5
+                        ,shadeClose: true
+                        ,btn: ['绔嬪嵆鐢熸垚', '绋嶅悗澶勭悊']
+                        ,btnAlign: 'c'
+                        ,moveType: 1 //鎷栨嫿妯″紡锛�0鎴栬��1
+                        ,content: $('#stoukOutPreview')
+                        ,success: function(layero, index){
+                            table.render({
+                                elem: '#stoPreTab',
+                                data: res.data,
+                                page: true,
+                                cellMinWidth: 100,
+                                height: 432,
+                                cols: [[
+                                    {field: 'title', title: '鍟嗗搧', merge: true, align: 'center'},
+                                    {field: 'anfme', title: '鎬绘暟閲�', merge: ['title'], align: 'center', style: 'font-weight: bold', width: 90},
+                                    {field: 'type', title: '浠撳簱', merge: true, align: 'center', templet: '#typeTpl', width: 90},
+                                    {field: 'locNo', title: '璐т綅', align: 'center'},
+                                    {field: 'prior$', title: '鎺ㄨ崘璐т綅', align: 'center', width: 100},
+                                    {field: 'reduce', title: '鏁伴噺', align: 'center', width: 90, style: 'font-weight: bold'},
+                                    // {field: 'remQty', title: '浣欓噺', align: 'center', width: 80},
+                                    {field: 'total', title: '鎬婚噺', align: 'center', width: 90},
+                                ]],
+                                done: function () {
+                                    tableMerge.render(this);
+                                    $('.layui-table-body.layui-table-main').css("overflow", "auto")
+                                }
+                            });
+
+                        }
+                        ,yes: function(index, layero){
+                            //鎸夐挳銆愰┈涓婃嫞璐с�戠殑鍥炶皟
+                            stockOut(res.data);
+                        }
+                        ,btn2: function(index, layero){
+                            //鎸夐挳銆愮◢鍚庡鐞嗐�戠殑鍥炶皟
+                            //return false 寮�鍚浠g爜鍙姝㈢偣鍑昏鎸夐挳鍏抽棴
+                        }
+                    });
+                } else if (res.code === 403){
+                    top.location.href = baseUrl+"/";
+                } else {
+                    layer.msg(res.msg, {icon: 2})
+                }
+            }
+        })
+
+
+    }
+    function stockOut(mData){
+
+        console.log(mData);
         layer.confirm('纭畾鐢熸垚璇ユ尝娆$殑鎷h揣鍗曪紵', {
             skin: 'layui-layer-admin',
             shade: .1
@@ -154,7 +226,6 @@
                 }
             })
         });
-
     }
     // 鐩戝惉琛屽伐鍏蜂簨浠�
     table.on('tool(wave)', function(obj){
diff --git a/src/main/webapp/views/wave/wave.html b/src/main/webapp/views/wave/wave.html
index c59091c..e05449a 100644
--- a/src/main/webapp/views/wave/wave.html
+++ b/src/main/webapp/views/wave/wave.html
@@ -31,6 +31,13 @@
 <div class="layui-form">
     <table class="layui-hide" id="wave" lay-filter="wave"></table>
 </div>
+<div id="stoukOutPreview" style="display: none">
+    <div  style="padding: 25px; line-height: 22px; background-color: #393D49; color: #fff; font-weight: 300;">
+        <span style="font-size: large; font-weight: bold">鎷h揣鍗曢瑙�</span>
+    </div>
+    <table id="stoPreTab" lay-filter="stoPreTab"></table>
+</div>
+
 <script type="text/html" id="toolbar">
     <div class="layui-btn-container">
 <!--        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData" >鏂板</button>-->

--
Gitblit v1.9.1