diff --git a/ant-design-vue-jeecg/.gitignore b/ant-design-vue-jeecg/.gitignore index a15516b..121a98b 100644 --- a/ant-design-vue-jeecg/.gitignore +++ b/ant-design-vue-jeecg/.gitignore @@ -1,6 +1,6 @@ .DS_Store -node_modules -node +/node_modules +/node /dist /test diff --git a/ant-design-vue-jeecg/node/node.exe b/ant-design-vue-jeecg/node/node.exe new file mode 100644 index 0000000..439d826 --- /dev/null +++ b/ant-design-vue-jeecg/node/node.exe diff --git a/ant-design-vue-jeecg/node/npm b/ant-design-vue-jeecg/node/npm new file mode 100644 index 0000000..a131a53 --- /dev/null +++ b/ant-design-vue-jeecg/node/npm @@ -0,0 +1,44 @@ +#!/usr/bin/env bash +(set -o igncr) 2>/dev/null && set -o igncr; # cygwin encoding fix + +basedir=`dirname "$0"` + +case `uname` in + *CYGWIN*) basedir=`cygpath -w "$basedir"`;; +esac + +NODE_EXE="$basedir/node.exe" +if ! [ -x "$NODE_EXE" ]; then + NODE_EXE="$basedir/node" +fi +if ! [ -x "$NODE_EXE" ]; then + NODE_EXE=node +fi + +# this path is passed to node.exe, so it needs to match whatever +# kind of paths Node.js thinks it's using, typically win32 paths. +CLI_BASEDIR="$("$NODE_EXE" -p 'require("path").dirname(process.execPath)')" +NPM_CLI_JS="$CLI_BASEDIR/node_modules/npm/bin/npm-cli.js" + +NPM_PREFIX=`"$NODE_EXE" "$NPM_CLI_JS" prefix -g` +if [ $? -ne 0 ]; then + # if this didn't work, then everything else below will fail + echo "Could not determine Node.js install directory" >&2 + exit 1 +fi +NPM_PREFIX_NPM_CLI_JS="$NPM_PREFIX/node_modules/npm/bin/npm-cli.js" + +# a path that will fail -f test on any posix bash +NPM_WSL_PATH="/.." + +# WSL can run Windows binaries, so we have to give it the win32 path +# however, WSL bash tests against posix paths, so we need to construct that +# to know if npm is installed globally. +if [ `uname` = 'Linux' ] && type wslpath &>/dev/null ; then + NPM_WSL_PATH=`wslpath "$NPM_PREFIX_NPM_CLI_JS"` +fi +if [ -f "$NPM_PREFIX_NPM_CLI_JS" ] || [ -f "$NPM_WSL_PATH" ]; then + NPM_CLI_JS="$NPM_PREFIX_NPM_CLI_JS" +fi + +"$NODE_EXE" "$NPM_CLI_JS" "$@" diff --git a/ant-design-vue-jeecg/node/npm.cmd b/ant-design-vue-jeecg/node/npm.cmd new file mode 100644 index 0000000..880554d --- /dev/null +++ b/ant-design-vue-jeecg/node/npm.cmd @@ -0,0 +1,19 @@ +:: Created by npm, please don't edit manually. +@ECHO OFF + +SETLOCAL + +SET "NODE_EXE=%~dp0\node.exe" +IF NOT EXIST "%NODE_EXE%" ( + SET "NODE_EXE=node" +) + +SET "NPM_CLI_JS=%~dp0\node_modules\npm\bin\npm-cli.js" +FOR /F "delims=" %%F IN ('CALL "%NODE_EXE%" "%NPM_CLI_JS%" prefix -g') DO ( + SET "NPM_PREFIX_NPM_CLI_JS=%%F\node_modules\npm\bin\npm-cli.js" +) +IF EXIST "%NPM_PREFIX_NPM_CLI_JS%" ( + SET "NPM_CLI_JS=%NPM_PREFIX_NPM_CLI_JS%" +) + +"%NODE_EXE%" "%NPM_CLI_JS%" %* diff --git a/ant-design-vue-jeecg/src/assets/css/huahengUI.css b/ant-design-vue-jeecg/src/assets/css/huahengUI.css index 643f0e1..7d88b1a 100644 --- a/ant-design-vue-jeecg/src/assets/css/huahengUI.css +++ b/ant-design-vue-jeecg/src/assets/css/huahengUI.css @@ -1264,7 +1264,7 @@ label { /*margin: 12px 6px;*/ margin-bottom: 6px; background-size:cover; - background-image: url("~@/assets/icon/空盘空闲.png"); + background-image: url("~@/assets/icon/grid_empty.png"); } diff --git a/ant-design-vue-jeecg/src/assets/icon/整盘禁用.png b/ant-design-vue-jeecg/src/assets/icon/ContainerDisabled.png index 405af2e..405af2e 100644 --- a/ant-design-vue-jeecg/src/assets/icon/整盘禁用.png +++ b/ant-design-vue-jeecg/src/assets/icon/ContainerDisabled.png diff --git a/ant-design-vue-jeecg/src/assets/icon/整盘空闲.png b/ant-design-vue-jeecg/src/assets/icon/grid_all.png index 81cc782..81cc782 100644 --- a/ant-design-vue-jeecg/src/assets/icon/整盘空闲.png +++ b/ant-design-vue-jeecg/src/assets/icon/grid_all.png diff --git a/ant-design-vue-jeecg/src/assets/icon/整盘锁定.png b/ant-design-vue-jeecg/src/assets/icon/grid_all_lock.png index 5de1dc6..5de1dc6 100644 --- a/ant-design-vue-jeecg/src/assets/icon/整盘锁定.png +++ b/ant-design-vue-jeecg/src/assets/icon/grid_all_lock.png diff --git a/ant-design-vue-jeecg/src/assets/icon/空柜锁定.png b/ant-design-vue-jeecg/src/assets/icon/grid_emp_lock.png index e4acf03..e4acf03 100644 --- a/ant-design-vue-jeecg/src/assets/icon/空柜锁定.png +++ b/ant-design-vue-jeecg/src/assets/icon/grid_emp_lock.png diff --git a/ant-design-vue-jeecg/src/assets/icon/空柜禁用.png b/ant-design-vue-jeecg/src/assets/icon/grid_emp_waing.png index f2c5019..f2c5019 100644 --- a/ant-design-vue-jeecg/src/assets/icon/空柜禁用.png +++ b/ant-design-vue-jeecg/src/assets/icon/grid_emp_waing.png diff --git a/ant-design-vue-jeecg/src/assets/icon/空盘空闲.png b/ant-design-vue-jeecg/src/assets/icon/grid_empty.png index 6292c16..6292c16 100644 --- a/ant-design-vue-jeecg/src/assets/icon/空盘空闲.png +++ b/ant-design-vue-jeecg/src/assets/icon/grid_empty.png diff --git a/ant-design-vue-jeecg/src/assets/icon/空盘锁定.png b/ant-design-vue-jeecg/src/assets/icon/grid_empty_lock.png index 0723711..0723711 100644 --- a/ant-design-vue-jeecg/src/assets/icon/空盘锁定.png +++ b/ant-design-vue-jeecg/src/assets/icon/grid_empty_lock.png diff --git a/ant-design-vue-jeecg/src/assets/icon/空盘禁用.png b/ant-design-vue-jeecg/src/assets/icon/grid_empty_waring.png index cbf57da..cbf57da 100644 --- a/ant-design-vue-jeecg/src/assets/icon/空盘禁用.png +++ b/ant-design-vue-jeecg/src/assets/icon/grid_empty_waring.png diff --git a/ant-design-vue-jeecg/src/assets/icon/半盘空闲.png b/ant-design-vue-jeecg/src/assets/icon/grid_half.png index 24a71eb..24a71eb 100644 --- a/ant-design-vue-jeecg/src/assets/icon/半盘空闲.png +++ b/ant-design-vue-jeecg/src/assets/icon/grid_half.png diff --git a/ant-design-vue-jeecg/src/assets/icon/半盘锁定.png b/ant-design-vue-jeecg/src/assets/icon/grid_half_lock.png index f194f89..f194f89 100644 --- a/ant-design-vue-jeecg/src/assets/icon/半盘锁定.png +++ b/ant-design-vue-jeecg/src/assets/icon/grid_half_lock.png diff --git a/ant-design-vue-jeecg/src/assets/icon/半盘禁用.png b/ant-design-vue-jeecg/src/assets/icon/grid_half_waring.png index cc7e7a1..cc7e7a1 100644 --- a/ant-design-vue-jeecg/src/assets/icon/半盘禁用.png +++ b/ant-design-vue-jeecg/src/assets/icon/grid_half_waring.png diff --git a/ant-design-vue-jeecg/src/assets/icon/空柜空闲.png b/ant-design-vue-jeecg/src/assets/icon/grid_rest.png index db1e5c4..db1e5c4 100644 --- a/ant-design-vue-jeecg/src/assets/icon/空柜空闲.png +++ b/ant-design-vue-jeecg/src/assets/icon/grid_rest.png diff --git a/ant-design-vue-jeecg/src/assets/icon/空.png b/ant-design-vue-jeecg/src/assets/icon/rel_empty.png index 963d22b..963d22b 100644 --- a/ant-design-vue-jeecg/src/assets/icon/空.png +++ b/ant-design-vue-jeecg/src/assets/icon/rel_empty.png diff --git a/ant-design-vue-jeecg/src/components/jeecgbiz/JSelectMultiCycleCount.vue b/ant-design-vue-jeecg/src/components/jeecgbiz/JSelectMultiCycleCount.vue index 9371d1b..49774cc 100644 --- a/ant-design-vue-jeecg/src/components/jeecgbiz/JSelectMultiCycleCount.vue +++ b/ant-design-vue-jeecg/src/components/jeecgbiz/JSelectMultiCycleCount.vue @@ -32,7 +32,7 @@ export default { url: {list: '/inventory/inventoryHeader/freeList'}, columns: [ {title: 'ID', align: 'center', width: '20%',widthRight: '70%', dataIndex: 'id'}, - {title: '容器号', align: 'center', width: '25%', dataIndex: 'containerCode'}, + {title: '容器编码', align: 'center', width: '25%', dataIndex: 'containerCode'}, {title: '容器状态', align: 'center', width: '20%', dataIndex: 'containerStatus'}, {title: '库位号', align: 'center', width: '20%', dataIndex: 'locationCode'}, {title: '总数量', align: 'center', width: '20%', dataIndex: 'totalQty'}, @@ -51,7 +51,7 @@ export default { queryConfigDefault: [ // { // key: 'containerCode', - // label: '容器号', + // label: '容器编码', // // 如果包含 dictCode,那么就会显示成下拉框 // dictCode: 'sex', // }, diff --git a/ant-design-vue-jeecg/src/views/system/config/AddressList.vue b/ant-design-vue-jeecg/src/views/system/config/AddressList.vue index 343e81b..9b424a8 100644 --- a/ant-design-vue-jeecg/src/views/system/config/AddressList.vue +++ b/ant-design-vue-jeecg/src/views/system/config/AddressList.vue @@ -5,18 +5,28 @@ <a-form layout="inline" @keyup.enter.native="searchQuery"> <a-row :gutter="24"> <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="任务名称"> + <j-input placeholder="请输入任务名称" v-model="queryParam.remark"></j-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> <a-form-item label="编码"> - <a-input placeholder="请输入编码" v-model="queryParam.code"></a-input> + <j-input placeholder="请输入编码" v-model="queryParam.param"></j-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="库区"> + <a-select show-search placeholder="请选择库区" option-filter-prop="children" v-model="queryParam.zoneCode" > + <a-select-option v-for="item in zoneList" :key="item.name" :value="item.code"> + {{ item.name }} + </a-select-option> + </a-select> </a-form-item> </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> <a-button type="primary" @click="searchQuery" icon="search">查询</a-button> <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button> - <a @click="handleToggleSearch" style="margin-left: 8px"> - {{ toggleSearchStatus ? '收起' : '展开' }} - <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/> - </a> </span> </a-col> </a-row> @@ -28,16 +38,13 @@ <div class="table-operator"> <a-button @click="handleAdd" v-has="'address:add'" type="primary" icon="plus">新增</a-button> <a-button v-has="'address:export'" type="primary" icon="download" @click="handleExportXls('接口地址')">导出</a-button> - <a-upload v-has="'address:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" - @change="handleImportExcel"> + <a-upload v-has="'address:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> <a-button type="primary" icon="import">导入</a-button> </a-upload> <a-dropdown v-if="selectedRowKeys.length > 0"> <a-menu slot="overlay" v-has="'address:deleteBatch'"> <a-menu-item key="1" @click="batchDel"> - <a-icon type="delete"/> - 删除 - </a-menu-item> + <a-icon type="delete"/> 删除 </a-menu-item> </a-menu> <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down"/> @@ -47,12 +54,6 @@ <!-- table区域-begin --> <div> - <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;"> - <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a - style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项 - <a style="margin-left: 24px" @click="onClearSelected">清空</a> - </div> - <a-table ref="table" size="middle" @@ -63,30 +64,14 @@ :dataSource="dataSource" :pagination="ipagination" :loading="loading" - :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" class="j-table-force-nowrap" @change="handleTableChange"> - <template slot="htmlSlot" slot-scope="text"> - <div v-html="text"></div> - </template> - <template slot="imgSlot" slot-scope="text"> - <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span> - <img v-else :src="getImgView(text)" height="25px" alt="" - style="max-width:80px;font-size: 12px;font-style: italic;"/> - </template> - <template slot="fileSlot" slot-scope="text"> - <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span> - <a-button - v-else - :ghost="true" - type="primary" - icon="download" - size="small" - @click="downloadFile(text)"> - 下载 - </a-button> - </template> + <span slot="zoneCode" slot-scope="zoneCode"> + <a-tag :key="zoneCode" color="blue"> + {{ solutionZoneCode(zoneCode) }} + </a-tag> + </span> <span slot="action" slot-scope="text, record"> <a v-has="'address:edit'" @click="handleEdit(record)">编辑</a> @@ -115,11 +100,11 @@ </template> <script> - import '@/assets/less/TableExpand.less' -import {mixinDevice} from '@/utils/mixin' -import {JeecgListMixin} from '@/mixins/JeecgListMixin' +import { mixinDevice } from '@/utils/mixin' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' import AddressModal from './modules/AddressModal' +import { getZoneList } from '@/api/api' export default { name: 'AddressList', @@ -130,6 +115,7 @@ export default { data() { return { description: '接口地址管理页面', + zoneList: [], // 表头 columns: [ { @@ -137,93 +123,109 @@ export default { dataIndex: '', key: 'rowIndex', width: 60, - align: "center", - customRender: function (t, r, index) { - return parseInt(index) + 1; + align: 'center', + customRender: function(t, r, index) { + return parseInt(index) + 1 } }, { + title: '接口名称', + align: 'center', + dataIndex: 'remark' + }, + { title: '编码', - align: "center", + align: 'center', dataIndex: 'param' }, + { title: '库区', - align: "center", - dataIndex: 'zoneCode' + align: 'center', + dataIndex: 'zoneCode', + key: 'zoneCode', + scopedSlots: { customRender: 'zoneCode' } }, { title: '接口地址', - align: "center", + align: 'center', dataIndex: 'url' }, { - title: '备注', - align: "center", - dataIndex: 'remark' - }, - { title: '创建人', - align: "center", + align: 'center', dataIndex: 'createBy' }, { title: '创建日期', - align: "center", + align: 'center', dataIndex: 'createTime' }, { title: '更新人', - align: "center", + align: 'center', dataIndex: 'updateBy' }, { title: '更新日期', - align: "center", + align: 'center', dataIndex: 'updateTime' }, { title: '操作', dataIndex: 'action', - align: "center", - fixed: "right", + align: 'center', + fixed: 'right', width: 147, - scopedSlots: {customRender: 'action'} + scopedSlots: { customRender: 'action' } } ], url: { - list: "/config/address/list", - delete: "/config/address/delete", - deleteBatch: "/config/address/deleteBatch", - exportXlsUrl: "/config/address/exportXls", - importExcelUrl: "config/address/importExcel", - + list: '/config/address/list', + delete: '/config/address/delete', + deleteBatch: '/config/address/deleteBatch', + exportXlsUrl: '/config/address/exportXls', + importExcelUrl: 'config/address/importExcel' }, dictOptions: {}, - superFieldList: [], + superFieldList: [] } }, created() { - this.getSuperFieldList(); + this.getSuperFieldList() + getZoneList().then(res => { + if (res.success) { + this.zoneList = res.result + } + }) }, computed: { - importExcelUrl: function () { - return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; - }, + importExcelUrl: function() { + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}` + } }, methods: { - initDictConfig() { - }, + initDictConfig() {}, getSuperFieldList() { - let fieldList = []; - fieldList.push({type: 'string', value: 'code', text: '编码', dictCode: ''}) - fieldList.push({type: 'string', value: 'zoneCode', text: '库区', dictCode: ''}) - fieldList.push({type: 'string', value: 'url', text: '接口地址', dictCode: ''}) - fieldList.push({type: 'string', value: 'createBy', text: '创建人', dictCode: ''}) - fieldList.push({type: 'datetime', value: 'createTime', text: '创建日期'}) - fieldList.push({type: 'string', value: 'updateBy', text: '更新人', dictCode: ''}) - fieldList.push({type: 'datetime', value: 'updateTime', text: '更新日期'}) + let fieldList = [] + fieldList.push({ type: 'string', value: 'code', text: '编码', dictCode: '' }) + fieldList.push({ type: 'string', value: 'zoneCode', text: '库区', dictCode: '' }) + fieldList.push({ type: 'string', value: 'url', text: '接口地址', dictCode: '' }) + fieldList.push({ type: 'string', value: 'createBy', text: '创建人', dictCode: '' }) + fieldList.push({ type: 'datetime', value: 'createTime', text: '创建日期' }) + fieldList.push({ type: 'string', value: 'updateBy', text: '更新人', dictCode: '' }) + fieldList.push({ type: 'datetime', value: 'updateTime', text: '更新日期' }) this.superFieldList = fieldList + }, + solutionZoneCode(value) { + var actions = [] + Object.keys(this.zoneList).some(key => { + if (this.zoneList[key].code == '' + value) { + actions.push(this.zoneList[key].name) + return true + } + }) + return actions.join('') } } } diff --git a/ant-design-vue-jeecg/src/views/system/config/LocationList.vue b/ant-design-vue-jeecg/src/views/system/config/LocationList.vue index 8f3f701..0b3093c 100644 --- a/ant-design-vue-jeecg/src/views/system/config/LocationList.vue +++ b/ant-design-vue-jeecg/src/views/system/config/LocationList.vue @@ -35,10 +35,10 @@ </a-col> <template v-if="toggleSearchStatus"> <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <a-form-item label="库区编码"> + <a-form-item label="库区"> <a-select show-search - placeholder="请选择库区编码" + placeholder="请选择库区" option-filter-prop="children" v-model="queryParam.zoneCode" > diff --git a/ant-design-vue-jeecg/src/views/system/config/modules/AddressForm.vue b/ant-design-vue-jeecg/src/views/system/config/modules/AddressForm.vue index 27d4cc7..ebc15f0 100644 --- a/ant-design-vue-jeecg/src/views/system/config/modules/AddressForm.vue +++ b/ant-design-vue-jeecg/src/views/system/config/modules/AddressForm.vue @@ -4,13 +4,26 @@ <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail"> <a-row> <a-col :span="24"> + <a-form-model-item label="接口名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark"> + <a-input v-model="model.remark" placeholder="请输入接口名称"></a-input> + </a-form-model-item> + </a-col> + <a-col :span="24"> <a-form-model-item label="编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="code"> <a-input v-model="model.param" placeholder="请输入编码"></a-input> </a-form-model-item> </a-col> <a-col :span="24"> <a-form-model-item label="库区" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="zoneCode"> - <a-input v-model="model.zoneCode" placeholder="请输入库区"></a-input> + <a-select + show-search + placeholder="请选择库区" + option-filter-prop="children" + v-model="model.zoneCode"> + <a-select-option v-for="item in zoneList" :key="item.name" :value="item.code"> + {{ item.name }} + </a-select-option> + </a-select> </a-form-model-item> </a-col> <a-col :span="24"> @@ -18,11 +31,6 @@ <a-input v-model="model.url" placeholder="请输入接口地址"></a-input> </a-form-model-item> </a-col> - <a-col :span="24"> - <a-form-model-item label="备注" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark"> - <a-input v-model="model.remark" placeholder="请输入备注"></a-input> - </a-form-model-item> - </a-col> </a-row> </a-form-model> </j-form-container> @@ -33,6 +41,7 @@ import {httpAction, getAction} from '@/api/manage' import {validateDuplicateValue} from '@/utils/util' +import {getZoneList} from '@/api/api' export default { name: 'AddressForm', @@ -47,6 +56,7 @@ export default { }, data() { return { + zoneList: [], model: {}, labelCol: { xs: {span: 24}, @@ -73,6 +83,7 @@ export default { created() { //备份model原始值 this.modelDefault = JSON.parse(JSON.stringify(this.model)); + this.loadFrom(); }, methods: { add() { @@ -82,6 +93,13 @@ export default { this.model = Object.assign({}, record); this.visible = true; }, + loadFrom() { + getZoneList().then((res) => { + if (res.success) { + this.zoneList = res.result + } + }); + }, submitForm() { const that = this; // 触发表单验证 diff --git a/ant-design-vue-jeecg/src/views/system/config/modules/LocationForm.vue b/ant-design-vue-jeecg/src/views/system/config/modules/LocationForm.vue index bb84595..3d2d88e 100644 --- a/ant-design-vue-jeecg/src/views/system/config/modules/LocationForm.vue +++ b/ant-design-vue-jeecg/src/views/system/config/modules/LocationForm.vue @@ -14,7 +14,6 @@ show-search placeholder="请选择库区" option-filter-prop="children" - v-model="model.zoneCode"> <a-select-option v-for="item in zoneList" :key="item.name" :value="item.code">{{ item.name @@ -29,7 +28,7 @@ show-search placeholder="请选择库位类型" option-filter-prop="children" - + v-model="model.locationTypeCode"> <a-select-option v-for="item in locationTypeList" :key="item.name" :value="item.code">{{ item.name diff --git a/ant-design-vue-jeecg/src/views/system/inventory/InventoryHeaderList.vue b/ant-design-vue-jeecg/src/views/system/inventory/InventoryHeaderList.vue index e02ef36..27b4a83 100644 --- a/ant-design-vue-jeecg/src/views/system/inventory/InventoryHeaderList.vue +++ b/ant-design-vue-jeecg/src/views/system/inventory/InventoryHeaderList.vue @@ -18,8 +18,8 @@ </a-form-item> </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <a-form-item label="容器号"> - <a-input placeholder="请输入容器号" v-model="queryParam.containerCode"></a-input> + <a-form-item label="容器编码"> + <a-input placeholder="请输入容器编码" v-model="queryParam.containerCode"></a-input> </a-form-item> </a-col> <template v-if="toggleSearchStatus"> @@ -182,7 +182,7 @@ export default { scopedSlots: {customRender: 'zoneCode'} }, { - title: '容器号', + title: '容器编码', align: "center", dataIndex: 'containerCode' }, @@ -337,7 +337,7 @@ export default { let fieldList = []; fieldList.push({type: 'string', value: 'companyCode', text: '货主', dictCode: ''}) fieldList.push({type: 'string', value: 'zoneCode', text: '库区', dictCode: ''}) - fieldList.push({type: 'string', value: 'containerCode', text: '容器号', dictCode: ''}) + fieldList.push({type: 'string', value: 'containerCode', text: '容器编码', dictCode: ''}) fieldList.push({type: 'string', value: 'containerStatus', text: '容器状态', dictCode: 'container_status'}) fieldList.push({type: 'string', value: 'locationCode', text: '库位号', dictCode: ''}) fieldList.push({type: 'BigDecimal', value: 'totalQty', text: '总数量', dictCode: ''}) diff --git a/ant-design-vue-jeecg/src/views/system/inventory/modules/InventoryHeaderModal.vue b/ant-design-vue-jeecg/src/views/system/inventory/modules/InventoryHeaderModal.vue index 86bc6e4..5d14462 100644 --- a/ant-design-vue-jeecg/src/views/system/inventory/modules/InventoryHeaderModal.vue +++ b/ant-design-vue-jeecg/src/views/system/inventory/modules/InventoryHeaderModal.vue @@ -22,8 +22,8 @@ </a-form-model-item> </a-col> <a-col :span="24"> - <a-form-model-item label="容器号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="containerCode"> - <a-input v-model="model.containerCode" placeholder="请输入容器号"></a-input> + <a-form-model-item label="容器编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="containerCode"> + <a-input v-model="model.containerCode" placeholder="请输入容器编码"></a-input> </a-form-model-item> </a-col> <a-col :span="24"> diff --git a/ant-design-vue-jeecg/src/views/system/monitor/ApiLogList.vue b/ant-design-vue-jeecg/src/views/system/monitor/ApiLogList.vue index 57ce176..339fb2e 100644 --- a/ant-design-vue-jeecg/src/views/system/monitor/ApiLogList.vue +++ b/ant-design-vue-jeecg/src/views/system/monitor/ApiLogList.vue @@ -6,52 +6,52 @@ <a-row :gutter="24"> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <a-form-item label="接口名称"> - <a-input placeholder="请输入接口名称" v-model="queryParam.apiName"></a-input> + <j-input placeholder="请输入接口名称" v-model="queryParam.apiName"></j-input> </a-form-item> </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <a-form-item label="请求类型"> - <a-input placeholder="请输入请求类型" v-model="queryParam.apiMethod"></a-input> + <a-form-item label="请求方名称"> + <j-input placeholder="请输入请求方名称" v-model="queryParam.requestFrom"></j-input> </a-form-item> </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <a-form-item label="请求方地址"> - <a-input placeholder="请输入请求方地址" v-model="queryParam.ip"></a-input> + <a-form-item label="响应方名称"> + <j-input placeholder="请输入响应方名称" v-model="queryParam.responseBy"></j-input> </a-form-item> </a-col> <template v-if="toggleSearchStatus"> <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <a-form-item label="请求方名称"> - <a-input placeholder="请输入请求方名称" v-model="queryParam.responseFrom"></a-input> - </a-form-item> - </a-col> - <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <a-form-item label="响应方名称"> - <a-input placeholder="请输入响应方名称" v-model="queryParam.responseBy"></a-input> - </a-form-item> - </a-col> - <a-col :xl="6" :lg="7" :md="8" :sm="24"> <a-form-item label="请求地址"> - <a-input placeholder="请输入请求地址" v-model="queryParam.url"></a-input> + <j-input placeholder="请输入请求地址" v-model="queryParam.url"></j-input> </a-form-item> </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <a-form-item label="响应耗时(毫秒)"> - <a-input placeholder="请输入响应耗时(毫秒)" v-model="queryParam.duration"></a-input> + <a-form-item label="业务响应码"> + <j-input placeholder="请输入业务响应码" v-model="queryParam.retCode"></j-input> </a-form-item> </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <a-form-item label="业务响应码"> - <a-input placeholder="请输入业务响应码" v-model="queryParam.retCode"></a-input> + <a-form-item label="请求内容"> + <j-input placeholder="请输入请求内容" v-model="queryParam.requestBody"></j-input> </a-form-item> </a-col> <a-col :xl="12" :lg="14" :md="16" :sm="24"> - <a-form-item label="创建日期"> - <j-date :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择开始时间" - class="query-group-cust" v-model="queryParam.createTime_begin"></j-date> + <a-form-item label="请求时间"> + <j-date + :show-time="true" + date-format="YYYY-MM-DD HH:mm:ss" + placeholder="请选择开始时间" + class="query-group-cust" + v-model="queryParam.requestTime_begin" + ></j-date> <span class="query-group-split-cust"></span> - <j-date :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择结束时间" - class="query-group-cust" v-model="queryParam.createTime_end"></j-date> + <j-date + :show-time="true" + date-format="YYYY-MM-DD HH:mm:ss" + placeholder="请选择结束时间" + class="query-group-cust" + v-model="queryParam.requestTime_end" + ></j-date> </a-form-item> </a-col> </template> @@ -61,7 +61,7 @@ <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button> <a @click="handleToggleSearch" style="margin-left: 8px"> {{ toggleSearchStatus ? '收起' : '展开' }} - <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/> + <a-icon :type="toggleSearchStatus ? 'up' : 'down'" /> </a> </span> </a-col> @@ -73,21 +73,14 @@ <!-- 操作按钮区域 --> <div class="table-operator"> <a-button v-has="'apiLog:add'" @click="handleAdd" type="primary" icon="plus">新增</a-button> - <a-button v-has="'apiLog:export'" type="primary" icon="download" @click="handleExportXls('接口日志')">导出</a-button> -<!-- <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl"--> -<!-- @change="handleImportExcel">--> -<!-- <a-button type="primary" icon="import">导入</a-button>--> -<!-- </a-upload>--> + <a-button v-has="'apiLog:export'" type="primary" icon="download" @click="handleExportXls('接口日志')"> + 导出 + </a-button> <a-dropdown v-if="selectedRowKeys.length > 0"> <a-menu slot="overlay" v-has="'apiLog:deleteBatch'"> - <a-menu-item key="1" @click="batchDel"> - <a-icon type="delete"/> - 删除 - </a-menu-item> + <a-menu-item key="1" @click="batchDel"> <a-icon type="delete" /> 删除 </a-menu-item> </a-menu> - <a-button style="margin-left: 8px"> 批量操作 - <a-icon type="down"/> - </a-button> + <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /> </a-button> </a-dropdown> </div> @@ -96,7 +89,7 @@ <a-table ref="table" size="middle" - :scroll="{x:true}" + :scroll="{ x: true }" bordered rowKey="id" :columns="columns" @@ -104,33 +97,12 @@ :pagination="ipagination" :loading="loading" class="j-table-force-nowrap" - @change="handleTableChange"> - - <template slot="htmlSlot" slot-scope="text"> - <div v-html="text"></div> - </template> - <template slot="imgSlot" slot-scope="text"> - <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span> - <img v-else :src="getImgView(text)" height="25px" alt="" - style="max-width:80px;font-size: 12px;font-style: italic;"/> - </template> - <template slot="fileSlot" slot-scope="text"> - <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span> - <a-button - v-else - :ghost="true" - type="primary" - icon="download" - size="small" - @click="downloadFile(text)">下载 - </a-button> - </template> - + @change="handleTableChange" + > <span slot="action" slot-scope="text, record"> <a v-has="'apiLog:edit'" @click="handleEdit(record)">编辑<a-divider type="vertical"/></a> <a @click="handleDetail(record)">详情</a> </span> - </a-table> </div> @@ -139,12 +111,11 @@ </template> <script> - import '@/assets/less/TableExpand.less' -import {mixinDevice} from '@/utils/mixin' -import {JeecgListMixin} from '@/mixins/JeecgListMixin' +import { mixinDevice } from '@/utils/mixin' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' import ApiLogModal from './modules/ApiLogModal' -import JEllipsis from "@comp/jeecg/JEllipsis" +import JEllipsis from '@comp/jeecg/JEllipsis' export default { name: 'ApiLogList', @@ -154,135 +125,139 @@ export default { JEllipsis }, data() { - let ellipsis1 = (v, l = 20) => (<j-ellipsis value={v} length={l}/>) - let ellipsis2 = (v, l = 120) => (<j-ellipsis value={v} length={l}/>) + let ellipsis = (v, l = 40) => <j-ellipsis value={v} length={l} /> return { description: '接口日志管理页面', // 表头 columns: [ { title: '接口名称', - align: "center", + align: 'center', dataIndex: 'apiName' }, { title: '请求类型', - align: "center", + align: 'center', dataIndex: 'apiMethod' }, { - title: '请求内容', - align: "left", - dataIndex: 'requestBody', - customRender: (t) => ellipsis2(t) + title: '请求方名称', + align: 'center', + dataIndex: 'requestFrom' }, { - title: '响应内容', - align: "left", - dataIndex: 'responseBody', - customRender: (t) => ellipsis2(t) + title: '请求方IP', + align: 'center', + dataIndex: 'ip' }, { - title: '请求方名称', - align: "center", - dataIndex: 'requestFrom' + title: '请求地址', + align: 'center', + dataIndex: 'url' }, { - title: '响应方名称', - align: "center", - dataIndex: 'responseBy' + title: '请求头', + align: 'center', + dataIndex: 'requestHeader', + customRender: t => ellipsis(t) }, { - title: '请求方地址', - align: "center", - dataIndex: 'ip' + title: '请求内容', + align: 'center', + dataIndex: 'requestBody', + customRender: t => ellipsis(t) }, { - title: '请求地址', - align: "left", - dataIndex: 'url', + title: '响应方名称', + align: 'center', + dataIndex: 'responseBy' + }, + { + title: '响应内容', + align: 'center', + dataIndex: 'responseBody', + customRender: t => ellipsis(t) }, { title: '请求时间', - align: "center", + align: 'center', dataIndex: 'requestTime' }, { title: '响应时间', - align: "center", + align: 'center', dataIndex: 'responseTime' }, { title: '响应耗时(毫秒)', - align: "center", + align: 'center', dataIndex: 'duration' }, { - title: 'httpCode', - align: "center", + title: 'Http Code', + align: 'center', dataIndex: 'httpCode' }, { title: '业务响应码', - align: "center", + align: 'center', dataIndex: 'retCode' }, { title: '异常堆栈信息', - align: "center", - dataIndex: 'exception' + align: 'center', + dataIndex: 'exception', + customRender: t => ellipsis(t) }, { title: '操作', dataIndex: 'action', - align: "center", - fixed: "right", + align: 'center', + fixed: 'right', width: 80, - scopedSlots: {customRender: 'action'} + scopedSlots: { customRender: 'action' } } ], url: { - list: "/monitor/apiLog/list", - delete: "/monitor/apiLog/delete", - deleteBatch: "/monitor/apiLog/deleteBatch", - exportXlsUrl: "/monitor/apiLog/exportXls", - importExcelUrl: "monitor/apiLog/importExcel", - + list: '/monitor/apiLog/list', + delete: '/monitor/apiLog/delete', + deleteBatch: '/monitor/apiLog/deleteBatch', + exportXlsUrl: '/monitor/apiLog/exportXls', + importExcelUrl: 'monitor/apiLog/importExcel' }, dictOptions: {}, - superFieldList: [], + superFieldList: [] } }, created() { - this.getSuperFieldList(); + this.getSuperFieldList() }, computed: { - importExcelUrl: function () { - return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; - }, + importExcelUrl: function() { + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}` + } }, methods: { - initDictConfig() { - }, + initDictConfig() {}, getSuperFieldList() { - let fieldList = []; - fieldList.push({type: 'string', value: 'apiName', text: '接口名称', dictCode: ''}) - fieldList.push({type: 'string', value: 'apiMethod', text: '请求类型', dictCode: ''}) - fieldList.push({type: 'string', value: 'ip', text: '请求方地址', dictCode: ''}) - fieldList.push({type: 'string', value: 'requestFrom', text: '请求方名称', dictCode: ''}) - fieldList.push({type: 'string', value: 'responseBy', text: '响应方名称', dictCode: ''}) - fieldList.push({type: 'string', value: 'url', text: '请求地址', dictCode: ''}) - fieldList.push({type: 'datetime', value: 'requestTime', text: '请求时间'}) - fieldList.push({type: 'datetime', value: 'responseTime', text: '响应时间'}) - fieldList.push({type: 'Text', value: 'requestHeader', text: '请求头', dictCode: ''}) - fieldList.push({type: 'Text', value: 'requestBody', text: '请求内容', dictCode: ''}) - fieldList.push({type: 'Text', value: 'responseHeader', text: '响应头', dictCode: ''}) - fieldList.push({type: 'Text', value: 'responseBody', text: '响应内容', dictCode: ''}) - fieldList.push({type: 'string', value: 'duration', text: '响应耗时(毫秒)', dictCode: ''}) - fieldList.push({type: 'int', value: 'httpCode', text: 'httpCode', dictCode: ''}) - fieldList.push({type: 'int', value: 'retCode', text: '业务响应码', dictCode: ''}) - fieldList.push({type: 'Text', value: 'exception', text: '异常堆栈信息', dictCode: ''}) - fieldList.push({type: 'datetime', value: 'createTime', text: '创建日期'}) + let fieldList = [] + fieldList.push({ type: 'string', value: 'apiName', text: '接口名称', dictCode: '' }) + fieldList.push({ type: 'string', value: 'apiMethod', text: '请求类型', dictCode: '' }) + fieldList.push({ type: 'string', value: 'ip', text: '请求方IP', dictCode: '' }) + fieldList.push({ type: 'string', value: 'requestFrom', text: '请求方名称', dictCode: '' }) + fieldList.push({ type: 'string', value: 'responseBy', text: '响应方名称', dictCode: '' }) + fieldList.push({ type: 'string', value: 'url', text: '请求地址', dictCode: '' }) + fieldList.push({ type: 'datetime', value: 'requestTime', text: '请求时间' }) + fieldList.push({ type: 'datetime', value: 'responseTime', text: '响应时间' }) + fieldList.push({ type: 'Text', value: 'requestHeader', text: '请求头', dictCode: '' }) + fieldList.push({ type: 'Text', value: 'requestBody', text: '请求内容', dictCode: '' }) + fieldList.push({ type: 'Text', value: 'responseHeader', text: '响应头', dictCode: '' }) + fieldList.push({ type: 'Text', value: 'responseBody', text: '响应内容', dictCode: '' }) + fieldList.push({ type: 'string', value: 'duration', text: '响应耗时(毫秒)', dictCode: '' }) + fieldList.push({ type: 'int', value: 'httpCode', text: 'httpCode', dictCode: '' }) + fieldList.push({ type: 'int', value: 'retCode', text: '业务响应码', dictCode: '' }) + fieldList.push({ type: 'Text', value: 'exception', text: '异常堆栈信息', dictCode: '' }) + fieldList.push({ type: 'datetime', value: 'createTime', text: '创建日期' }) this.superFieldList = fieldList } } diff --git a/ant-design-vue-jeecg/src/views/system/monitor/OperationLog.vue b/ant-design-vue-jeecg/src/views/system/monitor/OperationLog.vue index f7c4405..ebca003 100644 --- a/ant-design-vue-jeecg/src/views/system/monitor/OperationLog.vue +++ b/ant-design-vue-jeecg/src/views/system/monitor/OperationLog.vue @@ -11,7 +11,7 @@ </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> <a-form-item label="业务类型"> - <j-dict-select-tag placeholder="请选择业务类型" v-model="queryParam.bizType" dictCode="operation_log_type"/> + <j-input placeholder="请选择业务类型" v-model="queryParam.bizType" /> </a-form-item> </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> diff --git a/ant-design-vue-jeecg/src/views/system/monitor/locationStatus.vue b/ant-design-vue-jeecg/src/views/system/monitor/locationStatus.vue index dc41fa2..646ed41 100644 --- a/ant-design-vue-jeecg/src/views/system/monitor/locationStatus.vue +++ b/ant-design-vue-jeecg/src/views/system/monitor/locationStatus.vue @@ -18,8 +18,7 @@ </a-select> </li> <li>第 - <select id="editable-num" name="num" style="width: 70px"> - </select> + <select id="editable-num" name="num" style="width: 70px" /> </li> <li> <select id="editable-select" name="col" @click="show" style="width: 70px"> @@ -39,43 +38,20 @@ <form id="receiptHeader-form"> <div class="select-list"> <ul id="img_list" style=""> + <li>空柜空闲:<img src="~@/assets/icon/grid_rest.png"></li> + <li>空盘空闲:<img src="~@/assets/icon/grid_empty.png"></li> + <li>半盘空闲:<img src="~@/assets/icon/grid_half.png"></li> + <li>整盘空闲:<img src="~@/assets/icon/grid_all.png"></li> + <li>空柜锁定:<img src="~@/assets/icon/grid_emp_lock.png"></li> + <li>空盘锁定:<img src="~@/assets/icon/grid_empty_lock.png"></li> + <li>半盘锁定:<img src="~@/assets/icon/grid_half_lock.png"></li> + <li>整盘锁定:<img src="~@/assets/icon/grid_all_lock.png"></li> + <li>空柜禁用:<img src="~@/assets/icon/grid_emp_waing.png"></li> + <li>空盘禁用:<img src="~@/assets/icon/grid_empty_waring.png"></li> + <li>半盘禁用:<img src="~@/assets/icon/grid_half_waring.png"></li> + <li>整盘禁用:<img src="~@/assets/icon/ContainerDisabled.png"></li> <li> - 空柜空闲:<img src="~@/assets/icon/空柜空闲.png"> - </li> - <li> - 空盘空闲:<img src="~@/assets/icon/空盘空闲.png"> - </li> - <li> - 半盘空闲:<img src="~@/assets/icon/半盘空闲.png"> - </li> - <li> - 整盘空闲:<img src="~@/assets/icon/整盘空闲.png"> - </li> - <li> - 空柜锁定:<img src="~@/assets/icon/空柜锁定.png"> - </li> - <li> - 空盘锁定:<img src="~@/assets/icon/空盘锁定.png"> - </li> - <li> - 半盘锁定:<img src="~@/assets/icon/半盘锁定.png"> - </li> - <li> - 整盘锁定:<img src="~@/assets/icon/整盘锁定.png"> - </li> - <li> - 空柜禁用:<img src="~@/assets/icon/空柜禁用.png"> - </li> - <li> - 空盘禁用:<img src="~@/assets/icon/空盘禁用.png"> - </li> - <li> - 半盘禁用:<img src="~@/assets/icon/半盘禁用.png"> - </li> - <li> - 整盘禁用:<img src="~@/assets/icon/整盘禁用.png"> - </li> - <li><span style="font-size: 12px">库位统计情况:</span> + <span style="font-size: 12px">库位统计情况:</span> <input style="width: 400px; font-size: 12px" type="text" id="zone" disabled/> </li> </ul> @@ -83,7 +59,7 @@ <ul id="info_list"> <li><span>库位:</span><input type="text" id="code" disabled/></li> <li><span>容器编码:</span><input type="text" id="containerCode" disabled/></li> - <li><span>物料信息:<select id="material" style="width: auto;"><option>无</option></select></span></li> + <li><span>物料信息:<select id="material" style="width: auto"><option>无</option></select></span></li> </ul> </div> </form> @@ -128,19 +104,19 @@ var currentMaterialCode = 0; import huahengUI from '../../../assets/css/huahengUI.css' import $ from '../../../assets/js/jquery-1.11.1.min' -import grid_rest from '@/assets/icon/空柜空闲.png' -import grid_empty from '@/assets/icon/空盘空闲.png' -import grid_half from '@/assets/icon/半盘空闲.png' -import grid_all from '@/assets/icon/整盘空闲.png' -import grid_emp_waing from '@/assets/icon/空柜禁用.png' -import grid_empty_waring from '@/assets/icon/空盘禁用.png' -import grid_half_waring from '@/assets/icon/半盘禁用.png' -import grid_all_waring from '@/assets/icon/整盘禁用.png' -import grid_emp_lock from '@/assets/icon/空柜锁定.png' -import grid_empty_lock from '@/assets/icon/空盘锁定.png' -import grid_half_lock from '@/assets/icon/半盘锁定.png' -import grid_all_lock from '@/assets/icon/整盘锁定.png' -import rel_empty from '@/assets/icon/空.png' +import grid_rest from '@/assets/icon/grid_rest.png' +import grid_empty from '@/assets/icon/grid_empty.png' +import grid_half from '@/assets/icon/grid_half.png' +import grid_all from '@/assets/icon/grid_all.png' +import grid_emp_waing from '@/assets/icon/grid_emp_waing.png' +import grid_empty_waring from '@/assets/icon/grid_empty_waring.png' +import grid_half_waring from '@/assets/icon/grid_half_waring.png' +import grid_all_waring from '@/assets/icon/ContainerDisabled.png' +import grid_emp_lock from '@/assets/icon/grid_emp_lock.png' +import grid_empty_lock from '@/assets/icon/grid_empty_lock.png' +import grid_half_lock from '@/assets/icon/grid_half_lock.png' +import grid_all_lock from '@/assets/icon/grid_all_lock.png' +import rel_empty from '@/assets/icon/rel_empty.png' import Vue from 'vue' import {ACCESS_TOKEN} from "@/store/mutation-types" import {getZoneList} from '@/api/api' diff --git a/ant-design-vue-jeecg/src/views/system/monitor/modules/ApiLogForm.vue b/ant-design-vue-jeecg/src/views/system/monitor/modules/ApiLogForm.vue index 3420e99..2366ead 100644 --- a/ant-design-vue-jeecg/src/views/system/monitor/modules/ApiLogForm.vue +++ b/ant-design-vue-jeecg/src/views/system/monitor/modules/ApiLogForm.vue @@ -14,13 +14,23 @@ </a-form-model-item> </a-col> <a-col :span="24"> - <a-form-model-item label="请求方地址" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="ip"> - <a-input v-model="model.ip" placeholder="请输入请求方地址"></a-input> + <a-form-model-item label="请求方名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="requestFrom"> + <a-input v-model="model.requestFrom" placeholder="请输入请求方名称"></a-input> </a-form-model-item> </a-col> <a-col :span="24"> - <a-form-model-item label="请求方名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="responseFrom"> - <a-input v-model="model.responseFrom" placeholder="请输入请求方名称"></a-input> + <a-form-model-item label="请求方IP" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="ip"> + <a-input v-model="model.ip" placeholder="请输入请求方IP"></a-input> + </a-form-model-item> + </a-col> + <a-col :span="24"> + <a-form-model-item label="请求地址" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="url"> + <a-input v-model="model.url" placeholder="请输入请求地址"></a-input> + </a-form-model-item> + </a-col> + <a-col :span="24"> + <a-form-model-item label="请求内容" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="requestBody"> + <a-input v-model="model.requestBody" placeholder="请输入请求内容"></a-input> </a-form-model-item> </a-col> <a-col :span="24"> @@ -29,8 +39,8 @@ </a-form-model-item> </a-col> <a-col :span="24"> - <a-form-model-item label="请求地址" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="url"> - <a-input v-model="model.url" placeholder="请输入请求地址"></a-input> + <a-form-model-item label="响应内容" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="responseBody"> + <a-input v-model="model.responseBody" placeholder="请输入响应内容"></a-input> </a-form-model-item> </a-col> <a-col :span="24"> @@ -46,16 +56,6 @@ </a-form-model-item> </a-col> <a-col :span="24"> - <a-form-model-item label="请求内容" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="requestBody"> - <a-input v-model="model.requestBody" placeholder="请输入请求内容"></a-input> - </a-form-model-item> - </a-col> - <a-col :span="24"> - <a-form-model-item label="响应内容" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="responseBody"> - <a-input v-model="model.responseBody" placeholder="请输入响应内容"></a-input> - </a-form-model-item> - </a-col> - <a-col :span="24"> <a-form-model-item label="响应耗时(毫秒)" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="duration"> <a-input v-model="model.duration" placeholder="请输入响应耗时(毫秒)"></a-input> </a-form-model-item> diff --git a/ant-design-vue-jeecg/src/views/system/receipt/ReceiptContainerHeaderList.vue b/ant-design-vue-jeecg/src/views/system/receipt/ReceiptContainerHeaderList.vue index 0c775fd..3ea9dfa 100644 --- a/ant-design-vue-jeecg/src/views/system/receipt/ReceiptContainerHeaderList.vue +++ b/ant-design-vue-jeecg/src/views/system/receipt/ReceiptContainerHeaderList.vue @@ -5,8 +5,8 @@ <a-form layout="inline" @keyup.enter.native="searchQuery"> <a-row :gutter="24"> <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <a-form-item label="容器号"> - <a-input placeholder="请输入容器号" v-model="queryParam.containerCode"></a-input> + <a-form-item label="容器编码"> + <a-input placeholder="请输入容器编码" v-model="queryParam.containerCode"></a-input> </a-form-item> </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> @@ -166,7 +166,7 @@ export default { dataIndex: 'id' }, { - title: '容器号', + title: '容器编码', align: "center", dataIndex: 'containerCode' }, @@ -334,7 +334,7 @@ export default { }, getSuperFieldList() { let fieldList = []; - fieldList.push({type: 'string', value: 'containerCode', text: '容器号', dictCode: ''}) + fieldList.push({type: 'string', value: 'containerCode', text: '容器编码', dictCode: ''}) fieldList.push({type: 'int', value: 'taskType', text: '任务类型', dictCode: 'receipt_task_type'}) fieldList.push({type: 'int', value: 'status', text: '状态', dictCode: 'receipt_container_status'}) fieldList.push({type: 'string', value: 'fromLocationCode', text: '起始库位', dictCode: ''}) diff --git a/ant-design-vue-jeecg/src/views/system/receipt/modules/ReceiptContainerHeaderModal.vue b/ant-design-vue-jeecg/src/views/system/receipt/modules/ReceiptContainerHeaderModal.vue index 124380c..becaeb0 100644 --- a/ant-design-vue-jeecg/src/views/system/receipt/modules/ReceiptContainerHeaderModal.vue +++ b/ant-design-vue-jeecg/src/views/system/receipt/modules/ReceiptContainerHeaderModal.vue @@ -12,8 +12,8 @@ <a-form-model ref="form" :model="model" :rules="validatorRules"> <a-row> <a-col :span="24"> - <a-form-model-item label="容器号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="containerCode"> - <a-input v-model="model.containerCode" placeholder="请输入容器号"></a-input> + <a-form-model-item label="容器编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="containerCode"> + <a-input v-model="model.containerCode" placeholder="请输入容器编码"></a-input> </a-form-model-item> </a-col> <a-col :span="24"> diff --git a/ant-design-vue-jeecg/src/views/system/shipment/ShipmentContainerHeaderList.vue b/ant-design-vue-jeecg/src/views/system/shipment/ShipmentContainerHeaderList.vue index f353e1a..1cca438 100644 --- a/ant-design-vue-jeecg/src/views/system/shipment/ShipmentContainerHeaderList.vue +++ b/ant-design-vue-jeecg/src/views/system/shipment/ShipmentContainerHeaderList.vue @@ -5,8 +5,8 @@ <a-form layout="inline" @keyup.enter.native="searchQuery"> <a-row :gutter="24"> <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <a-form-item label="容器号"> - <a-input placeholder="请输入容器号" v-model="queryParam.containerCode"></a-input> + <a-form-item label="容器编码"> + <a-input placeholder="请输入容器编码" v-model="queryParam.containerCode"></a-input> </a-form-item> </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> @@ -168,7 +168,7 @@ export default { // 表头 columns: [ { - title: '容器号', + title: '容器编码', align: "center", dataIndex: 'containerCode' }, @@ -312,7 +312,7 @@ export default { }, getSuperFieldList() { let fieldList = []; - fieldList.push({type: 'string', value: 'containerCode', text: '容器号', dictCode: ''}) + fieldList.push({type: 'string', value: 'containerCode', text: '容器编码', dictCode: ''}) fieldList.push({type: 'int', value: 'taskType', text: '任务类型', dictCode: 'shipment_task_type'}) fieldList.push({type: 'int', value: 'status', text: '状态', dictCode: 'shipment_container_status'}) fieldList.push({type: 'string', value: 'fromLocationCode', text: '起始库位', dictCode: ''}) diff --git a/ant-design-vue-jeecg/src/views/system/shipment/modules/ShipmentContainerHeaderModal.vue b/ant-design-vue-jeecg/src/views/system/shipment/modules/ShipmentContainerHeaderModal.vue index 0716e57..5fc4719 100644 --- a/ant-design-vue-jeecg/src/views/system/shipment/modules/ShipmentContainerHeaderModal.vue +++ b/ant-design-vue-jeecg/src/views/system/shipment/modules/ShipmentContainerHeaderModal.vue @@ -12,8 +12,8 @@ <a-form-model ref="form" :model="model" :rules="validatorRules"> <a-row> <a-col :span="24"> - <a-form-model-item label="容器号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="containerCode"> - <a-input v-model="model.containerCode" placeholder="请输入容器号"></a-input> + <a-form-model-item label="容器编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="containerCode"> + <a-input v-model="model.containerCode" placeholder="请输入容器编码"></a-input> </a-form-model-item> </a-col> <a-col :span="24"> diff --git a/ant-design-vue-jeecg/src/views/system/task/CircleTaskHeaderList.vue b/ant-design-vue-jeecg/src/views/system/task/CircleTaskHeaderList.vue index 7413773..2d23c43 100644 --- a/ant-design-vue-jeecg/src/views/system/task/CircleTaskHeaderList.vue +++ b/ant-design-vue-jeecg/src/views/system/task/CircleTaskHeaderList.vue @@ -10,8 +10,8 @@ </a-form-item> </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <a-form-item label="容器号"> - <a-input placeholder="请输入容器号" v-model="queryParam.containerCode"></a-input> + <a-form-item label="容器编码"> + <a-input placeholder="请输入容器编码" v-model="queryParam.containerCode"></a-input> </a-form-item> </a-col> <template v-if="toggleSearchStatus"> @@ -211,7 +211,7 @@ export default { customFilterDropdown: true, }, { - title: '容器号', + title: '容器编码', align: "center", dataIndex: 'containerCode' }, @@ -411,7 +411,7 @@ export default { getSuperFieldList() { let fieldList = []; fieldList.push({type: 'int', value: 'taskType', text: '任务类型', dictCode: 'task_type'}) - fieldList.push({type: 'string', value: 'containerCode', text: '容器号', dictCode: ''}) + fieldList.push({type: 'string', value: 'containerCode', text: '容器编码', dictCode: ''}) fieldList.push({type: 'string', value: 'fromLocationCode', text: '起始库位', dictCode: ''}) fieldList.push({type: 'string', value: 'toLocationCode', text: '目标库位', dictCode: ''}) fieldList.push({type: 'string', value: 'isEmptyOut', text: '是否空出', dictCode: 'is_or_not'}) diff --git a/ant-design-vue-jeecg/src/views/system/task/ReceiptTaskHeaderList.vue b/ant-design-vue-jeecg/src/views/system/task/ReceiptTaskHeaderList.vue index e919aad..585fcb1 100644 --- a/ant-design-vue-jeecg/src/views/system/task/ReceiptTaskHeaderList.vue +++ b/ant-design-vue-jeecg/src/views/system/task/ReceiptTaskHeaderList.vue @@ -10,8 +10,8 @@ </a-form-item> </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <a-form-item label="容器号"> - <a-input placeholder="请输入容器号" v-model="queryParam.containerCode"></a-input> + <a-form-item label="容器编码"> + <a-input placeholder="请输入容器编码" v-model="queryParam.containerCode"></a-input> </a-form-item> </a-col> <template v-if="toggleSearchStatus"> @@ -205,7 +205,7 @@ export default { dataIndex: 'taskType_dictText', }, { - title: '容器号', + title: '容器编码', align: "center", dataIndex: 'containerCode' }, @@ -448,7 +448,7 @@ export default { getSuperFieldList() { let fieldList = []; fieldList.push({type: 'int', value: 'taskType', text: '任务类型', dictCode: 'task_type'}) - fieldList.push({type: 'string', value: 'containerCode', text: '容器号', dictCode: ''}) + fieldList.push({type: 'string', value: 'containerCode', text: '容器编码', dictCode: ''}) fieldList.push({type: 'string', value: 'fromLocationCode', text: '起始库位', dictCode: ''}) fieldList.push({type: 'string', value: 'toLocationCode', text: '目标库位', dictCode: ''}) fieldList.push({type: 'string', value: 'isEmptyOut', text: '是否空出', dictCode: 'is_or_not'}) diff --git a/ant-design-vue-jeecg/src/views/system/task/ShipmentTaskHeaderList.vue b/ant-design-vue-jeecg/src/views/system/task/ShipmentTaskHeaderList.vue index 9780144..88b40e6 100644 --- a/ant-design-vue-jeecg/src/views/system/task/ShipmentTaskHeaderList.vue +++ b/ant-design-vue-jeecg/src/views/system/task/ShipmentTaskHeaderList.vue @@ -10,8 +10,8 @@ </a-form-item> </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <a-form-item label="容器号"> - <a-input placeholder="请输入容器号" v-model="queryParam.containerCode"></a-input> + <a-form-item label="容器编码"> + <a-input placeholder="请输入容器编码" v-model="queryParam.containerCode"></a-input> </a-form-item> </a-col> <template v-if="toggleSearchStatus"> @@ -207,7 +207,7 @@ export default { dataIndex: 'taskType_dictText', }, { - title: '容器号', + title: '容器编码', align: "center", dataIndex: 'containerCode' }, @@ -449,7 +449,7 @@ export default { getSuperFieldList() { let fieldList = []; fieldList.push({type: 'int', value: 'taskType', text: '任务类型', dictCode: 'task_type'}) - fieldList.push({type: 'string', value: 'containerCode', text: '容器号', dictCode: ''}) + fieldList.push({type: 'string', value: 'containerCode', text: '容器编码', dictCode: ''}) fieldList.push({type: 'string', value: 'fromLocationCode', text: '起始库位', dictCode: ''}) fieldList.push({type: 'string', value: 'toLocationCode', text: '目标库位', dictCode: ''}) fieldList.push({type: 'string', value: 'isEmptyOut', text: '是否空出', dictCode: 'is_or_not'}) diff --git a/ant-design-vue-jeecg/src/views/system/task/TransferTaskHeaderList.vue b/ant-design-vue-jeecg/src/views/system/task/TransferTaskHeaderList.vue index 3d508a4..eec6bed 100644 --- a/ant-design-vue-jeecg/src/views/system/task/TransferTaskHeaderList.vue +++ b/ant-design-vue-jeecg/src/views/system/task/TransferTaskHeaderList.vue @@ -10,8 +10,8 @@ </a-form-item> </a-col> <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <a-form-item label="容器号"> - <a-input placeholder="请输入容器号" v-model="queryParam.containerCode"></a-input> + <a-form-item label="容器编码"> + <a-input placeholder="请输入容器编码" v-model="queryParam.containerCode"></a-input> </a-form-item> </a-col> <template v-if="toggleSearchStatus"> @@ -212,7 +212,7 @@ export default { dataIndex: 'taskType_dictText', }, { - title: '容器号', + title: '容器编码', align: "center", dataIndex: 'containerCode' }, @@ -459,7 +459,7 @@ export default { getSuperFieldList() { let fieldList = []; fieldList.push({type: 'int', value: 'taskType', text: '任务类型', dictCode: 'task_type'}) - fieldList.push({type: 'string', value: 'containerCode', text: '容器号', dictCode: ''}) + fieldList.push({type: 'string', value: 'containerCode', text: '容器编码', dictCode: ''}) fieldList.push({type: 'string', value: 'fromLocationCode', text: '起始库位', dictCode: ''}) fieldList.push({type: 'string', value: 'toLocationCode', text: '目标库位', dictCode: ''}) fieldList.push({type: 'string', value: 'isEmptyOut', text: '是否空出', dictCode: 'is_or_not'}) diff --git a/ant-design-vue-jeecg/src/views/system/task/modules/EmptyInTaskModal.vue b/ant-design-vue-jeecg/src/views/system/task/modules/EmptyInTaskModal.vue index 9dd27a2..b48b657 100644 --- a/ant-design-vue-jeecg/src/views/system/task/modules/EmptyInTaskModal.vue +++ b/ant-design-vue-jeecg/src/views/system/task/modules/EmptyInTaskModal.vue @@ -12,8 +12,8 @@ <a-form-model ref="form" :model="model" :rules="validatorRules"> <a-row> <a-col :span="24"> - <a-form-model-item label="容器号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="containerCode"> - <a-input v-model="model.containerCode" placeholder="请输入容器号"></a-input> + <a-form-model-item label="容器编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="containerCode"> + <a-input v-model="model.containerCode" placeholder="请输入容器编码"></a-input> </a-form-model-item> </a-col> <a-col :span="24"> diff --git a/ant-design-vue-jeecg/src/views/system/task/modules/ManyEmptyInTaskModal.vue b/ant-design-vue-jeecg/src/views/system/task/modules/ManyEmptyInTaskModal.vue index 393baf2..bd7c5ea 100644 --- a/ant-design-vue-jeecg/src/views/system/task/modules/ManyEmptyInTaskModal.vue +++ b/ant-design-vue-jeecg/src/views/system/task/modules/ManyEmptyInTaskModal.vue @@ -12,8 +12,8 @@ <a-form-model ref="form" :model="model" :rules="validatorRules"> <a-row> <a-col :span="24"> - <a-form-model-item label="容器号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="containerCode"> - <a-input v-model="model.containerCode" placeholder="请输入容器号"></a-input> + <a-form-model-item label="容器编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="containerCode"> + <a-input v-model="model.containerCode" placeholder="请输入容器编码"></a-input> </a-form-model-item> </a-col> <a-col :span="24"> diff --git a/ant-design-vue-jeecg/src/views/system/task/modules/TaskHeaderModal.vue b/ant-design-vue-jeecg/src/views/system/task/modules/TaskHeaderModal.vue index b14bb72..1497cec 100644 --- a/ant-design-vue-jeecg/src/views/system/task/modules/TaskHeaderModal.vue +++ b/ant-design-vue-jeecg/src/views/system/task/modules/TaskHeaderModal.vue @@ -17,8 +17,8 @@ </a-form-model-item> </a-col> <a-col :span="24"> - <a-form-model-item label="容器号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="containerCode"> - <a-input v-model="model.containerCode" placeholder="请输入容器号"></a-input> + <a-form-model-item label="容器编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="containerCode"> + <a-input v-model="model.containerCode" placeholder="请输入容器编码"></a-input> </a-form-model-item> </a-col> <a-col :span="24"> diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/entity/MesReceiptMaterial.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/entity/MesReceiptMaterial.java index 68e45e1..365fd9c 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/entity/MesReceiptMaterial.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/entity/MesReceiptMaterial.java @@ -17,9 +17,9 @@ public class MesReceiptMaterial { @ApiModelProperty(value = "上游单号", required = true) private String referCode; /** - * 容器号 + * 容器编码 */ - @ApiModelProperty(value = "容器号", required = true) + @ApiModelProperty(value = "容器编码", required = true) private String containerCode; /** * 仓库编码 diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/servuce/impl/MesServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/servuce/impl/MesServiceImpl.java index 67ebc44..25178c3 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/servuce/impl/MesServiceImpl.java +++ b/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 { String warehouseCode = mesReceiptMaterial.getWarehouseCode(); String toPort = mesReceiptMaterial.getToPort(); if (StringUtils.isEmpty(containerCode)) { - return Result.error("MES下发入库信息,容器号为空"); + return Result.error("MES下发入库信息,容器编码为空"); } if (StringUtils.isEmpty(warehouseCode)) { return Result.error("MES下发入库信息,仓库编码为空"); diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/address/entity/Address.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/address/entity/Address.java index 450ae10..23ba321 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/address/entity/Address.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/address/entity/Address.java @@ -49,9 +49,9 @@ public class Address implements Serializable { @Excel(name = "接口地址", width = 15) @ApiModelProperty(value = "接口地址") private String url; - /** 备注 */ - @Excel(name = "备注", width = 15) - @ApiModelProperty(value = "备注") + /** 接口名称 */ + @Excel(name = "接口名称", width = 15) + @ApiModelProperty(value = "接口名称") private String remark; /** 备用字段1 */ @Excel(name = "备用字段1", width = 15) diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/locationMonitor/controller/LocationMonitorController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/locationMonitor/controller/LocationMonitorController.java index acb9d5d..824658f 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/locationMonitor/controller/LocationMonitorController.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/locationMonitor/controller/LocationMonitorController.java @@ -21,6 +21,7 @@ import org.jeecg.utils.HuahengJwtUtil; import org.jeecg.utils.StringUtils; import org.jeecg.utils.constant.QuantityConstant; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -56,10 +57,15 @@ public class LocationMonitorController { HuahengJwtUtil.setWarehouseCode(queryWrapper, Location.class, req); queryWrapper.select(Location::getCode, Location::getStatus, Location::getContainerCode).eq(Location::getZoneCode, zoneCode); List<Location> locationList = locationService.list(queryWrapper); - List<String> locationCodeList = locationList.stream().map(Location::getCode).collect(Collectors.toList()); - HashMap<String, Integer> map = new HashMap<>(); map.put("location", locationList.size()); + if (CollectionUtils.isEmpty(locationList)) { + map.put("emptyLocation", 0); + map.put("haveContainLocation", 0); + map.put("haveInventoryLocation", 0); + return Result.ok(map); + } + List<String> locationCodeList = locationList.stream().map(Location::getCode).collect(Collectors.toList()); // 换stream进行数据拣选速度更快 List<Location> emptyLocationList = locationList.stream().filter(t -> QuantityConstant.STATUS_LOCATION_EMPTY.equals(t.getStatus())).collect(Collectors.toList()); @@ -69,19 +75,16 @@ public class LocationMonitorController { HuahengJwtUtil.setWarehouseCode(containerLambdaQueryWrapper, Container.class, req); containerLambdaQueryWrapper.select(Container::getCode, Container::getStatus, Container::getFillStatus).in(Container::getLocationCode, locationCodeList); List<Container> containerList = containerService.list(containerLambdaQueryWrapper); - List<String> containerCodeList = containerList.stream() .filter( t -> QuantityConstant.STATUS_CONTAINER_FILL_EMPTY.equals(t.getFillStatus()) || QuantityConstant.STATUS_CONTAINER_FILL_MANY.equals(t.getFillStatus())) .map(Container::getCode).collect(Collectors.toList()); List<Location> haveEmptyContainLocation = locationList.stream().filter(t -> containerCodeList.contains(t.getContainerCode())).collect(Collectors.toList()); map.put("haveContainLocation", haveEmptyContainLocation.size()); - List<String> containerCodeList1 = containerList.stream() .filter( t -> QuantityConstant.STATUS_CONTAINER_FILL_SOME.equals(t.getFillStatus()) || QuantityConstant.STATUS_CONTAINER_FILL_FULL.equals(t.getFillStatus())) .map(Container::getCode).collect(Collectors.toList()); - List<Location> haveInventoryLocationList = locationList.stream().filter(t -> containerCodeList1.contains(t.getContainerCode())).collect(Collectors.toList()); map.put("haveInventoryLocation", haveInventoryLocationList.size()); return Result.ok(map); diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/home/controller/HomePageViewController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/home/controller/HomePageViewController.java index 351e641..7dd1660 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/home/controller/HomePageViewController.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/home/controller/HomePageViewController.java @@ -42,8 +42,11 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; +import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeoutException; import java.util.stream.Collectors; /** @@ -62,9 +65,13 @@ public class HomePageViewController { /** * 库存概况 * @return + * @throws TimeoutException + * @throws ExecutionException + * @throws InterruptedException + * @throws ParseException */ @RequestMapping(value = "/deliveringAmount", method = {RequestMethod.PUT, RequestMethod.POST}) - public Result<String> deliveringAmount(HttpServletRequest request) { + public Result<String> deliveringAmount(HttpServletRequest request) throws ParseException, InterruptedException, ExecutionException, TimeoutException { return homePageViewService.deliveringAmount(request); } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/home/service/HomePageViewService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/home/service/HomePageViewService.java index 8df8037..0b1abab 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/home/service/HomePageViewService.java +++ b/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; import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader; import java.io.Serializable; +import java.text.ParseException; import java.util.Collection; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeoutException; import javax.servlet.http.HttpServletRequest; @@ -18,7 +21,7 @@ import javax.servlet.http.HttpServletRequest; */ public interface HomePageViewService { - Result<String> deliveringAmount(HttpServletRequest request); + Result<String> deliveringAmount(HttpServletRequest request) throws ParseException, InterruptedException, ExecutionException, TimeoutException; Result<String> inventoryUtilization(HttpServletRequest request); diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/home/service/impl/HomePageViewServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/home/service/impl/HomePageViewServiceImpl.java index dd06d04..94e1653 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/home/service/impl/HomePageViewServiceImpl.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/home/service/impl/HomePageViewServiceImpl.java @@ -1,54 +1,67 @@ package org.jeecg.modules.wms.home.service.impl; -import cn.hutool.core.util.ArrayUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.service.IService; -import com.github.abel533.echarts.Option; -import com.github.abel533.echarts.axis.Axis; -import com.github.abel533.echarts.axis.CategoryAxis; -import com.github.abel533.echarts.axis.ValueAxis; -import com.github.abel533.echarts.code.*; -import com.github.abel533.echarts.json.GsonUtil; -import com.github.abel533.echarts.series.Line; -import com.github.abel533.echarts.series.Pie; -import com.github.abel533.echarts.style.itemstyle.Normal; +import java.math.BigDecimal; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.stream.Collectors; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + import org.jeecg.common.api.vo.Result; import org.jeecg.modules.system.entity.SysDictItem; import org.jeecg.modules.system.service.impl.SysDictItemServiceImpl; import org.jeecg.modules.wms.config.location.entity.Location; import org.jeecg.modules.wms.config.location.service.impl.LocationServiceImpl; import org.jeecg.modules.wms.home.service.HomePageViewService; - import org.jeecg.modules.wms.home.support.ChartData; import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail; import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryHeader; import org.jeecg.modules.wms.inventory.inventoryHeader.service.impl.InventoryDetailServiceImpl; import org.jeecg.modules.wms.inventory.inventoryHeader.service.impl.InventoryHeaderServiceImpl; import org.jeecg.modules.wms.inventory.inventoryTransaction.entity.InventoryTransaction; -import org.jeecg.modules.wms.inventory.inventoryTransaction.service.impl.InventoryTransactionServiceImpl; -import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptHeader; +import org.jeecg.modules.wms.inventory.inventoryTransaction.service.IInventoryTransactionService; import org.jeecg.modules.wms.receipt.receiptHeader.service.impl.ReceiptHeaderServiceImpl; -import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentHeader; import org.jeecg.modules.wms.shipment.shipmentHeader.service.impl.ShipmentHeaderServiceImpl; -import org.jeecg.modules.wms.task.taskHeader.entity.TaskDetail; import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader; import org.jeecg.modules.wms.task.taskHeader.service.impl.TaskDetailServiceImpl; import org.jeecg.modules.wms.task.taskHeader.service.impl.TaskHeaderServiceImpl; import org.jeecg.utils.HuahengJwtUtil; -import org.jeecg.utils.StringUtils; import org.jeecg.utils.constant.QuantityConstant; import org.jeecg.utils.support.Convert; +import org.jeecg.utils.support.SystemSync; import org.springframework.stereotype.Service; -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.github.abel533.echarts.Option; +import com.github.abel533.echarts.axis.Axis; +import com.github.abel533.echarts.axis.CategoryAxis; +import com.github.abel533.echarts.axis.ValueAxis; +import com.github.abel533.echarts.code.LegendType; +import com.github.abel533.echarts.code.Orient; +import com.github.abel533.echarts.code.PointerType; +import com.github.abel533.echarts.code.SeriesType; +import com.github.abel533.echarts.code.Trigger; +import com.github.abel533.echarts.json.GsonUtil; +import com.github.abel533.echarts.series.Line; +import com.github.abel533.echarts.series.Pie; +import com.github.abel533.echarts.style.itemstyle.Normal; -import java.math.BigDecimal; -import java.text.SimpleDateFormat; -import java.util.*; -import java.util.stream.Collectors; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ArrayUtil; /** * @Description: 任务表 @@ -87,60 +100,26 @@ public class HomePageViewServiceImpl implements HomePageViewService { HomePageViewService homePageViewService; @Resource - InventoryTransactionServiceImpl inventoryTransactionServiceImpl; + IInventoryTransactionService inventoryTransactionService; + + @Resource + SystemSync systemSync; @Override - public Result<String> deliveringAmount(HttpServletRequest request) { - // 通过库存交易记录来查询 - LambdaQueryWrapper<InventoryTransaction> inventoryTransactionLambdaQueryWrapper = Wrappers.lambdaQuery(); - HuahengJwtUtil.setWarehouseCode(inventoryTransactionLambdaQueryWrapper, InventoryTransaction.class, request); - inventoryTransactionLambdaQueryWrapper.select(InventoryTransaction::getCreateTime, InventoryTransaction::getQty, InventoryTransaction::getType); - List<InventoryTransaction> inventoryTransactions = inventoryTransactionServiceImpl.list(inventoryTransactionLambdaQueryWrapper); - - // 查询出库单的7天出库量 - List<InventoryTransaction> shipmentHeaders = new ArrayList<>(); - shipmentHeaders.addAll(inventoryTransactions); - shipmentHeaders.removeIf(Inventory -> Inventory.getType() != 20); - LinkedHashMap<String, String> list = new LinkedHashMap<>(); - - for (int i = 6; i >= 0; i--) { - String today = new SimpleDateFormat("yyyy-MM-dd").format(System.currentTimeMillis() - (1000 * 60 * 60 * 24) * i).toString(); - List<InventoryTransaction> collect = shipmentHeaders.stream() - .filter(shipmentHeader -> new SimpleDateFormat("yyyy-MM-dd").format(shipmentHeader.getCreateTime()).toString().contains(today)) - .collect(Collectors.toList()); - if (collect.size() != 0) { - BigDecimal sum = new BigDecimal(0); - for (InventoryTransaction item : collect) { - sum = sum.add(item.getQty()); - } - list.put(today, String.valueOf(sum)); - } else { - list.put(today, "0"); - } - } - - // 查询入库单的7天入库量 - List<InventoryTransaction> receiptHeaders = new ArrayList<>(); - receiptHeaders.addAll(inventoryTransactions); - receiptHeaders.removeIf(Inventory -> Inventory.getType() != 10); - LinkedHashMap<String, String> list2 = new LinkedHashMap<>(); + public Result<String> deliveringAmount(HttpServletRequest request) throws ParseException, InterruptedException, ExecutionException, TimeoutException { + Long dateTime = new Date().getTime(); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); + LinkedHashMap<String, Future<BigDecimal>> shipmentQuantityMap = new LinkedHashMap<String, Future<BigDecimal>>(); + LinkedHashMap<String, Future<BigDecimal>> receiptQuantityMap = new LinkedHashMap<String, Future<BigDecimal>>(); + // 查询出库单的7天出库量/入库量 for (int i = 6; i >= 0; i--) { - List<InventoryTransaction> receiptHeadersCop = receiptHeaders; - String today = new SimpleDateFormat("yyyy-MM-dd").format(System.currentTimeMillis() - (1000 * 60 * 60 * 24) * i).toString(); - List<InventoryTransaction> collect = receiptHeadersCop.stream() - .filter(ReceiptHeader -> new SimpleDateFormat("yyyy-MM-dd").format(ReceiptHeader.getCreateTime()).toString().contains(today)) - .collect(Collectors.toList()); - if (collect.size() != 0) { - BigDecimal sum = new BigDecimal(0); - for (InventoryTransaction item : collect) { - sum = sum.add(item.getQty()); - } - list2.put(today, String.valueOf(sum)); - } else { - list2.put(today, "0"); - } + String startTime = simpleDateFormat.format(dateTime - (1000 * 60 * 60 * 24) * i); + String endTime = simpleDateFormat.format(DateUtil.offsetDay(simpleDateFormat.parse(startTime), 1)); + shipmentQuantityMap.put(startTime, + systemSync.asyncCalculateInventory(startTime, endTime, QuantityConstant.INVENTORY_TRANSACTION_SHIPMENT)); + receiptQuantityMap.put(startTime, + systemSync.asyncCalculateInventory(startTime, endTime, QuantityConstant.INVENTORY_TRANSACTION_RECEIPT)); } - Option option = new Option(); option.tooltip().trigger(Trigger.axis).axisPointer().type(PointerType.cross); option.grid().setLeft("3%"); @@ -158,17 +137,17 @@ public class HomePageViewServiceImpl implements HomePageViewService { axis.boundaryGap(false); Line line = new Line(); line.setName("发货量"); - for (String key : list.keySet()) { + for (String key : shipmentQuantityMap.keySet()) { Object o1 = key; - Object o2 = list.get(key); + Object o2 = shipmentQuantityMap.get(key).get(10000, TimeUnit.MILLISECONDS); axis.data().add(o1); line.data().add(o2); } Line line2 = new Line(); line2.setName("收货量"); - for (String key : list2.keySet()) { + for (String key : receiptQuantityMap.keySet()) { Object o1 = key; - Object o2 = list2.get(key); + Object o2 = receiptQuantityMap.get(key).get(10000, TimeUnit.MILLISECONDS); line2.data().add(o2); } option.setxAxis(Arrays.asList(axis)); @@ -346,7 +325,7 @@ public class HomePageViewServiceImpl implements HomePageViewService { LambdaQueryWrapper<InventoryTransaction> inventoryTransactionLambdaQueryWrapper = Wrappers.lambdaQuery(); HuahengJwtUtil.setWarehouseCode(inventoryTransactionLambdaQueryWrapper, InventoryTransaction.class, request); inventoryTransactionLambdaQueryWrapper.select(InventoryTransaction::getType, InventoryTransaction::getQty).gt(InventoryTransaction::getCreateTime, today); - List<InventoryTransaction> inventoryTransactions = inventoryTransactionServiceImpl.list(inventoryTransactionLambdaQueryWrapper); + List<InventoryTransaction> inventoryTransactions = inventoryTransactionService.list(inventoryTransactionLambdaQueryWrapper); BigDecimal receiptQty = BigDecimal.ZERO; BigDecimal shipmentQty = BigDecimal.ZERO; diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/entity/InventoryHeader.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/entity/InventoryHeader.java index 84e4ba0..c202269 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/entity/InventoryHeader.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/entity/InventoryHeader.java @@ -42,9 +42,9 @@ public class InventoryHeader implements Serializable { @Excel(name = "库区", width = 15) @ApiModelProperty(value = "库区") private String zoneCode; - /** 容器号 */ - @Excel(name = "容器号", width = 15) - @ApiModelProperty(value = "容器号") + /** 容器编码 */ + @Excel(name = "容器编码", width = 15) + @ApiModelProperty(value = "容器编码") private String containerCode; /** 容器状态 */ @Excel(name = "容器状态", width = 15, dicCode = "container_status") diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryTransaction/service/IInventoryTransactionService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryTransaction/service/IInventoryTransactionService.java index dfa1175..dcf393b 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryTransaction/service/IInventoryTransactionService.java +++ b/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; import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.wms.inventory.inventoryTransaction.entity.InventoryTransaction; +import java.math.BigDecimal; +import java.text.ParseException; import java.util.List; +import java.util.concurrent.Future; /** * @Description: 库存交易记录 @@ -14,5 +17,5 @@ import java.util.List; public interface IInventoryTransactionService extends IService<InventoryTransaction> { boolean batchSave(List<InventoryTransaction> inventoryTransactionList); - + } diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryTransaction/service/impl/InventoryTransactionServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryTransaction/service/impl/InventoryTransactionServiceImpl.java index f4e0f28..835528a 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryTransaction/service/impl/InventoryTransactionServiceImpl.java +++ b/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; import org.jeecg.modules.wms.inventory.inventoryTransaction.entity.InventoryTransaction; import org.jeecg.modules.wms.inventory.inventoryTransaction.mapper.InventoryTransactionMapper; import org.jeecg.modules.wms.inventory.inventoryTransaction.service.IInventoryTransactionService; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.AsyncResult; import org.springframework.stereotype.Service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import java.math.BigDecimal; +import java.text.ParseException; import java.util.List; +import java.util.concurrent.Future; /** * @Description: 库存交易记录 diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/entity/ReceiptContainerDetail.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/entity/ReceiptContainerDetail.java index 81af760..e60b1af 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/entity/ReceiptContainerDetail.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/entity/ReceiptContainerDetail.java @@ -39,9 +39,9 @@ public class ReceiptContainerDetail implements Serializable { /** 入库单详情ID */ @ApiModelProperty(value = "入库单详情ID") private Integer receiptDetailId; - /** 容器号 */ - @Excel(name = "容器号", width = 15) - @ApiModelProperty(value = "容器号") + /** 容器编码 */ + @Excel(name = "容器编码", width = 15) + @ApiModelProperty(value = "容器编码") private String containerCode; /** 入库单编码 */ @ApiModelProperty(value = "入库单编码") diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/entity/ReceiptContainerHeader.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/entity/ReceiptContainerHeader.java index b5267ce..f615a95 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/entity/ReceiptContainerHeader.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/entity/ReceiptContainerHeader.java @@ -39,9 +39,9 @@ public class ReceiptContainerHeader implements Serializable { @Excel(name = "货主", width = 15) @ApiModelProperty(value = "货主") private String companyCode; - /** 容器号 */ - @Excel(name = "容器号", width = 15) - @ApiModelProperty(value = "容器号") + /** 容器编码 */ + @Excel(name = "容器编码", width = 15) + @ApiModelProperty(value = "容器编码") private String containerCode; /** 容器类型 */ @Excel(name = "容器类型", width = 15) diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/service/impl/ReceiveServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/service/impl/ReceiveServiceImpl.java index fc74450..da25bdb 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/service/impl/ReceiveServiceImpl.java +++ b/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<ReceiveMapper, Receive> impl } String containerCode = receiveList.get(0).getContainerCode(); if (StringUtils.isEmpty(containerCode)) { - return Result.error("容器号为空"); + return Result.error("容器编码为空"); } Container container = containerService.getContainerByCode(containerCode, warehouseCode); if (container == null) { - return Result.error("根据容器号 " + containerCode + ", 没有找到容器"); + return Result.error("根据容器编码 " + containerCode + ", 没有找到容器"); } String containerStatus = container.getStatus(); if (containerStatus.equals(QuantityConstant.STATUS_CONTAINER_LOCK)) { diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/impl/ShipmentCombinationServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/impl/ShipmentCombinationServiceImpl.java index 07ebbe0..505d0b1 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/impl/ShipmentCombinationServiceImpl.java +++ b/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 String containerCode = inventoryDetail.getContainerCode(); Container container = containerService.getContainerByCode(containerCode, warehouseCode); if (container == null) { - return Result.error("没有找到容器,容器号" + containerCode); + return Result.error("没有找到容器,容器编码" + containerCode); } if (container.getStatus().equals(QuantityConstant.STATUS_CONTAINER_LOCK)) { removeInventoryList.add(inventoryDetail); diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/entity/ShipmentContainerDetail.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/entity/ShipmentContainerDetail.java index 1ff069e..2bd5ae3 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/entity/ShipmentContainerDetail.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/entity/ShipmentContainerDetail.java @@ -53,9 +53,9 @@ public class ShipmentContainerDetail implements Serializable { @Excel(name = "货主编码", width = 15) @ApiModelProperty(value = "货主编码") private String companyCode; - /** 容器号 */ - @Excel(name = "容器号", width = 15) - @ApiModelProperty(value = "容器号") + /** 容器编码 */ + @Excel(name = "容器编码", width = 15) + @ApiModelProperty(value = "容器编码") private String containerCode; /** 起始库位 */ @Excel(name = "起始库位", width = 15) diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/entity/ShipmentContainerHeader.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/entity/ShipmentContainerHeader.java index efb30eb..d855859 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/entity/ShipmentContainerHeader.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/entity/ShipmentContainerHeader.java @@ -38,9 +38,9 @@ public class ShipmentContainerHeader implements Serializable { @Excel(name = "货主", width = 15) @ApiModelProperty(value = "货主") private String companyCode; - /** 容器号 */ - @Excel(name = "容器号", width = 15) - @ApiModelProperty(value = "容器号") + /** 容器编码 */ + @Excel(name = "容器编码", width = 15) + @ApiModelProperty(value = "容器编码") private String containerCode; /** 容器类型 */ @Excel(name = "容器类型", width = 15) diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/agvTask/service/impl/AgvTaskServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/agvTask/service/impl/AgvTaskServiceImpl.java index eccb092..c786380 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/agvTask/service/impl/AgvTaskServiceImpl.java +++ b/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<AgvTaskMapper, AgvTask> impl } Container container = containerService.getContainerByCode(containerCode, warehouseCode); if (container == null) { - throw new JeecgBootException("完成AGV任务时,根据容器号没有找到容器"); + throw new JeecgBootException("完成AGV任务时,根据容器编码没有找到容器"); } success = containerService.updateLocationCodeAndStatus(containerCode, toPort, QuantityConstant.STATUS_CONTAINER_EMPTY, warehouseCode); if (!success) { @@ -165,7 +165,7 @@ public class AgvTaskServiceImpl extends ServiceImpl<AgvTaskMapper, AgvTask> impl } Container container = containerService.getContainerByCode(containerCode, warehouseCode); if (container == null) { - throw new JeecgBootException("取消AGV任务。 根据容器号没有找到容器"); + throw new JeecgBootException("取消AGV任务。 根据容器编码没有找到容器"); } // 2023-04-11 托盘状态与填充状态分离 // String containerStatus = QuantityConstant.STATUS_CONTAINER_EMPTY; diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/TaskHeader.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/TaskHeader.java index 588ebf3..61f8317 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/TaskHeader.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/TaskHeader.java @@ -71,9 +71,9 @@ public class TaskHeader implements Serializable { @Excel(name = "内部任务类型", width = 15) @ApiModelProperty(value = "内部任务类型") private Integer innernalTaskType; - /** 容器号 */ - @Excel(name = "容器号", width = 15) - @ApiModelProperty(value = "容器号") + /** 容器编码 */ + @Excel(name = "容器编码", width = 15) + @ApiModelProperty(value = "容器编码") private String containerCode; /** 起始库位 */ @Excel(name = "起始库位", width = 15) diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java index c015eda..a421ecb 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java +++ b/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<TaskHeaderMapper, TaskHea // container.setLastStatus(container.getStatus()); // boolean success = containerService.updateById(container); // if (!success) { -// throw new JeecgBootException("创建移库任务时,更新容器状态失败,容器号" + fromLocation.getContainerCode()); +// throw new JeecgBootException("创建移库任务时,更新容器状态失败,容器编码" + fromLocation.getContainerCode()); // } // 3. 判断源库位旁边有托盘但是没有任务,那么不允许移库 @@ -383,7 +383,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea @Transactional(rollbackFor = Exception.class) public Result createOverStationTask(String containerCode, String fromPortCode, String toPortCode, String warehouseCode) { if (StringUtils.isEmpty(containerCode)) { - return Result.error("创建跨站任务时,容器号为空"); + return Result.error("创建跨站任务时,容器编码为空"); } if (StringUtils.isEmpty(fromPortCode)) { return Result.error("创建跨站任务时,起始站台号为空"); @@ -436,7 +436,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea @Transactional(rollbackFor = Exception.class) public Result createManyEmptyInTask(String containerCode, String zoneCode, String roadWay, String height, String warehouseCode) { if (StringUtils.isEmpty(containerCode)) { - return Result.error("创建空托盘组入库任务时,容器号为空"); + return Result.error("创建空托盘组入库任务时,容器编码为空"); } if (StringUtils.isEmpty(zoneCode)) { return Result.error("创建空托盘组入库任务时,库区编码为空"); @@ -501,7 +501,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea @Transactional(rollbackFor = Exception.class) public Result createManyEmptyIn(String containerCode, String toLocationCode, String warehouseCode) { if (StringUtils.isEmpty(containerCode)) { - return Result.error("创建空托盘组入库任务时,容器号为空"); + return Result.error("创建空托盘组入库任务时,容器编码为空"); } if (StringUtils.isEmpty(warehouseCode)) { return Result.error("创建空托盘组入库任务时,仓库编码为空"); @@ -642,9 +642,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea String containerCode = taskHeader.getContainerCode(); String fromLocationCode = taskHeader.getFromLocationCode(); String warehouseCode = taskHeader.getWarehouseCode(); - // 4、容器号、库位号、仓库编码 不能为空 + // 4、容器编码、库位号、仓库编码 不能为空 if (StringUtils.isEmpty(containerCode)) { - return Result.error("处理空出失败,容器号为空"); + return Result.error("处理空出失败,容器编码为空"); } if (StringUtils.isEmpty(fromLocationCode)) { return Result.error("处理空出失败,起始库号位为空"); @@ -666,7 +666,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea if (!success) { throw new JeecgBootException("处理空出失败, 更新容器状态失败"); } - // 6、删除库位上的容器号,并设置状态为空闲 + // 6、删除库位上的容器编码,并设置状态为空闲 success = locationService.updateContainerCodeAndStatus(fromLocationCode, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode); if (!success) { @@ -717,9 +717,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea String containerCode = taskHeader.getContainerCode(); String originLocationCode = taskHeader.getOriginLocationCode(); String warehouseCode = taskHeader.getWarehouseCode(); - // 4、容器号、库位号、仓库编码 不能为空 + // 4、容器编码、库位号、仓库编码 不能为空 if (StringUtils.isEmpty(containerCode)) { - return Result.error("处理重入失败,容器号为空"); + return Result.error("处理重入失败,容器编码为空"); } if (StringUtils.isEmpty(originLocationCode)) { return Result.error("处理重入失败,终点库号位为空"); @@ -829,10 +829,10 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea public Result completeTaskByWMS(Integer taskId) { TaskHeader taskHeader = getById(taskId); if (taskHeader == null) { - return Result.error("任务" + taskId + "未找到,执行中止"); + return Result.error("任务 " + taskId + " 未找到,执行中止"); } if (taskHeader.getStatus().equals(QuantityConstant.TASK_STATUS_COMPLETED)) { - return Result.ok("任务(" + taskId + ")任务已经是完成的!"); + return Result.ok("任务 " + taskId + " 任务已完成!"); } int taskType = taskHeader.getTaskType().intValue(); if (taskType != QuantityConstant.TASK_TYPE_OVER_STATION) { @@ -1510,7 +1510,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } Container container = containerService.getContainerByCode(containerCode, warehouseCode); if (container == null) { - throw new JeecgBootException("合并库存时, 没有找到容器, 容器号为" + containerCode); + throw new JeecgBootException("合并库存时, 没有找到容器, 容器编码为" + containerCode); } inventoryHeader.setTotalQty(totalQty); inventoryHeader.setTotalLines(totalLines); @@ -1553,7 +1553,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } success = locationService.updateContainerCodeAndStatus(toLocationCode, containerCode, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode); if (!success) { - throw new JeecgBootException("完成空托盘入库任务时, 更新库位的容器号和状态失败"); + throw new JeecgBootException("完成空托盘入库任务时, 更新库位的容器编码和状态失败"); } taskHeader.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); success = taskHeaderService.updateById(taskHeader); @@ -1855,7 +1855,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea success = locationService.updateContainerCodeAndStatus(fromLocationCode, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode); if (!success) { - throw new JeecgBootException("完成空托盘出库任务时, 更新库位的容器号和状态失败"); + throw new JeecgBootException("完成空托盘出库任务时, 更新库位的容器编码和状态失败"); } taskHeader.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); success = taskHeaderService.updateById(taskHeader); @@ -2290,7 +2290,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea // if (StringUtils.isNotEmpty(fromLocationCode)) { // success = containerService.havaLocationCodeByContainer(fromLocationCode, warehouseCode); // if (success) { -// throw new JeecgBootException("库位表已经存在这个容器号,不能再写入"); +// throw new JeecgBootException("库位表已经存在这个容器编码,不能再写入"); // } // } // container.setLastStatus(QuantityConstant.EMPTY_STRING); diff --git a/huaheng-wms-core/src/main/java/org/jeecg/utils/aspect/ApiLoggerAspect.java b/huaheng-wms-core/src/main/java/org/jeecg/utils/aspect/ApiLoggerAspect.java index a5591a4..aae68cb 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/utils/aspect/ApiLoggerAspect.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/utils/aspect/ApiLoggerAspect.java @@ -23,17 +23,13 @@ import org.aspectj.lang.reflect.MethodSignature; import org.jeecg.JeecgSystemApplication; import org.jeecg.common.api.vo.Result; import org.jeecg.modules.wms.config.address.entity.Address; -import org.jeecg.modules.wms.config.address.service.IAddressService; +import org.jeecg.modules.wms.config.address.service.impl.AddressServiceImpl; import org.jeecg.modules.wms.monitor.apiLog.entity.ApiLog; -import org.jeecg.modules.wms.monitor.apiLog.service.IApiLogService; import org.jeecg.utils.ServletUtils; import org.jeecg.utils.SpringUtils; import org.jeecg.utils.StringUtils; -import org.jeecg.utils.config.ApplicationConfig; -import org.jeecg.utils.constant.QuantityConstant; import org.jeecg.utils.support.ApiLogger; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Async; +import org.jeecg.utils.support.SystemSync; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.stereotype.Component; @@ -55,23 +51,6 @@ import okhttp3.Response; public class ApiLoggerAspect { public static final String HUAHENG_SYSTEM_NAME = "HUAHENG_WMS4"; - - private static IApiLogService apiLogService; - - private static IAddressService addressService; - - @Autowired - private ApplicationConfig applicationConfig; - - @Autowired - public void setApiLogService(IApiLogService apiLogService) { - ApiLoggerAspect.apiLogService = apiLogService; - } - - @Autowired - public void setAddressService(IAddressService addressService) { - ApiLoggerAspect.addressService = addressService; - } // 配置织入点 @Pointcut("@annotation(org.jeecg.utils.support.ApiLogger)") @@ -100,151 +79,10 @@ public class ApiLoggerAspect { return ret; } -// /** 记录WMS调用第三方接口的日志 **/ -// private Object aroundWms2XXX(ProceedingJoinPoint point, ApiLogger apiLogger) { -// Object ret = null; -// ApiLog log = new ApiLog(); -// -// HttpURLConnection connection = null; -// String body = null; -// -// try { -// connection = (HttpURLConnection)point.getArgs()[0]; -// body = (String)point.getArgs()[1]; -// initApiLog(connection, body); -// ret = point.proceed(); -// } catch (Throwable e) { -// setApiLogThrowable(log, e); -// ret = Result.error(e.getMessage()); -// } finally { -// if (ret != null) { -// finishApiLog(log, connection, ret.toString()); -// } -// } -// return ret; -// } - -// /** -// * 记录响应头信息,保存日志到数据库 -// */ -// public static void finishApiLog(ApiLog log, HttpURLConnection connection, String body) { -// try { -// log.setResponseBody(body); -// log.setResponseTime(new Date()); -// Long duration = log.getResponseTime().getTime() - log.getRequestTime().getTime(); -// log.setDuration(duration.intValue()); -// log.setHttpCode(connection.getResponseCode()); -// -// // 响应头 -// Set<String> keyset = connection.getHeaderFields().keySet(); -// ArrayList<String> headerList = new ArrayList<>(); -// Iterator<String> it = keyset.iterator(); -// while (it.hasNext()) { -// String name = it.next(); -// String header = connection.getHeaderField(name); -// if (name == null || "".equals(name)) { -// // 第一行没有name -// // HTTP/1.1 200 OK -// headerList.add(header); -// } else { -// headerList.add(name + ": " + header); -// } -// } -// log.setResponseHeader(org.apache.commons.lang3.StringUtils.join(headerList, "\n")); -// Result json = JSON.parseObject(body, Result.class); -// log.setRetCode(json.getCode()); -// } catch (Exception e) { -// e.printStackTrace(); -// } finally { -// SpringUtils.getBean(ApiLogAspect.class).saveApiLog(log); -// } -// } - -// /** -// * 根据url,从address表中判断调用的去向 -// */ -// public static void parseUrl(ApiLog log, URL url, String warehouseCode) { -// try { -// String[] spList = url.toString().split("/"); -// String apiName = spList[spList.length - 1]; -// String ip = JeecgSystemApplication.getLocalHostExactAddress().getHostAddress(); -// Address address = addressService.getAddressByUrl(url.toString(), warehouseCode); -// log.setApiName(apiName); -// log.setRequestFrom("WMS"); -// log.setIp(ip); -// log.setResponseBy(address.getParam().toUpperCase()); -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } - -// /** -// * 记录WMS调用第三方系统接口的请求信息 -// * 在HttpUtils.body POST方法中直接调用本类static方法 -// **/ -// public static ApiLog initApiLog(String Method, String urlStr, String body, HttpHeaders headers, String warehouseCode) { -// ApiLog log = new ApiLog(); -// try { -// URL url = new URL(urlStr); -// log.setApiMethod(Method); -// log.setUrl(urlStr); -// log.setRequestTime(new Date()); -// parseUrl(log, url, warehouseCode); -// -// // 请求头 -// Set<String> keySet = headers.keySet(); -// ArrayList<String> headerList = new ArrayList<>(); -// Iterator<String> it = keySet.iterator(); -// while (it.hasNext()) { -// String name = it.next(); -// String header = String.valueOf(headers.getContentType()); -// headerList.add(name + ": " + header); -// } -// -// log.setRequestHeader(org.apache.commons.lang3.StringUtils.join(headerList, "\n")); -// log.setRequestBody(body); -// } catch (Exception e) { -// e.printStackTrace(); -// } -// -// return log; -// } - -// /** -// * 记录WMS调用第三方系统接口的请求信息 -// * 在HttpUtils.body POST方法中直接调用本类static方法 -// **/ -// public static ApiLog initApiLog(HttpURLConnection connection, String body) { -// ApiLog log = new ApiLog(); -// try { -// log.setApiMethod(connection.getRequestMethod()); -// log.setUrl(connection.getURL().toString()); -// log.setRequestTime(new Date()); -// parseUrl(log, connection.getURL()); -// -// // 请求头 -// Set<String> keySet = connection.getRequestProperties().keySet(); -// ArrayList<String> headerList = new ArrayList<>(); -// Iterator<String> it = keySet.iterator(); -// while (it.hasNext()) { -// String name = it.next(); -// String header = connection.getRequestProperty(name); -// headerList.add(name + ":" + header); -// } -// -// log.setRequestHeader(org.apache.commons.lang3.StringUtils.join(headerList, "\n")); -// log.setRequestBody(body); -// } catch (Exception e) { -// e.printStackTrace(); -// } -// -// return log; -// } - /** * 记录WMS调用第三方系统接口的请求信息 * 在OKHttpUtils.bodypost方法中直接调用本类static方法 - * @param apiLog + * @param apiLog **/ public static void initApiLog(ApiLog apiLog, Request request, String body) { try { @@ -289,7 +127,7 @@ public class ApiLoggerAspect { } catch (Exception e) { e.printStackTrace(); } - SpringUtils.getBean(ApiLoggerAspect.class).saveApiLog(log); + SpringUtils.getBean(SystemSync.class).saveApiLog(log); } } @@ -298,52 +136,19 @@ public class ApiLoggerAspect { try { String[] spList = url.toString().split("/"); String apiName = spList[spList.length - 1]; - String ip = JeecgSystemApplication.getLocalHostExactAddress().getHostAddress(); apiLog.setApiName(apiName); apiLog.setRequestFrom(HUAHENG_SYSTEM_NAME); - apiLog.setIp(ip); - Address address = addressService.getAddressByUrl(url.toString()); - apiLog.setResponseBy(address.getParam().toUpperCase()); + apiLog.setIp(JeecgSystemApplication.getLocalHostExactAddress().getHostAddress()); + Address address = SpringUtils.getBean(AddressServiceImpl.class).getAddressByUrl(url.toString()); + if (address != null) { + apiLog.setApiName(address.getRemark()); + apiLog.setResponseBy(address.getParam().toUpperCase()); + } } catch (Exception e) { e.printStackTrace(); } } -// /** -// * 记录响应头信息 -// **/ -// public static void finishApiLog(ApiLog log, HttpHeaders headers, String body) { -// try { -// log.setResponseBody(body); -// log.setResponseTime(new Date()); -// Long duration = log.getResponseTime().getTime() - log.getRequestTime().getTime(); -// log.setDuration(duration.intValue()); -// log.setHttpCode(200); -// -// // 响应头 -// Set<String> keyset = headers.keySet(); -// ArrayList<String> headerList = new ArrayList<>(); -// Iterator<String> it = keyset.iterator(); -// while (it.hasNext()) { -// String name = it.next(); -// String header = String.valueOf(headers.getContentType()); -// if (name == null || "".equals(name)) -// // 第一行没有name -// // HTTP/1.1 200 OK -// headerList.add(header); -// else -// headerList.add(name + ": " + header); -// } -// log.setResponseHeader(org.apache.commons.lang3.StringUtils.join(headerList, "\n")); -// Result json = JSON.parseObject(body, Result.class); -// log.setRetCode(json.getCode()); -// } catch (Exception e) { -// e.printStackTrace(); -// } finally { -// SpringUtils.getBean(ApiLogAspect.class).saveApiLog(log); -// } -// } - private ApiLog initApiLog(ApiLogger apiLogger, ProceedingJoinPoint point) { ApiLog log = new ApiLog(); try { @@ -396,7 +201,7 @@ public class ApiLoggerAspect { } catch (Exception e) { e.printStackTrace(); } finally { - saveApiLog(log); + SpringUtils.getBean(SystemSync.class).saveApiLog(log); } } @@ -472,7 +277,6 @@ public class ApiLoggerAspect { Object[] args = point.getArgs(); for (int i = 0; i < m.getParameterNames().length; i++) { String name = m.getParameterNames()[i]; -// Class type = m.getParameterTypes()[i]; if (args[i] instanceof HttpServletRequest) { continue; } @@ -520,15 +324,6 @@ public class ApiLoggerAspect { } } - @Async - public void saveApiLog(ApiLog log) { - try { - apiLogService.saveOrUpdate(log); - } catch (Exception e) { - e.printStackTrace(); - } - } - public static String getIpAddr(HttpServletRequest request) { String ipAddress = request.getHeader("x-forwarded-for"); if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { diff --git a/huaheng-wms-core/src/main/java/org/jeecg/utils/support/SyncConfiguration.java b/huaheng-wms-core/src/main/java/org/jeecg/utils/support/SyncConfiguration.java new file mode 100644 index 0000000..3fd6f82 --- /dev/null +++ b/huaheng-wms-core/src/main/java/org/jeecg/utils/support/SyncConfiguration.java @@ -0,0 +1,38 @@ +package org.jeecg.utils.support; + +import java.util.concurrent.ThreadPoolExecutor; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +@Configuration +@EnableAsync +public class SyncConfiguration { + @Bean(name = "asyncPoolTaskExecutor") + public ThreadPoolTaskExecutor executor() { + ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); + // 核心线程数 + taskExecutor.setCorePoolSize(10); + // 线程池维护线程的最大数量,只有在缓冲队列满了之后才会申请超过核心线程数的线程 + taskExecutor.setMaxPoolSize(100); + // 缓存队列 + taskExecutor.setQueueCapacity(50); + // 许的空闲时间,当超过了核心线程出之外的线程在空闲时间到达之后会被销毁 + taskExecutor.setKeepAliveSeconds(200); + // 异步方法内部线程名称 + taskExecutor.setThreadNamePrefix("async-"); + /** + * 当线程池的任务缓存队列已满并且线程池中的线程数目达到maximumPoolSize,如果还有任务到来就会采取任务拒绝策略 + * 通常有以下四种策略: + * ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。 + * ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。 + * ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程) + * ThreadPoolExecutor.CallerRunsPolicy:重试添加当前的任务,自动重复调用 execute() 方法,直到成功 + */ + taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + taskExecutor.initialize(); + return taskExecutor; + } +} \ No newline at end of file diff --git a/huaheng-wms-core/src/main/java/org/jeecg/utils/support/SystemSync.java b/huaheng-wms-core/src/main/java/org/jeecg/utils/support/SystemSync.java new file mode 100644 index 0000000..73039f4 --- /dev/null +++ b/huaheng-wms-core/src/main/java/org/jeecg/utils/support/SystemSync.java @@ -0,0 +1,65 @@ +package org.jeecg.utils.support; + +import java.math.BigDecimal; +import java.util.List; +import java.util.concurrent.Future; + +import org.jeecg.modules.wms.inventory.inventoryTransaction.entity.InventoryTransaction; +import org.jeecg.modules.wms.inventory.inventoryTransaction.service.IInventoryTransactionService; +import org.jeecg.modules.wms.monitor.apiLog.entity.ApiLog; +import org.jeecg.modules.wms.monitor.apiLog.service.IApiLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.AsyncResult; +import org.springframework.stereotype.Component; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Component +public class SystemSync { + + @Autowired + private IApiLogService apiLogService; + + @Autowired + private IInventoryTransactionService inventoryTransactionService; + + /** + * 保存API调用日志 + * @author TanYibin + * @createDate 2023年5月9日 + * @param apiLog + */ + @Async("asyncPoolTaskExecutor") + public void saveApiLog(ApiLog apiLog) { + try { + apiLogService.saveOrUpdate(apiLog); + } catch (Exception e) { + log.error("saveApiLog 执行异常,apiLog:{}", JSON.toJSONString(apiLog), e); + } + } + + /** + * 异步库存信息查询 + * @author TanYibin + * @createDate 2023年5月9日 + * @param startTime + * @param endTime + * @param type + * @return + */ + @Async("asyncPoolTaskExecutor") + public Future<BigDecimal> asyncCalculateInventory(String startTime, String endTime, Integer type) { + LambdaQueryWrapper<InventoryTransaction> inventoryTransactionLambdaQueryWrapper = Wrappers.lambdaQuery(); + inventoryTransactionLambdaQueryWrapper.select(InventoryTransaction::getCreateTime, InventoryTransaction::getQty, InventoryTransaction::getType) + .ge(InventoryTransaction::getCreateTime, startTime).lt(InventoryTransaction::getCreateTime, endTime).eq(InventoryTransaction::getType, type); + List<InventoryTransaction> inventoryTransactions = inventoryTransactionService.list(inventoryTransactionLambdaQueryWrapper); + BigDecimal shipmentResult = inventoryTransactions.stream().map(InventoryTransaction::getQty).reduce(BigDecimal.ZERO, BigDecimal::add); + return new AsyncResult<>(shipmentResult); + } +} diff --git a/huaheng-wms-core/src/main/resources/application.yml b/huaheng-wms-core/src/main/resources/application.yml index 9823b9d..fdb28fc 100644 --- a/huaheng-wms-core/src/main/resources/application.yml +++ b/huaheng-wms-core/src/main/resources/application.yml @@ -2,7 +2,7 @@ spring: application: name: huaheng-wms-core profiles: - active: test + active: dev huaheng: system: