From e148a7fab59cb1ba4c9db531bf84253033c47280 Mon Sep 17 00:00:00 2001 From: zhangc <zc@123> Date: 星期六, 04 一月 2025 19:53:28 +0800 Subject: [PATCH] 添加MES库存同步功能及配置 --- src/main/java/com/zy/asrs/task/handler/ReportDataHandler.java | 56 ++++- src/main/webapp/views/locDetlCompare/locDetlCompare.html | 59 ++++++ src/main/java/com/zy/asrs/entity/param/MesStock.java | 19 ++ src/main/webapp/static/js/locDetlCompare/locDetlStatis.js | 293 ++++++++++++++++++++++++++++++++ src/main/java/com/zy/asrs/entity/param/MesStockOpAmountAmount.java | 12 + src/main/java/com/zy/asrs/service/MesLocDetlService.java | 9 + src/main/java/com/zy/asrs/entity/param/MesStockOpAmount.java | 12 + src/main/java/com/zy/asrs/service/impl/MesLocDetlServiceImpl.java | 15 + src/main/java/com/zy/asrs/task/AgvWarnScheduler.java | 7 src/main/java/com/zy/asrs/entity/param/MesStockMaterialInfo.java | 11 + 10 files changed, 477 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/zy/asrs/entity/param/MesStock.java b/src/main/java/com/zy/asrs/entity/param/MesStock.java new file mode 100644 index 0000000..f59e701 --- /dev/null +++ b/src/main/java/com/zy/asrs/entity/param/MesStock.java @@ -0,0 +1,19 @@ +package com.zy.asrs.entity.param; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class MesStock implements Serializable { + + private MesStockMaterialInfo materialInfo; + + + private MesStockOpAmount opAmount; + + + private String batchNo; + + +} diff --git a/src/main/java/com/zy/asrs/entity/param/MesStockMaterialInfo.java b/src/main/java/com/zy/asrs/entity/param/MesStockMaterialInfo.java new file mode 100644 index 0000000..1d23820 --- /dev/null +++ b/src/main/java/com/zy/asrs/entity/param/MesStockMaterialInfo.java @@ -0,0 +1,11 @@ +package com.zy.asrs.entity.param; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class MesStockMaterialInfo implements Serializable { + private String materialCode; + private String materialName; +} diff --git a/src/main/java/com/zy/asrs/entity/param/MesStockOpAmount.java b/src/main/java/com/zy/asrs/entity/param/MesStockOpAmount.java new file mode 100644 index 0000000..3368a65 --- /dev/null +++ b/src/main/java/com/zy/asrs/entity/param/MesStockOpAmount.java @@ -0,0 +1,12 @@ +package com.zy.asrs.entity.param; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class MesStockOpAmount implements Serializable { + + private MesStockOpAmountAmount amount; + +} diff --git a/src/main/java/com/zy/asrs/entity/param/MesStockOpAmountAmount.java b/src/main/java/com/zy/asrs/entity/param/MesStockOpAmountAmount.java new file mode 100644 index 0000000..6a1ce65 --- /dev/null +++ b/src/main/java/com/zy/asrs/entity/param/MesStockOpAmountAmount.java @@ -0,0 +1,12 @@ +package com.zy.asrs.entity.param; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class MesStockOpAmountAmount implements Serializable { + + private Double amount; + +} diff --git a/src/main/java/com/zy/asrs/service/MesLocDetlService.java b/src/main/java/com/zy/asrs/service/MesLocDetlService.java new file mode 100644 index 0000000..e0bcfc5 --- /dev/null +++ b/src/main/java/com/zy/asrs/service/MesLocDetlService.java @@ -0,0 +1,9 @@ +package com.zy.asrs.service; + +import com.baomidou.mybatisplus.service.IService; +import com.zy.asrs.entity.MesLocDetl; + +public interface MesLocDetlService extends IService<MesLocDetl> { + + +} diff --git a/src/main/java/com/zy/asrs/service/impl/MesLocDetlServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MesLocDetlServiceImpl.java new file mode 100644 index 0000000..22060ef --- /dev/null +++ b/src/main/java/com/zy/asrs/service/impl/MesLocDetlServiceImpl.java @@ -0,0 +1,15 @@ +package com.zy.asrs.service.impl; + +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.zy.asrs.entity.MesLocDetl; +import com.zy.asrs.mapper.MesLocDetlMapper; +import com.zy.asrs.service.MesLocDetlService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class MesLocDetlServiceImpl extends ServiceImpl<MesLocDetlMapper, MesLocDetl> implements MesLocDetlService { + + +} diff --git a/src/main/java/com/zy/asrs/task/AgvWarnScheduler.java b/src/main/java/com/zy/asrs/task/AgvWarnScheduler.java index e55d588..d2531ac 100644 --- a/src/main/java/com/zy/asrs/task/AgvWarnScheduler.java +++ b/src/main/java/com/zy/asrs/task/AgvWarnScheduler.java @@ -82,7 +82,10 @@ } JSONObject jsonObject = JSON.parseObject(response); if (jsonObject.get("errmsg").equals("ok")) { - return;//鍙戦�佹垚鍔� + //鍙戦�佹垚鍔� + return; + } else { + log.error("鍙戦�佸け璐ワ紝閿欒淇℃伅锛歿}", jsonObject.get("errmsg")); } } } @@ -108,7 +111,7 @@ for (String s : split) { t = t + Integer.parseInt(s); } - return t + Integer.parseInt(config2.getValue()); + return t + Integer.parseInt(config2.getValue()) * (times + 1 - split.length); } else { return Integer.parseInt(split[times]); } diff --git a/src/main/java/com/zy/asrs/task/handler/ReportDataHandler.java b/src/main/java/com/zy/asrs/task/handler/ReportDataHandler.java index a378f4e..e9b0f01 100644 --- a/src/main/java/com/zy/asrs/task/handler/ReportDataHandler.java +++ b/src/main/java/com/zy/asrs/task/handler/ReportDataHandler.java @@ -4,12 +4,15 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.exception.CoolException; import com.zy.asrs.entity.MesLocDetl; import com.zy.asrs.entity.ReportData; import com.zy.asrs.entity.ReportDataLog; +import com.zy.asrs.entity.param.MesStock; import com.zy.asrs.service.ApiLogService; +import com.zy.asrs.service.MesLocDetlService; import com.zy.asrs.service.ReportDataLogService; import com.zy.asrs.service.ReportDataService; import com.zy.asrs.task.AbstractHandler; @@ -22,8 +25,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.Date; -import java.util.Map; +import java.util.*; import java.util.concurrent.TimeUnit; /** @@ -43,6 +45,10 @@ @Autowired private ApiLogService apiLogService; + + + @Autowired + private MesLocDetlService mesLocDetlService; @Value("${mes.url}") private String url; @@ -122,21 +128,43 @@ @Transactional public ReturnT<String> stock(Map<String, Object> mesTokenInfo) { - String result = doHttpRequest("{}", mesTokenInfo, "鍚屾MES搴撳瓨", url, stock, null, "127.0.0.1"); - JSONObject jsonObject = JSONObject.parseObject(result); - Object o = jsonObject.get("data"); - if (o != null) { - JSONObject jsonObject1 = JSONObject.parseObject(o.toString()); - Object o1 = jsonObject1.get("list"); - if (o1 != null) { - JSONArray jsonArray = JSONArray.parseArray(o1.toString()); - for (int i = 0; i < jsonArray.size(); i++) { - JSONObject jsonObject2 = jsonArray.getJSONObject(i); + mesLocDetlService.delete(new EntityWrapper<MesLocDetl>().eq("1", 1)); + boolean flag = true; + Map<String, Object> req = new HashMap<>(); + int i = 1; + while (flag) { + req.put("page", i); + req.put("size", 1000); + String result = doHttpRequest(JSONObject.toJSONString(req), mesTokenInfo, "鍚屾MES搴撳瓨", url, stock, null, "127.0.0.1"); + JSONObject jsonObject = JSONObject.parseObject(result); + Object o = jsonObject.get("data"); + List<MesLocDetl> mesLocDetls = new ArrayList<>(); + MesLocDetl mesLocDetl; + if (o != null) { + JSONObject jsonObject1 = JSONObject.parseObject(o.toString()); + Object o1 = jsonObject1.get("list"); + if (o1 != null) { + List<MesStock> mesStocks = JSONArray.parseArray(o1.toString(), MesStock.class); + if (mesStocks.isEmpty()) { + flag = false; + } + for (MesStock mesStock : mesStocks) { + mesLocDetl = new MesLocDetl(); + mesLocDetl.setMatnr(mesStock.getMaterialInfo().getMaterialCode()); + mesLocDetl.setMaktx(mesStock.getMaterialInfo().getMaterialName()); + mesLocDetl.setBatch(mesStock.getBatchNo()); + mesLocDetl.setAnfme(mesStock.getOpAmount().getAmount().getAmount()); + mesLocDetls.add(mesLocDetl); + } + } else { + flag = false; } } + if (!mesLocDetls.isEmpty()) { + mesLocDetlService.insertBatch(mesLocDetls); + } + i++; } - MesLocDetl mesLocDetl=new MesLocDetl(); - return SUCCESS; } } diff --git a/src/main/webapp/static/js/locDetlCompare/locDetlStatis.js b/src/main/webapp/static/js/locDetlCompare/locDetlStatis.js new file mode 100644 index 0000000..a5f0b1e --- /dev/null +++ b/src/main/webapp/static/js/locDetlCompare/locDetlStatis.js @@ -0,0 +1,293 @@ +var pageCurr; +function getCol() { + var cols = [ + {field: 'anfme', align: 'center',title: 'WMS搴撳瓨鏁伴噺', style: 'font-weight: bold'} + ,{field: 'anfme2', align: 'center',title: 'MES搴撳瓨鏁伴噺', style: 'font-weight: bold'} + ,{field: 'suppCode', align: 'center',title: '璐ф灦鐮�', hide: false} + ,{field: 'matnr', align: 'center',title: '鍟嗗搧缂栫爜'} + ,{field: 'maktx', align: 'center',title: '鍟嗗搧鍚嶇О'} + //,{field: 'batch', align: 'center',title: '鎵规鑷敱椤�'} + //,{field: 'threeCode', align: 'center',title: '閿�鍞鍗曞彿'} + ]; + + 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+'/agv/locDetl/statis/auth', + page: true, + limit: 20, + limits: [20, 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'; + } + }); + /** + * 鏄剧ず搴撳瓨鎬绘暟閲� + */ + // $.ajax({ + // url: baseUrl+"/agv/locDetl/count", + // headers: {'token': localStorage.getItem('token')}, + // contentType:'application/json;charset=UTF-8', + // method: 'POST', + // success: function (res) { + // $("#countNum").text(res.data + '涓�'); + // } + // }); + + } + }); + + // 鐩戝惉鎺掑簭浜嬩欢 + 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.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 + }; + var loadIndex = layer.msg('姝e湪瀵煎嚭...', {icon: 16, shade: 0.01, time: false}); + $.ajax({ + url: baseUrl+"/agv/locDetl/statis/export", + headers: {'token': localStorage.getItem('token')}, + data: JSON.stringify(param), + dataType:'json', + contentType:'application/json;charset=UTF-8', + method: 'POST', + success: function (res) { + layer.close(loadIndex); + 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; + 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+"/agv/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/locDetlCompare/locDetlCompare.html b/src/main/webapp/views/locDetlCompare/locDetlCompare.html new file mode 100644 index 0000000..bcfc8b6 --- /dev/null +++ b/src/main/webapp/views/locDetlCompare/locDetlCompare.html @@ -0,0 +1,59 @@ +<!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 class="layui-inline"> + <fieldset class="layui-elem-field"> + <legend>鎬昏鏁伴噺</legend> + <div class="layui-field-box" id="countNum"> + 璇风◢绛� + </div> + </fieldset> + </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 layui-col-md1"> + <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/agvLocDetlStatis/locDetlStatis.js" charset="utf-8"></script> + +</body> +</html> + -- Gitblit v1.9.1