From 6ee1f81722e1ab6d18e19952e64a9e5377ffa3ef Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期五, 02 四月 2021 10:27:22 +0800 Subject: [PATCH] # --- src/main/webapp/views/locStatis/locStatis.html | 48 ++++++ src/main/resources/mapper/LocDetlMapper.xml | 51 ++++++ src/main/java/zy/cloud/wms/manager/controller/StatisController.java | 71 ++++++++ src/main/java/zy/cloud/wms/manager/mapper/LocDetlMapper.java | 7 src/main/java/zy/cloud/wms/manager/service/LocDetlService.java | 13 + src/main/webapp/static/js/locStatis/locStatis.js | 243 ++++++++++++++++++++++++++++++ src/main/java/zy/cloud/wms/manager/service/impl/LocDetlServiceImpl.java | 12 + 7 files changed, 445 insertions(+), 0 deletions(-) diff --git a/src/main/java/zy/cloud/wms/manager/controller/StatisController.java b/src/main/java/zy/cloud/wms/manager/controller/StatisController.java new file mode 100644 index 0000000..4c787ee --- /dev/null +++ b/src/main/java/zy/cloud/wms/manager/controller/StatisController.java @@ -0,0 +1,71 @@ +package zy.cloud.wms.manager.controller; + +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; +import com.baomidou.mybatisplus.plugins.Page; +import com.core.annotations.ManagerAuth; +import com.core.common.R; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import zy.cloud.wms.common.utils.VersionUtils; +import zy.cloud.wms.common.web.BaseController; +import zy.cloud.wms.manager.entity.LocDetl; +import zy.cloud.wms.manager.entity.Mat; +import zy.cloud.wms.manager.service.LocDetlService; +import zy.cloud.wms.manager.service.MatService; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.net.URLEncoder; +import java.util.List; +import java.util.Map; + +/** + * Created by vincent on 2021/4/2 + */ +@RestController +public class StatisController extends BaseController { + + @Autowired + private MatService matService; + @Autowired + private LocDetlService locDetlService; + + @RequestMapping(value = "/stock/statis/auth") + @ManagerAuth + public R stockStatis(@RequestParam(defaultValue = "1")Integer curr, + @RequestParam(defaultValue = "10")Integer limit, + @RequestParam Map<String, Object> param) { + Page<LocDetl> stockStatis = locDetlService.getStockStatis(toPage(curr, limit, param, LocDetl.class)); + for (LocDetl locDetl : stockStatis.getRecords()) { + Mat mat = matService.selectById(locDetl.getMatnr()); + if (mat != null) { + VersionUtils.setLocDetl(locDetl, mat); + } + } + return R.ok().add(stockStatis); + } + + @RequestMapping(value = "/stock/statis/export") + @ManagerAuth + public void stockStatisExport(HttpServletResponse response) throws IOException { + List<LocDetl> excel = locDetlService.getStockStatisExcel(); + for (LocDetl locDetl : excel) { + Mat mat = matService.selectById(locDetl.getMatnr()); + if (mat != null) { + VersionUtils.setLocDetl(locDetl, mat); + } + } + response.setContentType("application/vnd.ms-excel"); + response.setCharacterEncoding("utf-8"); + String fileName = URLEncoder.encode("搴撳瓨鏄庣粏缁熻鎶ヨ〃", "UTF-8"); + response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); + EasyExcel.write(response.getOutputStream(), LocDetl.class) + .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) + .sheet("sheet1") + .doWrite(excel); + } + +} diff --git a/src/main/java/zy/cloud/wms/manager/mapper/LocDetlMapper.java b/src/main/java/zy/cloud/wms/manager/mapper/LocDetlMapper.java index c372d49..36e9c2c 100644 --- a/src/main/java/zy/cloud/wms/manager/mapper/LocDetlMapper.java +++ b/src/main/java/zy/cloud/wms/manager/mapper/LocDetlMapper.java @@ -32,4 +32,11 @@ List<LocDetl> getLocDetlStatis(); List<LocDetl> selectByNodeUuid(String uuid); + + List<LocDetl> getStockStatis(Map<String, Object> map); + + Integer getStockStatisCount(Map<String, Object> map); + + List<LocDetl> getStockStatisExcel(); + } diff --git a/src/main/java/zy/cloud/wms/manager/service/LocDetlService.java b/src/main/java/zy/cloud/wms/manager/service/LocDetlService.java index a5c32af..8b38696 100644 --- a/src/main/java/zy/cloud/wms/manager/service/LocDetlService.java +++ b/src/main/java/zy/cloud/wms/manager/service/LocDetlService.java @@ -69,4 +69,17 @@ */ List<LocDetl> findByNodeUuid(String uuid); + /** + * 搴撳瓨缁熻鎶ヨ〃鍒嗛〉 + * @param page + * @return + */ + Page<LocDetl> getStockStatis(Page<LocDetl> page); + + /** + * 搴撳瓨缁熻鎶ヨ〃Excel + * @return + */ + List<LocDetl> getStockStatisExcel(); + } diff --git a/src/main/java/zy/cloud/wms/manager/service/impl/LocDetlServiceImpl.java b/src/main/java/zy/cloud/wms/manager/service/impl/LocDetlServiceImpl.java index 6d88519..5b7c44e 100644 --- a/src/main/java/zy/cloud/wms/manager/service/impl/LocDetlServiceImpl.java +++ b/src/main/java/zy/cloud/wms/manager/service/impl/LocDetlServiceImpl.java @@ -141,5 +141,17 @@ return this.baseMapper.selectByNodeUuid(uuid); } + @Override + public Page<LocDetl> getStockStatis(Page<LocDetl> page) { + page.setRecords(baseMapper.getStockStatis(page.getCondition())); + page.setTotal(baseMapper.getStockStatisCount(page.getCondition())); + return page; + } + + @Override + public List<LocDetl> getStockStatisExcel() { + return this.baseMapper.getStockStatisExcel(); + } + } diff --git a/src/main/resources/mapper/LocDetlMapper.xml b/src/main/resources/mapper/LocDetlMapper.xml index 57207b4..3bf1b0d 100644 --- a/src/main/resources/mapper/LocDetlMapper.xml +++ b/src/main/resources/mapper/LocDetlMapper.xml @@ -148,4 +148,55 @@ order by mld.create_time </select> + <select id="getStockStatis" resultMap="BaseResultMap"> + select * from + ( + select + ROW_NUMBER() over (order by sum(a.anfme) desc) as row + , a.matnr + , sum(a.anfme) as anfme + from man_loc_detl a + where 1=1 + <include refid="stockOutCondition"></include> + group by a.matnr + ) t where t.row between ((#{pageNumber}-1)*#{pageSize}+1) and (#{pageNumber}*#{pageSize}) + </select> + + <select id="getStockStatisCount" parameterType="java.util.Map" resultType="java.lang.Integer"> + select count(1) as count from + ( + select + a.matnr + from man_loc_detl a + where 1=1 + <include refid="stockOutCondition"></include> + group by a.matnr + ) b + </select> + + <sql id="stockOutCondition"> + <if test="node_id!=null and node_id!='' "> + and a.node_id like '%' + #{node_id} + '%' + </if> + <if test="loc_no!=null and loc_no!='' "> + and a.loc_no like '%' + #{loc_no} + '%' + </if> + <if test="matnr!=null and matnr!='' "> + and a.matnr like '%' + #{matnr} + '%' + </if> + <if test="maktx!=null and maktx!='' "> + and a.maktx like '%' + #{maktx} + '%' + </if> + </sql> + + <select id="getStockStatisExcel" resultMap="BaseResultMap"> + select + ROW_NUMBER() over (order by sum(a.anfme) desc) as row + , a.matnr + , sum(a.anfme) as anfme + from man_loc_detl a + where 1=1 + group by a.matnr + </select> + </mapper> diff --git a/src/main/webapp/static/js/locStatis/locStatis.js b/src/main/webapp/static/js/locStatis/locStatis.js new file mode 100644 index 0000000..d1b6518 --- /dev/null +++ b/src/main/webapp/static/js/locStatis/locStatis.js @@ -0,0 +1,243 @@ +var pageCurr; +function getCol() { + var cols = [ + {field: 'anfme', align: 'center',title: '搴撳瓨鏁伴噺', style: 'font-weight: bold'} + ]; + arrRemove(detlCols, "field", "anfme") + arrRemove(detlCols, "field", "zpallet") + cols.push.apply(cols, detlCols); + // cols.push({field: 'anfme', align: 'center',title: '鏁伴噺', style: 'font-weight: bold'} + // ) + return cols; +} + +layui.use(['table','laydate', 'form'], function(){ + var table = layui.table; + var $ = layui.jquery; + var layer = layui.layer; + var layDate = layui.laydate; + var form = layui.form; + + // 鏁版嵁娓叉煋 + tableIns = table.render({ + elem: '#locDetlStatis', + headers: {token: localStorage.getItem('token')}, + url: baseUrl+'/stock/statis/auth', + page: true, + limit: 16, + limits: [16, 30, 50, 100, 200, 500], + even: true, + toolbar: '#toolbar', + cellMinWidth: 50, + cols: [getCol()], + request: { + pageName: 'curr', + pageSize: 'limit' + }, + parseData: function (res) { + return { + 'code': res.code, + 'msg': res.msg, + 'count': res.data.total, + 'data': res.data.records + } + }, + response: { + statusCode: 200 + }, + done: function(res, curr, count) { + if (res.code === 403) { + top.location.href = baseUrl+"/"; + } + pageCurr=curr; + limit(); + form.on('checkbox(tableCheckbox)', function (data) { + var _index = $(data.elem).attr('table-index')||0; + if(data.elem.checked){ + res.data[_index][data.value] = 'Y'; + }else{ + res.data[_index][data.value] = 'N'; + } + }); + } + }); + + // 鐩戝惉鎺掑簭浜嬩欢 + table.on('sort(locDetlStatis)', function (obj) { + var searchData = {}; + $.each($('#search-box [name]').serializeArray(), function() { + searchData[this.name] = this.value; + }); + searchData['orderByField'] = obj.field; + searchData['orderByType'] = obj.type; + tableIns.reload({ + where: searchData, + page: { + curr: 1 + }, + done: function (res, curr, count) { + if (res.code === 403) { + top.location.href = baseUrl+"/"; + } + pageCurr=curr; + limit(); + } + }); + }); + + // 鐩戝惉澶村伐鍏锋爮浜嬩欢 + table.on('toolbar(locDetlStatis)', function (obj) { + var checkStatus = table.checkStatus(obj.config.id); + switch(obj.event) { + case 'exportAll': + layer.closeAll(); + layer.load(1, {shade: [0.1,'#fff']}); + location.href = baseUrl + "/stock/statis/export"; + layer.closeAll('loading'); + break; + case 'exportData': + layer.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){ + var titles=[]; + var fields=[]; + obj.config.cols[0].map(function (col) { + if (col.type === 'normal' && col.hide === false && col.toolbar == null) { + titles.push(col.title); + fields.push(col.field); + } + }); + var exportData = {}; + $.each($('#search-box [name]').serializeArray(), function() { + exportData[this.name] = this.value; + }); + var param = { + 'locDetl': exportData, + 'fields': fields + }; + $.ajax({ + url: baseUrl+"/locDetl/export/auth", + headers: {'token': localStorage.getItem('token')}, + data: JSON.stringify(param), + dataType:'json', + contentType:'application/json;charset=UTF-8', + method: 'POST', + success: function (res) { + layer.closeAll(); + if (res.code === 200) { + table.exportFile(titles,res.data,'xls'); + } else if (res.code === 403) { + top.location.href = baseUrl+"/"; + } else { + layer.msg(res.msg) + } + } + }); + }); + break; + } + }); + + // 鐩戝惉琛屽伐鍏蜂簨浠� + table.on('tool(locDetlStatis)', function(obj){ + var data = obj.data; + switch (obj.event) { + // 璇︽儏 + case 'detail': + layer.open({ + type: 2, + title: '璇︽儏', + maxmin: true, + area: [top.detailWidth, top.detailHeight], + shadeClose: false, + content: 'locDetl_detail.html', + success: function(layero, index){ + setFormVal(layer.getChildFrame('#detail', index), data, true); + top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true); + layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide(); + layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"}); + layero.find('iframe')[0].contentWindow.layui.form.render('select'); + layero.find('iframe')[0].contentWindow.layui.form.render('checkbox'); + } + }); + break; + + } + }); + + + // 鎼滅储鏍忔悳绱簨浠� + form.on('submit(search)', function (data) { + pageCurr = 1; + tableReload(false); + }); + + // 鎼滅储鏍忛噸缃簨浠� + form.on('submit(reset)', function (data) { + pageCurr = 1; + clearFormVal($('#search-box')); + tableReload(false); + }); + + // 鏃堕棿閫夋嫨鍣� + layDate.render({ + elem: '#modiTime\\$', + type: 'datetime' + }); + layDate.render({ + elem: '#appeTime\\$', + type: 'datetime' + }); + + +}); + +// 鍏抽棴鍔ㄤ綔 +$(document).on('click','#data-detail-close', function () { + parent.layer.closeAll(); +}); + +function tableReload(child) { + var searchData = {}; + $.each($('#search-box [name]').serializeArray(), function() { + searchData[this.name] = this.value; + }); + (child ? parent.tableIns : tableIns).reload({ + where: searchData, + page: { + curr: pageCurr + }, + done: function (res, curr, count) { + if (res.code === 403) { + top.location.href = baseUrl+"/"; + } + pageCurr=curr; + if (res.data.length === 0 && count !== 0) { + tableIns.reload({ + where: searchData, + page: { + curr: pageCurr-1 + } + }); + pageCurr -= 1; + } + limit(child); + } + }); +} + +function detailScreen(index) { + var detail = layer.getChildFrame('#data-detail', index); + var height = detail.height()+60; + if (height > ($(window).height()*0.9)) { + height = ($(window).height()*0.8); + } + layer.style(index, { +// top: (($(window).height()-height)/3)+"px", + height: height+'px' + }); +} + +$('body').keydown(function () { + if (event.keyCode === 13) { + $("#search").click(); + } +}); diff --git a/src/main/webapp/views/locStatis/locStatis.html b/src/main/webapp/views/locStatis/locStatis.html new file mode 100644 index 0000000..3f2a060 --- /dev/null +++ b/src/main/webapp/views/locStatis/locStatis.html @@ -0,0 +1,48 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title></title> + <meta name="renderer" content="webkit"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all"> + <link rel="stylesheet" href="../../static/css/cool.css" media="all"> + <link rel="stylesheet" href="../../static/css/common.css" media="all"> +</head> +<body> + +<!-- 鎼滅储鏍� --> +<div id="search-box" class="layui-form layui-card-header"> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input class="layui-input" type="text" name="matnr" placeholder="鍟嗗搧缂栧彿" autocomplete="off"> + </div> + </div> + <!-- 寰呮坊鍔� --> + <div id="data-search-btn" class="layui-btn-container layui-form-item" style="display: inline-block"> + <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">鎼滅储</button> + <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">閲嶇疆</button> + </div> +</div> + +<!-- 琛ㄦ牸 --> +<div class="layui-form"> + <table class="layui-hide" id="locDetlStatis" lay-filter="locDetlStatis"></table> +</div> +<script type="text/html" id="toolbar"> + <div class="layui-btn-container"> + <button class="layui-btn" lay-event="exportAll" style="margin-top: -0px">瀵煎嚭鍏ㄩ儴</button> + </div> +</script> + + +<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/locStatis/locStatis.js" charset="utf-8"></script> + +</body> +</html> + -- Gitblit v1.9.1