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