Commit fc1ae27774a1040c9b3af175c08d6c0899d17e14

Authored by 肖超群
2 parents e51c6127 526eeef7

Merge branch 'develop' of http://www.huahengrobot.com:90/wms/wms4 into develop

Showing 63 changed files with 619 additions and 686 deletions
ant-design-vue-jeecg/.gitignore
1 .DS_Store 1 .DS_Store
2 -node_modules  
3 -node 2 +/node_modules
  3 +/node
4 /dist 4 /dist
5 /test 5 /test
6 6
ant-design-vue-jeecg/node/node.exe 0 → 100644
No preview for this file type
ant-design-vue-jeecg/node/npm 0 → 100644
  1 +#!/usr/bin/env bash
  2 +(set -o igncr) 2>/dev/null && set -o igncr; # cygwin encoding fix
  3 +
  4 +basedir=`dirname "$0"`
  5 +
  6 +case `uname` in
  7 + *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
  8 +esac
  9 +
  10 +NODE_EXE="$basedir/node.exe"
  11 +if ! [ -x "$NODE_EXE" ]; then
  12 + NODE_EXE="$basedir/node"
  13 +fi
  14 +if ! [ -x "$NODE_EXE" ]; then
  15 + NODE_EXE=node
  16 +fi
  17 +
  18 +# this path is passed to node.exe, so it needs to match whatever
  19 +# kind of paths Node.js thinks it's using, typically win32 paths.
  20 +CLI_BASEDIR="$("$NODE_EXE" -p 'require("path").dirname(process.execPath)')"
  21 +NPM_CLI_JS="$CLI_BASEDIR/node_modules/npm/bin/npm-cli.js"
  22 +
  23 +NPM_PREFIX=`"$NODE_EXE" "$NPM_CLI_JS" prefix -g`
  24 +if [ $? -ne 0 ]; then
  25 + # if this didn't work, then everything else below will fail
  26 + echo "Could not determine Node.js install directory" >&2
  27 + exit 1
  28 +fi
  29 +NPM_PREFIX_NPM_CLI_JS="$NPM_PREFIX/node_modules/npm/bin/npm-cli.js"
  30 +
  31 +# a path that will fail -f test on any posix bash
  32 +NPM_WSL_PATH="/.."
  33 +
  34 +# WSL can run Windows binaries, so we have to give it the win32 path
  35 +# however, WSL bash tests against posix paths, so we need to construct that
  36 +# to know if npm is installed globally.
  37 +if [ `uname` = 'Linux' ] && type wslpath &>/dev/null ; then
  38 + NPM_WSL_PATH=`wslpath "$NPM_PREFIX_NPM_CLI_JS"`
  39 +fi
  40 +if [ -f "$NPM_PREFIX_NPM_CLI_JS" ] || [ -f "$NPM_WSL_PATH" ]; then
  41 + NPM_CLI_JS="$NPM_PREFIX_NPM_CLI_JS"
  42 +fi
  43 +
  44 +"$NODE_EXE" "$NPM_CLI_JS" "$@"
ant-design-vue-jeecg/node/npm.cmd 0 → 100644
  1 +:: Created by npm, please don't edit manually.
  2 +@ECHO OFF
  3 +
  4 +SETLOCAL
  5 +
  6 +SET "NODE_EXE=%~dp0\node.exe"
  7 +IF NOT EXIST "%NODE_EXE%" (
  8 + SET "NODE_EXE=node"
  9 +)
  10 +
  11 +SET "NPM_CLI_JS=%~dp0\node_modules\npm\bin\npm-cli.js"
  12 +FOR /F "delims=" %%F IN ('CALL "%NODE_EXE%" "%NPM_CLI_JS%" prefix -g') DO (
  13 + SET "NPM_PREFIX_NPM_CLI_JS=%%F\node_modules\npm\bin\npm-cli.js"
  14 +)
  15 +IF EXIST "%NPM_PREFIX_NPM_CLI_JS%" (
  16 + SET "NPM_CLI_JS=%NPM_PREFIX_NPM_CLI_JS%"
  17 +)
  18 +
  19 +"%NODE_EXE%" "%NPM_CLI_JS%" %*
ant-design-vue-jeecg/src/assets/css/huahengUI.css
@@ -1264,7 +1264,7 @@ label { @@ -1264,7 +1264,7 @@ label {
1264 /*margin: 12px 6px;*/ 1264 /*margin: 12px 6px;*/
1265 margin-bottom: 6px; 1265 margin-bottom: 6px;
1266 background-size:cover; 1266 background-size:cover;
1267 - background-image: url("~@/assets/icon/空盘空闲.png"); 1267 + background-image: url("~@/assets/icon/grid_empty.png");
1268 } 1268 }
1269 1269
1270 1270
ant-design-vue-jeecg/src/assets/icon/整盘禁用.png renamed to ant-design-vue-jeecg/src/assets/icon/ContainerDisabled.png

5.89 KB

ant-design-vue-jeecg/src/assets/icon/整盘空闲.png renamed to ant-design-vue-jeecg/src/assets/icon/grid_all.png

3.87 KB

ant-design-vue-jeecg/src/assets/icon/整盘锁定.png renamed to ant-design-vue-jeecg/src/assets/icon/grid_all_lock.png

4.77 KB

ant-design-vue-jeecg/src/assets/icon/空柜锁定.png renamed to ant-design-vue-jeecg/src/assets/icon/grid_emp_lock.png

4.45 KB

ant-design-vue-jeecg/src/assets/icon/空柜禁用.png renamed to ant-design-vue-jeecg/src/assets/icon/grid_emp_waing.png

5.38 KB

ant-design-vue-jeecg/src/assets/icon/空盘空闲.png renamed to ant-design-vue-jeecg/src/assets/icon/grid_empty.png

3.37 KB

ant-design-vue-jeecg/src/assets/icon/空盘锁定.png renamed to ant-design-vue-jeecg/src/assets/icon/grid_empty_lock.png

3.98 KB

ant-design-vue-jeecg/src/assets/icon/空盘禁用.png renamed to ant-design-vue-jeecg/src/assets/icon/grid_empty_waring.png

5.05 KB

ant-design-vue-jeecg/src/assets/icon/半盘空闲.png renamed to ant-design-vue-jeecg/src/assets/icon/grid_half.png

3.68 KB

ant-design-vue-jeecg/src/assets/icon/半盘锁定.png renamed to ant-design-vue-jeecg/src/assets/icon/grid_half_lock.png

4.86 KB

ant-design-vue-jeecg/src/assets/icon/半盘禁用.png renamed to ant-design-vue-jeecg/src/assets/icon/grid_half_waring.png

6.04 KB

ant-design-vue-jeecg/src/assets/icon/空柜空闲.png renamed to ant-design-vue-jeecg/src/assets/icon/grid_rest.png

3.62 KB

ant-design-vue-jeecg/src/assets/icon/空.png renamed to ant-design-vue-jeecg/src/assets/icon/rel_empty.png

1.45 KB

ant-design-vue-jeecg/src/components/jeecgbiz/JSelectMultiCycleCount.vue
@@ -32,7 +32,7 @@ export default { @@ -32,7 +32,7 @@ export default {
32 url: {list: '/inventory/inventoryHeader/freeList'}, 32 url: {list: '/inventory/inventoryHeader/freeList'},
33 columns: [ 33 columns: [
34 {title: 'ID', align: 'center', width: '20%',widthRight: '70%', dataIndex: 'id'}, 34 {title: 'ID', align: 'center', width: '20%',widthRight: '70%', dataIndex: 'id'},
35 - {title: '容器', align: 'center', width: '25%', dataIndex: 'containerCode'}, 35 + {title: '容器编码', align: 'center', width: '25%', dataIndex: 'containerCode'},
36 {title: '容器状态', align: 'center', width: '20%', dataIndex: 'containerStatus'}, 36 {title: '容器状态', align: 'center', width: '20%', dataIndex: 'containerStatus'},
37 {title: '库位号', align: 'center', width: '20%', dataIndex: 'locationCode'}, 37 {title: '库位号', align: 'center', width: '20%', dataIndex: 'locationCode'},
38 {title: '总数量', align: 'center', width: '20%', dataIndex: 'totalQty'}, 38 {title: '总数量', align: 'center', width: '20%', dataIndex: 'totalQty'},
@@ -51,7 +51,7 @@ export default { @@ -51,7 +51,7 @@ export default {
51 queryConfigDefault: [ 51 queryConfigDefault: [
52 // { 52 // {
53 // key: 'containerCode', 53 // key: 'containerCode',
54 - // label: '容器', 54 + // label: '容器编码',
55 // // 如果包含 dictCode,那么就会显示成下拉框 55 // // 如果包含 dictCode,那么就会显示成下拉框
56 // dictCode: 'sex', 56 // dictCode: 'sex',
57 // }, 57 // },
ant-design-vue-jeecg/src/views/system/config/AddressList.vue
@@ -5,18 +5,28 @@ @@ -5,18 +5,28 @@
5 <a-form layout="inline" @keyup.enter.native="searchQuery"> 5 <a-form layout="inline" @keyup.enter.native="searchQuery">
6 <a-row :gutter="24"> 6 <a-row :gutter="24">
7 <a-col :xl="6" :lg="7" :md="8" :sm="24"> 7 <a-col :xl="6" :lg="7" :md="8" :sm="24">
  8 + <a-form-item label="任务名称">
  9 + <j-input placeholder="请输入任务名称" v-model="queryParam.remark"></j-input>
  10 + </a-form-item>
  11 + </a-col>
  12 + <a-col :xl="6" :lg="7" :md="8" :sm="24">
8 <a-form-item label="编码"> 13 <a-form-item label="编码">
9 - <a-input placeholder="请输入编码" v-model="queryParam.code"></a-input> 14 + <j-input placeholder="请输入编码" v-model="queryParam.param"></j-input>
  15 + </a-form-item>
  16 + </a-col>
  17 + <a-col :xl="6" :lg="7" :md="8" :sm="24">
  18 + <a-form-item label="库区">
  19 + <a-select show-search placeholder="请选择库区" option-filter-prop="children" v-model="queryParam.zoneCode" >
  20 + <a-select-option v-for="item in zoneList" :key="item.name" :value="item.code">
  21 + {{ item.name }}
  22 + </a-select-option>
  23 + </a-select>
10 </a-form-item> 24 </a-form-item>
11 </a-col> 25 </a-col>
12 <a-col :xl="6" :lg="7" :md="8" :sm="24"> 26 <a-col :xl="6" :lg="7" :md="8" :sm="24">
13 <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> 27 <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
14 <a-button type="primary" @click="searchQuery" icon="search">查询</a-button> 28 <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
15 <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button> 29 <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
16 - <a @click="handleToggleSearch" style="margin-left: 8px">  
17 - {{ toggleSearchStatus ? '收起' : '展开' }}  
18 - <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>  
19 - </a>  
20 </span> 30 </span>
21 </a-col> 31 </a-col>
22 </a-row> 32 </a-row>
@@ -28,16 +38,13 @@ @@ -28,16 +38,13 @@
28 <div class="table-operator"> 38 <div class="table-operator">
29 <a-button @click="handleAdd" v-has="'address:add'" type="primary" icon="plus">新增</a-button> 39 <a-button @click="handleAdd" v-has="'address:add'" type="primary" icon="plus">新增</a-button>
30 <a-button v-has="'address:export'" type="primary" icon="download" @click="handleExportXls('接口地址')">导出</a-button> 40 <a-button v-has="'address:export'" type="primary" icon="download" @click="handleExportXls('接口地址')">导出</a-button>
31 - <a-upload v-has="'address:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl"  
32 - @change="handleImportExcel"> 41 + <a-upload v-has="'address:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
33 <a-button type="primary" icon="import">导入</a-button> 42 <a-button type="primary" icon="import">导入</a-button>
34 </a-upload> 43 </a-upload>
35 <a-dropdown v-if="selectedRowKeys.length > 0"> 44 <a-dropdown v-if="selectedRowKeys.length > 0">
36 <a-menu slot="overlay" v-has="'address:deleteBatch'"> 45 <a-menu slot="overlay" v-has="'address:deleteBatch'">
37 <a-menu-item key="1" @click="batchDel"> 46 <a-menu-item key="1" @click="batchDel">
38 - <a-icon type="delete"/>  
39 - 删除  
40 - </a-menu-item> 47 + <a-icon type="delete"/> 删除 </a-menu-item>
41 </a-menu> 48 </a-menu>
42 <a-button style="margin-left: 8px"> 批量操作 49 <a-button style="margin-left: 8px"> 批量操作
43 <a-icon type="down"/> 50 <a-icon type="down"/>
@@ -47,12 +54,6 @@ @@ -47,12 +54,6 @@
47 54
48 <!-- table区域-begin --> 55 <!-- table区域-begin -->
49 <div> 56 <div>
50 - <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">  
51 - <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a  
52 - style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项  
53 - <a style="margin-left: 24px" @click="onClearSelected">清空</a>  
54 - </div>  
55 -  
56 <a-table 57 <a-table
57 ref="table" 58 ref="table"
58 size="middle" 59 size="middle"
@@ -63,30 +64,14 @@ @@ -63,30 +64,14 @@
63 :dataSource="dataSource" 64 :dataSource="dataSource"
64 :pagination="ipagination" 65 :pagination="ipagination"
65 :loading="loading" 66 :loading="loading"
66 - :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"  
67 class="j-table-force-nowrap" 67 class="j-table-force-nowrap"
68 @change="handleTableChange"> 68 @change="handleTableChange">
69 69
70 - <template slot="htmlSlot" slot-scope="text">  
71 - <div v-html="text"></div>  
72 - </template>  
73 - <template slot="imgSlot" slot-scope="text">  
74 - <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>  
75 - <img v-else :src="getImgView(text)" height="25px" alt=""  
76 - style="max-width:80px;font-size: 12px;font-style: italic;"/>  
77 - </template>  
78 - <template slot="fileSlot" slot-scope="text">  
79 - <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>  
80 - <a-button  
81 - v-else  
82 - :ghost="true"  
83 - type="primary"  
84 - icon="download"  
85 - size="small"  
86 - @click="downloadFile(text)">  
87 - 下载  
88 - </a-button>  
89 - </template> 70 + <span slot="zoneCode" slot-scope="zoneCode">
  71 + <a-tag :key="zoneCode" color="blue">
  72 + {{ solutionZoneCode(zoneCode) }}
  73 + </a-tag>
  74 + </span>
90 75
91 <span slot="action" slot-scope="text, record"> 76 <span slot="action" slot-scope="text, record">
92 <a v-has="'address:edit'" @click="handleEdit(record)">编辑</a> 77 <a v-has="'address:edit'" @click="handleEdit(record)">编辑</a>
@@ -115,11 +100,11 @@ @@ -115,11 +100,11 @@
115 </template> 100 </template>
116 101
117 <script> 102 <script>
118 -  
119 import '@/assets/less/TableExpand.less' 103 import '@/assets/less/TableExpand.less'
120 -import {mixinDevice} from '@/utils/mixin'  
121 -import {JeecgListMixin} from '@/mixins/JeecgListMixin' 104 +import { mixinDevice } from '@/utils/mixin'
  105 +import { JeecgListMixin } from '@/mixins/JeecgListMixin'
122 import AddressModal from './modules/AddressModal' 106 import AddressModal from './modules/AddressModal'
  107 +import { getZoneList } from '@/api/api'
123 108
124 export default { 109 export default {
125 name: 'AddressList', 110 name: 'AddressList',
@@ -130,6 +115,7 @@ export default { @@ -130,6 +115,7 @@ export default {
130 data() { 115 data() {
131 return { 116 return {
132 description: '接口地址管理页面', 117 description: '接口地址管理页面',
  118 + zoneList: [],
133 // 表头 119 // 表头
134 columns: [ 120 columns: [
135 { 121 {
@@ -137,93 +123,109 @@ export default { @@ -137,93 +123,109 @@ export default {
137 dataIndex: '', 123 dataIndex: '',
138 key: 'rowIndex', 124 key: 'rowIndex',
139 width: 60, 125 width: 60,
140 - align: "center",  
141 - customRender: function (t, r, index) {  
142 - return parseInt(index) + 1; 126 + align: 'center',
  127 + customRender: function(t, r, index) {
  128 + return parseInt(index) + 1
143 } 129 }
144 }, 130 },
145 { 131 {
  132 + title: '接口名称',
  133 + align: 'center',
  134 + dataIndex: 'remark'
  135 + },
  136 + {
146 title: '编码', 137 title: '编码',
147 - align: "center", 138 + align: 'center',
148 dataIndex: 'param' 139 dataIndex: 'param'
149 }, 140 },
  141 +
150 { 142 {
151 title: '库区', 143 title: '库区',
152 - align: "center",  
153 - dataIndex: 'zoneCode' 144 + align: 'center',
  145 + dataIndex: 'zoneCode',
  146 + key: 'zoneCode',
  147 + scopedSlots: { customRender: 'zoneCode' }
154 }, 148 },
155 { 149 {
156 title: '接口地址', 150 title: '接口地址',
157 - align: "center", 151 + align: 'center',
158 dataIndex: 'url' 152 dataIndex: 'url'
159 }, 153 },
160 { 154 {
161 - title: '备注',  
162 - align: "center",  
163 - dataIndex: 'remark'  
164 - },  
165 - {  
166 title: '创建人', 155 title: '创建人',
167 - align: "center", 156 + align: 'center',
168 dataIndex: 'createBy' 157 dataIndex: 'createBy'
169 }, 158 },
170 { 159 {
171 title: '创建日期', 160 title: '创建日期',
172 - align: "center", 161 + align: 'center',
173 dataIndex: 'createTime' 162 dataIndex: 'createTime'
174 }, 163 },
175 { 164 {
176 title: '更新人', 165 title: '更新人',
177 - align: "center", 166 + align: 'center',
178 dataIndex: 'updateBy' 167 dataIndex: 'updateBy'
179 }, 168 },
180 { 169 {
181 title: '更新日期', 170 title: '更新日期',
182 - align: "center", 171 + align: 'center',
183 dataIndex: 'updateTime' 172 dataIndex: 'updateTime'
184 }, 173 },
185 { 174 {
186 title: '操作', 175 title: '操作',
187 dataIndex: 'action', 176 dataIndex: 'action',
188 - align: "center",  
189 - fixed: "right", 177 + align: 'center',
  178 + fixed: 'right',
190 width: 147, 179 width: 147,
191 - scopedSlots: {customRender: 'action'} 180 + scopedSlots: { customRender: 'action' }
192 } 181 }
193 ], 182 ],
194 url: { 183 url: {
195 - list: "/config/address/list",  
196 - delete: "/config/address/delete",  
197 - deleteBatch: "/config/address/deleteBatch",  
198 - exportXlsUrl: "/config/address/exportXls",  
199 - importExcelUrl: "config/address/importExcel",  
200 - 184 + list: '/config/address/list',
  185 + delete: '/config/address/delete',
  186 + deleteBatch: '/config/address/deleteBatch',
  187 + exportXlsUrl: '/config/address/exportXls',
  188 + importExcelUrl: 'config/address/importExcel'
201 }, 189 },
202 dictOptions: {}, 190 dictOptions: {},
203 - superFieldList: [], 191 + superFieldList: []
204 } 192 }
205 }, 193 },
206 created() { 194 created() {
207 - this.getSuperFieldList(); 195 + this.getSuperFieldList()
  196 + getZoneList().then(res => {
  197 + if (res.success) {
  198 + this.zoneList = res.result
  199 + }
  200 + })
208 }, 201 },
209 computed: { 202 computed: {
210 - importExcelUrl: function () {  
211 - return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;  
212 - }, 203 + importExcelUrl: function() {
  204 + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
  205 + }
213 }, 206 },
214 methods: { 207 methods: {
215 - initDictConfig() {  
216 - }, 208 + initDictConfig() {},
217 getSuperFieldList() { 209 getSuperFieldList() {
218 - let fieldList = [];  
219 - fieldList.push({type: 'string', value: 'code', text: '编码', dictCode: ''})  
220 - fieldList.push({type: 'string', value: 'zoneCode', text: '库区', dictCode: ''})  
221 - fieldList.push({type: 'string', value: 'url', text: '接口地址', dictCode: ''})  
222 - fieldList.push({type: 'string', value: 'createBy', text: '创建人', dictCode: ''})  
223 - fieldList.push({type: 'datetime', value: 'createTime', text: '创建日期'})  
224 - fieldList.push({type: 'string', value: 'updateBy', text: '更新人', dictCode: ''})  
225 - fieldList.push({type: 'datetime', value: 'updateTime', text: '更新日期'}) 210 + let fieldList = []
  211 + fieldList.push({ type: 'string', value: 'code', text: '编码', dictCode: '' })
  212 + fieldList.push({ type: 'string', value: 'zoneCode', text: '库区', dictCode: '' })
  213 + fieldList.push({ type: 'string', value: 'url', text: '接口地址', dictCode: '' })
  214 + fieldList.push({ type: 'string', value: 'createBy', text: '创建人', dictCode: '' })
  215 + fieldList.push({ type: 'datetime', value: 'createTime', text: '创建日期' })
  216 + fieldList.push({ type: 'string', value: 'updateBy', text: '更新人', dictCode: '' })
  217 + fieldList.push({ type: 'datetime', value: 'updateTime', text: '更新日期' })
226 this.superFieldList = fieldList 218 this.superFieldList = fieldList
  219 + },
  220 + solutionZoneCode(value) {
  221 + var actions = []
  222 + Object.keys(this.zoneList).some(key => {
  223 + if (this.zoneList[key].code == '' + value) {
  224 + actions.push(this.zoneList[key].name)
  225 + return true
  226 + }
  227 + })
  228 + return actions.join('')
227 } 229 }
228 } 230 }
229 } 231 }
ant-design-vue-jeecg/src/views/system/config/LocationList.vue
@@ -35,10 +35,10 @@ @@ -35,10 +35,10 @@
35 </a-col> 35 </a-col>
36 <template v-if="toggleSearchStatus"> 36 <template v-if="toggleSearchStatus">
37 <a-col :xl="6" :lg="7" :md="8" :sm="24"> 37 <a-col :xl="6" :lg="7" :md="8" :sm="24">
38 - <a-form-item label="库区编码"> 38 + <a-form-item label="库区">
39 <a-select 39 <a-select
40 show-search 40 show-search
41 - placeholder="请选择库区编码" 41 + placeholder="请选择库区"
42 option-filter-prop="children" 42 option-filter-prop="children"
43 v-model="queryParam.zoneCode" 43 v-model="queryParam.zoneCode"
44 > 44 >
ant-design-vue-jeecg/src/views/system/config/modules/AddressForm.vue
@@ -4,13 +4,26 @@ @@ -4,13 +4,26 @@
4 <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail"> 4 <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
5 <a-row> 5 <a-row>
6 <a-col :span="24"> 6 <a-col :span="24">
  7 + <a-form-model-item label="接口名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark">
  8 + <a-input v-model="model.remark" placeholder="请输入接口名称"></a-input>
  9 + </a-form-model-item>
  10 + </a-col>
  11 + <a-col :span="24">
7 <a-form-model-item label="编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="code"> 12 <a-form-model-item label="编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="code">
8 <a-input v-model="model.param" placeholder="请输入编码"></a-input> 13 <a-input v-model="model.param" placeholder="请输入编码"></a-input>
9 </a-form-model-item> 14 </a-form-model-item>
10 </a-col> 15 </a-col>
11 <a-col :span="24"> 16 <a-col :span="24">
12 <a-form-model-item label="库区" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="zoneCode"> 17 <a-form-model-item label="库区" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="zoneCode">
13 - <a-input v-model="model.zoneCode" placeholder="请输入库区"></a-input> 18 + <a-select
  19 + show-search
  20 + placeholder="请选择库区"
  21 + option-filter-prop="children"
  22 + v-model="model.zoneCode">
  23 + <a-select-option v-for="item in zoneList" :key="item.name" :value="item.code">
  24 + {{ item.name }}
  25 + </a-select-option>
  26 + </a-select>
14 </a-form-model-item> 27 </a-form-model-item>
15 </a-col> 28 </a-col>
16 <a-col :span="24"> 29 <a-col :span="24">
@@ -18,11 +31,6 @@ @@ -18,11 +31,6 @@
18 <a-input v-model="model.url" placeholder="请输入接口地址"></a-input> 31 <a-input v-model="model.url" placeholder="请输入接口地址"></a-input>
19 </a-form-model-item> 32 </a-form-model-item>
20 </a-col> 33 </a-col>
21 - <a-col :span="24">  
22 - <a-form-model-item label="备注" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark">  
23 - <a-input v-model="model.remark" placeholder="请输入备注"></a-input>  
24 - </a-form-model-item>  
25 - </a-col>  
26 </a-row> 34 </a-row>
27 </a-form-model> 35 </a-form-model>
28 </j-form-container> 36 </j-form-container>
@@ -33,6 +41,7 @@ @@ -33,6 +41,7 @@
33 41
34 import {httpAction, getAction} from '@/api/manage' 42 import {httpAction, getAction} from '@/api/manage'
35 import {validateDuplicateValue} from '@/utils/util' 43 import {validateDuplicateValue} from '@/utils/util'
  44 +import {getZoneList} from '@/api/api'
36 45
37 export default { 46 export default {
38 name: 'AddressForm', 47 name: 'AddressForm',
@@ -47,6 +56,7 @@ export default { @@ -47,6 +56,7 @@ export default {
47 }, 56 },
48 data() { 57 data() {
49 return { 58 return {
  59 + zoneList: [],
50 model: {}, 60 model: {},
51 labelCol: { 61 labelCol: {
52 xs: {span: 24}, 62 xs: {span: 24},
@@ -73,6 +83,7 @@ export default { @@ -73,6 +83,7 @@ export default {
73 created() { 83 created() {
74 //备份model原始值 84 //备份model原始值
75 this.modelDefault = JSON.parse(JSON.stringify(this.model)); 85 this.modelDefault = JSON.parse(JSON.stringify(this.model));
  86 + this.loadFrom();
76 }, 87 },
77 methods: { 88 methods: {
78 add() { 89 add() {
@@ -82,6 +93,13 @@ export default { @@ -82,6 +93,13 @@ export default {
82 this.model = Object.assign({}, record); 93 this.model = Object.assign({}, record);
83 this.visible = true; 94 this.visible = true;
84 }, 95 },
  96 + loadFrom() {
  97 + getZoneList().then((res) => {
  98 + if (res.success) {
  99 + this.zoneList = res.result
  100 + }
  101 + });
  102 + },
85 submitForm() { 103 submitForm() {
86 const that = this; 104 const that = this;
87 // 触发表单验证 105 // 触发表单验证
ant-design-vue-jeecg/src/views/system/config/modules/LocationForm.vue
@@ -14,7 +14,6 @@ @@ -14,7 +14,6 @@
14 show-search 14 show-search
15 placeholder="请选择库区" 15 placeholder="请选择库区"
16 option-filter-prop="children" 16 option-filter-prop="children"
17 -  
18 v-model="model.zoneCode"> 17 v-model="model.zoneCode">
19 <a-select-option v-for="item in zoneList" :key="item.name" :value="item.code">{{ 18 <a-select-option v-for="item in zoneList" :key="item.name" :value="item.code">{{
20 item.name 19 item.name
@@ -29,7 +28,7 @@ @@ -29,7 +28,7 @@
29 show-search 28 show-search
30 placeholder="请选择库位类型" 29 placeholder="请选择库位类型"
31 option-filter-prop="children" 30 option-filter-prop="children"
32 - 31 +
33 v-model="model.locationTypeCode"> 32 v-model="model.locationTypeCode">
34 <a-select-option v-for="item in locationTypeList" :key="item.name" :value="item.code">{{ 33 <a-select-option v-for="item in locationTypeList" :key="item.name" :value="item.code">{{
35 item.name 34 item.name
ant-design-vue-jeecg/src/views/system/inventory/InventoryHeaderList.vue
@@ -18,8 +18,8 @@ @@ -18,8 +18,8 @@
18 </a-form-item> 18 </a-form-item>
19 </a-col> 19 </a-col>
20 <a-col :xl="6" :lg="7" :md="8" :sm="24"> 20 <a-col :xl="6" :lg="7" :md="8" :sm="24">
21 - <a-form-item label="容器号">  
22 - <a-input placeholder="请输入容器号" v-model="queryParam.containerCode"></a-input> 21 + <a-form-item label="容器编码">
  22 + <a-input placeholder="请输入容器编码" v-model="queryParam.containerCode"></a-input>
23 </a-form-item> 23 </a-form-item>
24 </a-col> 24 </a-col>
25 <template v-if="toggleSearchStatus"> 25 <template v-if="toggleSearchStatus">
@@ -182,7 +182,7 @@ export default { @@ -182,7 +182,7 @@ export default {
182 scopedSlots: {customRender: 'zoneCode'} 182 scopedSlots: {customRender: 'zoneCode'}
183 }, 183 },
184 { 184 {
185 - title: '容器', 185 + title: '容器编码',
186 align: "center", 186 align: "center",
187 dataIndex: 'containerCode' 187 dataIndex: 'containerCode'
188 }, 188 },
@@ -337,7 +337,7 @@ export default { @@ -337,7 +337,7 @@ export default {
337 let fieldList = []; 337 let fieldList = [];
338 fieldList.push({type: 'string', value: 'companyCode', text: '货主', dictCode: ''}) 338 fieldList.push({type: 'string', value: 'companyCode', text: '货主', dictCode: ''})
339 fieldList.push({type: 'string', value: 'zoneCode', text: '库区', dictCode: ''}) 339 fieldList.push({type: 'string', value: 'zoneCode', text: '库区', dictCode: ''})
340 - fieldList.push({type: 'string', value: 'containerCode', text: '容器', dictCode: ''}) 340 + fieldList.push({type: 'string', value: 'containerCode', text: '容器编码', dictCode: ''})
341 fieldList.push({type: 'string', value: 'containerStatus', text: '容器状态', dictCode: 'container_status'}) 341 fieldList.push({type: 'string', value: 'containerStatus', text: '容器状态', dictCode: 'container_status'})
342 fieldList.push({type: 'string', value: 'locationCode', text: '库位号', dictCode: ''}) 342 fieldList.push({type: 'string', value: 'locationCode', text: '库位号', dictCode: ''})
343 fieldList.push({type: 'BigDecimal', value: 'totalQty', text: '总数量', dictCode: ''}) 343 fieldList.push({type: 'BigDecimal', value: 'totalQty', text: '总数量', dictCode: ''})
ant-design-vue-jeecg/src/views/system/inventory/modules/InventoryHeaderModal.vue
@@ -22,8 +22,8 @@ @@ -22,8 +22,8 @@
22 </a-form-model-item> 22 </a-form-model-item>
23 </a-col> 23 </a-col>
24 <a-col :span="24"> 24 <a-col :span="24">
25 - <a-form-model-item label="容器号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="containerCode">  
26 - <a-input v-model="model.containerCode" placeholder="请输入容器号"></a-input> 25 + <a-form-model-item label="容器编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="containerCode">
  26 + <a-input v-model="model.containerCode" placeholder="请输入容器编码"></a-input>
27 </a-form-model-item> 27 </a-form-model-item>
28 </a-col> 28 </a-col>
29 <a-col :span="24"> 29 <a-col :span="24">
ant-design-vue-jeecg/src/views/system/monitor/ApiLogList.vue
@@ -6,52 +6,52 @@ @@ -6,52 +6,52 @@
6 <a-row :gutter="24"> 6 <a-row :gutter="24">
7 <a-col :xl="6" :lg="7" :md="8" :sm="24"> 7 <a-col :xl="6" :lg="7" :md="8" :sm="24">
8 <a-form-item label="接口名称"> 8 <a-form-item label="接口名称">
9 - <a-input placeholder="请输入接口名称" v-model="queryParam.apiName"></a-input> 9 + <j-input placeholder="请输入接口名称" v-model="queryParam.apiName"></j-input>
10 </a-form-item> 10 </a-form-item>
11 </a-col> 11 </a-col>
12 <a-col :xl="6" :lg="7" :md="8" :sm="24"> 12 <a-col :xl="6" :lg="7" :md="8" :sm="24">
13 - <a-form-item label="请求类型">  
14 - <a-input placeholder="请输入请求类型" v-model="queryParam.apiMethod"></a-input> 13 + <a-form-item label="请求方名称">
  14 + <j-input placeholder="请输入请求方名称" v-model="queryParam.requestFrom"></j-input>
15 </a-form-item> 15 </a-form-item>
16 </a-col> 16 </a-col>
17 <a-col :xl="6" :lg="7" :md="8" :sm="24"> 17 <a-col :xl="6" :lg="7" :md="8" :sm="24">
18 - <a-form-item label="请求方地址">  
19 - <a-input placeholder="请输入请求方地址" v-model="queryParam.ip"></a-input> 18 + <a-form-item label="响应方名称">
  19 + <j-input placeholder="请输入响应方名称" v-model="queryParam.responseBy"></j-input>
20 </a-form-item> 20 </a-form-item>
21 </a-col> 21 </a-col>
22 <template v-if="toggleSearchStatus"> 22 <template v-if="toggleSearchStatus">
23 <a-col :xl="6" :lg="7" :md="8" :sm="24"> 23 <a-col :xl="6" :lg="7" :md="8" :sm="24">
24 - <a-form-item label="请求方名称">  
25 - <a-input placeholder="请输入请求方名称" v-model="queryParam.responseFrom"></a-input>  
26 - </a-form-item>  
27 - </a-col>  
28 - <a-col :xl="6" :lg="7" :md="8" :sm="24">  
29 - <a-form-item label="响应方名称">  
30 - <a-input placeholder="请输入响应方名称" v-model="queryParam.responseBy"></a-input>  
31 - </a-form-item>  
32 - </a-col>  
33 - <a-col :xl="6" :lg="7" :md="8" :sm="24">  
34 <a-form-item label="请求地址"> 24 <a-form-item label="请求地址">
35 - <a-input placeholder="请输入请求地址" v-model="queryParam.url"></a-input> 25 + <j-input placeholder="请输入请求地址" v-model="queryParam.url"></j-input>
36 </a-form-item> 26 </a-form-item>
37 </a-col> 27 </a-col>
38 <a-col :xl="6" :lg="7" :md="8" :sm="24"> 28 <a-col :xl="6" :lg="7" :md="8" :sm="24">
39 - <a-form-item label="响应耗时(毫秒)">  
40 - <a-input placeholder="请输入响应耗时(毫秒)" v-model="queryParam.duration"></a-input> 29 + <a-form-item label="业务响应码">
  30 + <j-input placeholder="请输入业务响应码" v-model="queryParam.retCode"></j-input>
41 </a-form-item> 31 </a-form-item>
42 </a-col> 32 </a-col>
43 <a-col :xl="6" :lg="7" :md="8" :sm="24"> 33 <a-col :xl="6" :lg="7" :md="8" :sm="24">
44 - <a-form-item label="业务响应码">  
45 - <a-input placeholder="请输入业务响应码" v-model="queryParam.retCode"></a-input> 34 + <a-form-item label="请求内容">
  35 + <j-input placeholder="请输入请求内容" v-model="queryParam.requestBody"></j-input>
46 </a-form-item> 36 </a-form-item>
47 </a-col> 37 </a-col>
48 <a-col :xl="12" :lg="14" :md="16" :sm="24"> 38 <a-col :xl="12" :lg="14" :md="16" :sm="24">
49 - <a-form-item label="创建日期">  
50 - <j-date :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择开始时间"  
51 - class="query-group-cust" v-model="queryParam.createTime_begin"></j-date> 39 + <a-form-item label="请求时间">
  40 + <j-date
  41 + :show-time="true"
  42 + date-format="YYYY-MM-DD HH:mm:ss"
  43 + placeholder="请选择开始时间"
  44 + class="query-group-cust"
  45 + v-model="queryParam.requestTime_begin"
  46 + ></j-date>
52 <span class="query-group-split-cust"></span> 47 <span class="query-group-split-cust"></span>
53 - <j-date :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择结束时间"  
54 - class="query-group-cust" v-model="queryParam.createTime_end"></j-date> 48 + <j-date
  49 + :show-time="true"
  50 + date-format="YYYY-MM-DD HH:mm:ss"
  51 + placeholder="请选择结束时间"
  52 + class="query-group-cust"
  53 + v-model="queryParam.requestTime_end"
  54 + ></j-date>
55 </a-form-item> 55 </a-form-item>
56 </a-col> 56 </a-col>
57 </template> 57 </template>
@@ -61,7 +61,7 @@ @@ -61,7 +61,7 @@
61 <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button> 61 <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
62 <a @click="handleToggleSearch" style="margin-left: 8px"> 62 <a @click="handleToggleSearch" style="margin-left: 8px">
63 {{ toggleSearchStatus ? '收起' : '展开' }} 63 {{ toggleSearchStatus ? '收起' : '展开' }}
64 - <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/> 64 + <a-icon :type="toggleSearchStatus ? 'up' : 'down'" />
65 </a> 65 </a>
66 </span> 66 </span>
67 </a-col> 67 </a-col>
@@ -73,21 +73,14 @@ @@ -73,21 +73,14 @@
73 <!-- 操作按钮区域 --> 73 <!-- 操作按钮区域 -->
74 <div class="table-operator"> 74 <div class="table-operator">
75 <a-button v-has="'apiLog:add'" @click="handleAdd" type="primary" icon="plus">新增</a-button> 75 <a-button v-has="'apiLog:add'" @click="handleAdd" type="primary" icon="plus">新增</a-button>
76 - <a-button v-has="'apiLog:export'" type="primary" icon="download" @click="handleExportXls('接口日志')">导出</a-button>  
77 -<!-- <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl"-->  
78 -<!-- @change="handleImportExcel">-->  
79 -<!-- <a-button type="primary" icon="import">导入</a-button>-->  
80 -<!-- </a-upload>--> 76 + <a-button v-has="'apiLog:export'" type="primary" icon="download" @click="handleExportXls('接口日志')">
  77 + 导出
  78 + </a-button>
81 <a-dropdown v-if="selectedRowKeys.length > 0"> 79 <a-dropdown v-if="selectedRowKeys.length > 0">
82 <a-menu slot="overlay" v-has="'apiLog:deleteBatch'"> 80 <a-menu slot="overlay" v-has="'apiLog:deleteBatch'">
83 - <a-menu-item key="1" @click="batchDel">  
84 - <a-icon type="delete"/>  
85 - 删除  
86 - </a-menu-item> 81 + <a-menu-item key="1" @click="batchDel"> <a-icon type="delete" /> 删除 </a-menu-item>
87 </a-menu> 82 </a-menu>
88 - <a-button style="margin-left: 8px"> 批量操作  
89 - <a-icon type="down"/>  
90 - </a-button> 83 + <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /> </a-button>
91 </a-dropdown> 84 </a-dropdown>
92 </div> 85 </div>
93 86
@@ -96,7 +89,7 @@ @@ -96,7 +89,7 @@
96 <a-table 89 <a-table
97 ref="table" 90 ref="table"
98 size="middle" 91 size="middle"
99 - :scroll="{x:true}" 92 + :scroll="{ x: true }"
100 bordered 93 bordered
101 rowKey="id" 94 rowKey="id"
102 :columns="columns" 95 :columns="columns"
@@ -104,33 +97,12 @@ @@ -104,33 +97,12 @@
104 :pagination="ipagination" 97 :pagination="ipagination"
105 :loading="loading" 98 :loading="loading"
106 class="j-table-force-nowrap" 99 class="j-table-force-nowrap"
107 - @change="handleTableChange">  
108 -  
109 - <template slot="htmlSlot" slot-scope="text">  
110 - <div v-html="text"></div>  
111 - </template>  
112 - <template slot="imgSlot" slot-scope="text">  
113 - <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>  
114 - <img v-else :src="getImgView(text)" height="25px" alt=""  
115 - style="max-width:80px;font-size: 12px;font-style: italic;"/>  
116 - </template>  
117 - <template slot="fileSlot" slot-scope="text">  
118 - <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>  
119 - <a-button  
120 - v-else  
121 - :ghost="true"  
122 - type="primary"  
123 - icon="download"  
124 - size="small"  
125 - @click="downloadFile(text)">下载  
126 - </a-button>  
127 - </template>  
128 - 100 + @change="handleTableChange"
  101 + >
129 <span slot="action" slot-scope="text, record"> 102 <span slot="action" slot-scope="text, record">
130 <a v-has="'apiLog:edit'" @click="handleEdit(record)">编辑<a-divider type="vertical"/></a> 103 <a v-has="'apiLog:edit'" @click="handleEdit(record)">编辑<a-divider type="vertical"/></a>
131 <a @click="handleDetail(record)">详情</a> 104 <a @click="handleDetail(record)">详情</a>
132 </span> 105 </span>
133 -  
134 </a-table> 106 </a-table>
135 </div> 107 </div>
136 108
@@ -139,12 +111,11 @@ @@ -139,12 +111,11 @@
139 </template> 111 </template>
140 112
141 <script> 113 <script>
142 -  
143 import '@/assets/less/TableExpand.less' 114 import '@/assets/less/TableExpand.less'
144 -import {mixinDevice} from '@/utils/mixin'  
145 -import {JeecgListMixin} from '@/mixins/JeecgListMixin' 115 +import { mixinDevice } from '@/utils/mixin'
  116 +import { JeecgListMixin } from '@/mixins/JeecgListMixin'
146 import ApiLogModal from './modules/ApiLogModal' 117 import ApiLogModal from './modules/ApiLogModal'
147 -import JEllipsis from "@comp/jeecg/JEllipsis" 118 +import JEllipsis from '@comp/jeecg/JEllipsis'
148 119
149 export default { 120 export default {
150 name: 'ApiLogList', 121 name: 'ApiLogList',
@@ -154,135 +125,139 @@ export default { @@ -154,135 +125,139 @@ export default {
154 JEllipsis 125 JEllipsis
155 }, 126 },
156 data() { 127 data() {
157 - let ellipsis1 = (v, l = 20) => (<j-ellipsis value={v} length={l}/>)  
158 - let ellipsis2 = (v, l = 120) => (<j-ellipsis value={v} length={l}/>) 128 + let ellipsis = (v, l = 40) => <j-ellipsis value={v} length={l} />
159 return { 129 return {
160 description: '接口日志管理页面', 130 description: '接口日志管理页面',
161 // 表头 131 // 表头
162 columns: [ 132 columns: [
163 { 133 {
164 title: '接口名称', 134 title: '接口名称',
165 - align: "center", 135 + align: 'center',
166 dataIndex: 'apiName' 136 dataIndex: 'apiName'
167 }, 137 },
168 { 138 {
169 title: '请求类型', 139 title: '请求类型',
170 - align: "center", 140 + align: 'center',
171 dataIndex: 'apiMethod' 141 dataIndex: 'apiMethod'
172 }, 142 },
173 { 143 {
174 - title: '请求内容',  
175 - align: "left",  
176 - dataIndex: 'requestBody',  
177 - customRender: (t) => ellipsis2(t) 144 + title: '请求方名称',
  145 + align: 'center',
  146 + dataIndex: 'requestFrom'
178 }, 147 },
179 { 148 {
180 - title: '响应内容',  
181 - align: "left",  
182 - dataIndex: 'responseBody',  
183 - customRender: (t) => ellipsis2(t) 149 + title: '请求方IP',
  150 + align: 'center',
  151 + dataIndex: 'ip'
184 }, 152 },
185 { 153 {
186 - title: '请求方名称',  
187 - align: "center",  
188 - dataIndex: 'requestFrom' 154 + title: '请求地址',
  155 + align: 'center',
  156 + dataIndex: 'url'
189 }, 157 },
190 { 158 {
191 - title: '响应方名称',  
192 - align: "center",  
193 - dataIndex: 'responseBy' 159 + title: '请求头',
  160 + align: 'center',
  161 + dataIndex: 'requestHeader',
  162 + customRender: t => ellipsis(t)
194 }, 163 },
195 { 164 {
196 - title: '请求方地址',  
197 - align: "center",  
198 - dataIndex: 'ip' 165 + title: '请求内容',
  166 + align: 'center',
  167 + dataIndex: 'requestBody',
  168 + customRender: t => ellipsis(t)
199 }, 169 },
200 { 170 {
201 - title: '请求地址',  
202 - align: "left",  
203 - dataIndex: 'url', 171 + title: '响应方名称',
  172 + align: 'center',
  173 + dataIndex: 'responseBy'
  174 + },
  175 + {
  176 + title: '响应内容',
  177 + align: 'center',
  178 + dataIndex: 'responseBody',
  179 + customRender: t => ellipsis(t)
204 }, 180 },
205 { 181 {
206 title: '请求时间', 182 title: '请求时间',
207 - align: "center", 183 + align: 'center',
208 dataIndex: 'requestTime' 184 dataIndex: 'requestTime'
209 }, 185 },
210 { 186 {
211 title: '响应时间', 187 title: '响应时间',
212 - align: "center", 188 + align: 'center',
213 dataIndex: 'responseTime' 189 dataIndex: 'responseTime'
214 }, 190 },
215 { 191 {
216 title: '响应耗时(毫秒)', 192 title: '响应耗时(毫秒)',
217 - align: "center", 193 + align: 'center',
218 dataIndex: 'duration' 194 dataIndex: 'duration'
219 }, 195 },
220 { 196 {
221 - title: 'httpCode',  
222 - align: "center", 197 + title: 'Http Code',
  198 + align: 'center',
223 dataIndex: 'httpCode' 199 dataIndex: 'httpCode'
224 }, 200 },
225 { 201 {
226 title: '业务响应码', 202 title: '业务响应码',
227 - align: "center", 203 + align: 'center',
228 dataIndex: 'retCode' 204 dataIndex: 'retCode'
229 }, 205 },
230 { 206 {
231 title: '异常堆栈信息', 207 title: '异常堆栈信息',
232 - align: "center",  
233 - dataIndex: 'exception' 208 + align: 'center',
  209 + dataIndex: 'exception',
  210 + customRender: t => ellipsis(t)
234 }, 211 },
235 { 212 {
236 title: '操作', 213 title: '操作',
237 dataIndex: 'action', 214 dataIndex: 'action',
238 - align: "center",  
239 - fixed: "right", 215 + align: 'center',
  216 + fixed: 'right',
240 width: 80, 217 width: 80,
241 - scopedSlots: {customRender: 'action'} 218 + scopedSlots: { customRender: 'action' }
242 } 219 }
243 ], 220 ],
244 url: { 221 url: {
245 - list: "/monitor/apiLog/list",  
246 - delete: "/monitor/apiLog/delete",  
247 - deleteBatch: "/monitor/apiLog/deleteBatch",  
248 - exportXlsUrl: "/monitor/apiLog/exportXls",  
249 - importExcelUrl: "monitor/apiLog/importExcel",  
250 - 222 + list: '/monitor/apiLog/list',
  223 + delete: '/monitor/apiLog/delete',
  224 + deleteBatch: '/monitor/apiLog/deleteBatch',
  225 + exportXlsUrl: '/monitor/apiLog/exportXls',
  226 + importExcelUrl: 'monitor/apiLog/importExcel'
251 }, 227 },
252 dictOptions: {}, 228 dictOptions: {},
253 - superFieldList: [], 229 + superFieldList: []
254 } 230 }
255 }, 231 },
256 created() { 232 created() {
257 - this.getSuperFieldList(); 233 + this.getSuperFieldList()
258 }, 234 },
259 computed: { 235 computed: {
260 - importExcelUrl: function () {  
261 - return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;  
262 - }, 236 + importExcelUrl: function() {
  237 + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
  238 + }
263 }, 239 },
264 methods: { 240 methods: {
265 - initDictConfig() {  
266 - }, 241 + initDictConfig() {},
267 getSuperFieldList() { 242 getSuperFieldList() {
268 - let fieldList = [];  
269 - fieldList.push({type: 'string', value: 'apiName', text: '接口名称', dictCode: ''})  
270 - fieldList.push({type: 'string', value: 'apiMethod', text: '请求类型', dictCode: ''})  
271 - fieldList.push({type: 'string', value: 'ip', text: '请求方地址', dictCode: ''})  
272 - fieldList.push({type: 'string', value: 'requestFrom', text: '请求方名称', dictCode: ''})  
273 - fieldList.push({type: 'string', value: 'responseBy', text: '响应方名称', dictCode: ''})  
274 - fieldList.push({type: 'string', value: 'url', text: '请求地址', dictCode: ''})  
275 - fieldList.push({type: 'datetime', value: 'requestTime', text: '请求时间'})  
276 - fieldList.push({type: 'datetime', value: 'responseTime', text: '响应时间'})  
277 - fieldList.push({type: 'Text', value: 'requestHeader', text: '请求头', dictCode: ''})  
278 - fieldList.push({type: 'Text', value: 'requestBody', text: '请求内容', dictCode: ''})  
279 - fieldList.push({type: 'Text', value: 'responseHeader', text: '响应头', dictCode: ''})  
280 - fieldList.push({type: 'Text', value: 'responseBody', text: '响应内容', dictCode: ''})  
281 - fieldList.push({type: 'string', value: 'duration', text: '响应耗时(毫秒)', dictCode: ''})  
282 - fieldList.push({type: 'int', value: 'httpCode', text: 'httpCode', dictCode: ''})  
283 - fieldList.push({type: 'int', value: 'retCode', text: '业务响应码', dictCode: ''})  
284 - fieldList.push({type: 'Text', value: 'exception', text: '异常堆栈信息', dictCode: ''})  
285 - fieldList.push({type: 'datetime', value: 'createTime', text: '创建日期'}) 243 + let fieldList = []
  244 + fieldList.push({ type: 'string', value: 'apiName', text: '接口名称', dictCode: '' })
  245 + fieldList.push({ type: 'string', value: 'apiMethod', text: '请求类型', dictCode: '' })
  246 + fieldList.push({ type: 'string', value: 'ip', text: '请求方IP', dictCode: '' })
  247 + fieldList.push({ type: 'string', value: 'requestFrom', text: '请求方名称', dictCode: '' })
  248 + fieldList.push({ type: 'string', value: 'responseBy', text: '响应方名称', dictCode: '' })
  249 + fieldList.push({ type: 'string', value: 'url', text: '请求地址', dictCode: '' })
  250 + fieldList.push({ type: 'datetime', value: 'requestTime', text: '请求时间' })
  251 + fieldList.push({ type: 'datetime', value: 'responseTime', text: '响应时间' })
  252 + fieldList.push({ type: 'Text', value: 'requestHeader', text: '请求头', dictCode: '' })
  253 + fieldList.push({ type: 'Text', value: 'requestBody', text: '请求内容', dictCode: '' })
  254 + fieldList.push({ type: 'Text', value: 'responseHeader', text: '响应头', dictCode: '' })
  255 + fieldList.push({ type: 'Text', value: 'responseBody', text: '响应内容', dictCode: '' })
  256 + fieldList.push({ type: 'string', value: 'duration', text: '响应耗时(毫秒)', dictCode: '' })
  257 + fieldList.push({ type: 'int', value: 'httpCode', text: 'httpCode', dictCode: '' })
  258 + fieldList.push({ type: 'int', value: 'retCode', text: '业务响应码', dictCode: '' })
  259 + fieldList.push({ type: 'Text', value: 'exception', text: '异常堆栈信息', dictCode: '' })
  260 + fieldList.push({ type: 'datetime', value: 'createTime', text: '创建日期' })
286 this.superFieldList = fieldList 261 this.superFieldList = fieldList
287 } 262 }
288 } 263 }
ant-design-vue-jeecg/src/views/system/monitor/OperationLog.vue
@@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@
11 </a-col> 11 </a-col>
12 <a-col :xl="6" :lg="7" :md="8" :sm="24"> 12 <a-col :xl="6" :lg="7" :md="8" :sm="24">
13 <a-form-item label="业务类型"> 13 <a-form-item label="业务类型">
14 - <j-dict-select-tag placeholder="请选择业务类型" v-model="queryParam.bizType" dictCode="operation_log_type"/> 14 + <j-input placeholder="请选择业务类型" v-model="queryParam.bizType" />
15 </a-form-item> 15 </a-form-item>
16 </a-col> 16 </a-col>
17 <a-col :xl="6" :lg="7" :md="8" :sm="24"> 17 <a-col :xl="6" :lg="7" :md="8" :sm="24">
ant-design-vue-jeecg/src/views/system/monitor/locationStatus.vue
@@ -18,8 +18,7 @@ @@ -18,8 +18,7 @@
18 </a-select> 18 </a-select>
19 </li> 19 </li>
20 <li>第 20 <li>第
21 - <select id="editable-num" name="num" style="width: 70px">  
22 - </select> 21 + <select id="editable-num" name="num" style="width: 70px" />
23 </li> 22 </li>
24 <li> 23 <li>
25 <select id="editable-select" name="col" @click="show" style="width: 70px"> 24 <select id="editable-select" name="col" @click="show" style="width: 70px">
@@ -39,43 +38,20 @@ @@ -39,43 +38,20 @@
39 <form id="receiptHeader-form"> 38 <form id="receiptHeader-form">
40 <div class="select-list"> 39 <div class="select-list">
41 <ul id="img_list" style=""> 40 <ul id="img_list" style="">
  41 + <li>空柜空闲:<img src="~@/assets/icon/grid_rest.png"></li>
  42 + <li>空盘空闲:<img src="~@/assets/icon/grid_empty.png"></li>
  43 + <li>半盘空闲:<img src="~@/assets/icon/grid_half.png"></li>
  44 + <li>整盘空闲:<img src="~@/assets/icon/grid_all.png"></li>
  45 + <li>空柜锁定:<img src="~@/assets/icon/grid_emp_lock.png"></li>
  46 + <li>空盘锁定:<img src="~@/assets/icon/grid_empty_lock.png"></li>
  47 + <li>半盘锁定:<img src="~@/assets/icon/grid_half_lock.png"></li>
  48 + <li>整盘锁定:<img src="~@/assets/icon/grid_all_lock.png"></li>
  49 + <li>空柜禁用:<img src="~@/assets/icon/grid_emp_waing.png"></li>
  50 + <li>空盘禁用:<img src="~@/assets/icon/grid_empty_waring.png"></li>
  51 + <li>半盘禁用:<img src="~@/assets/icon/grid_half_waring.png"></li>
  52 + <li>整盘禁用:<img src="~@/assets/icon/ContainerDisabled.png"></li>
42 <li> 53 <li>
43 - 空柜空闲:<img src="~@/assets/icon/空柜空闲.png">  
44 - </li>  
45 - <li>  
46 - 空盘空闲:<img src="~@/assets/icon/空盘空闲.png">  
47 - </li>  
48 - <li>  
49 - 半盘空闲:<img src="~@/assets/icon/半盘空闲.png">  
50 - </li>  
51 - <li>  
52 - 整盘空闲:<img src="~@/assets/icon/整盘空闲.png">  
53 - </li>  
54 - <li>  
55 - 空柜锁定:<img src="~@/assets/icon/空柜锁定.png">  
56 - </li>  
57 - <li>  
58 - 空盘锁定:<img src="~@/assets/icon/空盘锁定.png">  
59 - </li>  
60 - <li>  
61 - 半盘锁定:<img src="~@/assets/icon/半盘锁定.png">  
62 - </li>  
63 - <li>  
64 - 整盘锁定:<img src="~@/assets/icon/整盘锁定.png">  
65 - </li>  
66 - <li>  
67 - 空柜禁用:<img src="~@/assets/icon/空柜禁用.png">  
68 - </li>  
69 - <li>  
70 - 空盘禁用:<img src="~@/assets/icon/空盘禁用.png">  
71 - </li>  
72 - <li>  
73 - 半盘禁用:<img src="~@/assets/icon/半盘禁用.png">  
74 - </li>  
75 - <li>  
76 - 整盘禁用:<img src="~@/assets/icon/整盘禁用.png">  
77 - </li>  
78 - <li><span style="font-size: 12px">库位统计情况:</span> 54 + <span style="font-size: 12px">库位统计情况:</span>
79 <input style="width: 400px; font-size: 12px" type="text" id="zone" disabled/> 55 <input style="width: 400px; font-size: 12px" type="text" id="zone" disabled/>
80 </li> 56 </li>
81 </ul> 57 </ul>
@@ -83,7 +59,7 @@ @@ -83,7 +59,7 @@
83 <ul id="info_list"> 59 <ul id="info_list">
84 <li><span>库位:</span><input type="text" id="code" disabled/></li> 60 <li><span>库位:</span><input type="text" id="code" disabled/></li>
85 <li><span>容器编码:</span><input type="text" id="containerCode" disabled/></li> 61 <li><span>容器编码:</span><input type="text" id="containerCode" disabled/></li>
86 - <li><span>物料信息:<select id="material" style="width: auto;"><option>无</option></select></span></li> 62 + <li><span>物料信息:<select id="material" style="width: auto"><option>无</option></select></span></li>
87 </ul> 63 </ul>
88 </div> 64 </div>
89 </form> 65 </form>
@@ -128,19 +104,19 @@ var currentMaterialCode = 0; @@ -128,19 +104,19 @@ var currentMaterialCode = 0;
128 104
129 import huahengUI from '../../../assets/css/huahengUI.css' 105 import huahengUI from '../../../assets/css/huahengUI.css'
130 import $ from '../../../assets/js/jquery-1.11.1.min' 106 import $ from '../../../assets/js/jquery-1.11.1.min'
131 -import grid_rest from '@/assets/icon/空柜空闲.png'  
132 -import grid_empty from '@/assets/icon/空盘空闲.png'  
133 -import grid_half from '@/assets/icon/半盘空闲.png'  
134 -import grid_all from '@/assets/icon/整盘空闲.png'  
135 -import grid_emp_waing from '@/assets/icon/空柜禁用.png'  
136 -import grid_empty_waring from '@/assets/icon/空盘禁用.png'  
137 -import grid_half_waring from '@/assets/icon/半盘禁用.png'  
138 -import grid_all_waring from '@/assets/icon/整盘禁用.png'  
139 -import grid_emp_lock from '@/assets/icon/空柜锁定.png'  
140 -import grid_empty_lock from '@/assets/icon/空盘锁定.png'  
141 -import grid_half_lock from '@/assets/icon/半盘锁定.png'  
142 -import grid_all_lock from '@/assets/icon/整盘锁定.png'  
143 -import rel_empty from '@/assets/icon/空.png' 107 +import grid_rest from '@/assets/icon/grid_rest.png'
  108 +import grid_empty from '@/assets/icon/grid_empty.png'
  109 +import grid_half from '@/assets/icon/grid_half.png'
  110 +import grid_all from '@/assets/icon/grid_all.png'
  111 +import grid_emp_waing from '@/assets/icon/grid_emp_waing.png'
  112 +import grid_empty_waring from '@/assets/icon/grid_empty_waring.png'
  113 +import grid_half_waring from '@/assets/icon/grid_half_waring.png'
  114 +import grid_all_waring from '@/assets/icon/ContainerDisabled.png'
  115 +import grid_emp_lock from '@/assets/icon/grid_emp_lock.png'
  116 +import grid_empty_lock from '@/assets/icon/grid_empty_lock.png'
  117 +import grid_half_lock from '@/assets/icon/grid_half_lock.png'
  118 +import grid_all_lock from '@/assets/icon/grid_all_lock.png'
  119 +import rel_empty from '@/assets/icon/rel_empty.png'
144 import Vue from 'vue' 120 import Vue from 'vue'
145 import {ACCESS_TOKEN} from "@/store/mutation-types" 121 import {ACCESS_TOKEN} from "@/store/mutation-types"
146 import {getZoneList} from '@/api/api' 122 import {getZoneList} from '@/api/api'
ant-design-vue-jeecg/src/views/system/monitor/modules/ApiLogForm.vue
@@ -14,13 +14,23 @@ @@ -14,13 +14,23 @@
14 </a-form-model-item> 14 </a-form-model-item>
15 </a-col> 15 </a-col>
16 <a-col :span="24"> 16 <a-col :span="24">
17 - <a-form-model-item label="请求方地址" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="ip">  
18 - <a-input v-model="model.ip" placeholder="请输入请求方地址"></a-input> 17 + <a-form-model-item label="请求方名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="requestFrom">
  18 + <a-input v-model="model.requestFrom" placeholder="请输入请求方名称"></a-input>
19 </a-form-model-item> 19 </a-form-model-item>
20 </a-col> 20 </a-col>
21 <a-col :span="24"> 21 <a-col :span="24">
22 - <a-form-model-item label="请求方名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="responseFrom">  
23 - <a-input v-model="model.responseFrom" placeholder="请输入请求方名称"></a-input> 22 + <a-form-model-item label="请求方IP" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="ip">
  23 + <a-input v-model="model.ip" placeholder="请输入请求方IP"></a-input>
  24 + </a-form-model-item>
  25 + </a-col>
  26 + <a-col :span="24">
  27 + <a-form-model-item label="请求地址" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="url">
  28 + <a-input v-model="model.url" placeholder="请输入请求地址"></a-input>
  29 + </a-form-model-item>
  30 + </a-col>
  31 + <a-col :span="24">
  32 + <a-form-model-item label="请求内容" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="requestBody">
  33 + <a-input v-model="model.requestBody" placeholder="请输入请求内容"></a-input>
24 </a-form-model-item> 34 </a-form-model-item>
25 </a-col> 35 </a-col>
26 <a-col :span="24"> 36 <a-col :span="24">
@@ -29,8 +39,8 @@ @@ -29,8 +39,8 @@
29 </a-form-model-item> 39 </a-form-model-item>
30 </a-col> 40 </a-col>
31 <a-col :span="24"> 41 <a-col :span="24">
32 - <a-form-model-item label="请求地址" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="url">  
33 - <a-input v-model="model.url" placeholder="请输入请求地址"></a-input> 42 + <a-form-model-item label="响应内容" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="responseBody">
  43 + <a-input v-model="model.responseBody" placeholder="请输入响应内容"></a-input>
34 </a-form-model-item> 44 </a-form-model-item>
35 </a-col> 45 </a-col>
36 <a-col :span="24"> 46 <a-col :span="24">
@@ -46,16 +56,6 @@ @@ -46,16 +56,6 @@
46 </a-form-model-item> 56 </a-form-model-item>
47 </a-col> 57 </a-col>
48 <a-col :span="24"> 58 <a-col :span="24">
49 - <a-form-model-item label="请求内容" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="requestBody">  
50 - <a-input v-model="model.requestBody" placeholder="请输入请求内容"></a-input>  
51 - </a-form-model-item>  
52 - </a-col>  
53 - <a-col :span="24">  
54 - <a-form-model-item label="响应内容" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="responseBody">  
55 - <a-input v-model="model.responseBody" placeholder="请输入响应内容"></a-input>  
56 - </a-form-model-item>  
57 - </a-col>  
58 - <a-col :span="24">  
59 <a-form-model-item label="响应耗时(毫秒)" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="duration"> 59 <a-form-model-item label="响应耗时(毫秒)" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="duration">
60 <a-input v-model="model.duration" placeholder="请输入响应耗时(毫秒)"></a-input> 60 <a-input v-model="model.duration" placeholder="请输入响应耗时(毫秒)"></a-input>
61 </a-form-model-item> 61 </a-form-model-item>
ant-design-vue-jeecg/src/views/system/receipt/ReceiptContainerHeaderList.vue
@@ -5,8 +5,8 @@ @@ -5,8 +5,8 @@
5 <a-form layout="inline" @keyup.enter.native="searchQuery"> 5 <a-form layout="inline" @keyup.enter.native="searchQuery">
6 <a-row :gutter="24"> 6 <a-row :gutter="24">
7 <a-col :xl="6" :lg="7" :md="8" :sm="24"> 7 <a-col :xl="6" :lg="7" :md="8" :sm="24">
8 - <a-form-item label="容器号">  
9 - <a-input placeholder="请输入容器号" v-model="queryParam.containerCode"></a-input> 8 + <a-form-item label="容器编码">
  9 + <a-input placeholder="请输入容器编码" v-model="queryParam.containerCode"></a-input>
10 </a-form-item> 10 </a-form-item>
11 </a-col> 11 </a-col>
12 <a-col :xl="6" :lg="7" :md="8" :sm="24"> 12 <a-col :xl="6" :lg="7" :md="8" :sm="24">
@@ -166,7 +166,7 @@ export default { @@ -166,7 +166,7 @@ export default {
166 dataIndex: 'id' 166 dataIndex: 'id'
167 }, 167 },
168 { 168 {
169 - title: '容器', 169 + title: '容器编码',
170 align: "center", 170 align: "center",
171 dataIndex: 'containerCode' 171 dataIndex: 'containerCode'
172 }, 172 },
@@ -334,7 +334,7 @@ export default { @@ -334,7 +334,7 @@ export default {
334 }, 334 },
335 getSuperFieldList() { 335 getSuperFieldList() {
336 let fieldList = []; 336 let fieldList = [];
337 - fieldList.push({type: 'string', value: 'containerCode', text: '容器', dictCode: ''}) 337 + fieldList.push({type: 'string', value: 'containerCode', text: '容器编码', dictCode: ''})
338 fieldList.push({type: 'int', value: 'taskType', text: '任务类型', dictCode: 'receipt_task_type'}) 338 fieldList.push({type: 'int', value: 'taskType', text: '任务类型', dictCode: 'receipt_task_type'})
339 fieldList.push({type: 'int', value: 'status', text: '状态', dictCode: 'receipt_container_status'}) 339 fieldList.push({type: 'int', value: 'status', text: '状态', dictCode: 'receipt_container_status'})
340 fieldList.push({type: 'string', value: 'fromLocationCode', text: '起始库位', dictCode: ''}) 340 fieldList.push({type: 'string', value: 'fromLocationCode', text: '起始库位', dictCode: ''})
ant-design-vue-jeecg/src/views/system/receipt/modules/ReceiptContainerHeaderModal.vue
@@ -12,8 +12,8 @@ @@ -12,8 +12,8 @@
12 <a-form-model ref="form" :model="model" :rules="validatorRules"> 12 <a-form-model ref="form" :model="model" :rules="validatorRules">
13 <a-row> 13 <a-row>
14 <a-col :span="24"> 14 <a-col :span="24">
15 - <a-form-model-item label="容器号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="containerCode">  
16 - <a-input v-model="model.containerCode" placeholder="请输入容器号"></a-input> 15 + <a-form-model-item label="容器编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="containerCode">
  16 + <a-input v-model="model.containerCode" placeholder="请输入容器编码"></a-input>
17 </a-form-model-item> 17 </a-form-model-item>
18 </a-col> 18 </a-col>
19 <a-col :span="24"> 19 <a-col :span="24">
ant-design-vue-jeecg/src/views/system/shipment/ShipmentContainerHeaderList.vue
@@ -5,8 +5,8 @@ @@ -5,8 +5,8 @@
5 <a-form layout="inline" @keyup.enter.native="searchQuery"> 5 <a-form layout="inline" @keyup.enter.native="searchQuery">
6 <a-row :gutter="24"> 6 <a-row :gutter="24">
7 <a-col :xl="6" :lg="7" :md="8" :sm="24"> 7 <a-col :xl="6" :lg="7" :md="8" :sm="24">
8 - <a-form-item label="容器号">  
9 - <a-input placeholder="请输入容器号" v-model="queryParam.containerCode"></a-input> 8 + <a-form-item label="容器编码">
  9 + <a-input placeholder="请输入容器编码" v-model="queryParam.containerCode"></a-input>
10 </a-form-item> 10 </a-form-item>
11 </a-col> 11 </a-col>
12 <a-col :xl="6" :lg="7" :md="8" :sm="24"> 12 <a-col :xl="6" :lg="7" :md="8" :sm="24">
@@ -168,7 +168,7 @@ export default { @@ -168,7 +168,7 @@ export default {
168 // 表头 168 // 表头
169 columns: [ 169 columns: [
170 { 170 {
171 - title: '容器', 171 + title: '容器编码',
172 align: "center", 172 align: "center",
173 dataIndex: 'containerCode' 173 dataIndex: 'containerCode'
174 }, 174 },
@@ -312,7 +312,7 @@ export default { @@ -312,7 +312,7 @@ export default {
312 }, 312 },
313 getSuperFieldList() { 313 getSuperFieldList() {
314 let fieldList = []; 314 let fieldList = [];
315 - fieldList.push({type: 'string', value: 'containerCode', text: '容器', dictCode: ''}) 315 + fieldList.push({type: 'string', value: 'containerCode', text: '容器编码', dictCode: ''})
316 fieldList.push({type: 'int', value: 'taskType', text: '任务类型', dictCode: 'shipment_task_type'}) 316 fieldList.push({type: 'int', value: 'taskType', text: '任务类型', dictCode: 'shipment_task_type'})
317 fieldList.push({type: 'int', value: 'status', text: '状态', dictCode: 'shipment_container_status'}) 317 fieldList.push({type: 'int', value: 'status', text: '状态', dictCode: 'shipment_container_status'})
318 fieldList.push({type: 'string', value: 'fromLocationCode', text: '起始库位', dictCode: ''}) 318 fieldList.push({type: 'string', value: 'fromLocationCode', text: '起始库位', dictCode: ''})
ant-design-vue-jeecg/src/views/system/shipment/modules/ShipmentContainerHeaderModal.vue
@@ -12,8 +12,8 @@ @@ -12,8 +12,8 @@
12 <a-form-model ref="form" :model="model" :rules="validatorRules"> 12 <a-form-model ref="form" :model="model" :rules="validatorRules">
13 <a-row> 13 <a-row>
14 <a-col :span="24"> 14 <a-col :span="24">
15 - <a-form-model-item label="容器号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="containerCode">  
16 - <a-input v-model="model.containerCode" placeholder="请输入容器号"></a-input> 15 + <a-form-model-item label="容器编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="containerCode">
  16 + <a-input v-model="model.containerCode" placeholder="请输入容器编码"></a-input>
17 </a-form-model-item> 17 </a-form-model-item>
18 </a-col> 18 </a-col>
19 <a-col :span="24"> 19 <a-col :span="24">
ant-design-vue-jeecg/src/views/system/task/CircleTaskHeaderList.vue
@@ -10,8 +10,8 @@ @@ -10,8 +10,8 @@
10 </a-form-item> 10 </a-form-item>
11 </a-col> 11 </a-col>
12 <a-col :xl="6" :lg="7" :md="8" :sm="24"> 12 <a-col :xl="6" :lg="7" :md="8" :sm="24">
13 - <a-form-item label="容器号">  
14 - <a-input placeholder="请输入容器号" v-model="queryParam.containerCode"></a-input> 13 + <a-form-item label="容器编码">
  14 + <a-input placeholder="请输入容器编码" v-model="queryParam.containerCode"></a-input>
15 </a-form-item> 15 </a-form-item>
16 </a-col> 16 </a-col>
17 <template v-if="toggleSearchStatus"> 17 <template v-if="toggleSearchStatus">
@@ -211,7 +211,7 @@ export default { @@ -211,7 +211,7 @@ export default {
211 customFilterDropdown: true, 211 customFilterDropdown: true,
212 }, 212 },
213 { 213 {
214 - title: '容器', 214 + title: '容器编码',
215 align: "center", 215 align: "center",
216 dataIndex: 'containerCode' 216 dataIndex: 'containerCode'
217 }, 217 },
@@ -411,7 +411,7 @@ export default { @@ -411,7 +411,7 @@ export default {
411 getSuperFieldList() { 411 getSuperFieldList() {
412 let fieldList = []; 412 let fieldList = [];
413 fieldList.push({type: 'int', value: 'taskType', text: '任务类型', dictCode: 'task_type'}) 413 fieldList.push({type: 'int', value: 'taskType', text: '任务类型', dictCode: 'task_type'})
414 - fieldList.push({type: 'string', value: 'containerCode', text: '容器', dictCode: ''}) 414 + fieldList.push({type: 'string', value: 'containerCode', text: '容器编码', dictCode: ''})
415 fieldList.push({type: 'string', value: 'fromLocationCode', text: '起始库位', dictCode: ''}) 415 fieldList.push({type: 'string', value: 'fromLocationCode', text: '起始库位', dictCode: ''})
416 fieldList.push({type: 'string', value: 'toLocationCode', text: '目标库位', dictCode: ''}) 416 fieldList.push({type: 'string', value: 'toLocationCode', text: '目标库位', dictCode: ''})
417 fieldList.push({type: 'string', value: 'isEmptyOut', text: '是否空出', dictCode: 'is_or_not'}) 417 fieldList.push({type: 'string', value: 'isEmptyOut', text: '是否空出', dictCode: 'is_or_not'})
ant-design-vue-jeecg/src/views/system/task/ReceiptTaskHeaderList.vue
@@ -10,8 +10,8 @@ @@ -10,8 +10,8 @@
10 </a-form-item> 10 </a-form-item>
11 </a-col> 11 </a-col>
12 <a-col :xl="6" :lg="7" :md="8" :sm="24"> 12 <a-col :xl="6" :lg="7" :md="8" :sm="24">
13 - <a-form-item label="容器号">  
14 - <a-input placeholder="请输入容器号" v-model="queryParam.containerCode"></a-input> 13 + <a-form-item label="容器编码">
  14 + <a-input placeholder="请输入容器编码" v-model="queryParam.containerCode"></a-input>
15 </a-form-item> 15 </a-form-item>
16 </a-col> 16 </a-col>
17 <template v-if="toggleSearchStatus"> 17 <template v-if="toggleSearchStatus">
@@ -205,7 +205,7 @@ export default { @@ -205,7 +205,7 @@ export default {
205 dataIndex: 'taskType_dictText', 205 dataIndex: 'taskType_dictText',
206 }, 206 },
207 { 207 {
208 - title: '容器', 208 + title: '容器编码',
209 align: "center", 209 align: "center",
210 dataIndex: 'containerCode' 210 dataIndex: 'containerCode'
211 }, 211 },
@@ -448,7 +448,7 @@ export default { @@ -448,7 +448,7 @@ export default {
448 getSuperFieldList() { 448 getSuperFieldList() {
449 let fieldList = []; 449 let fieldList = [];
450 fieldList.push({type: 'int', value: 'taskType', text: '任务类型', dictCode: 'task_type'}) 450 fieldList.push({type: 'int', value: 'taskType', text: '任务类型', dictCode: 'task_type'})
451 - fieldList.push({type: 'string', value: 'containerCode', text: '容器', dictCode: ''}) 451 + fieldList.push({type: 'string', value: 'containerCode', text: '容器编码', dictCode: ''})
452 fieldList.push({type: 'string', value: 'fromLocationCode', text: '起始库位', dictCode: ''}) 452 fieldList.push({type: 'string', value: 'fromLocationCode', text: '起始库位', dictCode: ''})
453 fieldList.push({type: 'string', value: 'toLocationCode', text: '目标库位', dictCode: ''}) 453 fieldList.push({type: 'string', value: 'toLocationCode', text: '目标库位', dictCode: ''})
454 fieldList.push({type: 'string', value: 'isEmptyOut', text: '是否空出', dictCode: 'is_or_not'}) 454 fieldList.push({type: 'string', value: 'isEmptyOut', text: '是否空出', dictCode: 'is_or_not'})
ant-design-vue-jeecg/src/views/system/task/ShipmentTaskHeaderList.vue
@@ -10,8 +10,8 @@ @@ -10,8 +10,8 @@
10 </a-form-item> 10 </a-form-item>
11 </a-col> 11 </a-col>
12 <a-col :xl="6" :lg="7" :md="8" :sm="24"> 12 <a-col :xl="6" :lg="7" :md="8" :sm="24">
13 - <a-form-item label="容器号">  
14 - <a-input placeholder="请输入容器号" v-model="queryParam.containerCode"></a-input> 13 + <a-form-item label="容器编码">
  14 + <a-input placeholder="请输入容器编码" v-model="queryParam.containerCode"></a-input>
15 </a-form-item> 15 </a-form-item>
16 </a-col> 16 </a-col>
17 <template v-if="toggleSearchStatus"> 17 <template v-if="toggleSearchStatus">
@@ -207,7 +207,7 @@ export default { @@ -207,7 +207,7 @@ export default {
207 dataIndex: 'taskType_dictText', 207 dataIndex: 'taskType_dictText',
208 }, 208 },
209 { 209 {
210 - title: '容器', 210 + title: '容器编码',
211 align: "center", 211 align: "center",
212 dataIndex: 'containerCode' 212 dataIndex: 'containerCode'
213 }, 213 },
@@ -449,7 +449,7 @@ export default { @@ -449,7 +449,7 @@ export default {
449 getSuperFieldList() { 449 getSuperFieldList() {
450 let fieldList = []; 450 let fieldList = [];
451 fieldList.push({type: 'int', value: 'taskType', text: '任务类型', dictCode: 'task_type'}) 451 fieldList.push({type: 'int', value: 'taskType', text: '任务类型', dictCode: 'task_type'})
452 - fieldList.push({type: 'string', value: 'containerCode', text: '容器', dictCode: ''}) 452 + fieldList.push({type: 'string', value: 'containerCode', text: '容器编码', dictCode: ''})
453 fieldList.push({type: 'string', value: 'fromLocationCode', text: '起始库位', dictCode: ''}) 453 fieldList.push({type: 'string', value: 'fromLocationCode', text: '起始库位', dictCode: ''})
454 fieldList.push({type: 'string', value: 'toLocationCode', text: '目标库位', dictCode: ''}) 454 fieldList.push({type: 'string', value: 'toLocationCode', text: '目标库位', dictCode: ''})
455 fieldList.push({type: 'string', value: 'isEmptyOut', text: '是否空出', dictCode: 'is_or_not'}) 455 fieldList.push({type: 'string', value: 'isEmptyOut', text: '是否空出', dictCode: 'is_or_not'})
ant-design-vue-jeecg/src/views/system/task/TransferTaskHeaderList.vue
@@ -10,8 +10,8 @@ @@ -10,8 +10,8 @@
10 </a-form-item> 10 </a-form-item>
11 </a-col> 11 </a-col>
12 <a-col :xl="6" :lg="7" :md="8" :sm="24"> 12 <a-col :xl="6" :lg="7" :md="8" :sm="24">
13 - <a-form-item label="容器号">  
14 - <a-input placeholder="请输入容器号" v-model="queryParam.containerCode"></a-input> 13 + <a-form-item label="容器编码">
  14 + <a-input placeholder="请输入容器编码" v-model="queryParam.containerCode"></a-input>
15 </a-form-item> 15 </a-form-item>
16 </a-col> 16 </a-col>
17 <template v-if="toggleSearchStatus"> 17 <template v-if="toggleSearchStatus">
@@ -212,7 +212,7 @@ export default { @@ -212,7 +212,7 @@ export default {
212 dataIndex: 'taskType_dictText', 212 dataIndex: 'taskType_dictText',
213 }, 213 },
214 { 214 {
215 - title: '容器', 215 + title: '容器编码',
216 align: "center", 216 align: "center",
217 dataIndex: 'containerCode' 217 dataIndex: 'containerCode'
218 }, 218 },
@@ -459,7 +459,7 @@ export default { @@ -459,7 +459,7 @@ export default {
459 getSuperFieldList() { 459 getSuperFieldList() {
460 let fieldList = []; 460 let fieldList = [];
461 fieldList.push({type: 'int', value: 'taskType', text: '任务类型', dictCode: 'task_type'}) 461 fieldList.push({type: 'int', value: 'taskType', text: '任务类型', dictCode: 'task_type'})
462 - fieldList.push({type: 'string', value: 'containerCode', text: '容器', dictCode: ''}) 462 + fieldList.push({type: 'string', value: 'containerCode', text: '容器编码', dictCode: ''})
463 fieldList.push({type: 'string', value: 'fromLocationCode', text: '起始库位', dictCode: ''}) 463 fieldList.push({type: 'string', value: 'fromLocationCode', text: '起始库位', dictCode: ''})
464 fieldList.push({type: 'string', value: 'toLocationCode', text: '目标库位', dictCode: ''}) 464 fieldList.push({type: 'string', value: 'toLocationCode', text: '目标库位', dictCode: ''})
465 fieldList.push({type: 'string', value: 'isEmptyOut', text: '是否空出', dictCode: 'is_or_not'}) 465 fieldList.push({type: 'string', value: 'isEmptyOut', text: '是否空出', dictCode: 'is_or_not'})
ant-design-vue-jeecg/src/views/system/task/modules/EmptyInTaskModal.vue
@@ -12,8 +12,8 @@ @@ -12,8 +12,8 @@
12 <a-form-model ref="form" :model="model" :rules="validatorRules"> 12 <a-form-model ref="form" :model="model" :rules="validatorRules">
13 <a-row> 13 <a-row>
14 <a-col :span="24"> 14 <a-col :span="24">
15 - <a-form-model-item label="容器号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="containerCode">  
16 - <a-input v-model="model.containerCode" placeholder="请输入容器号"></a-input> 15 + <a-form-model-item label="容器编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="containerCode">
  16 + <a-input v-model="model.containerCode" placeholder="请输入容器编码"></a-input>
17 </a-form-model-item> 17 </a-form-model-item>
18 </a-col> 18 </a-col>
19 <a-col :span="24"> 19 <a-col :span="24">
ant-design-vue-jeecg/src/views/system/task/modules/ManyEmptyInTaskModal.vue
@@ -12,8 +12,8 @@ @@ -12,8 +12,8 @@
12 <a-form-model ref="form" :model="model" :rules="validatorRules"> 12 <a-form-model ref="form" :model="model" :rules="validatorRules">
13 <a-row> 13 <a-row>
14 <a-col :span="24"> 14 <a-col :span="24">
15 - <a-form-model-item label="容器号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="containerCode">  
16 - <a-input v-model="model.containerCode" placeholder="请输入容器号"></a-input> 15 + <a-form-model-item label="容器编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="containerCode">
  16 + <a-input v-model="model.containerCode" placeholder="请输入容器编码"></a-input>
17 </a-form-model-item> 17 </a-form-model-item>
18 </a-col> 18 </a-col>
19 <a-col :span="24"> 19 <a-col :span="24">
ant-design-vue-jeecg/src/views/system/task/modules/TaskHeaderModal.vue
@@ -17,8 +17,8 @@ @@ -17,8 +17,8 @@
17 </a-form-model-item> 17 </a-form-model-item>
18 </a-col> 18 </a-col>
19 <a-col :span="24"> 19 <a-col :span="24">
20 - <a-form-model-item label="容器号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="containerCode">  
21 - <a-input v-model="model.containerCode" placeholder="请输入容器号"></a-input> 20 + <a-form-model-item label="容器编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="containerCode">
  21 + <a-input v-model="model.containerCode" placeholder="请输入容器编码"></a-input>
22 </a-form-model-item> 22 </a-form-model-item>
23 </a-col> 23 </a-col>
24 <a-col :span="24"> 24 <a-col :span="24">
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/entity/MesReceiptMaterial.java
@@ -17,9 +17,9 @@ public class MesReceiptMaterial { @@ -17,9 +17,9 @@ public class MesReceiptMaterial {
17 @ApiModelProperty(value = "上游单号", required = true) 17 @ApiModelProperty(value = "上游单号", required = true)
18 private String referCode; 18 private String referCode;
19 /** 19 /**
20 - * 容器 20 + * 容器编码
21 */ 21 */
22 - @ApiModelProperty(value = "容器", required = true) 22 + @ApiModelProperty(value = "容器编码", required = true)
23 private String containerCode; 23 private String containerCode;
24 /** 24 /**
25 * 仓库编码 25 * 仓库编码
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/servuce/impl/MesServiceImpl.java
@@ -91,7 +91,7 @@ public class MesServiceImpl implements IMesService { @@ -91,7 +91,7 @@ public class MesServiceImpl implements IMesService {
91 String warehouseCode = mesReceiptMaterial.getWarehouseCode(); 91 String warehouseCode = mesReceiptMaterial.getWarehouseCode();
92 String toPort = mesReceiptMaterial.getToPort(); 92 String toPort = mesReceiptMaterial.getToPort();
93 if (StringUtils.isEmpty(containerCode)) { 93 if (StringUtils.isEmpty(containerCode)) {
94 - return Result.error("MES下发入库信息,容器为空"); 94 + return Result.error("MES下发入库信息,容器编码为空");
95 } 95 }
96 if (StringUtils.isEmpty(warehouseCode)) { 96 if (StringUtils.isEmpty(warehouseCode)) {
97 return Result.error("MES下发入库信息,仓库编码为空"); 97 return Result.error("MES下发入库信息,仓库编码为空");
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/address/entity/Address.java
@@ -49,9 +49,9 @@ public class Address implements Serializable { @@ -49,9 +49,9 @@ public class Address implements Serializable {
49 @Excel(name = "接口地址", width = 15) 49 @Excel(name = "接口地址", width = 15)
50 @ApiModelProperty(value = "接口地址") 50 @ApiModelProperty(value = "接口地址")
51 private String url; 51 private String url;
52 - /** 备注 */  
53 - @Excel(name = "备注", width = 15)  
54 - @ApiModelProperty(value = "备注") 52 + /** 接口名称 */
  53 + @Excel(name = "接口名称", width = 15)
  54 + @ApiModelProperty(value = "接口名称")
55 private String remark; 55 private String remark;
56 /** 备用字段1 */ 56 /** 备用字段1 */
57 @Excel(name = "备用字段1", width = 15) 57 @Excel(name = "备用字段1", width = 15)
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/locationMonitor/controller/LocationMonitorController.java
@@ -21,6 +21,7 @@ import org.jeecg.utils.HuahengJwtUtil; @@ -21,6 +21,7 @@ import org.jeecg.utils.HuahengJwtUtil;
21 import org.jeecg.utils.StringUtils; 21 import org.jeecg.utils.StringUtils;
22 import org.jeecg.utils.constant.QuantityConstant; 22 import org.jeecg.utils.constant.QuantityConstant;
23 import org.springframework.beans.factory.annotation.Autowired; 23 import org.springframework.beans.factory.annotation.Autowired;
  24 +import org.springframework.util.CollectionUtils;
24 import org.springframework.web.bind.annotation.*; 25 import org.springframework.web.bind.annotation.*;
25 26
26 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 27 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -56,10 +57,15 @@ public class LocationMonitorController { @@ -56,10 +57,15 @@ public class LocationMonitorController {
56 HuahengJwtUtil.setWarehouseCode(queryWrapper, Location.class, req); 57 HuahengJwtUtil.setWarehouseCode(queryWrapper, Location.class, req);
57 queryWrapper.select(Location::getCode, Location::getStatus, Location::getContainerCode).eq(Location::getZoneCode, zoneCode); 58 queryWrapper.select(Location::getCode, Location::getStatus, Location::getContainerCode).eq(Location::getZoneCode, zoneCode);
58 List<Location> locationList = locationService.list(queryWrapper); 59 List<Location> locationList = locationService.list(queryWrapper);
59 - List<String> locationCodeList = locationList.stream().map(Location::getCode).collect(Collectors.toList());  
60 -  
61 HashMap<String, Integer> map = new HashMap<>(); 60 HashMap<String, Integer> map = new HashMap<>();
62 map.put("location", locationList.size()); 61 map.put("location", locationList.size());
  62 + if (CollectionUtils.isEmpty(locationList)) {
  63 + map.put("emptyLocation", 0);
  64 + map.put("haveContainLocation", 0);
  65 + map.put("haveInventoryLocation", 0);
  66 + return Result.ok(map);
  67 + }
  68 + List<String> locationCodeList = locationList.stream().map(Location::getCode).collect(Collectors.toList());
63 // 换stream进行数据拣选速度更快 69 // 换stream进行数据拣选速度更快
64 List<Location> emptyLocationList = 70 List<Location> emptyLocationList =
65 locationList.stream().filter(t -> QuantityConstant.STATUS_LOCATION_EMPTY.equals(t.getStatus())).collect(Collectors.toList()); 71 locationList.stream().filter(t -> QuantityConstant.STATUS_LOCATION_EMPTY.equals(t.getStatus())).collect(Collectors.toList());
@@ -69,19 +75,16 @@ public class LocationMonitorController { @@ -69,19 +75,16 @@ public class LocationMonitorController {
69 HuahengJwtUtil.setWarehouseCode(containerLambdaQueryWrapper, Container.class, req); 75 HuahengJwtUtil.setWarehouseCode(containerLambdaQueryWrapper, Container.class, req);
70 containerLambdaQueryWrapper.select(Container::getCode, Container::getStatus, Container::getFillStatus).in(Container::getLocationCode, locationCodeList); 76 containerLambdaQueryWrapper.select(Container::getCode, Container::getStatus, Container::getFillStatus).in(Container::getLocationCode, locationCodeList);
71 List<Container> containerList = containerService.list(containerLambdaQueryWrapper); 77 List<Container> containerList = containerService.list(containerLambdaQueryWrapper);
72 -  
73 List<String> containerCodeList = containerList.stream() 78 List<String> containerCodeList = containerList.stream()
74 .filter( 79 .filter(
75 t -> QuantityConstant.STATUS_CONTAINER_FILL_EMPTY.equals(t.getFillStatus()) || QuantityConstant.STATUS_CONTAINER_FILL_MANY.equals(t.getFillStatus())) 80 t -> QuantityConstant.STATUS_CONTAINER_FILL_EMPTY.equals(t.getFillStatus()) || QuantityConstant.STATUS_CONTAINER_FILL_MANY.equals(t.getFillStatus()))
76 .map(Container::getCode).collect(Collectors.toList()); 81 .map(Container::getCode).collect(Collectors.toList());
77 List<Location> haveEmptyContainLocation = locationList.stream().filter(t -> containerCodeList.contains(t.getContainerCode())).collect(Collectors.toList()); 82 List<Location> haveEmptyContainLocation = locationList.stream().filter(t -> containerCodeList.contains(t.getContainerCode())).collect(Collectors.toList());
78 map.put("haveContainLocation", haveEmptyContainLocation.size()); 83 map.put("haveContainLocation", haveEmptyContainLocation.size());
79 -  
80 List<String> containerCodeList1 = containerList.stream() 84 List<String> containerCodeList1 = containerList.stream()
81 .filter( 85 .filter(
82 t -> QuantityConstant.STATUS_CONTAINER_FILL_SOME.equals(t.getFillStatus()) || QuantityConstant.STATUS_CONTAINER_FILL_FULL.equals(t.getFillStatus())) 86 t -> QuantityConstant.STATUS_CONTAINER_FILL_SOME.equals(t.getFillStatus()) || QuantityConstant.STATUS_CONTAINER_FILL_FULL.equals(t.getFillStatus()))
83 .map(Container::getCode).collect(Collectors.toList()); 87 .map(Container::getCode).collect(Collectors.toList());
84 -  
85 List<Location> haveInventoryLocationList = locationList.stream().filter(t -> containerCodeList1.contains(t.getContainerCode())).collect(Collectors.toList()); 88 List<Location> haveInventoryLocationList = locationList.stream().filter(t -> containerCodeList1.contains(t.getContainerCode())).collect(Collectors.toList());
86 map.put("haveInventoryLocation", haveInventoryLocationList.size()); 89 map.put("haveInventoryLocation", haveInventoryLocationList.size());
87 return Result.ok(map); 90 return Result.ok(map);
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/home/controller/HomePageViewController.java
@@ -42,8 +42,11 @@ import javax.annotation.Resource; @@ -42,8 +42,11 @@ import javax.annotation.Resource;
42 import javax.servlet.http.HttpServletRequest; 42 import javax.servlet.http.HttpServletRequest;
43 43
44 import java.math.BigDecimal; 44 import java.math.BigDecimal;
  45 +import java.text.ParseException;
45 import java.text.SimpleDateFormat; 46 import java.text.SimpleDateFormat;
46 import java.util.*; 47 import java.util.*;
  48 +import java.util.concurrent.ExecutionException;
  49 +import java.util.concurrent.TimeoutException;
47 import java.util.stream.Collectors; 50 import java.util.stream.Collectors;
48 51
49 /** 52 /**
@@ -62,9 +65,13 @@ public class HomePageViewController { @@ -62,9 +65,13 @@ public class HomePageViewController {
62 /** 65 /**
63 * 库存概况 66 * 库存概况
64 * @return 67 * @return
  68 + * @throws TimeoutException
  69 + * @throws ExecutionException
  70 + * @throws InterruptedException
  71 + * @throws ParseException
65 */ 72 */
66 @RequestMapping(value = "/deliveringAmount", method = {RequestMethod.PUT, RequestMethod.POST}) 73 @RequestMapping(value = "/deliveringAmount", method = {RequestMethod.PUT, RequestMethod.POST})
67 - public Result<String> deliveringAmount(HttpServletRequest request) { 74 + public Result<String> deliveringAmount(HttpServletRequest request) throws ParseException, InterruptedException, ExecutionException, TimeoutException {
68 return homePageViewService.deliveringAmount(request); 75 return homePageViewService.deliveringAmount(request);
69 } 76 }
70 77
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/home/service/HomePageViewService.java
@@ -6,7 +6,10 @@ import org.jeecg.modules.wms.config.location.entity.Location; @@ -6,7 +6,10 @@ import org.jeecg.modules.wms.config.location.entity.Location;
6 import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader; 6 import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader;
7 7
8 import java.io.Serializable; 8 import java.io.Serializable;
  9 +import java.text.ParseException;
9 import java.util.Collection; 10 import java.util.Collection;
  11 +import java.util.concurrent.ExecutionException;
  12 +import java.util.concurrent.TimeoutException;
10 13
11 import javax.servlet.http.HttpServletRequest; 14 import javax.servlet.http.HttpServletRequest;
12 15
@@ -18,7 +21,7 @@ import javax.servlet.http.HttpServletRequest; @@ -18,7 +21,7 @@ import javax.servlet.http.HttpServletRequest;
18 */ 21 */
19 public interface HomePageViewService { 22 public interface HomePageViewService {
20 23
21 - Result<String> deliveringAmount(HttpServletRequest request); 24 + Result<String> deliveringAmount(HttpServletRequest request) throws ParseException, InterruptedException, ExecutionException, TimeoutException;
22 25
23 Result<String> inventoryUtilization(HttpServletRequest request); 26 Result<String> inventoryUtilization(HttpServletRequest request);
24 27
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/home/service/impl/HomePageViewServiceImpl.java
1 package org.jeecg.modules.wms.home.service.impl; 1 package org.jeecg.modules.wms.home.service.impl;
2 2
3 -import cn.hutool.core.util.ArrayUtil;  
4 -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;  
5 -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;  
6 -import com.baomidou.mybatisplus.core.toolkit.Wrappers;  
7 -import com.baomidou.mybatisplus.extension.service.IService;  
8 -import com.github.abel533.echarts.Option;  
9 -import com.github.abel533.echarts.axis.Axis;  
10 -import com.github.abel533.echarts.axis.CategoryAxis;  
11 -import com.github.abel533.echarts.axis.ValueAxis;  
12 -import com.github.abel533.echarts.code.*;  
13 -import com.github.abel533.echarts.json.GsonUtil;  
14 -import com.github.abel533.echarts.series.Line;  
15 -import com.github.abel533.echarts.series.Pie;  
16 -import com.github.abel533.echarts.style.itemstyle.Normal; 3 +import java.math.BigDecimal;
  4 +import java.text.ParseException;
  5 +import java.text.SimpleDateFormat;
  6 +import java.util.ArrayList;
  7 +import java.util.Arrays;
  8 +import java.util.Date;
  9 +import java.util.HashMap;
  10 +import java.util.LinkedHashMap;
  11 +import java.util.List;
  12 +import java.util.Map;
  13 +import java.util.concurrent.ExecutionException;
  14 +import java.util.concurrent.Future;
  15 +import java.util.concurrent.TimeUnit;
  16 +import java.util.concurrent.TimeoutException;
  17 +import java.util.stream.Collectors;
  18 +
  19 +import javax.annotation.Resource;
  20 +import javax.servlet.http.HttpServletRequest;
  21 +
17 import org.jeecg.common.api.vo.Result; 22 import org.jeecg.common.api.vo.Result;
18 import org.jeecg.modules.system.entity.SysDictItem; 23 import org.jeecg.modules.system.entity.SysDictItem;
19 import org.jeecg.modules.system.service.impl.SysDictItemServiceImpl; 24 import org.jeecg.modules.system.service.impl.SysDictItemServiceImpl;
20 import org.jeecg.modules.wms.config.location.entity.Location; 25 import org.jeecg.modules.wms.config.location.entity.Location;
21 import org.jeecg.modules.wms.config.location.service.impl.LocationServiceImpl; 26 import org.jeecg.modules.wms.config.location.service.impl.LocationServiceImpl;
22 import org.jeecg.modules.wms.home.service.HomePageViewService; 27 import org.jeecg.modules.wms.home.service.HomePageViewService;
23 -  
24 import org.jeecg.modules.wms.home.support.ChartData; 28 import org.jeecg.modules.wms.home.support.ChartData;
25 import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail; 29 import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail;
26 import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryHeader; 30 import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryHeader;
27 import org.jeecg.modules.wms.inventory.inventoryHeader.service.impl.InventoryDetailServiceImpl; 31 import org.jeecg.modules.wms.inventory.inventoryHeader.service.impl.InventoryDetailServiceImpl;
28 import org.jeecg.modules.wms.inventory.inventoryHeader.service.impl.InventoryHeaderServiceImpl; 32 import org.jeecg.modules.wms.inventory.inventoryHeader.service.impl.InventoryHeaderServiceImpl;
29 import org.jeecg.modules.wms.inventory.inventoryTransaction.entity.InventoryTransaction; 33 import org.jeecg.modules.wms.inventory.inventoryTransaction.entity.InventoryTransaction;
30 -import org.jeecg.modules.wms.inventory.inventoryTransaction.service.impl.InventoryTransactionServiceImpl;  
31 -import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptHeader; 34 +import org.jeecg.modules.wms.inventory.inventoryTransaction.service.IInventoryTransactionService;
32 import org.jeecg.modules.wms.receipt.receiptHeader.service.impl.ReceiptHeaderServiceImpl; 35 import org.jeecg.modules.wms.receipt.receiptHeader.service.impl.ReceiptHeaderServiceImpl;
33 -import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentHeader;  
34 import org.jeecg.modules.wms.shipment.shipmentHeader.service.impl.ShipmentHeaderServiceImpl; 36 import org.jeecg.modules.wms.shipment.shipmentHeader.service.impl.ShipmentHeaderServiceImpl;
35 -import org.jeecg.modules.wms.task.taskHeader.entity.TaskDetail;  
36 import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader; 37 import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader;
37 import org.jeecg.modules.wms.task.taskHeader.service.impl.TaskDetailServiceImpl; 38 import org.jeecg.modules.wms.task.taskHeader.service.impl.TaskDetailServiceImpl;
38 import org.jeecg.modules.wms.task.taskHeader.service.impl.TaskHeaderServiceImpl; 39 import org.jeecg.modules.wms.task.taskHeader.service.impl.TaskHeaderServiceImpl;
39 import org.jeecg.utils.HuahengJwtUtil; 40 import org.jeecg.utils.HuahengJwtUtil;
40 -import org.jeecg.utils.StringUtils;  
41 import org.jeecg.utils.constant.QuantityConstant; 41 import org.jeecg.utils.constant.QuantityConstant;
42 import org.jeecg.utils.support.Convert; 42 import org.jeecg.utils.support.Convert;
  43 +import org.jeecg.utils.support.SystemSync;
43 import org.springframework.stereotype.Service; 44 import org.springframework.stereotype.Service;
44 45
45 -import javax.annotation.Resource;  
46 -import javax.servlet.http.HttpServletRequest; 46 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  47 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  48 +import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  49 +import com.github.abel533.echarts.Option;
  50 +import com.github.abel533.echarts.axis.Axis;
  51 +import com.github.abel533.echarts.axis.CategoryAxis;
  52 +import com.github.abel533.echarts.axis.ValueAxis;
  53 +import com.github.abel533.echarts.code.LegendType;
  54 +import com.github.abel533.echarts.code.Orient;
  55 +import com.github.abel533.echarts.code.PointerType;
  56 +import com.github.abel533.echarts.code.SeriesType;
  57 +import com.github.abel533.echarts.code.Trigger;
  58 +import com.github.abel533.echarts.json.GsonUtil;
  59 +import com.github.abel533.echarts.series.Line;
  60 +import com.github.abel533.echarts.series.Pie;
  61 +import com.github.abel533.echarts.style.itemstyle.Normal;
47 62
48 -import java.math.BigDecimal;  
49 -import java.text.SimpleDateFormat;  
50 -import java.util.*;  
51 -import java.util.stream.Collectors; 63 +import cn.hutool.core.date.DateUtil;
  64 +import cn.hutool.core.util.ArrayUtil;
52 65
53 /** 66 /**
54 * @Description: 任务表 67 * @Description: 任务表
@@ -87,60 +100,26 @@ public class HomePageViewServiceImpl implements HomePageViewService { @@ -87,60 +100,26 @@ public class HomePageViewServiceImpl implements HomePageViewService {
87 HomePageViewService homePageViewService; 100 HomePageViewService homePageViewService;
88 101
89 @Resource 102 @Resource
90 - InventoryTransactionServiceImpl inventoryTransactionServiceImpl; 103 + IInventoryTransactionService inventoryTransactionService;
  104 +
  105 + @Resource
  106 + SystemSync systemSync;
91 107
92 @Override 108 @Override
93 - public Result<String> deliveringAmount(HttpServletRequest request) {  
94 - // 通过库存交易记录来查询  
95 - LambdaQueryWrapper<InventoryTransaction> inventoryTransactionLambdaQueryWrapper = Wrappers.lambdaQuery();  
96 - HuahengJwtUtil.setWarehouseCode(inventoryTransactionLambdaQueryWrapper, InventoryTransaction.class, request);  
97 - inventoryTransactionLambdaQueryWrapper.select(InventoryTransaction::getCreateTime, InventoryTransaction::getQty, InventoryTransaction::getType);  
98 - List<InventoryTransaction> inventoryTransactions = inventoryTransactionServiceImpl.list(inventoryTransactionLambdaQueryWrapper);  
99 -  
100 - // 查询出库单的7天出库量  
101 - List<InventoryTransaction> shipmentHeaders = new ArrayList<>();  
102 - shipmentHeaders.addAll(inventoryTransactions);  
103 - shipmentHeaders.removeIf(Inventory -> Inventory.getType() != 20);  
104 - LinkedHashMap<String, String> list = new LinkedHashMap<>();  
105 -  
106 - for (int i = 6; i >= 0; i--) {  
107 - String today = new SimpleDateFormat("yyyy-MM-dd").format(System.currentTimeMillis() - (1000 * 60 * 60 * 24) * i).toString();  
108 - List<InventoryTransaction> collect = shipmentHeaders.stream()  
109 - .filter(shipmentHeader -> new SimpleDateFormat("yyyy-MM-dd").format(shipmentHeader.getCreateTime()).toString().contains(today))  
110 - .collect(Collectors.toList());  
111 - if (collect.size() != 0) {  
112 - BigDecimal sum = new BigDecimal(0);  
113 - for (InventoryTransaction item : collect) {  
114 - sum = sum.add(item.getQty());  
115 - }  
116 - list.put(today, String.valueOf(sum));  
117 - } else {  
118 - list.put(today, "0");  
119 - }  
120 - }  
121 -  
122 - // 查询入库单的7天入库量  
123 - List<InventoryTransaction> receiptHeaders = new ArrayList<>();  
124 - receiptHeaders.addAll(inventoryTransactions);  
125 - receiptHeaders.removeIf(Inventory -> Inventory.getType() != 10);  
126 - LinkedHashMap<String, String> list2 = new LinkedHashMap<>(); 109 + public Result<String> deliveringAmount(HttpServletRequest request) throws ParseException, InterruptedException, ExecutionException, TimeoutException {
  110 + Long dateTime = new Date().getTime();
  111 + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
  112 + LinkedHashMap<String, Future<BigDecimal>> shipmentQuantityMap = new LinkedHashMap<String, Future<BigDecimal>>();
  113 + LinkedHashMap<String, Future<BigDecimal>> receiptQuantityMap = new LinkedHashMap<String, Future<BigDecimal>>();
  114 + // 查询出库单的7天出库量/入库量
127 for (int i = 6; i >= 0; i--) { 115 for (int i = 6; i >= 0; i--) {
128 - List<InventoryTransaction> receiptHeadersCop = receiptHeaders;  
129 - String today = new SimpleDateFormat("yyyy-MM-dd").format(System.currentTimeMillis() - (1000 * 60 * 60 * 24) * i).toString();  
130 - List<InventoryTransaction> collect = receiptHeadersCop.stream()  
131 - .filter(ReceiptHeader -> new SimpleDateFormat("yyyy-MM-dd").format(ReceiptHeader.getCreateTime()).toString().contains(today))  
132 - .collect(Collectors.toList());  
133 - if (collect.size() != 0) {  
134 - BigDecimal sum = new BigDecimal(0);  
135 - for (InventoryTransaction item : collect) {  
136 - sum = sum.add(item.getQty());  
137 - }  
138 - list2.put(today, String.valueOf(sum));  
139 - } else {  
140 - list2.put(today, "0");  
141 - } 116 + String startTime = simpleDateFormat.format(dateTime - (1000 * 60 * 60 * 24) * i);
  117 + String endTime = simpleDateFormat.format(DateUtil.offsetDay(simpleDateFormat.parse(startTime), 1));
  118 + shipmentQuantityMap.put(startTime,
  119 + systemSync.asyncCalculateInventory(startTime, endTime, QuantityConstant.INVENTORY_TRANSACTION_SHIPMENT));
  120 + receiptQuantityMap.put(startTime,
  121 + systemSync.asyncCalculateInventory(startTime, endTime, QuantityConstant.INVENTORY_TRANSACTION_RECEIPT));
142 } 122 }
143 -  
144 Option option = new Option(); 123 Option option = new Option();
145 option.tooltip().trigger(Trigger.axis).axisPointer().type(PointerType.cross); 124 option.tooltip().trigger(Trigger.axis).axisPointer().type(PointerType.cross);
146 option.grid().setLeft("3%"); 125 option.grid().setLeft("3%");
@@ -158,17 +137,17 @@ public class HomePageViewServiceImpl implements HomePageViewService { @@ -158,17 +137,17 @@ public class HomePageViewServiceImpl implements HomePageViewService {
158 axis.boundaryGap(false); 137 axis.boundaryGap(false);
159 Line line = new Line(); 138 Line line = new Line();
160 line.setName("发货量"); 139 line.setName("发货量");
161 - for (String key : list.keySet()) { 140 + for (String key : shipmentQuantityMap.keySet()) {
162 Object o1 = key; 141 Object o1 = key;
163 - Object o2 = list.get(key); 142 + Object o2 = shipmentQuantityMap.get(key).get(10000, TimeUnit.MILLISECONDS);
164 axis.data().add(o1); 143 axis.data().add(o1);
165 line.data().add(o2); 144 line.data().add(o2);
166 } 145 }
167 Line line2 = new Line(); 146 Line line2 = new Line();
168 line2.setName("收货量"); 147 line2.setName("收货量");
169 - for (String key : list2.keySet()) { 148 + for (String key : receiptQuantityMap.keySet()) {
170 Object o1 = key; 149 Object o1 = key;
171 - Object o2 = list2.get(key); 150 + Object o2 = receiptQuantityMap.get(key).get(10000, TimeUnit.MILLISECONDS);
172 line2.data().add(o2); 151 line2.data().add(o2);
173 } 152 }
174 option.setxAxis(Arrays.asList(axis)); 153 option.setxAxis(Arrays.asList(axis));
@@ -346,7 +325,7 @@ public class HomePageViewServiceImpl implements HomePageViewService { @@ -346,7 +325,7 @@ public class HomePageViewServiceImpl implements HomePageViewService {
346 LambdaQueryWrapper<InventoryTransaction> inventoryTransactionLambdaQueryWrapper = Wrappers.lambdaQuery(); 325 LambdaQueryWrapper<InventoryTransaction> inventoryTransactionLambdaQueryWrapper = Wrappers.lambdaQuery();
347 HuahengJwtUtil.setWarehouseCode(inventoryTransactionLambdaQueryWrapper, InventoryTransaction.class, request); 326 HuahengJwtUtil.setWarehouseCode(inventoryTransactionLambdaQueryWrapper, InventoryTransaction.class, request);
348 inventoryTransactionLambdaQueryWrapper.select(InventoryTransaction::getType, InventoryTransaction::getQty).gt(InventoryTransaction::getCreateTime, today); 327 inventoryTransactionLambdaQueryWrapper.select(InventoryTransaction::getType, InventoryTransaction::getQty).gt(InventoryTransaction::getCreateTime, today);
349 - List<InventoryTransaction> inventoryTransactions = inventoryTransactionServiceImpl.list(inventoryTransactionLambdaQueryWrapper); 328 + List<InventoryTransaction> inventoryTransactions = inventoryTransactionService.list(inventoryTransactionLambdaQueryWrapper);
350 BigDecimal receiptQty = BigDecimal.ZERO; 329 BigDecimal receiptQty = BigDecimal.ZERO;
351 BigDecimal shipmentQty = BigDecimal.ZERO; 330 BigDecimal shipmentQty = BigDecimal.ZERO;
352 331
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/entity/InventoryHeader.java
@@ -42,9 +42,9 @@ public class InventoryHeader implements Serializable { @@ -42,9 +42,9 @@ public class InventoryHeader implements Serializable {
42 @Excel(name = "库区", width = 15) 42 @Excel(name = "库区", width = 15)
43 @ApiModelProperty(value = "库区") 43 @ApiModelProperty(value = "库区")
44 private String zoneCode; 44 private String zoneCode;
45 - /** 容器号 */  
46 - @Excel(name = "容器号", width = 15)  
47 - @ApiModelProperty(value = "容器号") 45 + /** 容器编码 */
  46 + @Excel(name = "容器编码", width = 15)
  47 + @ApiModelProperty(value = "容器编码")
48 private String containerCode; 48 private String containerCode;
49 /** 容器状态 */ 49 /** 容器状态 */
50 @Excel(name = "容器状态", width = 15, dicCode = "container_status") 50 @Excel(name = "容器状态", width = 15, dicCode = "container_status")
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryTransaction/service/IInventoryTransactionService.java
@@ -3,7 +3,10 @@ package org.jeecg.modules.wms.inventory.inventoryTransaction.service; @@ -3,7 +3,10 @@ package org.jeecg.modules.wms.inventory.inventoryTransaction.service;
3 import com.baomidou.mybatisplus.extension.service.IService; 3 import com.baomidou.mybatisplus.extension.service.IService;
4 import org.jeecg.modules.wms.inventory.inventoryTransaction.entity.InventoryTransaction; 4 import org.jeecg.modules.wms.inventory.inventoryTransaction.entity.InventoryTransaction;
5 5
  6 +import java.math.BigDecimal;
  7 +import java.text.ParseException;
6 import java.util.List; 8 import java.util.List;
  9 +import java.util.concurrent.Future;
7 10
8 /** 11 /**
9 * @Description: 库存交易记录 12 * @Description: 库存交易记录
@@ -14,5 +17,5 @@ import java.util.List; @@ -14,5 +17,5 @@ import java.util.List;
14 public interface IInventoryTransactionService extends IService<InventoryTransaction> { 17 public interface IInventoryTransactionService extends IService<InventoryTransaction> {
15 18
16 boolean batchSave(List<InventoryTransaction> inventoryTransactionList); 19 boolean batchSave(List<InventoryTransaction> inventoryTransactionList);
17 - 20 +
18 } 21 }
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryTransaction/service/impl/InventoryTransactionServiceImpl.java
@@ -3,11 +3,18 @@ package org.jeecg.modules.wms.inventory.inventoryTransaction.service.impl; @@ -3,11 +3,18 @@ package org.jeecg.modules.wms.inventory.inventoryTransaction.service.impl;
3 import org.jeecg.modules.wms.inventory.inventoryTransaction.entity.InventoryTransaction; 3 import org.jeecg.modules.wms.inventory.inventoryTransaction.entity.InventoryTransaction;
4 import org.jeecg.modules.wms.inventory.inventoryTransaction.mapper.InventoryTransactionMapper; 4 import org.jeecg.modules.wms.inventory.inventoryTransaction.mapper.InventoryTransactionMapper;
5 import org.jeecg.modules.wms.inventory.inventoryTransaction.service.IInventoryTransactionService; 5 import org.jeecg.modules.wms.inventory.inventoryTransaction.service.IInventoryTransactionService;
  6 +import org.springframework.scheduling.annotation.Async;
  7 +import org.springframework.scheduling.annotation.AsyncResult;
6 import org.springframework.stereotype.Service; 8 import org.springframework.stereotype.Service;
7 9
  10 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  11 +import com.baomidou.mybatisplus.core.toolkit.Wrappers;
8 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 12 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
9 13
  14 +import java.math.BigDecimal;
  15 +import java.text.ParseException;
10 import java.util.List; 16 import java.util.List;
  17 +import java.util.concurrent.Future;
11 18
12 /** 19 /**
13 * @Description: 库存交易记录 20 * @Description: 库存交易记录
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/entity/ReceiptContainerDetail.java
@@ -39,9 +39,9 @@ public class ReceiptContainerDetail implements Serializable { @@ -39,9 +39,9 @@ public class ReceiptContainerDetail implements Serializable {
39 /** 入库单详情ID */ 39 /** 入库单详情ID */
40 @ApiModelProperty(value = "入库单详情ID") 40 @ApiModelProperty(value = "入库单详情ID")
41 private Integer receiptDetailId; 41 private Integer receiptDetailId;
42 - /** 容器号 */  
43 - @Excel(name = "容器号", width = 15)  
44 - @ApiModelProperty(value = "容器号") 42 + /** 容器编码 */
  43 + @Excel(name = "容器编码", width = 15)
  44 + @ApiModelProperty(value = "容器编码")
45 private String containerCode; 45 private String containerCode;
46 /** 入库单编码 */ 46 /** 入库单编码 */
47 @ApiModelProperty(value = "入库单编码") 47 @ApiModelProperty(value = "入库单编码")
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/entity/ReceiptContainerHeader.java
@@ -39,9 +39,9 @@ public class ReceiptContainerHeader implements Serializable { @@ -39,9 +39,9 @@ public class ReceiptContainerHeader implements Serializable {
39 @Excel(name = "货主", width = 15) 39 @Excel(name = "货主", width = 15)
40 @ApiModelProperty(value = "货主") 40 @ApiModelProperty(value = "货主")
41 private String companyCode; 41 private String companyCode;
42 - /** 容器号 */  
43 - @Excel(name = "容器号", width = 15)  
44 - @ApiModelProperty(value = "容器号") 42 + /** 容器编码 */
  43 + @Excel(name = "容器编码", width = 15)
  44 + @ApiModelProperty(value = "容器编码")
45 private String containerCode; 45 private String containerCode;
46 /** 容器类型 */ 46 /** 容器类型 */
47 @Excel(name = "容器类型", width = 15) 47 @Excel(name = "容器类型", width = 15)
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/service/impl/ReceiveServiceImpl.java
@@ -108,11 +108,11 @@ public class ReceiveServiceImpl extends ServiceImpl&lt;ReceiveMapper, Receive&gt; impl @@ -108,11 +108,11 @@ public class ReceiveServiceImpl extends ServiceImpl&lt;ReceiveMapper, Receive&gt; impl
108 } 108 }
109 String containerCode = receiveList.get(0).getContainerCode(); 109 String containerCode = receiveList.get(0).getContainerCode();
110 if (StringUtils.isEmpty(containerCode)) { 110 if (StringUtils.isEmpty(containerCode)) {
111 - return Result.error("容器为空"); 111 + return Result.error("容器编码为空");
112 } 112 }
113 Container container = containerService.getContainerByCode(containerCode, warehouseCode); 113 Container container = containerService.getContainerByCode(containerCode, warehouseCode);
114 if (container == null) { 114 if (container == null) {
115 - return Result.error("根据容器 " + containerCode + ", 没有找到容器"); 115 + return Result.error("根据容器编码 " + containerCode + ", 没有找到容器");
116 } 116 }
117 String containerStatus = container.getStatus(); 117 String containerStatus = container.getStatus();
118 if (containerStatus.equals(QuantityConstant.STATUS_CONTAINER_LOCK)) { 118 if (containerStatus.equals(QuantityConstant.STATUS_CONTAINER_LOCK)) {
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/impl/ShipmentCombinationServiceImpl.java
@@ -589,7 +589,7 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi @@ -589,7 +589,7 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
589 String containerCode = inventoryDetail.getContainerCode(); 589 String containerCode = inventoryDetail.getContainerCode();
590 Container container = containerService.getContainerByCode(containerCode, warehouseCode); 590 Container container = containerService.getContainerByCode(containerCode, warehouseCode);
591 if (container == null) { 591 if (container == null) {
592 - return Result.error("没有找到容器,容器" + containerCode); 592 + return Result.error("没有找到容器,容器编码" + containerCode);
593 } 593 }
594 if (container.getStatus().equals(QuantityConstant.STATUS_CONTAINER_LOCK)) { 594 if (container.getStatus().equals(QuantityConstant.STATUS_CONTAINER_LOCK)) {
595 removeInventoryList.add(inventoryDetail); 595 removeInventoryList.add(inventoryDetail);
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/entity/ShipmentContainerDetail.java
@@ -53,9 +53,9 @@ public class ShipmentContainerDetail implements Serializable { @@ -53,9 +53,9 @@ public class ShipmentContainerDetail implements Serializable {
53 @Excel(name = "货主编码", width = 15) 53 @Excel(name = "货主编码", width = 15)
54 @ApiModelProperty(value = "货主编码") 54 @ApiModelProperty(value = "货主编码")
55 private String companyCode; 55 private String companyCode;
56 - /** 容器号 */  
57 - @Excel(name = "容器号", width = 15)  
58 - @ApiModelProperty(value = "容器号") 56 + /** 容器编码 */
  57 + @Excel(name = "容器编码", width = 15)
  58 + @ApiModelProperty(value = "容器编码")
59 private String containerCode; 59 private String containerCode;
60 /** 起始库位 */ 60 /** 起始库位 */
61 @Excel(name = "起始库位", width = 15) 61 @Excel(name = "起始库位", width = 15)
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/entity/ShipmentContainerHeader.java
@@ -38,9 +38,9 @@ public class ShipmentContainerHeader implements Serializable { @@ -38,9 +38,9 @@ public class ShipmentContainerHeader implements Serializable {
38 @Excel(name = "货主", width = 15) 38 @Excel(name = "货主", width = 15)
39 @ApiModelProperty(value = "货主") 39 @ApiModelProperty(value = "货主")
40 private String companyCode; 40 private String companyCode;
41 - /** 容器号 */  
42 - @Excel(name = "容器号", width = 15)  
43 - @ApiModelProperty(value = "容器号") 41 + /** 容器编码 */
  42 + @Excel(name = "容器编码", width = 15)
  43 + @ApiModelProperty(value = "容器编码")
44 private String containerCode; 44 private String containerCode;
45 /** 容器类型 */ 45 /** 容器类型 */
46 @Excel(name = "容器类型", width = 15) 46 @Excel(name = "容器类型", width = 15)
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/agvTask/service/impl/AgvTaskServiceImpl.java
@@ -114,7 +114,7 @@ public class AgvTaskServiceImpl extends ServiceImpl&lt;AgvTaskMapper, AgvTask&gt; impl @@ -114,7 +114,7 @@ public class AgvTaskServiceImpl extends ServiceImpl&lt;AgvTaskMapper, AgvTask&gt; impl
114 } 114 }
115 Container container = containerService.getContainerByCode(containerCode, warehouseCode); 115 Container container = containerService.getContainerByCode(containerCode, warehouseCode);
116 if (container == null) { 116 if (container == null) {
117 - throw new JeecgBootException("完成AGV任务时,根据容器没有找到容器"); 117 + throw new JeecgBootException("完成AGV任务时,根据容器编码没有找到容器");
118 } 118 }
119 success = containerService.updateLocationCodeAndStatus(containerCode, toPort, QuantityConstant.STATUS_CONTAINER_EMPTY, warehouseCode); 119 success = containerService.updateLocationCodeAndStatus(containerCode, toPort, QuantityConstant.STATUS_CONTAINER_EMPTY, warehouseCode);
120 if (!success) { 120 if (!success) {
@@ -165,7 +165,7 @@ public class AgvTaskServiceImpl extends ServiceImpl&lt;AgvTaskMapper, AgvTask&gt; impl @@ -165,7 +165,7 @@ public class AgvTaskServiceImpl extends ServiceImpl&lt;AgvTaskMapper, AgvTask&gt; impl
165 } 165 }
166 Container container = containerService.getContainerByCode(containerCode, warehouseCode); 166 Container container = containerService.getContainerByCode(containerCode, warehouseCode);
167 if (container == null) { 167 if (container == null) {
168 - throw new JeecgBootException("取消AGV任务。 根据容器没有找到容器"); 168 + throw new JeecgBootException("取消AGV任务。 根据容器编码没有找到容器");
169 } 169 }
170 // 2023-04-11 托盘状态与填充状态分离 170 // 2023-04-11 托盘状态与填充状态分离
171 // String containerStatus = QuantityConstant.STATUS_CONTAINER_EMPTY; 171 // String containerStatus = QuantityConstant.STATUS_CONTAINER_EMPTY;
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/TaskHeader.java
@@ -71,9 +71,9 @@ public class TaskHeader implements Serializable { @@ -71,9 +71,9 @@ public class TaskHeader implements Serializable {
71 @Excel(name = "内部任务类型", width = 15) 71 @Excel(name = "内部任务类型", width = 15)
72 @ApiModelProperty(value = "内部任务类型") 72 @ApiModelProperty(value = "内部任务类型")
73 private Integer innernalTaskType; 73 private Integer innernalTaskType;
74 - /** 容器号 */  
75 - @Excel(name = "容器号", width = 15)  
76 - @ApiModelProperty(value = "容器号") 74 + /** 容器编码 */
  75 + @Excel(name = "容器编码", width = 15)
  76 + @ApiModelProperty(value = "容器编码")
77 private String containerCode; 77 private String containerCode;
78 /** 起始库位 */ 78 /** 起始库位 */
79 @Excel(name = "起始库位", width = 15) 79 @Excel(name = "起始库位", width = 15)
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java
@@ -250,7 +250,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -250,7 +250,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
250 // container.setLastStatus(container.getStatus()); 250 // container.setLastStatus(container.getStatus());
251 // boolean success = containerService.updateById(container); 251 // boolean success = containerService.updateById(container);
252 // if (!success) { 252 // if (!success) {
253 -// throw new JeecgBootException("创建移库任务时,更新容器状态失败,容器" + fromLocation.getContainerCode()); 253 +// throw new JeecgBootException("创建移库任务时,更新容器状态失败,容器编码" + fromLocation.getContainerCode());
254 // } 254 // }
255 255
256 // 3. 判断源库位旁边有托盘但是没有任务,那么不允许移库 256 // 3. 判断源库位旁边有托盘但是没有任务,那么不允许移库
@@ -383,7 +383,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -383,7 +383,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
383 @Transactional(rollbackFor = Exception.class) 383 @Transactional(rollbackFor = Exception.class)
384 public Result createOverStationTask(String containerCode, String fromPortCode, String toPortCode, String warehouseCode) { 384 public Result createOverStationTask(String containerCode, String fromPortCode, String toPortCode, String warehouseCode) {
385 if (StringUtils.isEmpty(containerCode)) { 385 if (StringUtils.isEmpty(containerCode)) {
386 - return Result.error("创建跨站任务时,容器为空"); 386 + return Result.error("创建跨站任务时,容器编码为空");
387 } 387 }
388 if (StringUtils.isEmpty(fromPortCode)) { 388 if (StringUtils.isEmpty(fromPortCode)) {
389 return Result.error("创建跨站任务时,起始站台号为空"); 389 return Result.error("创建跨站任务时,起始站台号为空");
@@ -436,7 +436,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -436,7 +436,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
436 @Transactional(rollbackFor = Exception.class) 436 @Transactional(rollbackFor = Exception.class)
437 public Result createManyEmptyInTask(String containerCode, String zoneCode, String roadWay, String height, String warehouseCode) { 437 public Result createManyEmptyInTask(String containerCode, String zoneCode, String roadWay, String height, String warehouseCode) {
438 if (StringUtils.isEmpty(containerCode)) { 438 if (StringUtils.isEmpty(containerCode)) {
439 - return Result.error("创建空托盘组入库任务时,容器为空"); 439 + return Result.error("创建空托盘组入库任务时,容器编码为空");
440 } 440 }
441 if (StringUtils.isEmpty(zoneCode)) { 441 if (StringUtils.isEmpty(zoneCode)) {
442 return Result.error("创建空托盘组入库任务时,库区编码为空"); 442 return Result.error("创建空托盘组入库任务时,库区编码为空");
@@ -501,7 +501,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -501,7 +501,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
501 @Transactional(rollbackFor = Exception.class) 501 @Transactional(rollbackFor = Exception.class)
502 public Result createManyEmptyIn(String containerCode, String toLocationCode, String warehouseCode) { 502 public Result createManyEmptyIn(String containerCode, String toLocationCode, String warehouseCode) {
503 if (StringUtils.isEmpty(containerCode)) { 503 if (StringUtils.isEmpty(containerCode)) {
504 - return Result.error("创建空托盘组入库任务时,容器为空"); 504 + return Result.error("创建空托盘组入库任务时,容器编码为空");
505 } 505 }
506 if (StringUtils.isEmpty(warehouseCode)) { 506 if (StringUtils.isEmpty(warehouseCode)) {
507 return Result.error("创建空托盘组入库任务时,仓库编码为空"); 507 return Result.error("创建空托盘组入库任务时,仓库编码为空");
@@ -642,9 +642,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -642,9 +642,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
642 String containerCode = taskHeader.getContainerCode(); 642 String containerCode = taskHeader.getContainerCode();
643 String fromLocationCode = taskHeader.getFromLocationCode(); 643 String fromLocationCode = taskHeader.getFromLocationCode();
644 String warehouseCode = taskHeader.getWarehouseCode(); 644 String warehouseCode = taskHeader.getWarehouseCode();
645 - // 4、容器、库位号、仓库编码 不能为空 645 + // 4、容器编码、库位号、仓库编码 不能为空
646 if (StringUtils.isEmpty(containerCode)) { 646 if (StringUtils.isEmpty(containerCode)) {
647 - return Result.error("处理空出失败,容器为空"); 647 + return Result.error("处理空出失败,容器编码为空");
648 } 648 }
649 if (StringUtils.isEmpty(fromLocationCode)) { 649 if (StringUtils.isEmpty(fromLocationCode)) {
650 return Result.error("处理空出失败,起始库号位为空"); 650 return Result.error("处理空出失败,起始库号位为空");
@@ -666,7 +666,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -666,7 +666,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
666 if (!success) { 666 if (!success) {
667 throw new JeecgBootException("处理空出失败, 更新容器状态失败"); 667 throw new JeecgBootException("处理空出失败, 更新容器状态失败");
668 } 668 }
669 - // 6、删除库位上的容器,并设置状态为空闲 669 + // 6、删除库位上的容器编码,并设置状态为空闲
670 success = 670 success =
671 locationService.updateContainerCodeAndStatus(fromLocationCode, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode); 671 locationService.updateContainerCodeAndStatus(fromLocationCode, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode);
672 if (!success) { 672 if (!success) {
@@ -717,9 +717,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -717,9 +717,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
717 String containerCode = taskHeader.getContainerCode(); 717 String containerCode = taskHeader.getContainerCode();
718 String originLocationCode = taskHeader.getOriginLocationCode(); 718 String originLocationCode = taskHeader.getOriginLocationCode();
719 String warehouseCode = taskHeader.getWarehouseCode(); 719 String warehouseCode = taskHeader.getWarehouseCode();
720 - // 4、容器、库位号、仓库编码 不能为空 720 + // 4、容器编码、库位号、仓库编码 不能为空
721 if (StringUtils.isEmpty(containerCode)) { 721 if (StringUtils.isEmpty(containerCode)) {
722 - return Result.error("处理重入失败,容器为空"); 722 + return Result.error("处理重入失败,容器编码为空");
723 } 723 }
724 if (StringUtils.isEmpty(originLocationCode)) { 724 if (StringUtils.isEmpty(originLocationCode)) {
725 return Result.error("处理重入失败,终点库号位为空"); 725 return Result.error("处理重入失败,终点库号位为空");
@@ -829,10 +829,10 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -829,10 +829,10 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
829 public Result completeTaskByWMS(Integer taskId) { 829 public Result completeTaskByWMS(Integer taskId) {
830 TaskHeader taskHeader = getById(taskId); 830 TaskHeader taskHeader = getById(taskId);
831 if (taskHeader == null) { 831 if (taskHeader == null) {
832 - return Result.error("任务" + taskId + "未找到,执行中止"); 832 + return Result.error("任务 " + taskId + " 未找到,执行中止");
833 } 833 }
834 if (taskHeader.getStatus().equals(QuantityConstant.TASK_STATUS_COMPLETED)) { 834 if (taskHeader.getStatus().equals(QuantityConstant.TASK_STATUS_COMPLETED)) {
835 - return Result.ok("任务(" + taskId + ")任务已经是完成的!"); 835 + return Result.ok("任务 " + taskId + " 任务已完成!");
836 } 836 }
837 int taskType = taskHeader.getTaskType().intValue(); 837 int taskType = taskHeader.getTaskType().intValue();
838 if (taskType != QuantityConstant.TASK_TYPE_OVER_STATION) { 838 if (taskType != QuantityConstant.TASK_TYPE_OVER_STATION) {
@@ -1510,7 +1510,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -1510,7 +1510,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1510 } 1510 }
1511 Container container = containerService.getContainerByCode(containerCode, warehouseCode); 1511 Container container = containerService.getContainerByCode(containerCode, warehouseCode);
1512 if (container == null) { 1512 if (container == null) {
1513 - throw new JeecgBootException("合并库存时, 没有找到容器, 容器为" + containerCode); 1513 + throw new JeecgBootException("合并库存时, 没有找到容器, 容器编码为" + containerCode);
1514 } 1514 }
1515 inventoryHeader.setTotalQty(totalQty); 1515 inventoryHeader.setTotalQty(totalQty);
1516 inventoryHeader.setTotalLines(totalLines); 1516 inventoryHeader.setTotalLines(totalLines);
@@ -1553,7 +1553,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -1553,7 +1553,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1553 } 1553 }
1554 success = locationService.updateContainerCodeAndStatus(toLocationCode, containerCode, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode); 1554 success = locationService.updateContainerCodeAndStatus(toLocationCode, containerCode, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode);
1555 if (!success) { 1555 if (!success) {
1556 - throw new JeecgBootException("完成空托盘入库任务时, 更新库位的容器和状态失败"); 1556 + throw new JeecgBootException("完成空托盘入库任务时, 更新库位的容器编码和状态失败");
1557 } 1557 }
1558 taskHeader.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); 1558 taskHeader.setStatus(QuantityConstant.TASK_STATUS_COMPLETED);
1559 success = taskHeaderService.updateById(taskHeader); 1559 success = taskHeaderService.updateById(taskHeader);
@@ -1855,7 +1855,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -1855,7 +1855,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1855 success = 1855 success =
1856 locationService.updateContainerCodeAndStatus(fromLocationCode, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode); 1856 locationService.updateContainerCodeAndStatus(fromLocationCode, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode);
1857 if (!success) { 1857 if (!success) {
1858 - throw new JeecgBootException("完成空托盘出库任务时, 更新库位的容器和状态失败"); 1858 + throw new JeecgBootException("完成空托盘出库任务时, 更新库位的容器编码和状态失败");
1859 } 1859 }
1860 taskHeader.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); 1860 taskHeader.setStatus(QuantityConstant.TASK_STATUS_COMPLETED);
1861 success = taskHeaderService.updateById(taskHeader); 1861 success = taskHeaderService.updateById(taskHeader);
@@ -2290,7 +2290,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -2290,7 +2290,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
2290 // if (StringUtils.isNotEmpty(fromLocationCode)) { 2290 // if (StringUtils.isNotEmpty(fromLocationCode)) {
2291 // success = containerService.havaLocationCodeByContainer(fromLocationCode, warehouseCode); 2291 // success = containerService.havaLocationCodeByContainer(fromLocationCode, warehouseCode);
2292 // if (success) { 2292 // if (success) {
2293 -// throw new JeecgBootException("库位表已经存在这个容器,不能再写入"); 2293 +// throw new JeecgBootException("库位表已经存在这个容器编码,不能再写入");
2294 // } 2294 // }
2295 // } 2295 // }
2296 // container.setLastStatus(QuantityConstant.EMPTY_STRING); 2296 // container.setLastStatus(QuantityConstant.EMPTY_STRING);
huaheng-wms-core/src/main/java/org/jeecg/utils/aspect/ApiLoggerAspect.java
@@ -23,17 +23,13 @@ import org.aspectj.lang.reflect.MethodSignature; @@ -23,17 +23,13 @@ import org.aspectj.lang.reflect.MethodSignature;
23 import org.jeecg.JeecgSystemApplication; 23 import org.jeecg.JeecgSystemApplication;
24 import org.jeecg.common.api.vo.Result; 24 import org.jeecg.common.api.vo.Result;
25 import org.jeecg.modules.wms.config.address.entity.Address; 25 import org.jeecg.modules.wms.config.address.entity.Address;
26 -import org.jeecg.modules.wms.config.address.service.IAddressService; 26 +import org.jeecg.modules.wms.config.address.service.impl.AddressServiceImpl;
27 import org.jeecg.modules.wms.monitor.apiLog.entity.ApiLog; 27 import org.jeecg.modules.wms.monitor.apiLog.entity.ApiLog;
28 -import org.jeecg.modules.wms.monitor.apiLog.service.IApiLogService;  
29 import org.jeecg.utils.ServletUtils; 28 import org.jeecg.utils.ServletUtils;
30 import org.jeecg.utils.SpringUtils; 29 import org.jeecg.utils.SpringUtils;
31 import org.jeecg.utils.StringUtils; 30 import org.jeecg.utils.StringUtils;
32 -import org.jeecg.utils.config.ApplicationConfig;  
33 -import org.jeecg.utils.constant.QuantityConstant;  
34 import org.jeecg.utils.support.ApiLogger; 31 import org.jeecg.utils.support.ApiLogger;
35 -import org.springframework.beans.factory.annotation.Autowired;  
36 -import org.springframework.scheduling.annotation.Async; 32 +import org.jeecg.utils.support.SystemSync;
37 import org.springframework.scheduling.annotation.EnableAsync; 33 import org.springframework.scheduling.annotation.EnableAsync;
38 import org.springframework.stereotype.Component; 34 import org.springframework.stereotype.Component;
39 35
@@ -55,23 +51,6 @@ import okhttp3.Response; @@ -55,23 +51,6 @@ import okhttp3.Response;
55 public class ApiLoggerAspect { 51 public class ApiLoggerAspect {
56 52
57 public static final String HUAHENG_SYSTEM_NAME = "HUAHENG_WMS4"; 53 public static final String HUAHENG_SYSTEM_NAME = "HUAHENG_WMS4";
58 -  
59 - private static IApiLogService apiLogService;  
60 -  
61 - private static IAddressService addressService;  
62 -  
63 - @Autowired  
64 - private ApplicationConfig applicationConfig;  
65 -  
66 - @Autowired  
67 - public void setApiLogService(IApiLogService apiLogService) {  
68 - ApiLoggerAspect.apiLogService = apiLogService;  
69 - }  
70 -  
71 - @Autowired  
72 - public void setAddressService(IAddressService addressService) {  
73 - ApiLoggerAspect.addressService = addressService;  
74 - }  
75 54
76 // 配置织入点 55 // 配置织入点
77 @Pointcut("@annotation(org.jeecg.utils.support.ApiLogger)") 56 @Pointcut("@annotation(org.jeecg.utils.support.ApiLogger)")
@@ -100,151 +79,10 @@ public class ApiLoggerAspect { @@ -100,151 +79,10 @@ public class ApiLoggerAspect {
100 return ret; 79 return ret;
101 } 80 }
102 81
103 -// /** 记录WMS调用第三方接口的日志 **/  
104 -// private Object aroundWms2XXX(ProceedingJoinPoint point, ApiLogger apiLogger) {  
105 -// Object ret = null;  
106 -// ApiLog log = new ApiLog();  
107 -//  
108 -// HttpURLConnection connection = null;  
109 -// String body = null;  
110 -//  
111 -// try {  
112 -// connection = (HttpURLConnection)point.getArgs()[0];  
113 -// body = (String)point.getArgs()[1];  
114 -// initApiLog(connection, body);  
115 -// ret = point.proceed();  
116 -// } catch (Throwable e) {  
117 -// setApiLogThrowable(log, e);  
118 -// ret = Result.error(e.getMessage());  
119 -// } finally {  
120 -// if (ret != null) {  
121 -// finishApiLog(log, connection, ret.toString());  
122 -// }  
123 -// }  
124 -// return ret;  
125 -// }  
126 -  
127 -// /**  
128 -// * 记录响应头信息,保存日志到数据库  
129 -// */  
130 -// public static void finishApiLog(ApiLog log, HttpURLConnection connection, String body) {  
131 -// try {  
132 -// log.setResponseBody(body);  
133 -// log.setResponseTime(new Date());  
134 -// Long duration = log.getResponseTime().getTime() - log.getRequestTime().getTime();  
135 -// log.setDuration(duration.intValue());  
136 -// log.setHttpCode(connection.getResponseCode());  
137 -//  
138 -// // 响应头  
139 -// Set<String> keyset = connection.getHeaderFields().keySet();  
140 -// ArrayList<String> headerList = new ArrayList<>();  
141 -// Iterator<String> it = keyset.iterator();  
142 -// while (it.hasNext()) {  
143 -// String name = it.next();  
144 -// String header = connection.getHeaderField(name);  
145 -// if (name == null || "".equals(name)) {  
146 -// // 第一行没有name  
147 -// // HTTP/1.1 200 OK  
148 -// headerList.add(header);  
149 -// } else {  
150 -// headerList.add(name + ": " + header);  
151 -// }  
152 -// }  
153 -// log.setResponseHeader(org.apache.commons.lang3.StringUtils.join(headerList, "\n"));  
154 -// Result json = JSON.parseObject(body, Result.class);  
155 -// log.setRetCode(json.getCode());  
156 -// } catch (Exception e) {  
157 -// e.printStackTrace();  
158 -// } finally {  
159 -// SpringUtils.getBean(ApiLogAspect.class).saveApiLog(log);  
160 -// }  
161 -// }  
162 -  
163 -// /**  
164 -// * 根据url,从address表中判断调用的去向  
165 -// */  
166 -// public static void parseUrl(ApiLog log, URL url, String warehouseCode) {  
167 -// try {  
168 -// String[] spList = url.toString().split("/");  
169 -// String apiName = spList[spList.length - 1];  
170 -// String ip = JeecgSystemApplication.getLocalHostExactAddress().getHostAddress();  
171 -// Address address = addressService.getAddressByUrl(url.toString(), warehouseCode);  
172 -// log.setApiName(apiName);  
173 -// log.setRequestFrom("WMS");  
174 -// log.setIp(ip);  
175 -// log.setResponseBy(address.getParam().toUpperCase());  
176 -// } catch (Exception e) {  
177 -// e.printStackTrace();  
178 -// }  
179 -// }  
180 -  
181 -// /**  
182 -// * 记录WMS调用第三方系统接口的请求信息  
183 -// * 在HttpUtils.body POST方法中直接调用本类static方法  
184 -// **/  
185 -// public static ApiLog initApiLog(String Method, String urlStr, String body, HttpHeaders headers, String warehouseCode) {  
186 -// ApiLog log = new ApiLog();  
187 -// try {  
188 -// URL url = new URL(urlStr);  
189 -// log.setApiMethod(Method);  
190 -// log.setUrl(urlStr);  
191 -// log.setRequestTime(new Date());  
192 -// parseUrl(log, url, warehouseCode);  
193 -//  
194 -// // 请求头  
195 -// Set<String> keySet = headers.keySet();  
196 -// ArrayList<String> headerList = new ArrayList<>();  
197 -// Iterator<String> it = keySet.iterator();  
198 -// while (it.hasNext()) {  
199 -// String name = it.next();  
200 -// String header = String.valueOf(headers.getContentType());  
201 -// headerList.add(name + ": " + header);  
202 -// }  
203 -//  
204 -// log.setRequestHeader(org.apache.commons.lang3.StringUtils.join(headerList, "\n"));  
205 -// log.setRequestBody(body);  
206 -// } catch (Exception e) {  
207 -// e.printStackTrace();  
208 -// }  
209 -//  
210 -// return log;  
211 -// }  
212 -  
213 -// /**  
214 -// * 记录WMS调用第三方系统接口的请求信息  
215 -// * 在HttpUtils.body POST方法中直接调用本类static方法  
216 -// **/  
217 -// public static ApiLog initApiLog(HttpURLConnection connection, String body) {  
218 -// ApiLog log = new ApiLog();  
219 -// try {  
220 -// log.setApiMethod(connection.getRequestMethod());  
221 -// log.setUrl(connection.getURL().toString());  
222 -// log.setRequestTime(new Date());  
223 -// parseUrl(log, connection.getURL());  
224 -//  
225 -// // 请求头  
226 -// Set<String> keySet = connection.getRequestProperties().keySet();  
227 -// ArrayList<String> headerList = new ArrayList<>();  
228 -// Iterator<String> it = keySet.iterator();  
229 -// while (it.hasNext()) {  
230 -// String name = it.next();  
231 -// String header = connection.getRequestProperty(name);  
232 -// headerList.add(name + ":" + header);  
233 -// }  
234 -//  
235 -// log.setRequestHeader(org.apache.commons.lang3.StringUtils.join(headerList, "\n"));  
236 -// log.setRequestBody(body);  
237 -// } catch (Exception e) {  
238 -// e.printStackTrace();  
239 -// }  
240 -//  
241 -// return log;  
242 -// }  
243 -  
244 /** 82 /**
245 * 记录WMS调用第三方系统接口的请求信息 83 * 记录WMS调用第三方系统接口的请求信息
246 * 在OKHttpUtils.bodypost方法中直接调用本类static方法 84 * 在OKHttpUtils.bodypost方法中直接调用本类static方法
247 - * @param apiLog 85 + * @param apiLog
248 **/ 86 **/
249 public static void initApiLog(ApiLog apiLog, Request request, String body) { 87 public static void initApiLog(ApiLog apiLog, Request request, String body) {
250 try { 88 try {
@@ -289,7 +127,7 @@ public class ApiLoggerAspect { @@ -289,7 +127,7 @@ public class ApiLoggerAspect {
289 } catch (Exception e) { 127 } catch (Exception e) {
290 e.printStackTrace(); 128 e.printStackTrace();
291 } 129 }
292 - SpringUtils.getBean(ApiLoggerAspect.class).saveApiLog(log); 130 + SpringUtils.getBean(SystemSync.class).saveApiLog(log);
293 } 131 }
294 } 132 }
295 133
@@ -298,52 +136,19 @@ public class ApiLoggerAspect { @@ -298,52 +136,19 @@ public class ApiLoggerAspect {
298 try { 136 try {
299 String[] spList = url.toString().split("/"); 137 String[] spList = url.toString().split("/");
300 String apiName = spList[spList.length - 1]; 138 String apiName = spList[spList.length - 1];
301 - String ip = JeecgSystemApplication.getLocalHostExactAddress().getHostAddress();  
302 apiLog.setApiName(apiName); 139 apiLog.setApiName(apiName);
303 apiLog.setRequestFrom(HUAHENG_SYSTEM_NAME); 140 apiLog.setRequestFrom(HUAHENG_SYSTEM_NAME);
304 - apiLog.setIp(ip);  
305 - Address address = addressService.getAddressByUrl(url.toString());  
306 - apiLog.setResponseBy(address.getParam().toUpperCase()); 141 + apiLog.setIp(JeecgSystemApplication.getLocalHostExactAddress().getHostAddress());
  142 + Address address = SpringUtils.getBean(AddressServiceImpl.class).getAddressByUrl(url.toString());
  143 + if (address != null) {
  144 + apiLog.setApiName(address.getRemark());
  145 + apiLog.setResponseBy(address.getParam().toUpperCase());
  146 + }
307 } catch (Exception e) { 147 } catch (Exception e) {
308 e.printStackTrace(); 148 e.printStackTrace();
309 } 149 }
310 } 150 }
311 151
312 -// /**  
313 -// * 记录响应头信息  
314 -// **/  
315 -// public static void finishApiLog(ApiLog log, HttpHeaders headers, String body) {  
316 -// try {  
317 -// log.setResponseBody(body);  
318 -// log.setResponseTime(new Date());  
319 -// Long duration = log.getResponseTime().getTime() - log.getRequestTime().getTime();  
320 -// log.setDuration(duration.intValue());  
321 -// log.setHttpCode(200);  
322 -//  
323 -// // 响应头  
324 -// Set<String> keyset = headers.keySet();  
325 -// ArrayList<String> headerList = new ArrayList<>();  
326 -// Iterator<String> it = keyset.iterator();  
327 -// while (it.hasNext()) {  
328 -// String name = it.next();  
329 -// String header = String.valueOf(headers.getContentType());  
330 -// if (name == null || "".equals(name))  
331 -// // 第一行没有name  
332 -// // HTTP/1.1 200 OK  
333 -// headerList.add(header);  
334 -// else  
335 -// headerList.add(name + ": " + header);  
336 -// }  
337 -// log.setResponseHeader(org.apache.commons.lang3.StringUtils.join(headerList, "\n"));  
338 -// Result json = JSON.parseObject(body, Result.class);  
339 -// log.setRetCode(json.getCode());  
340 -// } catch (Exception e) {  
341 -// e.printStackTrace();  
342 -// } finally {  
343 -// SpringUtils.getBean(ApiLogAspect.class).saveApiLog(log);  
344 -// }  
345 -// }  
346 -  
347 private ApiLog initApiLog(ApiLogger apiLogger, ProceedingJoinPoint point) { 152 private ApiLog initApiLog(ApiLogger apiLogger, ProceedingJoinPoint point) {
348 ApiLog log = new ApiLog(); 153 ApiLog log = new ApiLog();
349 try { 154 try {
@@ -396,7 +201,7 @@ public class ApiLoggerAspect { @@ -396,7 +201,7 @@ public class ApiLoggerAspect {
396 } catch (Exception e) { 201 } catch (Exception e) {
397 e.printStackTrace(); 202 e.printStackTrace();
398 } finally { 203 } finally {
399 - saveApiLog(log); 204 + SpringUtils.getBean(SystemSync.class).saveApiLog(log);
400 } 205 }
401 } 206 }
402 207
@@ -472,7 +277,6 @@ public class ApiLoggerAspect { @@ -472,7 +277,6 @@ public class ApiLoggerAspect {
472 Object[] args = point.getArgs(); 277 Object[] args = point.getArgs();
473 for (int i = 0; i < m.getParameterNames().length; i++) { 278 for (int i = 0; i < m.getParameterNames().length; i++) {
474 String name = m.getParameterNames()[i]; 279 String name = m.getParameterNames()[i];
475 -// Class type = m.getParameterTypes()[i];  
476 if (args[i] instanceof HttpServletRequest) { 280 if (args[i] instanceof HttpServletRequest) {
477 continue; 281 continue;
478 } 282 }
@@ -520,15 +324,6 @@ public class ApiLoggerAspect { @@ -520,15 +324,6 @@ public class ApiLoggerAspect {
520 } 324 }
521 } 325 }
522 326
523 - @Async  
524 - public void saveApiLog(ApiLog log) {  
525 - try {  
526 - apiLogService.saveOrUpdate(log);  
527 - } catch (Exception e) {  
528 - e.printStackTrace();  
529 - }  
530 - }  
531 -  
532 public static String getIpAddr(HttpServletRequest request) { 327 public static String getIpAddr(HttpServletRequest request) {
533 String ipAddress = request.getHeader("x-forwarded-for"); 328 String ipAddress = request.getHeader("x-forwarded-for");
534 if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { 329 if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
huaheng-wms-core/src/main/java/org/jeecg/utils/support/SyncConfiguration.java 0 → 100644
  1 +package org.jeecg.utils.support;
  2 +
  3 +import java.util.concurrent.ThreadPoolExecutor;
  4 +
  5 +import org.springframework.context.annotation.Bean;
  6 +import org.springframework.context.annotation.Configuration;
  7 +import org.springframework.scheduling.annotation.EnableAsync;
  8 +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
  9 +
  10 +@Configuration
  11 +@EnableAsync
  12 +public class SyncConfiguration {
  13 + @Bean(name = "asyncPoolTaskExecutor")
  14 + public ThreadPoolTaskExecutor executor() {
  15 + ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
  16 + // 核心线程数
  17 + taskExecutor.setCorePoolSize(10);
  18 + // 线程池维护线程的最大数量,只有在缓冲队列满了之后才会申请超过核心线程数的线程
  19 + taskExecutor.setMaxPoolSize(100);
  20 + // 缓存队列
  21 + taskExecutor.setQueueCapacity(50);
  22 + // 许的空闲时间,当超过了核心线程出之外的线程在空闲时间到达之后会被销毁
  23 + taskExecutor.setKeepAliveSeconds(200);
  24 + // 异步方法内部线程名称
  25 + taskExecutor.setThreadNamePrefix("async-");
  26 + /**
  27 + * 当线程池的任务缓存队列已满并且线程池中的线程数目达到maximumPoolSize,如果还有任务到来就会采取任务拒绝策略
  28 + * 通常有以下四种策略:
  29 + * ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。
  30 + * ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。
  31 + * ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)
  32 + * ThreadPoolExecutor.CallerRunsPolicy:重试添加当前的任务,自动重复调用 execute() 方法,直到成功
  33 + */
  34 + taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
  35 + taskExecutor.initialize();
  36 + return taskExecutor;
  37 + }
  38 +}
0 \ No newline at end of file 39 \ No newline at end of file
huaheng-wms-core/src/main/java/org/jeecg/utils/support/SystemSync.java 0 → 100644
  1 +package org.jeecg.utils.support;
  2 +
  3 +import java.math.BigDecimal;
  4 +import java.util.List;
  5 +import java.util.concurrent.Future;
  6 +
  7 +import org.jeecg.modules.wms.inventory.inventoryTransaction.entity.InventoryTransaction;
  8 +import org.jeecg.modules.wms.inventory.inventoryTransaction.service.IInventoryTransactionService;
  9 +import org.jeecg.modules.wms.monitor.apiLog.entity.ApiLog;
  10 +import org.jeecg.modules.wms.monitor.apiLog.service.IApiLogService;
  11 +import org.springframework.beans.factory.annotation.Autowired;
  12 +import org.springframework.scheduling.annotation.Async;
  13 +import org.springframework.scheduling.annotation.AsyncResult;
  14 +import org.springframework.stereotype.Component;
  15 +
  16 +import com.alibaba.fastjson.JSON;
  17 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  18 +import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  19 +
  20 +import lombok.extern.slf4j.Slf4j;
  21 +
  22 +@Slf4j
  23 +@Component
  24 +public class SystemSync {
  25 +
  26 + @Autowired
  27 + private IApiLogService apiLogService;
  28 +
  29 + @Autowired
  30 + private IInventoryTransactionService inventoryTransactionService;
  31 +
  32 + /**
  33 + * 保存API调用日志
  34 + * @author TanYibin
  35 + * @createDate 2023年5月9日
  36 + * @param apiLog
  37 + */
  38 + @Async("asyncPoolTaskExecutor")
  39 + public void saveApiLog(ApiLog apiLog) {
  40 + try {
  41 + apiLogService.saveOrUpdate(apiLog);
  42 + } catch (Exception e) {
  43 + log.error("saveApiLog 执行异常,apiLog:{}", JSON.toJSONString(apiLog), e);
  44 + }
  45 + }
  46 +
  47 + /**
  48 + * 异步库存信息查询
  49 + * @author TanYibin
  50 + * @createDate 2023年5月9日
  51 + * @param startTime
  52 + * @param endTime
  53 + * @param type
  54 + * @return
  55 + */
  56 + @Async("asyncPoolTaskExecutor")
  57 + public Future<BigDecimal> asyncCalculateInventory(String startTime, String endTime, Integer type) {
  58 + LambdaQueryWrapper<InventoryTransaction> inventoryTransactionLambdaQueryWrapper = Wrappers.lambdaQuery();
  59 + inventoryTransactionLambdaQueryWrapper.select(InventoryTransaction::getCreateTime, InventoryTransaction::getQty, InventoryTransaction::getType)
  60 + .ge(InventoryTransaction::getCreateTime, startTime).lt(InventoryTransaction::getCreateTime, endTime).eq(InventoryTransaction::getType, type);
  61 + List<InventoryTransaction> inventoryTransactions = inventoryTransactionService.list(inventoryTransactionLambdaQueryWrapper);
  62 + BigDecimal shipmentResult = inventoryTransactions.stream().map(InventoryTransaction::getQty).reduce(BigDecimal.ZERO, BigDecimal::add);
  63 + return new AsyncResult<>(shipmentResult);
  64 + }
  65 +}
huaheng-wms-core/src/main/resources/application.yml
@@ -2,7 +2,7 @@ spring: @@ -2,7 +2,7 @@ spring:
2 application: 2 application:
3 name: huaheng-wms-core 3 name: huaheng-wms-core
4 profiles: 4 profiles:
5 - active: test 5 + active: dev
6 6
7 huaheng: 7 huaheng:
8 system: 8 system: