From 87bf4d9932d7e0a12daa98990f08d70e54e01d66 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期四, 27 五月 2021 14:56:27 +0800
Subject: [PATCH] #

---
 src/main/webapp/views/pda/pakout.html                                |  340 ++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/zy/cloud/wms/manager/controller/WorkController.java    |    6 
 src/main/java/zy/cloud/wms/manager/service/impl/WorkServiceImpl.java |   56 ++++++++
 src/main/java/zy/cloud/wms/manager/service/WorkService.java          |    2 
 4 files changed, 404 insertions(+), 0 deletions(-)

diff --git a/src/main/java/zy/cloud/wms/manager/controller/WorkController.java b/src/main/java/zy/cloud/wms/manager/controller/WorkController.java
index 6cc673a..5968a24 100644
--- a/src/main/java/zy/cloud/wms/manager/controller/WorkController.java
+++ b/src/main/java/zy/cloud/wms/manager/controller/WorkController.java
@@ -44,6 +44,12 @@
         return workService.stockPakin(number, getUserId());
     }
 
+    @RequestMapping("/stock/pakout")
+    @ManagerAuth(memo = "鍑哄簱")
+    public R stockPakout(@RequestBody PakoutParam number) {
+        return workService.stockPakout(number, getUserId());
+    }
+
     @RequestMapping("/stock/in")
     @ManagerAuth(memo = "涓婃灦")
     public R stockIn(@RequestBody StockInParam stockInParam) {
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 85a45ea..a6b41ff 100644
--- a/src/main/java/zy/cloud/wms/manager/service/WorkService.java
+++ b/src/main/java/zy/cloud/wms/manager/service/WorkService.java
@@ -9,6 +9,8 @@
 
     R stockPakin(PakinParam param, Long userId);
 
+    R stockPakout(PakoutParam param, Long userId);
+
     R stockIn(StockInParam param, Long userId);
 
     R stockOutCheck(String number, Long userId);
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 c7b9c42..8ebcfdf 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
@@ -137,6 +137,62 @@
 
     @Override
     @Transactional
+    public R stockPakout(PakoutParam param, Long userId) {
+        Mat mat = matService.selectByMatnr(param.getMatnr());
+        Node node = nodeService.selectByUuid(param.getNodeUuid());
+        LocDetl locDetl = locDetlService.getLocDetl(node.getId(), mat.getMatnr());
+        if (locDetl == null || locDetl.getAnfme() < param.getCount()) {
+            return R.error(mat.getMaktx() + "搴撳瓨涓嶈冻");
+        }
+        Pakout pakout = new Pakout(
+                String.valueOf(snowflakeIdWorker.nextId()),    // 浠诲姟鍙穂闈炵┖]
+                3L,    // 宸ヤ綔鐘舵��
+                null,    // 鎵樼洏鍙�
+                param.getCount(),    // 鍑哄簱鏁伴噺
+                node.getId(),    // 鍏宠仈璐т綅[闈炵┖]
+                node.getUuid(),    // 璐т綅[闈炵┖]
+                mat.getMatnr(),    // 鍟嗗搧缂栫爜[闈炵┖]
+                null,    // 鍟嗗搧鍚嶇О
+                null,    // 鍚嶇О
+                null,    // 灏虹爜
+                null,    // 鍨嬪彿
+                null,    // 鎵瑰彿
+                null,    // 鍗曚綅
+                null,    // SKC
+                null,    // 鍗曟嵁绫诲瀷
+                null,    // 鍗曟嵁缂栧彿
+                null,    // 瀹㈡埛鍚嶇О
+                null,    // 鍝侀」鏁�
+                null,    // 鏁伴噺
+                null,    // 閲嶉噺
+                1,    // 鐘舵��
+                userId,    // 娣诲姞浜哄憳
+                new Date(),    // 娣诲姞鏃堕棿
+                userId,    // 淇敼浜哄憳
+                new Date(),    // 淇敼鏃堕棿
+                null    // 澶囨敞
+        );
+        VersionUtils.setPakout(pakout, mat);
+        // 淇濆瓨鍑哄簱閫氱煡鍗�
+        if (!pakoutService.insert(pakout)) {
+            throw new CoolException("淇濆瓨鍑哄簱閫氱煡鍗曞け璐�");
+        }
+        if (param.getCount()>=locDetl.getAnfme()) {
+            // 鍒犻櫎搴撳瓨鏄庣粏
+            if (!locDetlService.removeStock(node.getId(), mat.getMatnr())) {
+                throw new CoolException("鍒犻櫎搴撳瓨鏄庣粏澶辫触");
+            }
+        } else {
+            // 淇敼搴撳瓨鏄庣粏鏁伴噺
+            if (!locDetlService.reduceStock(node.getId(), mat.getMatnr(), param.getCount())) {
+                throw new CoolException("淇敼搴撳瓨鏄庣粏鏁伴噺澶辫触");
+            }
+        }
+        return R.ok();
+    }
+
+    @Override
+    @Transactional
     public R stockIn(StockInParam param, Long userId) {
         Node node = nodeService.selectByUuid(param.getNodeId());
         if (node == null) {
diff --git a/src/main/webapp/views/pda/pakout.html b/src/main/webapp/views/pda/pakout.html
new file mode 100644
index 0000000..d6fba06
--- /dev/null
+++ b/src/main/webapp/views/pda/pakout.html
@@ -0,0 +1,340 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"/>
+    <title>鐩存帴鍑哄簱</title>
+    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../static/css/pda.css" media="all">
+    <script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
+    <script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
+    <script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script>
+    <style>
+        .header-input {
+            width: 65%;
+            height: 40px;
+        }
+
+        .number-tool {
+            margin-left: 10px;
+            padding: 1px 0 1px 5px;
+            display: inline-block;
+            width: 120px;
+        }
+        .number-tool:after {
+            clear: both;
+            content: "";
+            display: table;
+        }
+        .number-tool button {
+            background-color: #fff;
+            margin-top: 3px;
+            font-size: 16px;
+            height: 25px;
+            float: left;
+            width: 25px;
+            border: 1px solid #777777;
+        }
+        .number-tool input {
+            text-align: center;
+            height: 30px;
+            float: left;
+            margin: 0 5px;
+            width: 50px;
+            padding: 0;
+        }
+        #yes {
+            margin: 10px 10px;
+            padding: 5px 20px;
+            font-weight: 600;
+        }
+        #no {
+            margin: 10px 10px;
+            padding: 5px 20px;
+            color: darkred;
+        }
+
+        /**缁胯壊鍕�*/
+        #node-ok {
+            float: left;
+            width: 15px;
+            height: 15px;
+            border-radius: 50%;
+            margin-top: 13px;
+            background-color: #2ac845;
+            display: none;
+        }
+    </style>
+</head>
+<body>
+<!-- 澶撮儴 -->
+<header>
+    <div class="layui-input-inline" style="margin-top: 0px">
+        <label class="layui-form-label">璐т綅缂栧彿</label>
+        <input style="float: left" class="layui-input header-input" id="locNo" type="text" onkeyup="findLoc(this)" placeholder="鎵爜 / 杈撳叆" autocomplete="off">
+        <span id="node-ok"></span>
+    </div>
+    <div class="layui-input-inline" style="margin: 5px 0">
+        <label class="layui-form-label" style="width: 84px">鍟嗗搧鏉$爜</label>
+        <input class="layui-input header-input" type="text" id="matnrByLoc" onkeyup="findMat(this)" placeholder="鎵爜 / 杈撳叆" autocomplete="off">
+    </div>
+</header>
+
+<!-- 涓讳綋 -->
+<main>
+    <table class="layui-table" id="chooseData" lay-filter="chooseData"></table>
+</main>
+<!-- 灏鹃儴 -->
+<footer>
+    <div class="layui-btn-container">
+        <button type="button" id="reset-btn" class="layui-btn layui-btn-primary" onclick="reset()">閲嶇疆</button>
+        <span id="tips"></span>
+    </div>
+</footer>
+
+<div id="pakout" style="display: none; text-align: center;padding-top: 10px">
+    <div class="form-item">
+        <span>鐗╂枡</span>
+        <input id="matnr" type="text" disabled="disabled" style="width: 70%">
+    </div>
+    <div class="form-item">
+        <span>鍚嶇О</span>
+        <input id="maktx" type="text" disabled="disabled" style="width: 70%">
+    </div>
+    <div class="form-item" style="margin-top: 5px">
+        <span style="vertical-align: middle">鏁伴噺</span>
+        <div class="number-tool" style="vertical-align: middle">
+            <button onclick="reduce()">-</button><input id="count" type="number"><button onclick="add()">+</button>
+        </div>
+    </div>
+    <button id="no" onclick="no()">鍙栨秷</button>
+    <button id="yes" onclick="yes()">鍑哄簱</button>
+</div>
+</body>
+<script>
+    window.onload = function(){document.getElementById("locNo").focus();}
+    var tableIns;
+    var anfmeLayer;
+    var nodeUuid;
+    var locDetlData = [];
+    layui.use(['table','laydate', 'form'], function() {
+        var table = layui.table;
+        var $ = layui.jquery;
+        var layer = layui.layer;
+        var form = layui.form;
+
+        tableIns = table.render({
+            elem: '#chooseData',
+            data: [],
+            limit: 500,
+            cellMinWidth: 50,
+            cols: [[
+                {fixed: 'left', align: 'center', field: 'anfme', title: '鏁伴噺', event: 'stoOut', style:'font-weight: bold;color: blue', width:70},
+                // {field: 'matnr', align: 'center', title: '鍟嗗搧缂栧彿', event: 'modify'},
+                {field: 'maktx', align: 'center', title: '鍟嗗搧鍚嶇О', event: 'stoOut'}
+            ]],
+            done: function (res, curr, count) {
+            }
+        });
+
+        // 鐩戝惉琛屽伐鍏蜂簨浠�
+        table.on('tool(chooseData)', function(obj) {
+            var data = obj.data;
+            switch (obj.event) {
+                case 'stoOut':
+                    anfmeLayer = layer.open({
+                        type: 1,
+                        offset: '20px',
+                        title: '鐩存帴鍑哄簱',
+                        shadeClose: true,
+                        area: ['80%', '200px'],
+                        content: $("#pakout"),
+                        success: function (layero, index) {
+                            $('#matnr').val(data.matnr);
+                            $('#maktx').val(data.maktx);
+                            $('#count').val(data.anfme);
+                            maxCount = data.anfme;
+                        },
+                        end: function () {
+                            anfmeLayer = null;
+                        }
+                    });
+                    break;
+            }
+        });
+
+    });
+
+    /**
+     * 鏍规嵁璐т綅鏌ユ壘搴撳瓨
+     */
+    function findLoc(el){
+        if (isEmpty(el.value)) {
+            $('#node-ok').hide();
+            return;
+        }
+        $.ajax({
+            url: baseUrl + "/locDetl/queryDetl/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: {
+                uuid: el.value
+            },
+            method: 'GET',
+            success: function (res) {
+                $('#matnrByLoc').val("");
+                if (res.code === 200) {
+                    nodeUuid = el.value;
+                    locDetlData = [];
+                    initTableData(res.data);
+                    if (res.data != null && res.data.length > 0) {
+                        $('#node-ok').show();
+                    } else {
+                        $('#node-ok').hide();
+                    }
+                } else if (res.code === 403) {
+                    top.location.href = baseUrl + "/pda";
+                } else {
+                    tips(res.msg, true);
+                    nodeUuid = null;
+                    locDetlData = [];
+                }
+            }
+        })
+    }
+
+    // 娣诲姞琛ㄦ牸鏁版嵁
+    function initTableData(data) {
+        for (var i=0;i<data.length;i++) {
+            var toPush = true;
+            for (var j=0;j<locDetlData.length;j++){
+                if (data[i].matnr === locDetlData[j].matnr) {
+                    toPush  = false;
+                }
+            }
+            if (toPush) {
+                locDetlData.push(data[i]);
+            }
+        }
+        tableIns.reload({data: locDetlData});
+    }
+
+    // 搴撳瓨涓殑鍟嗗搧
+    function findMat(el){
+        if (isEmpty(el.value)) {
+            return;
+        }
+        for (var i=0;i<locDetlData.length;i++) {
+            if (el.value === locDetlData[i].matnr) {
+                if (anfmeLayer == null) {
+                    anfmeLayer = layer.open({
+                        type: 1,
+                        offset: '20px',
+                        title: '鐩存帴鍑哄簱',
+                        shadeClose: true,
+                        area: ['80%', '200px'],
+                        content: $("#pakout"),
+                        success: function (layero, index) {
+                            $('#matnr').val(locDetlData[i].matnr);
+                            $('#maktx').val(locDetlData[i].maktx);
+                            $('#count').val(locDetlData[i].anfme);
+                            maxCount = locDetlData[i].anfme;
+                        },
+                        end: function () {
+                            anfmeLayer = null;
+                        }
+                    });
+                }
+            }
+        }
+    }
+
+
+    /*************************************  寮圭獥  ****************************************/
+    var countDom = $('#count');
+    var minCount = 0;
+    var maxCount;
+    function add() {
+        if (countDom.val() >= maxCount) {
+            return;
+        }
+        countDom.val(Number(countDom.val()) + 1);
+    }
+    function reduce() {
+        if (countDom.val() <= minCount + 1) {
+            return;
+        }
+        countDom.val(countDom.val() - 1);
+    }
+
+    // 鍑哄簱
+    function yes(){
+        var matnr = $('#matnr').val();
+        var count = $('#count').val();
+        for (var j=0;j<locDetlData.length;j++){
+            if (matnr === locDetlData[j].matnr) {
+                if (count <= minCount) {
+                    tips("鏁伴噺蹇呴』澶т簬0", true);
+                    $('#count').val(1);
+                    return;
+                }
+                if (count > maxCount) {
+                    tips("搴撳瓨涓嶈冻", true);
+                    $('#count').val(maxCount);
+                    return;
+                }
+            }
+        }
+        $.ajax({
+            url: baseUrl + "/work/stock/pakout",
+            headers: {'token': localStorage.getItem('token')},
+            data: JSON.stringify({
+                nodeUuid: nodeUuid,
+                matnr: matnr,
+                count: count
+            }),
+            contentType:'application/json;charset=UTF-8',
+            async: false,
+            method: 'POST',
+            success: function (res) {
+                layer.close(anfmeLayer);
+                if (res.code === 200) {
+                    tips("鍑哄簱鎴愬姛");
+                    findLoc(document.getElementById("locNo"));
+                } else if (res.code === 403) {
+                    top.location.href = baseUrl + "/pda";
+                } else {
+                    $('#matnrByLoc').val("");
+                    tips(res.msg, true);
+                }
+            }
+        });
+    }
+
+    function no() {
+        $('#matnrByLoc').val("");
+        layer.close(anfmeLayer);
+    }
+
+
+    // 閲嶇疆
+    function reset() {
+        $('#locNo').val("");
+        $('#matnrByLoc').val("");
+        locDetlData = [];
+        nodeUuid = null;
+        tableIns.reload({data: locDetlData});
+        $('#node-ok').hide();
+    }
+
+    /**
+     * 鎻愮ず淇℃伅
+     * @param msg 鎻愮ず鍐呭
+     * @param warn true锛氱孩鑹插瓧浣�
+     */
+    function tips(msg, warn) {
+        layer.msg(msg, {icon: warn?2:1})
+    }
+</script>
+</html>

--
Gitblit v1.9.1