From 807fada3651530d15fe244d812e7b18bf40bdd78 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期一, 08 一月 2024 16:24:52 +0800
Subject: [PATCH] #

---
 zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/LocDetlServiceImpl.java |    6 +
 zy-asrs-openapi/src/main/java/com/zy/asrs/openapi/task/ReportApiScheduler.java           |   28 ++++
 zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/LocDetlService.java          |    3 
 zy-asrs-openapi/src/main/webapp/views/md/reportStock.md                                  |   48 ++++++++
 zy-asrs-common/src/main/resources/mapper/wms/LocDetlMapper.xml                           |    6 +
 zy-asrs-openapi/src/main/webapp/views/reportStock.html                                   |  223 +++++++++++++++++++++++++++++++++++++
 zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/LocDetlMapper.java            |    3 
 zy-asrs-common/src/main/java/com/zy/asrs/common/domain/dto/ReportStockDto.java           |   17 ++
 8 files changed, 334 insertions(+), 0 deletions(-)

diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/domain/dto/ReportStockDto.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/domain/dto/ReportStockDto.java
new file mode 100644
index 0000000..aaa6479
--- /dev/null
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/domain/dto/ReportStockDto.java
@@ -0,0 +1,17 @@
+package com.zy.asrs.common.domain.dto;
+
+import lombok.Data;
+
+@Data
+public class ReportStockDto {
+
+    //鐗╂枡鍙�
+    private String matnr;
+
+    //鎵瑰彿
+    private String batch;
+
+    //鎬婚噺
+    private Double anfme;
+
+}
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/LocDetlMapper.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/LocDetlMapper.java
index d918738..935fb7c 100644
--- a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/LocDetlMapper.java
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/mapper/LocDetlMapper.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.zy.asrs.common.domain.dto.QueryStockPreDo;
+import com.zy.asrs.common.domain.dto.ReportStockDto;
 import com.zy.asrs.common.wms.entity.LocDetl;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
@@ -36,4 +37,6 @@
 
     IPage<LocDetl> getStockOutPage(IPage<LocDetl> page, Map<String, Object> map);
 
+    List<ReportStockDto> getReportStockDto(Long hostId);
+
 }
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/LocDetlService.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/LocDetlService.java
index b697c8f..6fe9f29 100644
--- a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/LocDetlService.java
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/LocDetlService.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.zy.asrs.common.domain.dto.ReportStockDto;
 import com.zy.asrs.common.wms.entity.LocDetl;
 
 import java.util.List;
@@ -27,4 +28,6 @@
 
     IPage<LocDetl> getStockOut(Integer curr, Integer limit, Map<String, Object> param);
 
+    List<ReportStockDto> getReportStockDto(Long hostId);
+
 }
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/LocDetlServiceImpl.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/LocDetlServiceImpl.java
index 001bc8b..6fbf6c4 100644
--- a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/LocDetlServiceImpl.java
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/LocDetlServiceImpl.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.zy.asrs.common.domain.dto.QueryStockPreDo;
+import com.zy.asrs.common.domain.dto.ReportStockDto;
 import com.zy.asrs.common.wms.mapper.LocDetlMapper;
 import com.zy.asrs.common.wms.entity.LocDetl;
 import com.zy.asrs.common.wms.service.LocDetlService;
@@ -67,4 +68,9 @@
         Page<LocDetl> page = new Page<>(curr, limit);
         return this.baseMapper.getStockOutPage(page, param);
     }
+
+    @Override
+    public List<ReportStockDto> getReportStockDto(Long hostId) {
+        return this.baseMapper.getReportStockDto(hostId);
+    }
 }
diff --git a/zy-asrs-common/src/main/resources/mapper/wms/LocDetlMapper.xml b/zy-asrs-common/src/main/resources/mapper/wms/LocDetlMapper.xml
index 73e0dc8..39be9f2 100644
--- a/zy-asrs-common/src/main/resources/mapper/wms/LocDetlMapper.xml
+++ b/zy-asrs-common/src/main/resources/mapper/wms/LocDetlMapper.xml
@@ -173,4 +173,10 @@
         <include refid="stockOutCondition"></include>
     </select>
 
+    <select id="getReportStockDto" resultType="com.zy.asrs.common.domain.dto.ReportStockDto">
+        select matnr,batch,sum(anfme) anfme from wms_loc_detl
+        where host_id = #{hostId}
+        group by matnr,batch
+    </select>
+
 </mapper>
diff --git a/zy-asrs-openapi/src/main/java/com/zy/asrs/openapi/task/ReportApiScheduler.java b/zy-asrs-openapi/src/main/java/com/zy/asrs/openapi/task/ReportApiScheduler.java
index 147f4bf..7df4a01 100644
--- a/zy-asrs-openapi/src/main/java/com/zy/asrs/openapi/task/ReportApiScheduler.java
+++ b/zy-asrs-openapi/src/main/java/com/zy/asrs/openapi/task/ReportApiScheduler.java
@@ -2,7 +2,10 @@
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.alibaba.fastjson.support.config.FastJsonConfig;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zy.asrs.common.domain.dto.ReportStockDto;
 import com.zy.asrs.common.domain.enums.ApiType;
 import com.zy.asrs.common.domain.enums.OrderSettleType;
 import com.zy.asrs.common.openapi.entity.ApiList;
@@ -12,6 +15,7 @@
 import com.zy.asrs.common.utils.HttpHandler;
 import com.zy.asrs.common.wms.entity.Order;
 import com.zy.asrs.common.wms.entity.OrderDetl;
+import com.zy.asrs.common.wms.service.LocDetlService;
 import com.zy.asrs.common.wms.service.OrderDetlService;
 import com.zy.asrs.common.wms.service.OrderService;
 import org.apache.commons.codec.digest.DigestUtils;
@@ -35,6 +39,8 @@
     private OrderDetlService orderDetlService;
     @Autowired
     private HostKeyService hostKeyService;
+    @Autowired
+    private LocDetlService locDetlService;
 
     @Scheduled(cron = "0/3 * * * * ? ")
     public void orderComplete() {
@@ -138,7 +144,29 @@
                 .eq(ApiList::getType, ApiType.REPORT_STOCK.type)
                 .eq(ApiList::getStatus, 1));
         for (ApiList apiList : list) {
+            List<ReportStockDto> reportStockDto = locDetlService.getReportStockDto(apiList.getHostId());
+            //灏佽鏁版嵁
+            HashMap<String, Object> data = new HashMap<>();
+            data.put("stock", reportStockDto);
+            getSign(data, apiList.getHostId());//鑾峰彇绛惧悕
 
+            //淇濈暀null鍊�
+            FastJsonConfig fastJsonConfig = new FastJsonConfig();
+            fastJsonConfig.setSerializerFeatures(SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullListAsEmpty, SerializerFeature.WriteNullStringAsEmpty);
+            String paramData = JSON.toJSONString(data, fastJsonConfig.getSerializeConfig(), fastJsonConfig.getSerializerFeatures());
+            try {
+                String response = new HttpHandler.Builder()
+                        .setUri(apiList.getUrl())
+                        .setJson(JSON.toJSONString(paramData))
+                        .build()
+                        .doPost();
+                JSONObject result = JSON.parseObject(response);
+                if (result.getOrDefault("code", 0).equals(200)) {
+
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
         }
 
     }
diff --git a/zy-asrs-openapi/src/main/webapp/views/md/reportStock.md b/zy-asrs-openapi/src/main/webapp/views/md/reportStock.md
new file mode 100644
index 0000000..5b20a51
--- /dev/null
+++ b/zy-asrs-openapi/src/main/webapp/views/md/reportStock.md
@@ -0,0 +1,48 @@
+
+## 搴撳瓨涓婃姤
+- **鎺ュ彛璇存槑锛�** 搴撳瓨涓婃姤
+
+涓婃姤绀轰緥锛�
+
+```
+{
+    "sign": "cb727b1cfaac0c1b15d6f20408678b24",
+    "stock": [
+        {
+            "anfme": 5,
+            "batch": "",
+            "matnr": "LSH90152025"
+        },
+        {
+            "anfme": 10,
+            "batch": "",
+            "matnr": "LSH90152050"
+        }
+    ]
+}
+```
+
+
+#### 杩斿洖缁撴灉
+绯荤粺涓婃姤鍚庯紝璇锋眰鏂瑰繀椤婚┈涓婅繑鍥炰互涓嬬粨鏋滈泦锛屽惁鍒欒涓轰笂鎶ュけ璐ャ��
+
+鍙傛暟鍚嶇О						|绫诲瀷		|鍑虹幇瑕佹眰	|鎻忚堪  
+:----						|:---		|:------	|:---	
+code						|int		|R			|鍝嶅簲鐮侊紝浠g爜瀹氫箟璇疯鈥滈檮褰旳 鍝嶅簲鍚楄鏄庘��
+msg							|string		|R			|&nbsp;
+
+绀轰緥锛�
+
+```
+{
+    "code":200,
+    "msg":"success",
+}
+```
+
+## 闄勫綍A 鍝嶅簲鐮佽鏄�
+
+鍝嶅簲鐮�	|璇存槑  
+:----	|:---
+200		|澶勭悊鎴愬姛
+500		|绯荤粺鍐呴儴閿欒
diff --git a/zy-asrs-openapi/src/main/webapp/views/reportStock.html b/zy-asrs-openapi/src/main/webapp/views/reportStock.html
new file mode 100644
index 0000000..81a239d
--- /dev/null
+++ b/zy-asrs-openapi/src/main/webapp/views/reportStock.html
@@ -0,0 +1,223 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>API寮�鏀惧钩鍙�</title>
+    <link rel="stylesheet" href="../static/css/element.css">
+    <link rel="stylesheet" href="../static/css/common.css">
+    <script type="text/javascript" src="../static/js/jquery/jquery-3.3.1.min.js"></script>
+    <script type="text/javascript" src="../static/js/vue.min.js"></script>
+    <script type="text/javascript" src="../static/js/showdown.min.js"></script>
+    <script type="text/javascript" src="../static/js/common.js"></script>
+    <script type="text/javascript" src="../static/js/element.js"></script>
+</head>
+<body>
+    <div id="app">
+        <div id="content"></div>
+        <div class="slider">
+            <div><el-button type="text" @click="switchPage('index.html')">瑙勮寖璇存槑</el-button></div>
+            <el-divider></el-divider>
+            <div><el-button type="text" @click="switchPage('reportCompleted.html')">璁㈠崟瀹屾垚涓婃姤</el-button></div>
+            <div><el-button type="text" @click="switchPage('reportCancel.html')">璁㈠崟鍙栨秷涓婃姤</el-button></div>
+            <div><el-button type="text" @click="switchPage('reportStock.html')">搴撳瓨涓婃姤</el-button></div>
+            <div><el-button type="text" @click="switchPage('reportApiManage.html')">涓婃姤API绠$悊</el-button></div>
+            <el-divider></el-divider>
+            <div><el-button type="text" @click="switchPage('getOrderType.html')">鑾峰彇璁㈠崟绫诲瀷</el-button></div>
+            <div><el-button type="text" @click="switchPage('getOrderStatus.html')">鑾峰彇璁㈠崟鐘舵�佸垪琛�</el-button></div>
+            <div><el-button type="text" @click="switchPage('getOrderList.html')">鑾峰彇璁㈠崟鍒楄〃</el-button></div>
+            <div><el-button type="text" @click="switchPage('generateOrderPakIn.html')">鐢熸垚鍏ュ簱璁㈠崟</el-button></div>
+            <div><el-button type="text" @click="switchPage('generateOrderPakOut.html')">鐢熸垚鍑哄簱璁㈠崟</el-button></div>
+            <div><el-button type="text" @click="switchPage('createMat.html')">娣诲姞鐗╂枡淇℃伅</el-button></div>
+            <el-divider></el-divider>
+            <div><el-button type="text" @click="keyList()">瀵嗛挜绠$悊</el-button></div>
+        </div>
+
+        <el-dialog title="瀵嗛挜绠$悊" :visible.sync="keyTableVisible">
+            <el-table :data="keyTableData" v-loading="loading">
+                <el-table-column property="hostId$" label="浠撳簱"></el-table-column>
+                <el-table-column property="signKey" label="绛惧悕瀵嗛挜" width="150"></el-table-column>
+                <el-table-column property="appKey" label="鎺ュ彛璇锋眰瀵嗛挜" width="250"></el-table-column>
+                <el-table-column property="createTime$" label="鏃堕棿" width="200"></el-table-column>
+                <el-table-column label="鎿嶄綔" width="400">
+                    <template slot-scope="scope">
+                        <el-button size="mini" @click="generateSignKey(scope.row.hostId)">绛惧悕瀵嗛挜</el-button>
+                        <el-button size="mini" @click="generateAppKey(scope.row.hostId)">鎺ュ彛瀵嗛挜</el-button>
+                        <el-switch
+                                v-model="scope.row.signStatus"
+                                @change="switchChange(scope.row.hostId,scope.row.signStatus)"
+                                active-text="寮�鍚鍚�"
+                                inactive-text="鍏抽棴绛惧悕">
+                        </el-switch>
+                    </template>
+                </el-table-column>
+            </el-table>
+        </el-dialog>
+    </div>
+
+    <script>
+        showdown.setOption('tables', true);
+        var converter = new showdown.Converter()
+
+        var app = new Vue({
+            el: '#app',
+            data: {
+                keyTableVisible: false,
+                keyTableData: [],
+                loading: true
+            },
+            created() {
+                this.init()
+            },
+            methods: {
+                init() {
+                    this.introduceClick()
+                },
+                introduceClick() {
+                    $.ajax({
+                        url: "md/reportStock.md",
+                        headers: {'token': localStorage.getItem('token')},
+                        method: 'GET',
+                        success: function (res) {
+                            // $("#content").html(marked.parse(res))
+                            // console.log(converter.makeHtml(res))
+                            $("#content").html(converter.makeHtml(res))
+                        }
+                    });
+                },
+                keyList() {
+                    let that = this
+                    this.keyTableVisible = true
+                    $.ajax({
+                        url: baseUrl + "/hostKey/list/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: {},
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            let tmp = []
+                            res.data.forEach((item, index) => {
+                                item.signStatus = item.signStatus == 1 ? true : false;
+                                tmp.push(item)
+                            });
+                            that.keyTableData = tmp
+                            that.loading = false
+                        }
+                    });
+                },
+                generateSignKey(hostId) {
+                    let that = this
+                    this.$confirm('姝ゆ搷浣滃皢瑕嗙洊鍘熺鍚嶅瘑閽�, 鏄惁缁х画?', '鎻愮ず', {
+                        confirmButtonText: '纭畾',
+                        cancelButtonText: '鍙栨秷',
+                        type: 'warning'
+                    }).then(() => {
+                        $.ajax({
+                            url: baseUrl + "/hostKey/generateSignKey/auth",
+                            headers: {'token': localStorage.getItem('token')},
+                            data: {
+                                hostId: hostId
+                            },
+                            dataType: 'json',
+                            contentType: 'application/json;charset=UTF-8',
+                            method: 'GET',
+                            success: function (res) {
+                                if (res.code === 200) {
+                                    that.$message({
+                                        type: 'success',
+                                        message: '鐢熸垚鎴愬姛'
+                                    });
+
+                                    that.keyTableData.forEach((item, index) => {
+                                        if (item.hostId == hostId) {
+                                            item.signKey = res.data.signKey
+                                        }
+                                    });
+                                } else {
+                                    that.$message({
+                                        type: 'error',
+                                        message: res.msg
+                                    });
+                                }
+                            }
+                        });
+                    }).catch(() => {
+                        //鍙栨秷
+                    });
+                },
+                generateAppKey(hostId) {
+                    let that = this
+                    this.$confirm('姝ゆ搷浣滃皢瑕嗙洊鍘熸帴鍙e瘑閽�, 鏄惁缁х画?', '鎻愮ず', {
+                        confirmButtonText: '纭畾',
+                        cancelButtonText: '鍙栨秷',
+                        type: 'warning'
+                    }).then(() => {
+                        $.ajax({
+                            url: baseUrl + "/hostKey/generateAppKey/auth",
+                            headers: {'token': localStorage.getItem('token')},
+                            data: {
+                                hostId: hostId
+                            },
+                            dataType: 'json',
+                            contentType: 'application/json;charset=UTF-8',
+                            method: 'GET',
+                            success: function (res) {
+                                if (res.code === 200) {
+                                    that.$message({
+                                        type: 'success',
+                                        message: '鐢熸垚鎴愬姛'
+                                    });
+
+                                    that.keyTableData.forEach((item, index) => {
+                                        if (item.hostId == hostId) {
+                                            item.appKey = res.data.appKey
+                                        }
+                                    });
+                                } else {
+                                    that.$message({
+                                        type: 'error',
+                                        message: res.msg
+                                    });
+                                }
+                            }
+                        });
+                    }).catch(() => {
+                        //鍙栨秷
+                    });
+                },
+                switchChange(hostId, signStatus) {
+                    let that = this
+                    //绛惧悕鏍¢獙寮�鍏�
+                    $.ajax({
+                        url: baseUrl + "/hostKey/switchSign/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: {
+                            hostId: hostId,
+                            signStatus: signStatus ? 1 : 0,
+                        },
+                        dataType: 'json',
+                        contentType: 'application/json;charset=UTF-8',
+                        method: 'GET',
+                        success: function (res) {
+                            if (res.code === 200) {
+                                that.$message({
+                                    type: 'success',
+                                    message: '鍒囨崲鎴愬姛'
+                                });
+                            } else {
+                                that.$message({
+                                    type: 'error',
+                                    message: res.msg
+                                });
+                            }
+                        }
+                    });
+                },
+                switchPage(url) {
+                    location.href = url
+                }
+            }
+        })
+    </script>
+</body>
+</html>
\ No newline at end of file

--
Gitblit v1.9.1