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">&#xe63f;</i>
+                    <div class="layui-timeline-content layui-text">
+                        <div class="layui-timeline-title">
+                            <h3 class="inline-block">
+                                {{ item.wrkNo }}&nbsp;
 
+                                {{#  if(item.wrkMast.ioType < 100){ }}
+                                <span class="layui-badge layui-bg-blue" style="line-height: 20px;">
+                                 {{ item.wrkMast.ioType$ }}&nbsp;
+                                </span>
+                                {{#  } }}
+
+                                {{#  if(item.wrkMast.ioType > 100){ }}
+                                <span class="layui-badge layui-bg-orange" style="line-height: 20px;">
+                                  {{ item.wrkMast.ioType$ }}&nbsp;
+                                </span>
+                                {{#  } }}
+
+
+                                {{#  if(item.wrkMast.wrkSts < 14){ }}
+                                <span class="layui-badge layui-bg-red" style="line-height: 20px;">
+                                    {{ item.wrkMast.wrkSts$ }}&nbsp;
+                                </span>
+                                {{#  } }}
+
+                                {{#  if(item.wrkMast.wrkSts >= 14){ }}
+                                <span class="layui-badge layui-bg-green" style="line-height: 20px;">
+                                    {{ item.wrkMast.wrkSts$ }}&nbsp;
+                                </span>
+                                {{#  } }}
+
+                            </h3>&emsp;
+                            {{ 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