From f82ba31e05fffb1f528a46d3f98ba9a6508cd4bc Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@63.com> Date: 星期一, 25 七月 2022 15:13:28 +0800 Subject: [PATCH] # --- src/main/java/com/zy/asrs/controller/OrderController.java | 87 +++++++++++- src/main/java/com/zy/asrs/mapper/WrkDetlMapper.java | 5 src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java | 11 + src/main/java/com/zy/asrs/entity/WrkMast.java | 7 - src/main/java/com/zy/asrs/task/WorkMastScheduler.java | 3 src/main/java/com/zy/asrs/entity/WrkMastLog.java | 2 src/main/webapp/views/order/order.html | 109 +++++++++++++++ src/main/resources/mapper/WrkDetlMapper.xml | 25 +++ src/main/java/com/zy/asrs/entity/result/WrkTraceVo.java | 33 ++++ src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java | 4 src/main/webapp/static/js/order/order.js | 69 +++++++++ src/main/java/com/zy/asrs/entity/ViewWorkInBean.java | 4 src/main/java/com/zy/asrs/service/WrkDetlService.java | 4 13 files changed, 340 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/zy/asrs/controller/OrderController.java b/src/main/java/com/zy/asrs/controller/OrderController.java index d79943c..de1f495 100644 --- a/src/main/java/com/zy/asrs/controller/OrderController.java +++ b/src/main/java/com/zy/asrs/controller/OrderController.java @@ -7,15 +7,13 @@ import com.core.annotations.ManagerAuth; import com.core.common.*; import com.core.exception.CoolException; -import com.zy.asrs.entity.DocType; -import com.zy.asrs.entity.Order; -import com.zy.asrs.entity.OrderDetl; +import com.zy.asrs.entity.*; import com.zy.asrs.entity.param.OrderDomainParam; -import com.zy.asrs.service.DocTypeService; -import com.zy.asrs.service.OrderDetlService; -import com.zy.asrs.service.OrderService; +import com.zy.asrs.entity.result.WrkTraceVo; +import com.zy.asrs.service.*; import com.zy.common.model.DetlDto; import com.zy.common.web.BaseController; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; @@ -33,6 +31,14 @@ private SnowflakeIdWorker snowflakeIdWorker; @Autowired private DocTypeService docTypeService; + @Autowired + private WrkDetlService wrkDetlService; + @Autowired + private WrkMastService wrkMastService; + @Autowired + private WrkMastLogService wrkMastLogService; + @Autowired + private LocDetlService locDetlService; @RequestMapping(value = "/order/nav/list/auth") @ManagerAuth @@ -214,8 +220,73 @@ } - - + @PostMapping(value = "/order/wrk/trace/auth") + @ManagerAuth + public R orderWrkTrace(@RequestParam("orderId") Long orderId) { + Order order = orderService.selectById(orderId); + if (null == order) { + return R.error("鍗曟嵁涓嶅瓨鍦�"); + } + // 鏁伴噺缁熻 + List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(orderId); + double totalQty = 0; + double wrkQty = 0; + double lackQty = 0; + for (OrderDetl orderDetl : orderDetls) { + totalQty = totalQty + orderDetl.getAnfme(); + wrkQty = wrkQty + orderDetl.getQty(); + double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getQty()).orElse(0.0D); + if (issued > 0.0) { + List<LocDetl> locDetls = locDetlService.queryStock(orderDetl.getMatnr(), orderDetl.getBatch(), orderDetl.getOrigin(), null); + for (LocDetl locDetl : locDetls) { + if (issued > 0) { + issued = issued - locDetl.getAnfme(); + } else { + break; + } + } + } + if (issued > 0.0) { + lackQty = lackQty + issued; + } + } + // 浠诲姟杩芥函 + List<WrkTraceVo> wrkTraceVos = new ArrayList<>(); + List<WrkDetl> wrkDetls = wrkDetlService.selectAndLogByOrderNoGroupByMatnrOfSum(order.getOrderNo()); + for (WrkDetl wrkDetl : wrkDetls) { + WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", wrkDetl.getWrkNo()).eq("io_time", wrkDetl.getIoTime())); + if (wrkMast == null) { + WrkMastLog wrkMastLog = wrkMastLogService.selectOne(new EntityWrapper<WrkMastLog>().eq("wrk_no", wrkDetl.getWrkNo()).eq("io_time", wrkDetl.getIoTime())); + if (wrkMastLog != null) { + wrkMast = new WrkMast(); + BeanUtils.copyProperties(wrkMastLog, wrkMast); + } else { + continue; + } + } + boolean exist = false; + for (WrkTraceVo vo : wrkTraceVos) { + if (vo.getWrkNo().equals(wrkMast.getWrkNo()) && vo.getIoTimeStr().equals(DateUtils.convert(wrkMast.getIoTime()))) { + vo.getWrkDetls().add(wrkDetl); + exist = true; + } + } + if (!exist) { + WrkTraceVo vo = new WrkTraceVo(wrkMast.getWrkNo(), DateUtils.convert(wrkMast.getIoTime()), wrkMast, wrkDetl); + wrkTraceVos.add(vo); + } + } + if (!Cools.isEmpty(wrkTraceVos) && wrkTraceVos.size() > 1) { + wrkTraceVos.sort((o1, o2) -> (int) (o2.getWrkMast().getIoTime().getTime() - o1.getWrkMast().getIoTime().getTime())); + } + return R.ok().add(Cools + .add("list", wrkTraceVos) + .add("orderNo", order.getOrderNo()) + .add("totalQty", totalQty) + .add("wrkQty", wrkQty) + .add("lackQty", lackQty) + ); + } // ------------------------------------------------------------------------------------------------ diff --git a/src/main/java/com/zy/asrs/entity/ViewWorkInBean.java b/src/main/java/com/zy/asrs/entity/ViewWorkInBean.java index 15a23ed..0089da5 100644 --- a/src/main/java/com/zy/asrs/entity/ViewWorkInBean.java +++ b/src/main/java/com/zy/asrs/entity/ViewWorkInBean.java @@ -1,6 +1,5 @@ package com.zy.asrs.entity; -import com.baomidou.mybatisplus.annotations.TableField; import com.core.common.Cools; import com.core.common.SpringUtils; import com.zy.system.entity.User; @@ -59,8 +58,7 @@ private String batch; @ApiModelProperty(value= "鍗曟嵁缂栧彿") - @TableField("order_no") - private String orderNo; + private String order_no; @ApiModelProperty(value= "瑙勬牸") private String specs; diff --git a/src/main/java/com/zy/asrs/entity/WrkMast.java b/src/main/java/com/zy/asrs/entity/WrkMast.java index 668b6b8..69a19c4 100644 --- a/src/main/java/com/zy/asrs/entity/WrkMast.java +++ b/src/main/java/com/zy/asrs/entity/WrkMast.java @@ -495,13 +495,6 @@ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.errorTime); } - public void setErrorMemo(String errorMemo) { - if (errorMemo.length() > 255) { - errorMemo = errorMemo.substring(0, 150); - } - this.errorMemo = errorMemo; - } - public String getLogErrTime$(){ if (Cools.isEmpty(this.logErrTime)){ return ""; diff --git a/src/main/java/com/zy/asrs/entity/WrkMastLog.java b/src/main/java/com/zy/asrs/entity/WrkMastLog.java index 35d2d77..bee870a 100644 --- a/src/main/java/com/zy/asrs/entity/WrkMastLog.java +++ b/src/main/java/com/zy/asrs/entity/WrkMastLog.java @@ -55,7 +55,7 @@ */ @ApiModelProperty(value= "宸ヤ綔鐘舵��") @TableField("wrk_sts") - private Integer wrkSts; + private Long wrkSts; /** * 鍏ュ嚭搴撶被鍨� diff --git a/src/main/java/com/zy/asrs/entity/result/WrkTraceVo.java b/src/main/java/com/zy/asrs/entity/result/WrkTraceVo.java new file mode 100644 index 0000000..a435599 --- /dev/null +++ b/src/main/java/com/zy/asrs/entity/result/WrkTraceVo.java @@ -0,0 +1,33 @@ +package com.zy.asrs.entity.result; + +import com.zy.asrs.entity.WrkDetl; +import com.zy.asrs.entity.WrkMast; +import com.zy.common.model.DetlDto; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by vincent on 2022/7/22 + */ +@Data +public class WrkTraceVo { + + private Integer wrkNo; + + private String ioTimeStr; + + private WrkMast wrkMast; + + private List<WrkDetl> wrkDetls = new ArrayList<>(); + + private List<DetlDto> detlDtos = new ArrayList<>(); + + public WrkTraceVo(Integer wrkNo, String ioTimeStr, WrkMast wrkMast, WrkDetl wrkDetl) { + this.wrkNo = wrkNo; + this.ioTimeStr = ioTimeStr; + this.wrkMast = wrkMast; + this.wrkDetls.add(wrkDetl); + } +} diff --git a/src/main/java/com/zy/asrs/mapper/WrkDetlMapper.java b/src/main/java/com/zy/asrs/mapper/WrkDetlMapper.java index 97d48d8..e74b6f5 100644 --- a/src/main/java/com/zy/asrs/mapper/WrkDetlMapper.java +++ b/src/main/java/com/zy/asrs/mapper/WrkDetlMapper.java @@ -20,7 +20,12 @@ List<WrkDetl> selectAndLogByOrderNo(String orderNo); + List<WrkDetl> selectAndLogByOrderNoGroupByMatnrOfSum(String orderNo); + int updateInspect( @Param("wrkNo")Integer wrkNo, @Param("matnr")String matnr, @Param("batch")String batch); List<WrkDetl> selectPakoutQuery(@Param("staNo")Integer staNo, @Param("matnr")String matnr); + + int updateOrderNo(@Param("orderNo")String orderNo, @Param("wrkNo")Integer wrkNo, @Param("matnr")String matnr, @Param("batch")String batch); + } diff --git a/src/main/java/com/zy/asrs/service/WrkDetlService.java b/src/main/java/com/zy/asrs/service/WrkDetlService.java index 5e0de95..7018d0f 100644 --- a/src/main/java/com/zy/asrs/service/WrkDetlService.java +++ b/src/main/java/com/zy/asrs/service/WrkDetlService.java @@ -16,8 +16,12 @@ List<WrkDetl> selectAndLogByOrderNo(String orderNo); + List<WrkDetl> selectAndLogByOrderNoGroupByMatnrOfSum(String orderNo); + boolean updateInspect(Integer wrkNo, String matnr, String batch); List<WrkDetl> selectPakoutQuery(Integer staNo, String matnr); + boolean updateOrderNo(String orderNo, Integer wrkNo, String matnr, String batch); + } diff --git a/src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java index 97779cc..a32f666 100644 --- a/src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java @@ -141,6 +141,10 @@ throw new CoolException("淇敼鍗曟嵁鏄庣粏鏁伴噺澶辫触"); } } + // 宸ヤ綔妗f槑缁嗘洿鏂板崟鎹紪鍙� + for (WrkDetl wrkDetl : wrkDetls) { + wrkDetlService.updateOrderNo(orderNo, wrkDetl.getWrkNo(), wrkDetl.getMatnr(), wrkDetl.getBatch()); + } } catch (Exception e) { log.error("", e); return false; diff --git a/src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java index a911107..47bede0 100644 --- a/src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java @@ -72,6 +72,11 @@ } @Override + public List<WrkDetl> selectAndLogByOrderNoGroupByMatnrOfSum(String orderNo) { + return this.baseMapper.selectAndLogByOrderNoGroupByMatnrOfSum(orderNo); + } + + @Override public boolean updateInspect(Integer wrkNo, String matnr, String batch) { return this.baseMapper.updateInspect(wrkNo, matnr, batch) > 0; } @@ -80,4 +85,10 @@ public List<WrkDetl> selectPakoutQuery(Integer staNo, String matnr) { return this.baseMapper.selectPakoutQuery(staNo, matnr); } + + @Override + public boolean updateOrderNo(String orderNo, Integer wrkNo, String matnr, String batch) { + return baseMapper.updateOrderNo(orderNo, wrkNo, matnr, batch) > 0; + } + } diff --git a/src/main/java/com/zy/asrs/task/WorkMastScheduler.java b/src/main/java/com/zy/asrs/task/WorkMastScheduler.java index 10bffd4..34be800 100644 --- a/src/main/java/com/zy/asrs/task/WorkMastScheduler.java +++ b/src/main/java/com/zy/asrs/task/WorkMastScheduler.java @@ -36,6 +36,9 @@ ReturnT<String> returnT = workMastHandler.start(wrkMast); if (!returnT.isSuccess()) { wrkMast.setUpdMk("X"); + if (returnT.getMsg().length() > 255) { + returnT.setMsg(returnT.getMsg().substring(0, 150)); + } wrkMast.setErrorMemo(returnT.getMsg()); wrkMast.setErrorTime(new Date()); if (!wrkMastService.updateById(wrkMast)) { diff --git a/src/main/resources/mapper/WrkDetlMapper.xml b/src/main/resources/mapper/WrkDetlMapper.xml index 03ec74f..a9a84f2 100644 --- a/src/main/resources/mapper/WrkDetlMapper.xml +++ b/src/main/resources/mapper/WrkDetlMapper.xml @@ -94,6 +94,21 @@ and (awml.manu_type is null or awml.manu_type != '鎵嬪姩鍙栨秷') </select> + <select id="selectAndLogByOrderNoGroupByMatnrOfSum" resultMap="BaseResultMap"> + select awd.wrk_no, awd.io_time, awd.matnr, sum(awd.anfme) as anfme + from asr_wrk_detl awd + left join asr_wrk_mast awm on awd.wrk_no = awm.wrk_no and awd.io_time = awm.io_time + where order_no = #{orderNo} + group by awd.wrk_no, awd.io_time, awd.matnr + union + select distinct awdl.wrk_no, awdl.io_time, awdl.matnr, sum(awdl.anfme) as anfme + from asr_wrk_detl_log awdl + left join asr_wrk_mast_log awml on awdl.wrk_no = awml.wrk_no and awdl.io_time = awml.io_time + where awdl.order_no = #{orderNo} + and (awml.manu_type is null or awml.manu_type != '鎵嬪姩鍙栨秷') + group by awdl.wrk_no, awdl.io_time, awdl.matnr + </select> + <update id="updateInspect"> update asr_wrk_detl set inspect = 1 @@ -115,4 +130,14 @@ and awd.matnr + '-' + awd.batch = #{matnr} </select> + <update id="updateOrderNo"> + update asr_wrk_detl + set order_no = #{orderNo} + , modi_time = getdate() + where 1=1 + and wrk_no = #{wrkNo} + and matnr = #{matnr} + <include refid="batchSeq"></include> + </update> + </mapper> diff --git a/src/main/webapp/static/js/order/order.js b/src/main/webapp/static/js/order/order.js index cde142a..cc58f12 100644 --- a/src/main/webapp/static/js/order/order.js +++ b/src/main/webapp/static/js/order/order.js @@ -10,6 +10,7 @@ var admin = layui.admin; var xmSelect = layui.xmSelect; var layDate = layui.laydate; + var laytpl = layui.laytpl; // 娓叉煋鎼滅储妯℃澘 $.ajax({ @@ -41,7 +42,7 @@ cellMinWidth: 100, cols: [[ {type: 'numbers'}, - {field: 'orderNo', title: '鍗曟嵁缂栧彿'}, + {field: 'orderNo', title: '鍗曟嵁缂栧彿', templet: '#orderNoTpl'}, {field: 'docType$', align: 'center', title: '绫诲瀷', minWidth: 160, width: 160}, {align: 'center', title: '鏄庣粏', toolbar: '#tbLook', minWidth: 160, width: 160}, {field: 'createTime$', title: '鍒涘缓鏃堕棿', minWidth: 200, width: 200}, @@ -89,6 +90,8 @@ var layEvent = obj.event; if (layEvent === 'edit') { showEditModel(data); + } else if (layEvent === 'wrkTrace') { + showWrkTrace(data.id); } else if (layEvent === 'del') { doDel(data.id); } else if (layEvent === 'complete') { @@ -454,6 +457,70 @@ }); } + // 浠诲姟杩芥函 + function showWrkTrace(orderId) { + let loadIndex = layer.msg('璇锋眰涓�...', {icon: 16, shade: 0.01, time: false}); + $.ajax({ + url: baseUrl+"/order/wrk/trace/auth", + headers: {'token': localStorage.getItem('token')}, + data: { + orderId: orderId + }, + method: 'POST', + success: function (res) { + layer.close(loadIndex); + if (res.code === 200){ + laytpl(wrkTraceDialog.innerHTML).render(res.data, function (html) { + admin.open({ + type: 1, + title: '浠诲姟杩芥函', + area: ['800px', '450px'], + shadeClose: true, + content: html, + success: function (layero, dIndex) { + $(layero).children('.layui-layer-content').css('overflow', 'visible'); + /** 缁熻鍥捐〃 */ + var traceCharts = echarts.init(document.getElementById('wrkTraceCharts')); + var traceOptions = { + title: { + text: '浣滀笟/鎬婚噺', x: 'center', y: '38%', + textStyle: {fontSize: 18, color: '#262626', fontWeight: 'normal'}, + subtextStyle: {fontSize: 36, color: '#10B4E8'}, + itemGap: 20 + }, + color: ['#10B4E8', '#E0E0E0', '#FF0000'], + tooltip: {trigger: 'item'}, + series: [{name: '鏁伴噺', type: 'pie', radius: ['75%', '80%'], label: {normal: {show: false}}}] + }; + traceCharts.setOption(traceOptions); + // 璧嬪�� + traceCharts.setOption({ + title: { + subtext: res.data.wrkQty+"/"+res.data.totalQty + }, + series: [ + { + data: [ + {name: '宸蹭綔涓�', value: res.data.wrkQty}, + {name: '鏈綔涓�', value: res.data.totalQty-res.data.wrkQty-res.data.lackQty}, + {name: '搴撳瓨涓嶈冻', value: res.data.lackQty}, + ] + } + ] + }); + } + }); + }); + } else if (res.code === 403){ + top.location.href = baseUrl+"/"; + }else { + layer.msg(res.msg, {icon: 2}); + } + } + }) + } + + layDate.render({ elem: '.layui-laydate-range' ,type: 'datetime' diff --git a/src/main/webapp/views/order/order.html b/src/main/webapp/views/order/order.html index d89f0c4..0c4cb7f 100644 --- a/src/main/webapp/views/order/order.html +++ b/src/main/webapp/views/order/order.html @@ -15,6 +15,17 @@ <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> <![endif]--> <style> + .wrk-trace { + color: green; + cursor: pointer; + margin-left: 6px; + font-size: 18px; + } + + .layui-timeline:first-child .layui-timeline-item { + margin-top: 30px; + } + .btn-add { display: none; } @@ -102,9 +113,13 @@ </a> </span> </script> -<!--<script type="text/html" id="settleTpl">--> -<!-- <span name="settle" class="layui-badge layui-badge-gray">{{d.settle$}}</span>--> -<!--</script>--> +<script type="text/html" id="orderNoTpl"> + {{d.orderNo}} + {{# if(d.settle > 1 && d.settle !== 3){ }} + + {{# } }} + <i class="layui-icon layui-icon-about wrk-trace" lay-tips="鏌ョ湅浠诲姟杩芥函" lay-direction="2" lay-offset="-10px,0px" lay-event="wrkTrace"></i> +</script> <script type="text/html" id="settleTpl"> <span name="settle" {{# if( d.settle === 1){ }} @@ -183,9 +198,97 @@ </form> </script> +<!-- 璁㈠崟浠诲姟杩芥函 --> +<script id="wrkTraceDialog" type="text/html" style="position: relative"> + <div style="position: absolute; top: 0; left: 0;"> + <div class="layui-card" style="overflow: hidden;"> + <div class="layui-card-header" style="text-align: center;width: 80%;font-weight: inherit;font-size: 18px">{{ d.orderNo }}</div> + <div class="layui-card-body"> + <div id="wrkTraceCharts" style="height: 300px;width: 400px;transform: translateX(-10%);"></div> + </div> + </div> + </div> + <div class="layui-row" > + <div class="layui-col-md5"> + <h1 style="opacity: 0;">Hello World</h1> + </div> + <div class="layui-col-md7" style=""> + {{# if(d.list.length > 0){ }} + <ul class="layui-timeline" style="height: 400px; overflow: scroll;"> + {{# layui.each(d.list, function(index, item){ }} + <li class="layui-timeline-item"> + <i class="layui-icon layui-timeline-axis"></i> + <div class="layui-timeline-content layui-text"> + <div class="layui-timeline-title"> + <h3 class="inline-block"> + {{ item.wrkNo }} + + {{# if(item.wrkMast.ioType < 100){ }} + <span class="layui-badge layui-bg-blue" style="line-height: 20px;"> + {{ item.wrkMast.ioType$ }} + </span> + {{# } }} + + {{# if(item.wrkMast.ioType > 100){ }} + <span class="layui-badge layui-bg-orange" style="line-height: 20px;"> + {{ item.wrkMast.ioType$ }} + </span> + {{# } }} + + + {{# if(item.wrkMast.wrkSts < 14){ }} + <span class="layui-badge layui-bg-red" style="line-height: 20px;"> + {{ item.wrkMast.wrkSts$ }} + </span> + {{# } }} + + {{# if(item.wrkMast.wrkSts >= 14){ }} + <span class="layui-badge layui-bg-green" style="line-height: 20px;"> + {{ item.wrkMast.wrkSts$ }} + </span> + {{# } }} + + </h3>  + {{ item.wrkMast.ioTime$ }} + </div> + + <table class="layui-table" lay-skin="nob" style="width: 80%"> + <thead> + <tr style="background: none"> + <td>No.</td> + <td>鍟嗗搧缂栧彿</td> + <td>鏁伴噺</td> + </tr> + </thead> + <tbody> + {{# layui.each(item.wrkDetls, function(idx, wrkDetl){ }} + <tr> + <td><span class="layui-badge layui-bg-cyan">{{ idx+1 }}</span></td> + <td>{{ wrkDetl.matnr }}</td> + <td style="font-weight: bold">{{ wrkDetl.anfme }}</td> + </tr> + {{# }); }} + </tbody> + </table> + + <hr class="layui-border-cyan" style="width: 90%; opacity: .6;"> + </div> + </li> + {{# }); }} + </ul> + {{# } else { }} + <div style="height: 350px;display: flex;justify-content: center;align-items: center;"> + <h2 style="font-weight: bold;letter-spacing: 2px">鏆傛棤浠诲姟</h2> + </div> + {{# } }} + </div> + </div> +</script> + <script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script> <script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script> <script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/echarts/echarts.min.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/order/order.js" charset="utf-8"></script> -- Gitblit v1.9.1