From 5d8bd56a2b9e1cfdf0ca481c54098b5beba48488 Mon Sep 17 00:00:00 2001
From: LSH
Date: 星期六, 25 二月 2023 14:35:06 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/asrs/controller/OrderController.java | 77 ++++++++++++
src/main/resources/mapper/WrkDetlMapper.xml | 15 ++
src/main/java/com/zy/asrs/entity/result/WrkTraceVo.java | 33 +++++
src/main/java/com/zy/asrs/mapper/WrkDetlMapper.java | 2
src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java | 5
src/main/webapp/static/js/order/order.js | 68 +++++++++++
src/main/java/com/zy/asrs/controller/MobileController.java | 4
src/main/java/com/zy/asrs/service/WrkDetlService.java | 2
src/main/webapp/views/order/order.html | 108 +++++++++++++++++
9 files changed, 310 insertions(+), 4 deletions(-)
diff --git a/src/main/java/com/zy/asrs/controller/MobileController.java b/src/main/java/com/zy/asrs/controller/MobileController.java
index cd6085b..1dedaf7 100644
--- a/src/main/java/com/zy/asrs/controller/MobileController.java
+++ b/src/main/java/com/zy/asrs/controller/MobileController.java
@@ -118,10 +118,10 @@
}
DocType docType = docTypeService.selectById(order.getDocType());
if (docType.getPakin() == null || docType.getPakin() != 1) {
- return R.ok();
+ continue;
}
if (order.getSettle() > 2) {
- return R.ok();
+ continue;
}
List<OrderDetl> orderDetls = orderService.selectWorkingDetls(order.getId());
if (!Cools.isEmpty(orderDetls)) {
diff --git a/src/main/java/com/zy/asrs/controller/OrderController.java b/src/main/java/com/zy/asrs/controller/OrderController.java
index 8063a13..6c9d546 100644
--- a/src/main/java/com/zy/asrs/controller/OrderController.java
+++ b/src/main/java/com/zy/asrs/controller/OrderController.java
@@ -9,9 +9,12 @@
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.OrderDomainParam;
+
+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 +36,12 @@
private WrkDetlService wrkDetlService;
@Autowired
private WaitPakinService waitPakinService;
+ @Autowired
+ private LocDetlService locDetlService;
+ @Autowired
+ private WrkMastService wrkMastService;
+ @Autowired
+ private WrkMastLogService wrkMastLogService;
@RequestMapping(value = "/order/nav/list/auth")
@ManagerAuth
@@ -221,6 +230,74 @@
return R.ok("璁㈠崟淇敼鎴愬姛");
}
+ @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/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..e10e894 100644
--- a/src/main/java/com/zy/asrs/mapper/WrkDetlMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/WrkDetlMapper.java
@@ -23,4 +23,6 @@
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);
+
+ List<WrkDetl> selectAndLogByOrderNoGroupByMatnrOfSum(String orderNo);
}
diff --git a/src/main/java/com/zy/asrs/service/WrkDetlService.java b/src/main/java/com/zy/asrs/service/WrkDetlService.java
index ede2552..a40f47a 100644
--- a/src/main/java/com/zy/asrs/service/WrkDetlService.java
+++ b/src/main/java/com/zy/asrs/service/WrkDetlService.java
@@ -21,4 +21,6 @@
List<WrkDetl> selectPakoutQuery(Integer staNo, String matnr);
+ List<WrkDetl> selectAndLogByOrderNoGroupByMatnrOfSum(String orderNo);
+
}
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 196874a..3eaaa7a 100644
--- a/src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java
@@ -79,4 +79,9 @@
public List<WrkDetl> selectPakoutQuery(Integer staNo, String matnr) {
return this.baseMapper.selectPakoutQuery(staNo, matnr);
}
+
+ @Override
+ public List<WrkDetl> selectAndLogByOrderNoGroupByMatnrOfSum(String orderNo) {
+ return this.baseMapper.selectAndLogByOrderNoGroupByMatnrOfSum(orderNo);
+ }
}
diff --git a/src/main/resources/mapper/WrkDetlMapper.xml b/src/main/resources/mapper/WrkDetlMapper.xml
index 225f31e..1cfa338 100644
--- a/src/main/resources/mapper/WrkDetlMapper.xml
+++ b/src/main/resources/mapper/WrkDetlMapper.xml
@@ -108,4 +108,19 @@
and awd.matnr + '-' + awd.batch = #{matnr}
</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>
+
</mapper>
diff --git a/src/main/webapp/static/js/order/order.js b/src/main/webapp/static/js/order/order.js
index e277615..4eecb1c 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') {
@@ -472,6 +475,69 @@
});
}
+ // 浠诲姟杩芥函
+ 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 f5997c4..a3a7753 100644
--- a/src/main/webapp/views/order/order.html
+++ b/src/main/webapp/views/order/order.html
@@ -8,13 +8,23 @@
<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/admin.css?v=318" media="all">
- <link rel="stylesheet" href="../../static/css/cool.css" media="all">
+ <link rel="stylesheet" href="../../static/css/cool.css" media="all">
<!-- <link rel="stylesheet" href="../../static/css/common.css" media="all">-->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<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,6 +112,14 @@
</a>
</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" class="layui-badge layui-badge-gray">{{d.settle$}}</span>-->
<!--</script>-->
@@ -183,10 +201,98 @@
</div>
</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