Commit c253603245c4c0f9f735a8ebee8975b2dca8b7c7

Authored by 陈翱
2 parents 7a4f377b d8ad8df5

Merge remote-tracking branch 'origin/develop' into develop

Showing 34 changed files with 449 additions and 149 deletions
ant-design-vue-jeecg/src/views/system/config/ContainerList.vue
... ... @@ -20,8 +20,7 @@
20 20 show-search
21 21 placeholder="请选择容器类型"
22 22 option-filter-prop="children"
23   - v-model="queryParam.containerTypeCode"
24   - >
  23 + v-model="queryParam.containerTypeCode">
25 24 <a-select-option v-for="item in containerTypeList" :key="item.name" :value="item.code"
26 25 >{{ item.name }}
27 26 </a-select-option>
... ... @@ -252,6 +251,13 @@ export default {
252 251 scopedSlots: {customRender: 'fillStatus_dictText'}
253 252 },
254 253 {
  254 + title: '库区',
  255 + align: "center",
  256 + dataIndex: 'zoneCode',
  257 + key: 'zoneCode',
  258 + scopedSlots: {customRender: 'zoneCode'}
  259 + },
  260 + {
255 261 title: '创建人',
256 262 align: 'center',
257 263 dataIndex: 'createBy'
... ...
ant-design-vue-jeecg/src/views/system/config/LocationHighList.vue
... ... @@ -5,6 +5,19 @@
5 5 <a-form layout="inline" @keyup.enter.native="searchQuery">
6 6 <a-row :gutter="24">
7 7 <a-col :xl="6" :lg="7" :md="8" :sm="24">
  8 + <a-form-item label="库区">
  9 + <a-select
  10 + show-search
  11 + placeholder="请选择库区"
  12 + option-filter-prop="children"
  13 + v-model="queryParam.zoneCode">
  14 + <a-select-option v-for="item in zoneList" :key="item.name" :value="item.code">
  15 + {{ item.name }}
  16 + </a-select-option>
  17 + </a-select>
  18 + </a-form-item>
  19 + </a-col>
  20 + <a-col :xl="6" :lg="7" :md="8" :sm="24">
8 21 <a-form-item label="编码">
9 22 <a-input placeholder="请输入编码" v-model="queryParam.code"></a-input>
10 23 </a-form-item>
... ... @@ -68,6 +81,13 @@
68 81 class="j-table-force-nowrap"
69 82 @change="handleTableChange">
70 83  
  84 +
  85 + <span slot="zoneCode" slot-scope="zoneCode">
  86 + <a-tag :key="zoneCode" color=blue>
  87 + {{ solutionZoneCode(zoneCode) }}
  88 + </a-tag>
  89 + </span>
  90 +
71 91 <span slot="locationTypeCode" slot-scope="locationTypeCode">
72 92 <a-tag :key="locationTypeCode" color=pink>
73 93 {{ solutionLocationType(locationTypeCode) }}
... ... @@ -125,7 +145,7 @@ import &#39;@/assets/less/TableExpand.less&#39;
125 145 import {mixinDevice} from '@/utils/mixin'
126 146 import {JeecgListMixin} from '@/mixins/JeecgListMixin'
127 147 import LocationHighModal from './modules/LocationHighModal'
128   -import {getLocationTypeList} from '@/api/api'
  148 +import {getLocationTypeList, getZoneList} from '@/api/api'
129 149  
130 150 export default {
131 151 name: 'LocationHighList',
... ... @@ -167,6 +187,13 @@ export default {
167 187 scopedSlots: {customRender: 'locationTypeCode'}
168 188 },
169 189 {
  190 + title: '库区',
  191 + align: "center",
  192 + dataIndex: 'zoneCode',
  193 + key: 'zoneCode',
  194 + scopedSlots: {customRender: 'zoneCode'}
  195 + },
  196 + {
170 197 title: '高低位',
171 198 align: "center",
172 199 dataIndex: 'high_dictText'
... ... @@ -246,7 +273,23 @@ export default {
246 273 if (res.success) {
247 274 this.locationTypeList = res.result
248 275 }
  276 + }),
  277 + getZoneList().then((res) => {
  278 + if (res.success) {
  279 + this.zoneList = res.result
  280 + }
  281 + });
  282 + },
  283 + solutionZoneCode(value) {
  284 + var actions = []
  285 + console.log("solutionZoneCode " + this.zoneList);
  286 + Object.keys(this.zoneList).some((key) => {
  287 + if (this.zoneList[key].code == ('' + value)) {
  288 + actions.push(this.zoneList[key].name)
  289 + return true
  290 + }
249 291 })
  292 + return actions.join('')
250 293 },
251 294 solutionLocationType(value) {
252 295 var actions = []
... ...
ant-design-vue-jeecg/src/views/system/config/ParameterConfigurationList.vue
... ... @@ -14,6 +14,20 @@
14 14 <a-input placeholder="请输入参数键名" v-model="queryParam.code"></a-input>
15 15 </a-form-item>
16 16 </a-col>
  17 + <a-col :xl="6" :lg="7" :md="8" :sm="24">
  18 + <a-form-item label="库区">
  19 + <a-select
  20 + show-search
  21 + placeholder="请选择库区"
  22 + option-filter-prop="children"
  23 + v-model="queryParam.zoneCode">
  24 + <a-select-option v-for="item in zoneList" :key="item.name" :value="item.code">{{
  25 + item.name
  26 + }}
  27 + </a-select-option>
  28 + </a-select>
  29 + </a-form-item>
  30 + </a-col>
17 31 <template v-if="toggleSearchStatus">
18 32 <a-col :xl="6" :lg="7" :md="8" :sm="24">
19 33 <a-form-item label="参数键值">
... ... @@ -79,6 +93,12 @@
79 93 class="j-table-force-nowrap"
80 94 @change="handleTableChange">
81 95  
  96 + <span slot="zoneCode" slot-scope="zoneCode">
  97 + <a-tag :key="zoneCode" color=blue>
  98 + {{ solutionZoneCode(zoneCode) }}
  99 + </a-tag>
  100 + </span>
  101 +
82 102 <template slot="htmlSlot" slot-scope="text">
83 103 <div v-html="text"></div>
84 104 </template>
... ... @@ -132,6 +152,7 @@ import &#39;@/assets/less/TableExpand.less&#39;
132 152 import {mixinDevice} from '@/utils/mixin'
133 153 import {JeecgListMixin} from '@/mixins/JeecgListMixin'
134 154 import ParameterConfigurationModal from './modules/ParameterConfigurationModal'
  155 +import {getZoneList} from "@api/api";
135 156  
136 157 export default {
137 158 name: 'ParameterConfigurationList',
... ... @@ -142,6 +163,7 @@ export default {
142 163 data() {
143 164 return {
144 165 description: '参数配置管理页面',
  166 + zoneList: [],
145 167 // 表头
146 168 columns: [
147 169 {
... ... @@ -155,6 +177,13 @@ export default {
155 177 }
156 178 },
157 179 {
  180 + title: '库区',
  181 + align: "center",
  182 + dataIndex: 'zoneCode',
  183 + key: 'zoneCode',
  184 + scopedSlots: {customRender: 'zoneCode'}
  185 + },
  186 + {
158 187 title: '参数名称',
159 188 align: "center",
160 189 dataIndex: 'name'
... ... @@ -217,6 +246,7 @@ export default {
217 246 },
218 247 created() {
219 248 this.getSuperFieldList();
  249 + this.loadFrom();
220 250 },
221 251 computed: {
222 252 importExcelUrl: function () {
... ... @@ -226,6 +256,24 @@ export default {
226 256 methods: {
227 257 initDictConfig() {
228 258 },
  259 + loadFrom() {
  260 + getZoneList().then((res) => {
  261 + if (res.success) {
  262 + this.zoneList = res.result
  263 + }
  264 + });
  265 + },
  266 + solutionZoneCode(value) {
  267 + var actions = []
  268 + console.log("solutionZoneCode " + this.zoneList);
  269 + Object.keys(this.zoneList).some((key) => {
  270 + if (this.zoneList[key].code == ('' + value)) {
  271 + actions.push(this.zoneList[key].name)
  272 + return true
  273 + }
  274 + })
  275 + return actions.join('')
  276 + },
229 277 getSuperFieldList() {
230 278 let fieldList = [];
231 279 fieldList.push({type: 'string', value: 'name', text: '参数名称', dictCode: ''})
... ...
ant-design-vue-jeecg/src/views/system/config/modules/ContainerForm.vue
... ... @@ -17,6 +17,20 @@
17 17 </a-form-model-item>
18 18 </a-col>
19 19 <a-col :span="24">
  20 + <a-form-model-item label="库区" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="zoneCode">
  21 + <a-select
  22 + show-search
  23 + placeholder="请选择库区"
  24 + option-filter-prop="children"
  25 + v-model="model.zoneCode">
  26 + <a-select-option v-for="item in zoneList" :key="item.name" :value="item.code">{{
  27 + item.name
  28 + }}
  29 + </a-select-option>
  30 + </a-select>
  31 + </a-form-model-item>
  32 + </a-col>
  33 + <a-col :span="24">
20 34 <a-form-model-item label="数量" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="userdef1">
21 35 <a-input v-model="model.userdef1" placeholder="请输入数量"></a-input>
22 36 </a-form-model-item>
... ...
ant-design-vue-jeecg/src/views/system/config/modules/ContainerModal.vue
... ... @@ -15,6 +15,7 @@
15 15 <script>
16 16  
17 17 import ContainerForm from './ContainerForm'
  18 +import {getZoneList} from "@api/api";
18 19  
19 20 export default {
20 21 name: 'ContainerModal',
... ...
ant-design-vue-jeecg/src/views/system/config/modules/LocationHighForm.vue
... ... @@ -19,6 +19,20 @@
19 19 </a-form-model-item>
20 20 </a-col>
21 21 <a-col :span="24">
  22 + <a-form-model-item label="库区" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="zoneCode">
  23 + <a-select
  24 + show-search
  25 + placeholder="请选择库区"
  26 + option-filter-prop="children"
  27 + v-model="model.zoneCode">
  28 + <a-select-option v-for="item in zoneList" :key="item.name" :value="item.code">{{
  29 + item.name
  30 + }}
  31 + </a-select-option>
  32 + </a-select>
  33 + </a-form-model-item>
  34 + </a-col>
  35 + <a-col :span="24">
22 36 <a-form-model-item label="高低位" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="high">
23 37 <j-dict-select-tag type="list" v-model="model.high" dictCode="high_status" placeholder="请选择高低位"/>
24 38 </a-form-model-item>
... ... @@ -38,6 +52,7 @@
38 52  
39 53 import {httpAction, getAction} from '@/api/manage'
40 54 import {validateDuplicateValue} from '@/utils/util'
  55 +import {getContainerTypeList, getZoneList} from "@api/api";
41 56  
42 57 export default {
43 58 name: 'LocationHighForm',
... ... @@ -53,6 +68,7 @@ export default {
53 68 data() {
54 69 return {
55 70 model: {},
  71 + zoneList: [],
56 72 labelCol: {
57 73 xs: {span: 24},
58 74 sm: {span: 5},
... ... @@ -91,6 +107,7 @@ export default {
91 107 created() {
92 108 //备份model原始值
93 109 this.modelDefault = JSON.parse(JSON.stringify(this.model));
  110 + this.loadFrom();
94 111 },
95 112 methods: {
96 113 add() {
... ... @@ -100,6 +117,13 @@ export default {
100 117 this.model = Object.assign({}, record);
101 118 this.visible = true;
102 119 },
  120 + loadFrom() {
  121 + getZoneList().then((res) => {
  122 + if (res.success) {
  123 + this.zoneList = res.result
  124 + }
  125 + });
  126 + },
103 127 submitForm() {
104 128 const that = this;
105 129 // 触发表单验证
... ...
ant-design-vue-jeecg/src/views/system/config/modules/ParameterConfigurationForm.vue
... ... @@ -14,6 +14,20 @@
14 14 </a-form-model-item>
15 15 </a-col>
16 16 <a-col :span="24">
  17 + <a-form-model-item label="库区" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="zoneCode">
  18 + <a-select
  19 + show-search
  20 + placeholder="请选择库区"
  21 + option-filter-prop="children"
  22 + v-model="model.zoneCode">
  23 + <a-select-option v-for="item in zoneList" :key="item.name" :value="item.code">{{
  24 + item.name
  25 + }}
  26 + </a-select-option>
  27 + </a-select>
  28 + </a-form-model-item>
  29 + </a-col>
  30 + <a-col :span="24">
17 31 <a-form-model-item label="参数键值" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="value">
18 32 <a-input v-model="model.value" placeholder="请输入参数键值"></a-input>
19 33 </a-form-model-item>
... ... @@ -33,6 +47,7 @@
33 47  
34 48 import {httpAction, getAction} from '@/api/manage'
35 49 import {validateDuplicateValue} from '@/utils/util'
  50 +import {getZoneList} from "@api/api";
36 51  
37 52 export default {
38 53 name: 'ParameterConfigurationForm',
... ... @@ -48,6 +63,7 @@ export default {
48 63 data() {
49 64 return {
50 65 model: {},
  66 + zoneList: [],
51 67 labelCol: {
52 68 xs: {span: 24},
53 69 sm: {span: 5},
... ... @@ -73,6 +89,7 @@ export default {
73 89 created() {
74 90 //备份model原始值
75 91 this.modelDefault = JSON.parse(JSON.stringify(this.model));
  92 + this.loadFrom();
76 93 },
77 94 methods: {
78 95 add() {
... ... @@ -82,6 +99,13 @@ export default {
82 99 this.model = Object.assign({}, record);
83 100 this.visible = true;
84 101 },
  102 + loadFrom() {
  103 + getZoneList().then((res) => {
  104 + if (res.success) {
  105 + this.zoneList = res.result
  106 + }
  107 + });
  108 + },
85 109 submitForm() {
86 110 const that = this;
87 111 // 触发表单验证
... ...
ant-design-vue-jeecg/src/views/system/shipment/ShipmentDetailList.vue
... ... @@ -157,11 +157,16 @@ export default {
157 157 dataIndex: 'qty'
158 158 },
159 159 {
160   - title: '已出数量',
  160 + title: '配盘数量',
161 161 align: "center",
162 162 dataIndex: 'taskQty'
163 163 },
164 164 {
  165 + title: '已出数量',
  166 + align: "center",
  167 + dataIndex: 'shipmentQty'
  168 + },
  169 + {
165 170 title: '可出数量',
166 171 align: "center",
167 172 dataIndex: 'availableQty'
... ...
ant-design-vue-jeecg/src/views/system/shipment/ShipmentHeaderList.vue
... ... @@ -5,6 +5,20 @@
5 5 <a-form layout="inline" @keyup.enter.native="searchQuery">
6 6 <a-row :gutter="24">
7 7 <a-col :xl="6" :lg="7" :md="8" :sm="24">
  8 + <a-form-item label="库区">
  9 + <a-select
  10 + show-search
  11 + placeholder="请选择库区"
  12 + option-filter-prop="children"
  13 + v-model="queryParam.zoneCode">
  14 + <a-select-option v-for="item in zoneList" :key="item.name" :value="item.code">{{
  15 + item.name
  16 + }}
  17 + </a-select-option>
  18 + </a-select>
  19 + </a-form-item>
  20 + </a-col>
  21 + <a-col :xl="6" :lg="7" :md="8" :sm="24">
8 22 <a-form-item label="出库单编码">
9 23 <a-input placeholder="请输入出库单编码" v-model="queryParam.code"></a-input>
10 24 </a-form-item>
... ... @@ -158,6 +172,12 @@
158 172 </a-tag>
159 173 </span>
160 174  
  175 + <span slot="zoneCode" slot-scope="zoneCode">
  176 + <a-tag :key="zoneCode" color=blue>
  177 + {{ solutionZoneCode(zoneCode) }}
  178 + </a-tag>
  179 + </span>
  180 +
161 181 <span slot="type" slot-scope="type">
162 182 <a-tag :key="type" color=pink>
163 183 {{ solutionShipmentType(type) }}
... ... @@ -197,8 +217,8 @@
197 217 </a-popconfirm>
198 218 <a v-if="((record.firstStatus >= 15 && record.firstStatus != '20' && record.lastStatus <= 200))
199 219 || (flowOff == '0' && record.lastStatus <= 200)" @click="autoShipmentCombine(record)" v-has="'shipmentHeader:autoShipmentCombine'"><a-button type="primary">自动配盘</a-button><a-divider type="vertical"/></a>
200   - <a v-if="((record.firstStatus >= 15 && record.firstStatus != '20' && record.lastStatus < 800))
201   - || (flowOff == '0' && record.lastStatus < 800)" @click="openAutoShipmentCombine(record)" v-has="'shipmentHeader:autoShipment'"><a-button type="primary">自动出库</a-button></a>
  220 + <a v-if="((record.firstStatus >= 15 && record.firstStatus != '20' && record.lastStatus <= 200))
  221 + || (flowOff == '0' && record.lastStatus <= 200)" @click="openAutoShipmentCombine(record)" v-has="'shipmentHeader:autoShipment'"><a-button type="primary">自动出库</a-button></a>
202 222 <a-dropdown v-if="(record.firstStatus > 0 && record.firstStatus <= 20 && flowOff=='1') || (record.firstStatus == 0 && record.lastStatus == 0 && record.referCode == null)">
203 223 <a class="ant-dropdown-link"><a-divider type="vertical"/>更多 <a-icon type="down"/></a>
204 224 <a-menu slot="overlay">
... ... @@ -240,7 +260,7 @@ import {getAction} from &#39;@/api/manage&#39;
240 260 import ShipmentDetailList from './ShipmentDetailList'
241 261 import {initDictOptions, filterMultiDictText} from '@/components/dict/JDictSelectUtil'
242 262 import '@/assets/less/TableExpand.less'
243   -import {getCompanyList, backErpShipment} from '@/api/api'
  263 +import {getCompanyList, backErpShipment, getZoneList} from '@/api/api'
244 264 import {getShipmentTypeList} from '@/api/api'
245 265 import {getCustomerList} from '@/api/api'
246 266 import {autoCombination} from '@/api/api'
... ... @@ -266,6 +286,7 @@ export default {
266 286 selectIndex: null,
267 287 description: '出库单管理页面',
268 288 companyList: [],
  289 + zoneList: [],
269 290 shipmentTypeList: [],
270 291 customerList: [],
271 292 username: '',
... ... @@ -285,6 +306,13 @@ export default {
285 306 dataIndex: 'code'
286 307 },
287 308 {
  309 + title: '库区',
  310 + align: "center",
  311 + dataIndex: 'zoneCode',
  312 + key: 'zoneCode',
  313 + scopedSlots: {customRender: 'zoneCode'}
  314 + },
  315 + {
288 316 title: '货主',
289 317 align: "center",
290 318 dataIndex: 'companyCode',
... ... @@ -528,6 +556,11 @@ export default {
528 556 this.customerList = res.result
529 557 }
530 558 });
  559 + getZoneList().then((res) => {
  560 + if (res.success) {
  561 + this.zoneList = res.result
  562 + }
  563 + });
531 564 },
532 565 batchPrint() {
533 566 if (this.selectedRowKeys.length <= 0) {
... ... @@ -549,6 +582,17 @@ export default {
549 582 })
550 583 return actions.join('')
551 584 },
  585 + solutionZoneCode(value) {
  586 + var actions = []
  587 + console.log("solutionZoneCode " + this.zoneList);
  588 + Object.keys(this.zoneList).some((key) => {
  589 + if (this.zoneList[key].code == ('' + value)) {
  590 + actions.push(this.zoneList[key].name)
  591 + return true
  592 + }
  593 + })
  594 + return actions.join('')
  595 + },
552 596 solutionShipmentType(value) {
553 597 var actions = []
554 598 Object.keys(this.shipmentTypeList).some((key) => {
... ... @@ -624,6 +668,7 @@ export default {
624 668 let fieldList = [];
625 669 fieldList.push({type: 'string', value: 'code', text: '出库单编码', dictCode: ''})
626 670 fieldList.push({type: 'string', value: 'companyCode', text: '货主', dictCode: ''})
  671 + fieldList.push({type: 'string', value: 'zoneCode', text: '库区', dictCode: ''})
627 672 fieldList.push({type: 'string', value: 'type', text: '出库单类型', dictCode: ''})
628 673 fieldList.push({type: 'int', value: 'firstStatus', text: '头状态', dictCode: 'shipment_status'})
629 674 fieldList.push({type: 'int', value: 'lastStatus', text: '尾状态', dictCode: 'shipment_status'})
... ...
ant-design-vue-jeecg/src/views/system/shipment/modules/ShipmentHeaderModal.vue
... ... @@ -42,6 +42,21 @@
42 42 </a-col>
43 43  
44 44 <a-col :span="24">
  45 + <a-form-model-item label="库区" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="zoneCode">
  46 + <a-select
  47 + show-search
  48 + placeholder="请选择库区"
  49 + option-filter-prop="children"
  50 + v-model="model.zoneCode">
  51 + <a-select-option v-for="item in zoneList" :key="item.name" :value="item.code">{{
  52 + item.name
  53 + }}
  54 + </a-select-option>
  55 + </a-select>
  56 + </a-form-model-item>
  57 + </a-col>
  58 +
  59 + <a-col :span="24">
45 60 <a-form-model-item label="客户编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="customerCode">
46 61 <a-select
47 62 show-search
... ... @@ -71,7 +86,7 @@
71 86  
72 87 import {httpAction} from '@/api/manage'
73 88 import {validateDuplicateValue} from '@/utils/util'
74   -import {getCompanyList} from '@/api/api'
  89 +import {getCompanyList, getZoneList} from '@/api/api'
75 90 import {getShipmentTypeList} from '@/api/api'
76 91 import {getCustomerList} from '@/api/api'
77 92  
... ... @@ -83,6 +98,7 @@ export default {
83 98 companyList: [],
84 99 shipmentTypeList: [],
85 100 customerList: [],
  101 + zoneList: [],
86 102 title: "操作",
87 103 width: 800,
88 104 visible: false,
... ... @@ -178,6 +194,11 @@ export default {
178 194 this.customerList = res.result
179 195 }
180 196 });
  197 + getZoneList().then((res) => {
  198 + if (res.success) {
  199 + this.zoneList = res.result
  200 + }
  201 + });
181 202 },
182 203  
183 204 }
... ...
huaheng-wms-core/pom.xml
... ... @@ -209,8 +209,8 @@
209 209 <plugin>
210 210 <groupId>org.springframework.boot</groupId>
211 211 <artifactId>spring-boot-maven-plugin</artifactId>
212   - <!-- 启动jar包命令:包含引入lib包,开启远程调试端口7080,启动环境选择
213   - java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=7080,suspend=n -jar -Dloader.path=./lib -Dspring.profiles.active=prod huaheng-wms-core.jar -->
  212 + <!-- 启动jar包命令:包含引入lib包,开启远程调试端口7080,启动环境选择 java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=7080,suspend=n -jar -Dloader.path=./lib
  213 + -Dspring.profiles.active=prod huaheng-wms-core.jar -->
214 214 <configuration>
215 215 <mainClass>org.jeecg.JeecgSystemApplication</mainClass>
216 216 <layout>ZIP</layout>
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mobile/service/impl/MobileService.java
... ... @@ -74,7 +74,7 @@ public class MobileService implements IMobileService {
74 74  
75 75 String fromLocationCode = container.getLocationCode();
76 76 String toLocationCode = QuantityConstant.EMPTY_STRING;
77   - String value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_TASK_LOCATION);
  77 + String value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_TASK_LOCATION, container.getZoneCode());
78 78 int taskLocationRule = Integer.parseInt(value);
79 79 if (taskLocationRule == QuantityConstant.RULE_TASK_SET_LOCATION) {
80 80 toLocationCode = fromLocationCode;
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/LocationAllocationServiceImpl.java
... ... @@ -241,7 +241,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService
241 241 if (StringUtils.isEmpty(roadWays)) {
242 242 return roadWay;
243 243 }
244   - roadWay = getRoadWayByMaxFreeLocation(roadWays, warehouseCode);
  244 + roadWay = locationAllocationService.getRoadWayByMaxFreeLocation(roadWays, warehouseCode);
245 245 return roadWay;
246 246 }
247 247  
... ... @@ -278,7 +278,12 @@ public class LocationAllocationServiceImpl implements LocationAllocationService
278 278 @Override
279 279 @Transactional(rollbackFor = Exception.class)
280 280 public List<Integer> removeRoadWaysByPreLocations(List<Integer> roadWays, String warehouseCode) {
  281 + String value = parameterConfigurationService.getValueByCode(QuantityConstant.MAX_ROADWAY_RECEIPT);
281 282 // 同巷道分配的库位大于等于2时,这个巷道就不能再分了
  283 + int maxRoadReceipt = 2;
  284 + if (StringUtils.isNotEmpty(value)) {
  285 + maxRoadReceipt = Integer.parseInt(value);
  286 + }
282 287 LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
283 288 taskHeaderLambdaQueryWrapper.lt(TaskHeader::getStatus, QuantityConstant.TASK_STATUS_COMPLETED).ne(TaskHeader::getToLocationCode,
284 289 QuantityConstant.EMPTY_STRING);
... ... @@ -288,7 +293,8 @@ public class LocationAllocationServiceImpl implements LocationAllocationService
288 293 List<Integer> removeRoadWayList = new ArrayList<>();
289 294 for (Integer roadWay : roadWays) {
290 295 int i = Collections.frequency(roadWayList, roadWay);
291   - if (i >= 2) {
  296 + // 同巷道分配的库位大于等于2时,这个巷道就不能再分了
  297 + if (i >= maxRoadReceipt) {
292 298 removeRoadWayList.add(roadWay);
293 299 }
294 300 }
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/WcsServiceImpl.java
... ... @@ -109,8 +109,7 @@ public class WcsServiceImpl implements WcsService {
109 109 @Transactional(rollbackFor = Exception.class)
110 110 @OperationLog(bizId = "''", bizType = "'入库单追踪'", tag = "'详情分配库位'", extra = "#extraJsonString",
111 111 msg = "'任务ID:' + #warecellDomain.getTaskNo() + ',库位编码:' + #locationCode", recordReturnValue = true)
112   - @OperationLog(bizId = "#taskHeader == null ? '' : #taskHeader.getId()", bizType = "'任务追踪'", tag = "'分配库位'",
113   - msg = "'任务类型:' + #taskHeader.getTaskType() + ',起始库位:' + #taskHeader.getFromLocationCode() + ',目标库位:' + #taskHeader.getToLocationCode() + ',容器编码:' + #taskHeader.getContainerCode()",
  112 + @OperationLog(bizId = "#taskHeader == null ? '' : #taskHeader.getId()", bizType = "'任务追踪'", tag = "'分配库位'", msg = "'目标库位:' + #taskHeader.getToLocationCode()",
114 113 recordReturnValue = true)
115 114 public Result warecellAllocation(WarecellDomain warecellDomain) {
116 115 log.info("开始分配库位");
... ... @@ -159,7 +158,7 @@ public class WcsServiceImpl implements WcsService {
159 158 if (containerType == null) {
160 159 return Result.error("分配库位时,托盘类型为空,托盘类型值为" + containerTypeCode);
161 160 }
162   - String locationTypeCodes = containerType.getLocationType();
  161 + List<String> locationTypeCodes = containerType.getLocationTypes();
163 162 // 查询满足条件的库位类型
164 163 LambdaQueryWrapper<LocationType> locationTypeLambdaQueryWrapper = Wrappers.lambdaQuery();
165 164 locationTypeLambdaQueryWrapper.in(LocationType::getCode, locationTypeCodes).eq(LocationType::getWarehouseCode, warehouseCode);
... ... @@ -170,13 +169,14 @@ public class WcsServiceImpl implements WcsService {
170 169 int highHeight = Float.valueOf(height).intValue();
171 170 List<String> locationTypeCodeList = locationTypeList.stream().map(t -> t.getCode()).collect(Collectors.toList());
172 171 LambdaQueryWrapper<LocationHigh> locationHighLambdaQueryWrapper = Wrappers.lambdaQuery();
173   - locationHighLambdaQueryWrapper.eq(LocationHigh::getHighLevel, highHeight).in(LocationHigh::getLocationTypeCode, locationTypeCodeList);
  172 + locationHighLambdaQueryWrapper.eq(LocationHigh::getHighLevel, highHeight).in(LocationHigh::getLocationTypeCode, locationTypeCodeList)
  173 + .eq(LocationHigh::getZoneCode, zoneCode);
174 174 LocationHigh locationHigh = locationHighService.getOne(locationHighLambdaQueryWrapper);
175 175 if (locationHigh == null) {
176 176 return Result.error("分配库位时,高度不匹配,WCS给的高度值" + highHeight + "不在WMS系统配置范围内");
177 177 }
178 178 int high = locationHigh.getHigh();
179   - String value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_ALLOCATION);
  179 + String value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_ALLOCATION, zoneCode);
180 180 if (StringUtils.isEmpty(value)) {
181 181 return Result.error("分配库位时, 未绑定定位规则");
182 182 }
... ... @@ -289,7 +289,7 @@ public class WcsServiceImpl implements WcsService {
289 289 @Override
290 290 @Transactional(rollbackFor = Exception.class)
291 291 @OperationLog(bizId = "#taskHeader == null ? '' : #taskHeader.getId()", bizType = "'任务追踪'", tag = "'任务下发'", extra = "''",
292   - msg = "'任务类型:' + #taskHeader.getTaskType() + ',起始库位:' + #taskHeader.getFromLocationCode() + ',目标库位:' + #taskHeader.getToLocationCode() + ',容器编码:' + #taskHeader.getContainerCode()",
  292 + msg = "'任务类型:' + #taskHeader.getTaskType() + ',起始库位:' + #taskHeader.getFromLocationCode() + ',容器编码:' + #taskHeader.getContainerCode()",
293 293 recordReturnValue = true)
294 294 public Result wcsTaskAssign(TaskHeader taskHeader) {
295 295 if (taskHeader == null) {
... ... @@ -425,13 +425,13 @@ public class WcsServiceImpl implements WcsService {
425 425 throw new JeecgBootException("下发任务时,容器没有找到");
426 426 }
427 427  
428   - String value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_CONNECT_WCS);
  428 + String value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_CONNECT_WCS, container.getZoneCode());
429 429 if (StringUtils.isEmpty(value)) {
430 430 throw new JeecgBootException("下发任务时,没有找到连接WCS的数据配置");
431 431 }
432 432 int connectWCS = Integer.parseInt(value);
433 433 if (connectWCS == QuantityConstant.RULE_WCS_CONNECT) {
434   - String url = addressService.getUrlByParam(QuantityConstant.ADDRESS_WCS_TASK_ASSIGN);
  434 + String url = addressService.getUrlByParam(QuantityConstant.ADDRESS_WCS_TASK_ASSIGN, warehouseCode, container.getZoneCode());
435 435 wcsTask = switchTaskTypeToWcs(wcsTask);
436 436 String jsonParam = JSON.toJSONString(wcsTask);
437 437 System.out.println(jsonParam);
... ... @@ -702,8 +702,7 @@ public class WcsServiceImpl implements WcsService {
702 702 @Override
703 703 @Transactional(rollbackFor = Exception.class)
704 704 @OperationLog(bizId = "#taskHeader == null ? '' : #taskHeader.getId()", bizType = "'任务追踪'", tag = "'到达站台'", extra = "''",
705   - msg = "'任务类型:' + #taskHeader.getTaskType() + ',起始库位:' + #taskHeader.getFromLocationCode() + ',目标库位:' + #taskHeader.getToLocationCode() + ',容器编码:' + #taskHeader.getContainerCode() + ',目标出入口:' + #taskHeader.getToPortCode()",
706   - recordReturnValue = true)
  705 + msg = "'目标出入口:' + #taskHeader.getToPortCode()", recordReturnValue = true)
707 706 public Result arrivedNotice(String taskNo, String port) {
708 707 TaskHeader taskHeader = taskHeaderService.getById(taskNo);
709 708 if (taskHeader == null) {
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/address/service/impl/AddressServiceImpl.java
... ... @@ -36,7 +36,7 @@ public class AddressServiceImpl extends ServiceImpl&lt;AddressMapper, Address&gt; impl
36 36 .eq(!StringUtils.isEmpty(zoneCode), Address::getZoneCode, zoneCode);
37 37 Address address = getOne(addressLambdaQueryWrapper);
38 38 if (address == null) {
39   - return null;
  39 + return getUrlByParam(param);
40 40 }
41 41 return address.getUrl();
42 42 }
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/service/impl/ContainerServiceImpl.java
... ... @@ -53,6 +53,7 @@ public class ContainerServiceImpl extends ServiceImpl&lt;ContainerMapper, Container
53 53 public Result<?> batchAddContainers(Container container, int number) {
54 54 String containerTypeCode = container.getContainerTypeCode();
55 55 String warehouseCode = container.getWarehouseCode();
  56 + String zoneCode = container.getZoneCode();
56 57 int startNumber = getStartNumber(containerTypeCode, container.getWarehouseCode());
57 58 List<Container> containerList = new ArrayList<>();
58 59 for (int i = 0; i < number; i++) {
... ... @@ -61,6 +62,7 @@ public class ContainerServiceImpl extends ServiceImpl&lt;ContainerMapper, Container
61 62 addcontainer.setContainerTypeCode(containerTypeCode);
62 63 String code = String.format("%s%05d", containerTypeCode, startNumber);
63 64 addcontainer.setCode(code);
  65 + addcontainer.setZoneCode(zoneCode);
64 66 addcontainer.setStatus(QuantityConstant.STATUS_CONTAINER_EMPTY);
65 67 addcontainer.setFillStatus(QuantityConstant.STATUS_CONTAINER_FILL_EMPTY);
66 68 addcontainer.setWarehouseCode(warehouseCode);
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/locationHigh/entity/LocationHigh.java
1 1 package org.jeecg.modules.wms.config.locationHigh.entity;
2 2  
3 3 import java.io.Serializable;
4   -import java.io.UnsupportedEncodingException;
5 4 import java.util.Date;
6   -import java.math.BigDecimal;
  5 +
  6 +import org.jeecg.common.aspect.annotation.Dict;
  7 +import org.jeecgframework.poi.excel.annotation.Excel;
  8 +
7 9 import com.baomidou.mybatisplus.annotation.IdType;
8 10 import com.baomidou.mybatisplus.annotation.TableId;
9 11 import com.baomidou.mybatisplus.annotation.TableName;
10   -import lombok.Data;
11   -import com.fasterxml.jackson.annotation.JsonFormat;
12   -import org.springframework.format.annotation.DateTimeFormat;
13   -import org.jeecgframework.poi.excel.annotation.Excel;
14   -import org.jeecg.common.aspect.annotation.Dict;
  12 +
15 13 import io.swagger.annotations.ApiModel;
16 14 import io.swagger.annotations.ApiModelProperty;
  15 +import lombok.Data;
17 16 import lombok.EqualsAndHashCode;
18 17 import lombok.experimental.Accessors;
19 18  
... ... @@ -60,6 +59,9 @@ public class LocationHigh implements Serializable {
60 59 @ApiModelProperty(value = "高低位")
61 60 @Dict(dicCode = "high_status")
62 61 private Integer high;
  62 + @Excel(name = "库区编码", width = 15)
  63 + @ApiModelProperty(value = "库区编码")
  64 + private String zoneCode;
63 65 /** 备用字段 */
64 66 @Excel(name = "备用字段", width = 15)
65 67 @ApiModelProperty(value = "备用字段")
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/materialWarning/entity/MaterialLevelAlarm.java
... ... @@ -48,17 +48,16 @@ public class MaterialLevelAlarm extends MaterialWarning {
48 48  
49 49 @Override
50 50 public String toString() {
51   - String str = getMaterialName() + " " + getMaterialCode() + " 库存数=" + qtySum + " ";
  51 + String str = "<ul>";
52 52 if (inLower) {
53   - str = str + " < " + getLower();
  53 + str = str + "<li><b>" + getMaterialName() + "</b> &nbsp;&nbsp;" + getMaterialCode() + " 库存数" + getQtySum() + "&nbsp;&nbsp;低于下限预警值" + getLower() + "</li>";
54 54 } else if (inUpper) {
55   - str = str + " > " + getUpper();
  55 + str = str + "<li><b>" + getMaterialName() + "</b> &nbsp;&nbsp;" + getMaterialCode() + " 库存数" + getQtySum() + "&nbsp;&nbsp;高于上限预警值" + getUpper() + "</li>";
56 56 } else if (inMin) {
57   - str = str + " < " + getMin();
  57 + str = str + "<li><b>" + getMaterialName() + "</b> &nbsp;&nbsp;" + getMaterialCode() + " 库存数" + getQtySum() + "&nbsp;&nbsp;低于最低值" + getMin() + "</li>";
58 58 } else if (inMax) {
59   - str = str + " > " + getMax();
  59 + str = str + "<li><b>" + getMaterialName() + "</b> &nbsp;&nbsp;" + getMaterialCode() + " 库存数" + getQtySum() + "&nbsp;&nbsp;超过最高值" + getMax() + "</li>";
60 60 }
61   -
62   - return str;
  61 + return str + "</ul>";
63 62 }
64 63 }
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/materialWarning/entity/MaterialWarning.java
... ... @@ -74,11 +74,11 @@ public class MaterialWarning implements Serializable {
74 74 /** 上限预警值 */
75 75 @Excel(name = "上限预警值", width = 15)
76 76 @ApiModelProperty(value = "上限预警值")
77   - private Integer upper;
  77 + private int upper;
78 78 /** 下限预警值 */
79 79 @Excel(name = "下限预警值", width = 15)
80 80 @ApiModelProperty(value = "下限预警值")
81   - private Integer lower;
  81 + private int lower;
82 82 /** 备注 */
83 83 @Excel(name = "备注", width = 15)
84 84 @ApiModelProperty(value = "备注")
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/parameterConfiguration/entity/ParameterConfiguration.java
1 1 package org.jeecg.modules.wms.config.parameterConfiguration.entity;
2 2  
3 3 import java.io.Serializable;
4   -import java.io.UnsupportedEncodingException;
5 4 import java.util.Date;
6   -import java.math.BigDecimal;
  5 +
  6 +import org.jeecgframework.poi.excel.annotation.Excel;
  7 +
7 8 import com.baomidou.mybatisplus.annotation.IdType;
8 9 import com.baomidou.mybatisplus.annotation.TableId;
9 10 import com.baomidou.mybatisplus.annotation.TableName;
10   -import lombok.Data;
11   -import com.fasterxml.jackson.annotation.JsonFormat;
12   -import org.springframework.format.annotation.DateTimeFormat;
13   -import org.jeecgframework.poi.excel.annotation.Excel;
14   -import org.jeecg.common.aspect.annotation.Dict;
  11 +
15 12 import io.swagger.annotations.ApiModel;
16 13 import io.swagger.annotations.ApiModelProperty;
  14 +import lombok.Data;
17 15 import lombok.EqualsAndHashCode;
18 16 import lombok.experimental.Accessors;
19 17  
... ... @@ -47,6 +45,10 @@ public class ParameterConfiguration implements Serializable {
47 45 @Excel(name = "参数键值", width = 15)
48 46 @ApiModelProperty(value = "参数键值")
49 47 private String value;
  48 + /** 库区 */
  49 + @Excel(name = "库区", width = 15)
  50 + @ApiModelProperty(value = "库区")
  51 + private String zoneCode;
50 52 /** 备注 */
51 53 @Excel(name = "备注", width = 15)
52 54 @ApiModelProperty(value = "备注")
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/parameterConfiguration/service/IParameterConfigurationService.java
... ... @@ -14,5 +14,7 @@ public interface IParameterConfigurationService extends IService&lt;ParameterConfig
14 14  
15 15 String getValueByCode(String code);
16 16  
  17 + String getValueByCode(String code, String zoneCode);
  18 +
17 19 int getValueIntByCode(String code);
18 20 }
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/parameterConfiguration/service/impl/ParameterConfigurationServiceImpl.java
1 1 package org.jeecg.modules.wms.config.parameterConfiguration.service.impl;
2 2  
  3 +import javax.annotation.Resource;
  4 +
3 5 import org.jeecg.modules.wms.config.parameterConfiguration.entity.ParameterConfiguration;
4 6 import org.jeecg.modules.wms.config.parameterConfiguration.mapper.ParameterConfigurationMapper;
5 7 import org.jeecg.modules.wms.config.parameterConfiguration.service.IParameterConfigurationService;
  8 +import org.jeecg.utils.constant.QuantityConstant;
6 9 import org.springframework.stereotype.Service;
7 10  
8 11 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
... ... @@ -18,10 +21,13 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
18 21 @Service
19 22 public class ParameterConfigurationServiceImpl extends ServiceImpl<ParameterConfigurationMapper, ParameterConfiguration> implements IParameterConfigurationService {
20 23  
  24 + @Resource
  25 + IParameterConfigurationService parameterConfigurationService;
  26 +
21 27 @Override
22 28 public String getValueByCode(String code) {
23 29 LambdaQueryWrapper<ParameterConfiguration> parameterConfigurationLambdaQueryWrapper = Wrappers.lambdaQuery();
24   - parameterConfigurationLambdaQueryWrapper.eq(ParameterConfiguration::getCode, code);
  30 + parameterConfigurationLambdaQueryWrapper.eq(ParameterConfiguration::getCode, code).eq(ParameterConfiguration::getZoneCode, QuantityConstant.EMPTY_STRING);
25 31 ParameterConfiguration parameterConfiguration = getOne(parameterConfigurationLambdaQueryWrapper);
26 32 if (parameterConfiguration == null) {
27 33 return null;
... ... @@ -31,6 +37,18 @@ public class ParameterConfigurationServiceImpl extends ServiceImpl&lt;ParameterConf
31 37 }
32 38  
33 39 @Override
  40 + public String getValueByCode(String code, String zoneCode) {
  41 + LambdaQueryWrapper<ParameterConfiguration> parameterConfigurationLambdaQueryWrapper = Wrappers.lambdaQuery();
  42 + parameterConfigurationLambdaQueryWrapper.eq(ParameterConfiguration::getCode, code).eq(ParameterConfiguration::getZoneCode, zoneCode);
  43 + ParameterConfiguration parameterConfiguration = getOne(parameterConfigurationLambdaQueryWrapper);
  44 + if (parameterConfiguration == null) {
  45 + return parameterConfigurationService.getValueByCode(code);
  46 + }
  47 + String value = parameterConfiguration.getValue();
  48 + return value;
  49 + }
  50 +
  51 + @Override
34 52 public int getValueIntByCode(String code) {
35 53 LambdaQueryWrapper<ParameterConfiguration> parameterConfigurationLambdaQueryWrapper = Wrappers.lambdaQuery();
36 54 parameterConfigurationLambdaQueryWrapper.eq(ParameterConfiguration::getCode, code);
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryHeaderServiceImpl.java
... ... @@ -250,7 +250,7 @@ public class InventoryHeaderServiceImpl extends ServiceImpl&lt;InventoryHeaderMappe
250 250 }
251 251  
252 252 List<Integer> shipmentContainerHeaderIdList =
253   - shipmentContainerDetailList.stream().map(ShipmentContainerDetail::getShipmentContainerId).collect(Collectors.toList());
  253 + shipmentContainerDetailList.stream().map(ShipmentContainerDetail::getShipmentContainerId).distinct().collect(Collectors.toList());
254 254 long shipmentOrder = System.currentTimeMillis();
255 255 int sequenceNumber = shipmentContainerHeaderIdList.size();
256 256 int sequence = 0;
... ... @@ -336,7 +336,7 @@ public class InventoryHeaderServiceImpl extends ServiceImpl&lt;InventoryHeaderMappe
336 336 }
337 337  
338 338 List<Integer> shipmentContainerHeaderIdList =
339   - shipmentContainerDetailList.stream().map(ShipmentContainerDetail::getShipmentContainerId).collect(Collectors.toList());
  339 + shipmentContainerDetailList.stream().map(ShipmentContainerDetail::getShipmentContainerId).distinct().collect(Collectors.toList());
340 340 long shipmentOrder = System.currentTimeMillis();
341 341 int sequenceNumber = shipmentContainerHeaderIdList.size();
342 342 int sequence = 0;
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/MaterialLevelAlarmTask.java
... ... @@ -77,7 +77,7 @@ public class MaterialLevelAlarmTask implements Job {
77 77 String msg = String.join("\n", list);
78 78  
79 79 SysAnnouncement sysAnnouncement = new SysAnnouncement();
80   - String title = "物料水位预警" + DateUtils.now();
  80 + String title = "物料水位预警";
81 81 sysAnnouncement.setTitile(title);
82 82 sysAnnouncement.setMsgContent(msg);
83 83 sysAnnouncement.setEndTime(DateUtil.offsetDay(new Date(), 1));
... ... @@ -86,6 +86,7 @@ public class MaterialLevelAlarmTask implements Job {
86 86 sysAnnouncement.setMsgCategory(CommonConstant.MSG_CATEGORY_2);
87 87 sysAnnouncement.setMsgType(CommonConstant.MSG_TYPE_ALL);
88 88 sysAnnouncement.setMsgAbstract(title);
  89 + sysAnnouncement.setSender("WMS");
89 90 sysAnnouncement.setDelFlag(CommonConstant.DEL_FLAG_0.toString());
90 91 sysAnnouncement.setSendStatus(CommonSendStatus.PUBLISHED_STATUS_1);
91 92 sysAnnouncementService.saveAnnouncement(sysAnnouncement);
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/impl/ReceiptContainerHeaderServiceImpl.java
... ... @@ -11,6 +11,7 @@ import javax.annotation.Resource;
11 11  
12 12 import org.jeecg.common.api.vo.Result;
13 13 import org.jeecg.common.exception.JeecgBootException;
  14 +import org.jeecg.modules.wms.config.container.entity.Container;
14 15 import org.jeecg.modules.wms.config.container.service.IContainerService;
15 16 import org.jeecg.modules.wms.config.location.service.ILocationService;
16 17 import org.jeecg.modules.wms.config.parameterConfiguration.service.IParameterConfigurationService;
... ... @@ -331,7 +332,19 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl&lt;ReceiptContai
331 332 if (receiptContainerStatus != QuantityConstant.RECEIPT_CONTAINER_TASK) {
332 333 throw new JeecgBootException("取消入库任务时, 任务状态不为生成任务状态");
333 334 }
334   - String value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_TASK_LOCATION);
  335 + String containerCode = taskHeader.getContainerCode();
  336 + String warehouseCode = taskHeader.getWarehouseCode();
  337 + if (StringUtils.isEmpty(containerCode)) {
  338 + throw new JeecgBootException("取消入库任务时, 容器编码为空");
  339 + }
  340 + if (StringUtils.isEmpty(warehouseCode)) {
  341 + throw new JeecgBootException("取消入库任务时, 仓库编码为空");
  342 + }
  343 + Container container = containerService.getContainerByCode(containerCode, warehouseCode);
  344 + if (container == null) {
  345 + throw new JeecgBootException("取消入库任务时, 容器为空");
  346 + }
  347 + String value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_TASK_LOCATION, container.getZoneCode());
335 348 if (StringUtils.isEmpty(value)) {
336 349 throw new JeecgBootException("取消入库任务时, 没有获取到配置属性");
337 350 }
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/service/impl/ReceiveServiceImpl.java
... ... @@ -174,7 +174,7 @@ public class ReceiveServiceImpl extends ServiceImpl&lt;ReceiveMapper, Receive&gt; impl
174 174 receiptContainerHeader.setTaskType(taskType);
175 175 receiptContainerHeader.setFromLocationCode(fromLocationCode);
176 176 if (taskType == QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT) {
177   - String value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_TASK_LOCATION);
  177 + String value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_TASK_LOCATION, container.getZoneCode());
178 178 int taskLocationRule = Integer.parseInt(value);
179 179 if (taskLocationRule == QuantityConstant.RULE_TASK_SET_LOCATION) {
180 180 receiptContainerHeader.setToLocationCode(fromLocationCode);
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/impl/ShipmentCombinationServiceImpl.java
... ... @@ -98,6 +98,7 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
98 98 String companyCode = shipmentDetail.getCompanyCode();
99 99 String materialCode = shipmentDetail.getMaterialCode();
100 100 String inventoryStatus = shipmentDetail.getInventoryStatus();
  101 + String zoneCode = shipmentDetail.getZoneCode();
101 102 if (StringUtils.isEmpty(warehouseCode)) {
102 103 throw new JeecgBootException("寻找库存详情时,出库详情没有仓库编码");
103 104 }
... ... @@ -114,6 +115,7 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
114 115 inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getWarehouseCode, warehouseCode).eq(InventoryDetail::getCompanyCode, companyCode)
115 116 .eq(InventoryDetail::getMaterialCode, materialCode).eq(InventoryDetail::getInventoryStatus, inventoryStatus)
116 117 .eq(InventoryDetail::getEnable, QuantityConstant.INVENTORY_DETAIL_STATUS_ENABLE)
  118 + .eq(StringUtils.isNotEmpty(zoneCode), InventoryDetail::getZoneCode, zoneCode)
117 119 .eq(InventoryDetail::getContainerStatus, QuantityConstant.STATUS_CONTAINER_EMPTY);
118 120 List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(inventoryDetailLambdaQueryWrapper);
119 121 return inventoryDetailList;
... ... @@ -394,7 +396,7 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
394 396 }
395 397 }
396 398 } else {
397   - String value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_TASK_LOCATION);
  399 + String value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_TASK_LOCATION, container.getZoneCode());
398 400 if (StringUtils.isEmpty(value)) {
399 401 throw new JeecgBootException("取消入库任务时, 没有获取到配置属性");
400 402 }
... ... @@ -514,6 +516,10 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
514 516 if (location == null) {
515 517 return Result.error("生成出库任务时, 库位编码" + fromLocationCode + "没有找到库位");
516 518 }
  519 + Container container = containerService.getContainerByCode(containerCode, warehouseCode);
  520 + if (container == null) {
  521 + throw new JeecgBootException("生成出库任务时, 容器为空");
  522 + }
517 523 if (location.getRowFlag() == QuantityConstant.ROW_OUT) {
518 524 Location location1 = locationService.getNear(location);
519 525 if (location1 != null) {
... ... @@ -542,7 +548,7 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
542 548 } else if (inventoryTotal.compareTo(shipmentTotal) > 0) {
543 549 taskType = QuantityConstant.TASK_TYPE_SORTINGSHIPMENT;
544 550 }
545   - String value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_SHIPMENT_TASK);
  551 + String value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_SHIPMENT_TASK, container.getZoneCode());
546 552 int shipmentTaskRule = Integer.parseInt(value);
547 553 if (shipmentTaskRule == QuantityConstant.RULE_TASK_PICK_SHIPMENT) {
548 554 taskType = QuantityConstant.TASK_TYPE_SORTINGSHIPMENT;
... ... @@ -618,7 +624,7 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
618 624 if (!success) {
619 625 throw new JeecgBootException("生成出库任务时, 创建任务详情失败");
620 626 }
621   - value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_TASK_LOCATION);
  627 + value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_TASK_LOCATION, container.getZoneCode());
622 628 int taskLocationRule = Integer.parseInt(value);
623 629 int shipmentContainerHeaderId = shipmentContainerHeader.getId();
624 630 shipmentContainerHeader = new ShipmentContainerHeader();
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/entity/ShipmentDetail.java
... ... @@ -48,6 +48,10 @@ public class ShipmentDetail implements Serializable {
48 48 @Excel(name = "仓库编码", width = 15)
49 49 @ApiModelProperty(value = "仓库编码")
50 50 private String warehouseCode;
  51 + /** 库区 */
  52 + @Excel(name = "库区", width = 15)
  53 + @ApiModelProperty(value = "库区")
  54 + private String zoneCode;
51 55 /** 货主编码 */
52 56 @Excel(name = "货主编码", width = 15)
53 57 @ApiModelProperty(value = "货主编码")
... ... @@ -72,10 +76,14 @@ public class ShipmentDetail implements Serializable {
72 76 @Excel(name = "单据数量", width = 15)
73 77 @ApiModelProperty(value = "单据数量")
74 78 private java.math.BigDecimal qty;
75   - /** 已出数量 */
76   - @Excel(name = "已出数量", width = 15)
77   - @ApiModelProperty(value = "已出数量")
  79 + /** 配盘数量 */
  80 + @Excel(name = "配盘数量", width = 15)
  81 + @ApiModelProperty(value = "配盘数量")
78 82 private java.math.BigDecimal taskQty;
  83 + /** 出库数量 */
  84 + @Excel(name = "出库数量", width = 15)
  85 + @ApiModelProperty(value = "出库数量")
  86 + private java.math.BigDecimal shipmentQty;
79 87 /** 可出数量 */
80 88 @ApiModelProperty(value = "可出数量")
81 89 @TableField(exist = false)
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/entity/ShipmentHeader.java
... ... @@ -43,6 +43,10 @@ public class ShipmentHeader implements Serializable {
43 43 @Excel(name = "仓库编码", width = 15)
44 44 @ApiModelProperty(value = "仓库编码")
45 45 private String warehouseCode;
  46 + /** 库区 */
  47 + @Excel(name = "库区", width = 15)
  48 + @ApiModelProperty(value = "库区")
  49 + private String zoneCode;
46 50 /** 货主编码 */
47 51 @Excel(name = "货主编码", width = 15)
48 52 @ApiModelProperty(value = "货主编码")
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/impl/ShipmentDetailServiceImpl.java
... ... @@ -71,6 +71,7 @@ public class ShipmentDetailServiceImpl extends ServiceImpl&lt;ShipmentDetailMapper,
71 71 String warehouseCode = shipmentHeader.getWarehouseCode();
72 72 String companyCode = shipmentHeader.getCompanyCode();
73 73 String materialCode = shipmentDetail.getMaterialCode();
  74 + String zoneCode = shipmentHeader.getZoneCode();
74 75 Material material = materialService.getMaterialByCode(materialCode);
75 76 if (material == null) {
76 77 return Result.error("添加失败,没有找到物料信息," + materialCode);
... ... @@ -85,6 +86,7 @@ public class ShipmentDetailServiceImpl extends ServiceImpl&lt;ShipmentDetailMapper,
85 86 shipmentDetail.setMaterialSpec(materialSpec);
86 87 shipmentDetail.setMaterialUnit(materialUnit);
87 88 shipmentDetail.setStatus(QuantityConstant.RECEIPT_HEADER_BUILD);
  89 + shipmentDetail.setZoneCode(zoneCode);
88 90 boolean success = shipmentDetailService.save(shipmentDetail);
89 91 if (!success) {
90 92 throw new JeecgBootException("添加失败, 保存出库单详情的时候报错");
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java
... ... @@ -317,7 +317,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
317 317 }
318 318 String fromLocationCode = container.getLocationCode();
319 319 String toLocationCode = QuantityConstant.EMPTY_STRING;
320   - String value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_TASK_LOCATION);
  320 + String value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_TASK_LOCATION, container.getZoneCode());
321 321 int taskLocationRule = Integer.parseInt(value);
322 322 if (taskLocationRule == QuantityConstant.RULE_TASK_SET_LOCATION) {
323 323 toLocationCode = fromLocationCode;
... ... @@ -873,6 +873,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
873 873 }
874 874 // 保存历史任务表
875 875 taskHeaderHistoryService.saveById(taskHeader.getId());
  876 +
876 877 if (!taskHeaderService.removeById(taskId)) {
877 878 throw new JeecgBootException("取消任务失败, 删除任务失败");
878 879 }
... ... @@ -1258,7 +1259,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1258 1259 if (StringUtils.isEmpty(fromLocationCode)) {
1259 1260 return Result.error("完成出库任务" + taskHeader.getId() + "没有起始库位,执行中止");
1260 1261 }
1261   - if (StringUtils.isEmpty(toLocationCode) && taskType == QuantityConstant.TASK_TYPE_SORTINGSHIPMENT) {
  1262 + if (StringUtils.isEmpty(toLocationCode) && (taskType == QuantityConstant.TASK_TYPE_SORTINGSHIPMENT)) {
1262 1263 return Result.error("完成出库任务,任务" + taskHeader.getId() + "没有目的库位,执行中止");
1263 1264 }
1264 1265 InventoryHeader inventoryHeader = inventoryHeaderService.getInventoryHeaderByContainerCode(containerCode, warehouseCode);
... ... @@ -1284,18 +1285,21 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1284 1285 }
1285 1286 taskDetail.setShipmentCode(shipmentDetail.getShipmentCode());
1286 1287 int shipmentDetailId = shipmentDetail.getId();
  1288 + BigDecimal shipmentQty = shipmentDetail.getShipmentQty();
  1289 + shipmentQty = shipmentQty.add(taskDetail.getQty());
1287 1290 int status = QuantityConstant.SHIPMENT_HEADER_COMPLETED;
1288   - if (shipmentDetail.getQty().compareTo(shipmentDetail.getTaskQty()) == 0) {
  1291 + if (shipmentDetail.getQty().compareTo(shipmentQty) == 0) {
1289 1292 status = QuantityConstant.SHIPMENT_HEADER_COMPLETED;
1290   - } else if (shipmentDetail.getQty().compareTo(shipmentDetail.getTaskQty()) > 0) {
  1293 + } else if (shipmentDetail.getQty().compareTo(shipmentQty) > 0) {
1291 1294 status = QuantityConstant.SHIPMENT_HEADER_OFF_SHELF;
1292   - } else if (shipmentDetail.getQty().compareTo(shipmentDetail.getTaskQty()) < 0) {
1293   - throw new JeecgBootException("完成出库任务时, 出库单 单据数量不能小于配盘数量");
  1295 + } else if (shipmentDetail.getQty().compareTo(shipmentQty) < 0) {
  1296 + throw new JeecgBootException("完成出库任务时, 出库单 单据数量不能小于出库数量");
1294 1297 }
1295 1298 shipmentDetailList.add(shipmentDetail);
1296 1299 ShipmentDetail updateStatusShipmentDetail = new ShipmentDetail();
1297 1300 updateStatusShipmentDetail.setId(shipmentDetailId);
1298 1301 updateStatusShipmentDetail.setStatus(status);
  1302 + updateStatusShipmentDetail.setShipmentQty(shipmentQty);
1299 1303 updateStatusShipmentDetailList.add(updateStatusShipmentDetail);
1300 1304 InventoryDetail inventoryDetail = inventoryDetailService.getById(taskDetail.getFromInventoryDetailId());
1301 1305 if (inventoryDetail == null) {
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/service/impl/TaskHeaderHistoryServiceImpl.java
1 1 package org.jeecg.modules.wms.task.taskHeaderHistory.service.impl;
2   -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
3   -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  2 +
  3 +import java.io.Serializable;
  4 +import java.util.Collection;
  5 +import java.util.List;
  6 +
  7 +import javax.annotation.Resource;
  8 +
4 9 import org.jeecg.common.exception.JeecgBootException;
5   -import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptDetail;
6   -import org.jeecg.modules.wms.receipt.receiptHeaderHistory.entity.ReceiptDetailHistory;
7 10 import org.jeecg.modules.wms.task.taskHeader.entity.TaskDetail;
8 11 import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader;
9 12 import org.jeecg.modules.wms.task.taskHeader.service.ITaskDetailService;
... ... @@ -15,100 +18,98 @@ import org.jeecg.modules.wms.task.taskHeaderHistory.mapper.TaskHeaderHistoryMapp
15 18 import org.jeecg.modules.wms.task.taskHeaderHistory.service.ITaskDetailHistoryService;
16 19 import org.jeecg.modules.wms.task.taskHeaderHistory.service.ITaskHeaderHistoryService;
17 20 import org.springframework.beans.BeanUtils;
18   -import org.springframework.stereotype.Service;
19 21 import org.springframework.beans.factory.annotation.Autowired;
  22 +import org.springframework.stereotype.Service;
20 23 import org.springframework.transaction.annotation.Transactional;
21 24 import org.springframework.util.CollectionUtils;
22 25  
23   -import javax.annotation.Resource;
24   -import java.io.Serializable;
25   -import java.util.List;
26   -import java.util.Collection;
  26 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  27 +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
27 28  
28 29 /**
29 30 * @Description: task_header_history
30   - * @Author: jeecg-boot
31   - * @Date: 2023-09-14
32   - * @Version: V1.0
  31 + * @Author: jeecg-boot
  32 + * @Date: 2023-09-14
  33 + * @Version: V1.0
33 34 */
34 35 @Service
35 36 public class TaskHeaderHistoryServiceImpl extends ServiceImpl<TaskHeaderHistoryMapper, TaskHeaderHistory> implements ITaskHeaderHistoryService {
36 37  
37   - @Autowired
38   - private TaskHeaderHistoryMapper taskHeaderHistoryMapper;
39   - @Autowired
40   - private TaskDetailHistoryMapper taskDetailHistoryMapper;
41   - @Resource
42   - private ITaskHeaderService taskHeaderService;
43   - @Resource
44   - private ITaskDetailService taskDetailService;
45   - @Resource
46   - private ITaskDetailHistoryService taskDetailHistoryService;
47   -
  38 + @Autowired
  39 + private TaskHeaderHistoryMapper taskHeaderHistoryMapper;
  40 + @Autowired
  41 + private TaskDetailHistoryMapper taskDetailHistoryMapper;
  42 + @Resource
  43 + private ITaskHeaderService taskHeaderService;
  44 + @Resource
  45 + private ITaskDetailService taskDetailService;
  46 + @Resource
  47 + private ITaskDetailHistoryService taskDetailHistoryService;
48 48  
49   - @Override
50   - @Transactional
51   - public void saveMain(TaskHeaderHistory taskHeaderHistory, List<TaskDetailHistory> taskDetailHistoryList) {
52   - taskHeaderHistoryMapper.insert(taskHeaderHistory);
53   - if(taskDetailHistoryList!=null && taskDetailHistoryList.size()>0) {
54   - for(TaskDetailHistory entity:taskDetailHistoryList) {
55   - //外键设置
56   - entity.setTaskHeaderId(taskHeaderHistory.getId());
57   - taskDetailHistoryMapper.insert(entity);
58   - }
59   - }
60   - }
  49 + @Override
  50 + @Transactional
  51 + public void saveMain(TaskHeaderHistory taskHeaderHistory, List<TaskDetailHistory> taskDetailHistoryList) {
  52 + taskHeaderHistoryMapper.insert(taskHeaderHistory);
  53 + if (taskDetailHistoryList != null && taskDetailHistoryList.size() > 0) {
  54 + for (TaskDetailHistory entity : taskDetailHistoryList) {
  55 + // 外键设置
  56 + entity.setTaskHeaderId(taskHeaderHistory.getId());
  57 + taskDetailHistoryMapper.insert(entity);
  58 + }
  59 + }
  60 + }
61 61  
62   - @Override
63   - @Transactional
64   - public void updateMain(TaskHeaderHistory taskHeaderHistory,List<TaskDetailHistory> taskDetailHistoryList) {
65   - taskHeaderHistoryMapper.updateById(taskHeaderHistory);
  62 + @Override
  63 + @Transactional
  64 + public void updateMain(TaskHeaderHistory taskHeaderHistory, List<TaskDetailHistory> taskDetailHistoryList) {
  65 + taskHeaderHistoryMapper.updateById(taskHeaderHistory);
66 66  
67   - //1.先删除子表数据
68   - //taskDetailHistoryMapper.deleteByMainId(taskHeaderHistory.getId());
  67 + // 1.先删除子表数据
  68 + // taskDetailHistoryMapper.deleteByMainId(taskHeaderHistory.getId());
69 69  
70   - //2.子表数据重新插入
71   - if(taskDetailHistoryList!=null && taskDetailHistoryList.size()>0) {
72   - for(TaskDetailHistory entity:taskDetailHistoryList) {
73   - //外键设置
74   - entity.setTaskHeaderId(taskHeaderHistory.getId());
75   - taskDetailHistoryMapper.insert(entity);
76   - }
77   - }
78   - }
  70 + // 2.子表数据重新插入
  71 + if (taskDetailHistoryList != null && taskDetailHistoryList.size() > 0) {
  72 + for (TaskDetailHistory entity : taskDetailHistoryList) {
  73 + // 外键设置
  74 + entity.setTaskHeaderId(taskHeaderHistory.getId());
  75 + taskDetailHistoryMapper.insert(entity);
  76 + }
  77 + }
  78 + }
79 79  
80   - @Override
81   - @Transactional
82   - public void delMain(String id) {
83   - taskDetailHistoryMapper.deleteByMainId(id);
84   - taskHeaderHistoryMapper.deleteById(id);
85   - }
  80 + @Override
  81 + @Transactional
  82 + public void delMain(String id) {
  83 + taskDetailHistoryMapper.deleteByMainId(id);
  84 + taskHeaderHistoryMapper.deleteById(id);
  85 + }
86 86  
87   - @Override
88   - @Transactional
89   - public void delBatchMain(Collection<? extends Serializable> idList) {
90   - for(Serializable id:idList) {
91   - taskDetailHistoryMapper.deleteByMainId(id.toString());
92   - taskHeaderHistoryMapper.deleteById(id);
93   - }
94   - }
  87 + @Override
  88 + @Transactional
  89 + public void delBatchMain(Collection<? extends Serializable> idList) {
  90 + for (Serializable id : idList) {
  91 + taskDetailHistoryMapper.deleteByMainId(id.toString());
  92 + taskHeaderHistoryMapper.deleteById(id);
  93 + }
  94 + }
95 95  
96   - @Override
97   - public void saveById(Integer id) {
98   - TaskHeader taskHeader=taskHeaderService.getById(id);
99   - TaskHeaderHistory taskHeaderHistory=new TaskHeaderHistory();
100   - BeanUtils.copyProperties(taskHeader,taskHeaderHistory);
101   - taskHeaderHistoryMapper.insert(taskHeaderHistory);
102   - List<TaskDetail>taskDetailList=taskDetailService.list(new LambdaQueryWrapper<TaskDetail>().eq(TaskDetail::getTaskHeaderId, taskHeader.getId()));
103   - if (!CollectionUtils.isEmpty(taskDetailList)) {
104   - for (TaskDetail detail : taskDetailList) {
105   - TaskDetailHistory taskDetailHistory = new TaskDetailHistory();
106   - BeanUtils.copyProperties(detail, taskDetailHistory);
107   - if (!taskDetailHistoryService.save(taskDetailHistory)) {
108   - throw new JeecgBootException("批量新增失败");
109   - }
110   - }
111   - }
  96 + @Override
  97 + @Transactional
  98 + public void saveById(Integer id) {
  99 + TaskHeader taskHeader = taskHeaderService.getById(id);
  100 + TaskHeaderHistory taskHeaderHistory = new TaskHeaderHistory();
  101 + BeanUtils.copyProperties(taskHeader, taskHeaderHistory);
  102 + taskHeaderHistoryMapper.insert(taskHeaderHistory);
  103 + List<TaskDetail> taskDetailList = taskDetailService.list(new LambdaQueryWrapper<TaskDetail>().eq(TaskDetail::getTaskHeaderId, taskHeader.getId()));
  104 + if (!CollectionUtils.isEmpty(taskDetailList)) {
  105 + for (TaskDetail detail : taskDetailList) {
  106 + TaskDetailHistory taskDetailHistory = new TaskDetailHistory();
  107 + BeanUtils.copyProperties(detail, taskDetailHistory);
  108 + if (!taskDetailHistoryService.save(taskDetailHistory)) {
  109 + throw new JeecgBootException("批量新增失败");
  110 + }
  111 + }
  112 + }
112 113  
113   - }
  114 + }
114 115 }
... ...
huaheng-wms-core/src/main/java/org/jeecg/utils/constant/QuantityConstant.java
... ... @@ -484,6 +484,7 @@ public class QuantityConstant {
484 484 public static final String RULE_CALL_BOX_ALLOW_EMPTY = "callBoxAllowEmpty";
485 485 public static final String DOUBLE_FORK_RESERVE_LOCATION = "doubleForkReserveLocation";
486 486 public static final String DOUBLE_FORK_SEARCH_LOCATION = "doubleForkSearchLocation";
  487 + public static final String MAX_ROADWAY_RECEIPT = "maxRoadWayReceipt";
487 488 public static final String WAREHOUSING_WEIGHING = "warehousingWeighing";
488 489 public static final String EXCEPTION_TO_CACHE = "exceptionToCache";
489 490 public static final String CONTAINER_SPEC = "containerSpec";
... ...
... ... @@ -12,17 +12,16 @@
12 12 <groupId>com.huaheng.wms</groupId>
13 13 <artifactId>huaheng-wms4</artifactId>
14 14 <version>4.0.1</version>
15   -
  15 +
16 16 <packaging>pom</packaging>
17 17  
18 18 <name>huaheng-wms4</name>
19 19 <description>huaheng wms project for Spring Boot</description>
20 20  
21 21 <modules>
22   - <module>huaheng-wms-core</module>
23 22 <module>ant-design-vue-jeecg</module>
  23 + <module>huaheng-wms-core</module>
24 24 </modules>
25   -
26 25 <repositories>
27 26 <repository>
28 27 <id>aliyun</id>
... ...