Commit 09e076dd5446ec46d009730d05772600a55a17c1
Merge branch 'develop4' of http://www.huahengrobot.com:90/wms/wms4 into develop4
Showing
21 changed files
with
372 additions
and
77 deletions
ant-design-vue-jeecg/.env.development
... | ... | @@ -2,7 +2,7 @@ NODE_ENV=development |
2 | 2 | VUE_APP_ENV=development |
3 | 3 | outputDir=dist |
4 | 4 | VUE_APP_API_BASE_URL=http://localhost:8080/wms |
5 | -VUE_APP_CAS_BASE_URL=http://localhost:8443/cas | |
5 | +VUE_APP_CAS_BASE_URL=http://172.16.29.77:8443/cas | |
6 | 6 | VUE_APP_ONLINE_BASE_URL=http://fileview.jeecg.com/onlinePreview |
7 | 7 | |
8 | 8 | # 微应用列表必须VUE_APP_SUB_开头,jeecg-app-1为子应用的项目名称,也是子应用的路由父路径 |
... | ... |
ant-design-vue-jeecg/src/cas/sso.js
... | ... | @@ -10,7 +10,7 @@ const init = (callback) => { |
10 | 10 | console.log("-------单点登录开始-------"); |
11 | 11 | let token = Vue.ls.get(ACCESS_TOKEN); |
12 | 12 | let st = getUrlParam("ticket"); |
13 | - let sevice = "http://" + window.location.host + "/"; | |
13 | + let sevice = "http://" + window.location.host + "/wms/"; | |
14 | 14 | if (token) { |
15 | 15 | loginSuccess(callback); |
16 | 16 | } else { |
... | ... | @@ -61,7 +61,7 @@ function validateSt(ticket, service, callback) { |
61 | 61 | if (res.success) { |
62 | 62 | loginSuccess(callback); |
63 | 63 | } else { |
64 | - let sevice = "http://" + window.location.host + "/"; | |
64 | + let sevice = "http://" + window.location.host + "/wms/"; | |
65 | 65 | let serviceUrl = encodeURIComponent(sevice); |
66 | 66 | window.location.href = window._CONFIG['casPrefixUrl'] + "/login?service=" + serviceUrl; |
67 | 67 | } |
... | ... |
ant-design-vue-jeecg/src/components/jeecgbiz/JButtonBizComponent/JSelectBizComponentModal.vue
... | ... | @@ -59,7 +59,7 @@ |
59 | 59 | </a-card> |
60 | 60 | </a-col> |
61 | 61 | </a-row> |
62 | - <InventoryDetailList></InventoryDetailList> | |
62 | + <InventoryDetailSelectList></InventoryDetailSelectList> | |
63 | 63 | </j-modal> |
64 | 64 | </template> |
65 | 65 | |
... | ... | @@ -72,12 +72,13 @@ import JSelectBizQueryItem from './JSelectBizQueryItem' |
72 | 72 | import {cloneDeep} from 'lodash' |
73 | 73 | import {stockTakeTask} from "../../../api/api"; |
74 | 74 | import Utils from './util.js'; |
75 | -import InventoryDetailList from "../../../views/system/inventory/InventoryDetailList"; | |
75 | +import InventoryDetailSelectList from "../../../views/system/inventory/InventoryDetailSelectList"; | |
76 | + | |
76 | 77 | |
77 | 78 | export default { |
78 | 79 | name: 'JSelectBizComponentModal', |
79 | 80 | mixins: [JeecgListMixin], |
80 | - components: {Ellipsis, JSelectBizQueryItem,InventoryDetailList}, | |
81 | + components: {Ellipsis, JSelectBizQueryItem,InventoryDetailSelectList}, | |
81 | 82 | props: { |
82 | 83 | value: { |
83 | 84 | type: Array, |
... | ... | @@ -242,6 +243,7 @@ export default { |
242 | 243 | this.selectedTable.dataSource = val.map(key => { |
243 | 244 | for (let data of this.dataSource) { |
244 | 245 | if (data[this.rowKey] === key) { |
246 | + Utils.$emit('methodA',data[this.valueKey]); | |
245 | 247 | pushIfNotExist(this.innerValue, data[this.valueKey]) |
246 | 248 | return data |
247 | 249 | } |
... | ... | @@ -264,6 +266,7 @@ export default { |
264 | 266 | /** 关闭弹窗 */ |
265 | 267 | close() { |
266 | 268 | this.$emit('update:visible', false) |
269 | + this.handleDeleteSelected(this.selectedTable.dataSource,0); | |
267 | 270 | }, |
268 | 271 | |
269 | 272 | valueWatchHandler(val) { |
... | ... | @@ -348,9 +351,11 @@ export default { |
348 | 351 | { |
349 | 352 | alert("至少选择一项") |
350 | 353 | } |
354 | + this.handleDeleteSelected(this.selectedTable.dataSource,0); | |
351 | 355 | }, |
352 | 356 | /** 删除已选择的 */ |
353 | 357 | handleDeleteSelected(record, index) { |
358 | + Utils.$emit('methodA',10); | |
354 | 359 | this.selectedRowKeys.splice(this.selectedRowKeys.indexOf(record[this.rowKey]), 1) |
355 | 360 | //update--begin--autor:wangshuai-----date:20200722------for:JSelectBizComponent组件切换页数值问题------ |
356 | 361 | this.selectedTable.dataSource.splice(this.selectedTable.dataSource.indexOf(record), 1) |
... | ... |
ant-design-vue-jeecg/src/components/jeecgbiz/JSelectMultiCycleCount.vue
... | ... | @@ -29,7 +29,7 @@ export default { |
29 | 29 | }, |
30 | 30 | data() { |
31 | 31 | return { |
32 | - url: {list: '/inventory/inventoryHeader/list'}, | |
32 | + url: {list: '/inventory/inventoryHeader/freeList'}, | |
33 | 33 | columns: [ |
34 | 34 | {title: 'ID', align: 'center', width: '20%',widthRight: '70%', dataIndex: 'id'}, |
35 | 35 | {title: '容器号', align: 'center', width: '25%', dataIndex: 'containerCode'}, |
... | ... |
ant-design-vue-jeecg/src/store/modules/user.js
... | ... | @@ -183,7 +183,7 @@ const user = { |
183 | 183 | //console.log('logoutToken: '+ logoutToken) |
184 | 184 | logout(logoutToken).then(() => { |
185 | 185 | if (process.env.VUE_APP_SSO == 'true') { |
186 | - let sevice = 'http://' + window.location.host + '/' | |
186 | + let sevice = 'http://' + window.location.host + '/wms/' | |
187 | 187 | let serviceUrl = encodeURIComponent(sevice) |
188 | 188 | window.location.href = process.env.VUE_APP_CAS_BASE_URL + '/logout?service=' + serviceUrl |
189 | 189 | } |
... | ... |
ant-design-vue-jeecg/src/views/system/inventory/InventoryDetailSelectList.vue
0 → 100644
1 | +<template> | |
2 | + <a-card :bordered="false" :class="'cust-erp-sub-tab'"> | |
3 | + <!-- 操作按钮区域 --> | |
4 | + <div class="table-operator" v-if="mainId"> | |
5 | + <a-button v-has="'inventoryDetail:add'" @click="handleAdd" type="primary" icon="plus">新增</a-button> | |
6 | + <a-button type="primary" icon="download" @click="handleExportXls('库存详情')">导出</a-button> | |
7 | + <a-upload | |
8 | + name="file" | |
9 | + :showUploadList="false" | |
10 | + :multiple="false" | |
11 | + :headers="tokenHeader" | |
12 | + :action="importExcelUrl" | |
13 | + @change="handleImportExcel"> | |
14 | + <a-button type="primary" icon="import">导入</a-button> | |
15 | + </a-upload> | |
16 | + | |
17 | + </div> | |
18 | + | |
19 | + <!-- table区域-begin --> | |
20 | + <div> | |
21 | + <a-table | |
22 | + ref="table" | |
23 | + size="middle" | |
24 | + bordered | |
25 | + rowKey="id" | |
26 | + :scroll="{x:true}" | |
27 | + :columns="columns" | |
28 | + :dataSource="dataSource" | |
29 | + :pagination="ipagination" | |
30 | + :loading="loading" | |
31 | + :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" | |
32 | + @change="handleTableChange"> | |
33 | + | |
34 | + <span slot="companyCode" slot-scope="companyCode"> | |
35 | + <a-tag :key="companyCode" color=blue> | |
36 | + {{ solutionCompany(companyCode) }} | |
37 | + </a-tag> | |
38 | + </span> | |
39 | + | |
40 | + <template slot="htmlSlot" slot-scope="text"> | |
41 | + <div v-html="text"></div> | |
42 | + </template> | |
43 | + <template slot="imgSlot" slot-scope="text"> | |
44 | + <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span> | |
45 | + <img v-else :src="getImgView(text)" height="25px" alt="" | |
46 | + style="max-width:80px;font-size: 12px;font-style: italic;"/> | |
47 | + </template> | |
48 | + <template slot="fileSlot" slot-scope="text"> | |
49 | + <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span> | |
50 | + <a-button | |
51 | + v-else | |
52 | + :ghost="true" | |
53 | + type="primary" | |
54 | + icon="download" | |
55 | + size="small" | |
56 | + @click="downloadFile(text)"> | |
57 | + 下载 | |
58 | + </a-button> | |
59 | + </template> | |
60 | + | |
61 | + | |
62 | + </a-table> | |
63 | + </div> | |
64 | + <inventoryDetail-modal ref="modalForm" @ok="modalFormOk" :mainId="mainId"></inventoryDetail-modal> | |
65 | + </a-card> | |
66 | +</template> | |
67 | + | |
68 | +<script> | |
69 | + | |
70 | +import {JeecgListMixin} from '@/mixins/JeecgListMixin' | |
71 | +import InventoryDetailModal from './modules/InventoryDetailModal' | |
72 | +import {getCompanyList} from '@/api/api' | |
73 | +import {getAction} from '@/api/manage' | |
74 | +import Utils from "../../../components/jeecgbiz/JButtonBizComponent/util"; | |
75 | + | |
76 | +export default { | |
77 | + name: "InventoryDetailSelectList", | |
78 | + mixins: [JeecgListMixin], | |
79 | + components: {InventoryDetailModal}, | |
80 | + props: { | |
81 | + mainId: { | |
82 | + type: String, | |
83 | + default: '', | |
84 | + required: false | |
85 | + } | |
86 | + }, | |
87 | + watch: { | |
88 | + mainId: { | |
89 | + immediate: true, | |
90 | + handler(val) { | |
91 | + if (!this.mainId) { | |
92 | + this.clearList() | |
93 | + } else { | |
94 | + this.queryParam['inventoryHeaderId'] = val | |
95 | + this.loadData(1); | |
96 | + } | |
97 | + } | |
98 | + } | |
99 | + }, | |
100 | + data() { | |
101 | + return { | |
102 | + description: '库存表管理页面', | |
103 | + disableMixinCreated: true, | |
104 | + companyList: [], | |
105 | + // 表头 | |
106 | + columns: [ | |
107 | + { | |
108 | + title: '容器编码', | |
109 | + align: "center", | |
110 | + dataIndex: 'containerCode' | |
111 | + }, | |
112 | + { | |
113 | + title: '库位编码', | |
114 | + align: "center", | |
115 | + dataIndex: 'locationCode' | |
116 | + }, | |
117 | + { | |
118 | + title: '物料编码', | |
119 | + align: "center", | |
120 | + dataIndex: 'materialCode' | |
121 | + }, | |
122 | + { | |
123 | + title: '物料名称', | |
124 | + align: "center", | |
125 | + dataIndex: 'materialName' | |
126 | + }, | |
127 | + { | |
128 | + title: '物料规格', | |
129 | + align: "center", | |
130 | + dataIndex: 'materialSpec' | |
131 | + }, | |
132 | + { | |
133 | + title: '物料单位', | |
134 | + align: "center", | |
135 | + dataIndex: 'materialUnit' | |
136 | + }, | |
137 | + { | |
138 | + title: '数量', | |
139 | + align: "center", | |
140 | + dataIndex: 'qty' | |
141 | + }, | |
142 | + { | |
143 | + title: '库存状态', | |
144 | + align: "center", | |
145 | + dataIndex: 'inventoryStatus_dictText', | |
146 | + }, | |
147 | + { | |
148 | + title: '批次', | |
149 | + align: "center", | |
150 | + dataIndex: 'batch' | |
151 | + }, | |
152 | + { | |
153 | + title: '入库日期', | |
154 | + align: "center", | |
155 | + dataIndex: 'receiptDate' | |
156 | + }, | |
157 | + ], | |
158 | + url: { | |
159 | + list: "/inventory/inventoryHeader/listInventoryDetailByMainId", | |
160 | + delete: "/inventory/inventoryHeader/deleteInventoryDetail", | |
161 | + deleteBatch: "/inventory/inventoryHeader/deleteBatchInventoryDetail", | |
162 | + exportXlsUrl: "/inventory/inventoryHeader/exportInventoryDetail", | |
163 | + importUrl: "/inventory/inventoryHeader/importInventoryDetail", | |
164 | + }, | |
165 | + dictOptions: { | |
166 | + containerStatus: [], | |
167 | + } | |
168 | + } | |
169 | + }, | |
170 | + created() { | |
171 | + this.loadFrom(); | |
172 | + }, | |
173 | + mounted() { | |
174 | + let _this = this; | |
175 | + Utils.$on('methodA',(data)=> { | |
176 | + _this.methodA(data); | |
177 | + }) | |
178 | + // var _this = this; | |
179 | + // setInterval(function () { | |
180 | + // if(_this.isLoad) { | |
181 | + // _this.loadDataList(); | |
182 | + // } | |
183 | + // },1000) | |
184 | + }, | |
185 | + computed: { | |
186 | + importExcelUrl() { | |
187 | + return `${window._CONFIG['domianURL']}/${this.url.importUrl}/${this.mainId}`; | |
188 | + } | |
189 | + }, | |
190 | + methods: { | |
191 | + | |
192 | + methodA(data) { | |
193 | + var _this = this; | |
194 | + _this.loadDatas(data); | |
195 | + }, | |
196 | + | |
197 | + loadDatas(record) { | |
198 | + this.loading = true | |
199 | + this.dataSource = [] | |
200 | + getAction(this.url.list, { | |
201 | + inventoryHeaderId: record | |
202 | + }).then((res) => { | |
203 | + if (res.success) { | |
204 | + this.dataSource = res.result.records | |
205 | + } | |
206 | + }).finally(() => { | |
207 | + this.loading = false | |
208 | + }) | |
209 | + }, | |
210 | + loadFrom() { | |
211 | + getCompanyList().then((res) => { | |
212 | + if (res.success) { | |
213 | + this.companyList = res.result | |
214 | + } | |
215 | + }); | |
216 | + }, | |
217 | + solutionCompany(value) { | |
218 | + var actions = [] | |
219 | + Object.keys(this.companyList).some((key) => { | |
220 | + if (this.companyList[key].code == ('' + value)) { | |
221 | + actions.push(this.companyList[key].name) | |
222 | + return true | |
223 | + } | |
224 | + }) | |
225 | + return actions.join('') | |
226 | + }, | |
227 | + clearList() { | |
228 | + this.dataSource = [] | |
229 | + this.selectedRowKeys = [] | |
230 | + this.ipagination.current = 1 | |
231 | + } | |
232 | + | |
233 | + } | |
234 | +} | |
235 | +</script> | |
236 | +<style scoped> | |
237 | +@import '~@assets/less/common.less' | |
238 | +</style> | |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/cas/util/CASServiceUtil.java
... | ... | @@ -19,9 +19,9 @@ import org.apache.http.impl.client.HttpClients; |
19 | 19 | public class CASServiceUtil { |
20 | 20 | |
21 | 21 | public static void main(String[] args) { |
22 | - String serviceUrl = "https://cas.8f8.com.cn:8443/cas/p3/serviceValidate"; | |
23 | - String service = "http://localhost:3003/user/login"; | |
24 | - String ticket = "ST-5-1g-9cNES6KXNRwq-GuRET103sm0-DESKTOP-VKLS8B3"; | |
22 | + String serviceUrl = "http://172.16.29.77:8443/cas/"; | |
23 | + String service = "http://localhost:8080/wms/sys/cas/client/validateLogin"; | |
24 | + String ticket = "TGT-4-P-Usqyx62yy2fMVUL7iWlrww-yQ4ClsrhZn5bPgdHqjrOWYeGEs9VrdE-a9dm5FOB44localhost"; | |
25 | 25 | String res = getSTValidate(serviceUrl, ticket, service); |
26 | 26 | |
27 | 27 | System.out.println("---------res-----" + res); |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mobile/controller/ReceiptController.java
... | ... | @@ -32,23 +32,4 @@ public class ReceiptController extends HuahengBaseController { |
32 | 32 | @Resource |
33 | 33 | private IMobileService mobileService; |
34 | 34 | |
35 | - @AutoLog(value = "PDA入库-呼叫料盒") | |
36 | - @ApiOperation(value = "PDA入库-呼叫料盒", notes = "创建空的补充入库任务,并返回任务id") | |
37 | - @PostMapping("/callbox") | |
38 | - @ResponseBody | |
39 | - @ApiLogger(apiName = "PDA入库-呼叫料盒", from = "PDA") | |
40 | - public Result<?> callBox(@RequestBody CallBoxBean bean, HttpServletRequest req) { | |
41 | - String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req); | |
42 | - | |
43 | - // 补充入库类型 | |
44 | - bean.setType(QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT); | |
45 | - | |
46 | - Result<?> result = handleMultiProcess("callBox", new MultiProcessListener() { | |
47 | - @Override | |
48 | - public Result<?> doProcess() { | |
49 | - return mobileService.callBox(bean, warehouseCode); | |
50 | - } | |
51 | - }); | |
52 | - return result; | |
53 | - } | |
54 | 35 | } |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mobile/controller/ShipmentController.java
... | ... | @@ -32,23 +32,5 @@ public class ShipmentController extends HuahengBaseController { |
32 | 32 | @Resource |
33 | 33 | private IMobileService mobileService; |
34 | 34 | |
35 | - @AutoLog(value = "PDA出库-呼叫料盒") | |
36 | - @ApiOperation(value = "PDA出库-呼叫料盒", notes = "创建空的分拣出库任务,并返回任务id") | |
37 | - @PostMapping("/callbox") | |
38 | - @ResponseBody | |
39 | - @ApiLogger(apiName = "PDA出库-呼叫料盒", from = "PDA") | |
40 | - public Result<TaskHeader> callBox(@RequestBody CallBoxBean bean, HttpServletRequest req) { | |
41 | - String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req); | |
42 | 35 | |
43 | - // 补充入库类型 | |
44 | - bean.setType(QuantityConstant.TASK_TYPE_SORTINGSHIPMENT); | |
45 | - | |
46 | - Result result = handleMultiProcess("callBox", new MultiProcessListener() { | |
47 | - @Override | |
48 | - public Result doProcess() { | |
49 | - return mobileService.callBox(bean, warehouseCode); | |
50 | - } | |
51 | - }); | |
52 | - return result; | |
53 | - } | |
54 | 36 | } |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/service/IContainerService.java
... | ... | @@ -21,6 +21,8 @@ public interface IContainerService extends IService<Container> { |
21 | 21 | |
22 | 22 | boolean updateStatus(String containerCode, String status, String wareohuseCode); |
23 | 23 | |
24 | + boolean restoreContainer(String containerCode, String wareohuseCode); | |
25 | + | |
24 | 26 | boolean updateLocationCodeAndStatus(String containerCode, String locationCode, String status, String warehouseCode); |
25 | 27 | |
26 | 28 | // 创建零时容器 |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/service/impl/ContainerServiceImpl.java
... | ... | @@ -72,12 +72,25 @@ public class ContainerServiceImpl extends ServiceImpl<ContainerMapper, Container |
72 | 72 | if (container == null) { |
73 | 73 | return false; |
74 | 74 | } |
75 | + container.setLastStatus(container.getStatus()); | |
75 | 76 | container.setStatus(status); |
76 | 77 | boolean result = this.updateById(container); |
77 | 78 | return result; |
78 | 79 | } |
79 | 80 | |
80 | 81 | @Override |
82 | + public boolean restoreContainer(String containerCode, String wareohuseCode) { | |
83 | + Container container = this.getContainerByCode(containerCode, wareohuseCode); | |
84 | + if (container == null) { | |
85 | + return false; | |
86 | + } | |
87 | + container.setLastStatus(container.getStatus()); | |
88 | + container.setStatus(container.getLastStatus()); | |
89 | + boolean result = this.updateById(container); | |
90 | + return result; | |
91 | + } | |
92 | + | |
93 | + @Override | |
81 | 94 | public boolean updateLocationCodeAndStatus(String containerCode, String locationCode, String status, String warehouseCode) { |
82 | 95 | Container container = getContainerByCode(containerCode, warehouseCode); |
83 | 96 | if (container == null) { |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/aspectj/ApiLogAspect.java
... | ... | @@ -399,7 +399,7 @@ public class ApiLogAspect { |
399 | 399 | public static void setApiLogException(ApiLog log, Exception e) { |
400 | 400 | try { |
401 | 401 | String exception = ExceptionUtils.getFullStackTrace(e); |
402 | - String shortExpInfo = e.getMessage() + "\n" + org.apache.commons.lang3.StringUtils.left(exception, 1000) + "..."; | |
402 | + String shortExpInfo = e.getMessage() + "\n" + org.apache.commons.lang3.StringUtils.left(exception, 2000) + "..."; | |
403 | 403 | log.setException(shortExpInfo); |
404 | 404 | } catch (Exception ex) { |
405 | 405 | ex.printStackTrace(); |
... | ... | @@ -409,7 +409,7 @@ public class ApiLogAspect { |
409 | 409 | public static void setApiLogThrowable(ApiLog log, Throwable e) { |
410 | 410 | try { |
411 | 411 | String exception = ExceptionUtils.getFullStackTrace(e); |
412 | - String shortExpInfo = e.getMessage() + "\n" + org.apache.commons.lang3.StringUtils.left(exception, 1000) + "..."; | |
412 | + String shortExpInfo = e.getMessage() + "\n" + org.apache.commons.lang3.StringUtils.left(exception, 2000) + "..."; | |
413 | 413 | log.setException(shortExpInfo); |
414 | 414 | } catch (Exception ex) { |
415 | 415 | ex.printStackTrace(); |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/controller/HuahengBaseController.java
... | ... | @@ -73,14 +73,14 @@ public class HuahengBaseController { |
73 | 73 | log.info("[{}] 开始分布式事务 lockKey = {},获取锁耗时: {}ms", taskName, fullLockKey, endTime - startTime); |
74 | 74 | result = multiProcessListener.doProcess(); |
75 | 75 | } catch (Exception e) { |
76 | - final long finishTime = SystemClock.now(); | |
77 | - throw new RuntimeException(StrUtil.format("[{}] 执行分布式事务失败 lockKey = {},事务耗时:{}ms", taskName, fullLockKey, finishTime - endTime), e); | |
76 | + String errorMessage = StrUtil.format("[{}] 执行分布式事务失败 lockKey = {},errorMessage = {}", taskName, fullLockKey, e.getCause()); | |
77 | + log.error(errorMessage, e); | |
78 | + throw (RuntimeException)e; | |
78 | 79 | } finally { |
79 | 80 | redissonDistributedLocker.unlock(fullLockKey); |
80 | 81 | final long finishTime = SystemClock.now(); |
81 | 82 | log.info("[{}] 结束分布式事务 lockKey = {},事务耗时:{}ms", taskName, fullLockKey, finishTime - endTime); |
82 | 83 | } |
83 | - | |
84 | 84 | return result; |
85 | 85 | } |
86 | 86 | } |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/controller/InventoryHeaderController.java
... | ... | @@ -12,6 +12,7 @@ import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail; |
12 | 12 | import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryHeader; |
13 | 13 | import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryDetailService; |
14 | 14 | import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryHeaderService; |
15 | +import org.jeecg.utils.constant.QuantityConstant; | |
15 | 16 | import org.springframework.beans.factory.annotation.Autowired; |
16 | 17 | import org.springframework.web.bind.annotation.*; |
17 | 18 | import javax.servlet.http.HttpServletRequest; |
... | ... | @@ -252,6 +253,29 @@ public class InventoryHeaderController extends JeecgController<InventoryHeader, |
252 | 253 | } |
253 | 254 | |
254 | 255 | /** |
256 | + * 有货非锁定列表查询 | |
257 | + * @param inventoryHeader | |
258 | + * @param pageNo | |
259 | + * @param pageSize | |
260 | + * @param req | |
261 | + * @return | |
262 | + */ | |
263 | + // @AutoLog(value = "库存表-分页列表查询") | |
264 | + @ApiOperation(value = "库存表-有货非锁定列表查询", notes = "库存表-有货非锁定列表查询") | |
265 | + @GetMapping(value = "/freeList") | |
266 | + public Result<IPage<InventoryHeader>> freeList(InventoryHeader inventoryHeader, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, | |
267 | + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { | |
268 | + | |
269 | + | |
270 | + | |
271 | + QueryWrapper<InventoryHeader> queryWrapper = QueryGenerator.initQueryWrapper(inventoryHeader, req.getParameterMap()); | |
272 | + queryWrapper.eq("container_status", QuantityConstant.STATUS_CONTAINER_SOME); | |
273 | + Page<InventoryHeader> page = new Page<InventoryHeader>(pageNo, pageSize); | |
274 | + IPage<InventoryHeader> pageList = inventoryHeaderService.page(page, queryWrapper); | |
275 | + return Result.OK(pageList); | |
276 | + } | |
277 | + | |
278 | + /** | |
255 | 279 | * 导入 |
256 | 280 | * @return |
257 | 281 | */ |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/controller/ReceiptHeaderController.java
... | ... | @@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
9 | 9 | import lombok.extern.slf4j.Slf4j; |
10 | 10 | import org.jeecg.common.system.base.controller.JeecgController; |
11 | 11 | import org.jeecg.common.api.vo.Result; |
12 | +import org.jeecg.modules.wms.api.mobile.entity.CallBoxBean; | |
12 | 13 | import org.jeecg.modules.wms.api.mobile.entity.QuickReceiptBean; |
13 | 14 | import org.jeecg.modules.wms.api.mobile.service.IMobileService; |
14 | 15 | import org.jeecg.modules.wms.framework.aspectj.lang.annotation.ApiLogger; |
... | ... | @@ -365,4 +366,17 @@ public class ReceiptHeaderController extends JeecgController<ReceiptHeader, IRec |
365 | 366 | return mobileService.quickReceipt(bean, warehouseCode); |
366 | 367 | |
367 | 368 | } |
369 | + | |
370 | + @AutoLog(value = "PDA入库-呼叫料盒") | |
371 | + @ApiOperation(value = "PDA入库-呼叫料盒", notes = "创建空的补充入库任务,并返回任务id") | |
372 | + @PostMapping("/callbox") | |
373 | + @ResponseBody | |
374 | + @ApiLogger(apiName = "PDA入库-呼叫料盒", from = "PDA") | |
375 | + public Result<?> callBox(@RequestBody CallBoxBean bean, HttpServletRequest req) { | |
376 | + String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req); | |
377 | + | |
378 | + // 补充入库类型 | |
379 | + bean.setType(QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT); | |
380 | + return mobileService.callBox(bean, warehouseCode); | |
381 | + } | |
368 | 382 | } |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/controller/ShipmentHeaderController.java
... | ... | @@ -20,12 +20,17 @@ import org.jeecg.common.system.query.QueryGenerator; |
20 | 20 | import org.jeecg.common.system.vo.LoginUser; |
21 | 21 | import org.jeecg.common.util.oConvertUtils; |
22 | 22 | import org.jeecg.modules.wms.api.erp.service.IErpService; |
23 | +import org.jeecg.modules.wms.api.mobile.entity.CallBoxBean; | |
24 | +import org.jeecg.modules.wms.api.mobile.service.IMobileService; | |
25 | +import org.jeecg.modules.wms.framework.aspectj.lang.annotation.ApiLogger; | |
26 | +import org.jeecg.modules.wms.framework.controller.HuahengBaseController; | |
23 | 27 | import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail; |
24 | 28 | import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryDetailService; |
25 | 29 | import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentDetail; |
26 | 30 | import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentHeader; |
27 | 31 | import org.jeecg.modules.wms.shipment.shipmentHeader.service.IShipmentDetailService; |
28 | 32 | import org.jeecg.modules.wms.shipment.shipmentHeader.service.IShipmentHeaderService; |
33 | +import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader; | |
29 | 34 | import org.jeecg.utils.HuahengJwtUtil; |
30 | 35 | import org.jeecg.utils.constant.QuantityConstant; |
31 | 36 | import org.jeecgframework.poi.excel.ExcelImportUtil; |
... | ... | @@ -60,6 +65,9 @@ import lombok.extern.slf4j.Slf4j; |
60 | 65 | @Slf4j |
61 | 66 | public class ShipmentHeaderController extends JeecgController<ShipmentHeader, IShipmentHeaderService> { |
62 | 67 | |
68 | + @Resource | |
69 | + private IMobileService mobileService; | |
70 | + | |
63 | 71 | @Autowired |
64 | 72 | private IShipmentHeaderService shipmentHeaderService; |
65 | 73 | |
... | ... | @@ -355,4 +363,17 @@ public class ShipmentHeaderController extends JeecgController<ShipmentHeader, IS |
355 | 363 | Result result = erpService.backShipment(shipmentHeader); |
356 | 364 | return result; |
357 | 365 | } |
366 | + | |
367 | + @AutoLog(value = "PDA出库-呼叫料盒") | |
368 | + @ApiOperation(value = "PDA出库-呼叫料盒", notes = "创建空的分拣出库任务,并返回任务id") | |
369 | + @PostMapping("/callbox") | |
370 | + @ResponseBody | |
371 | + @ApiLogger(apiName = "PDA出库-呼叫料盒", from = "PDA") | |
372 | + public Result<TaskHeader> callBox(@RequestBody CallBoxBean bean, HttpServletRequest req) { | |
373 | + String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req); | |
374 | + | |
375 | + // 补充入库类型 | |
376 | + bean.setType(QuantityConstant.TASK_TYPE_SORTINGSHIPMENT); | |
377 | + return mobileService.callBox(bean, warehouseCode); | |
378 | + } | |
358 | 379 | } |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/stocktaking/cycleCountDetail/service/impl/CycleCountDetailServiceImpl.java
... | ... | @@ -4,6 +4,8 @@ import com.aliyun.oss.ServiceException; |
4 | 4 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
5 | 5 | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
6 | 6 | import org.jeecg.common.api.vo.Result; |
7 | +import org.jeecg.modules.wms.config.container.entity.Container; | |
8 | +import org.jeecg.modules.wms.config.container.service.impl.ContainerServiceImpl; | |
7 | 9 | import org.jeecg.modules.wms.config.location.entity.Location; |
8 | 10 | import org.jeecg.modules.wms.config.location.service.impl.LocationServiceImpl; |
9 | 11 | import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail; |
... | ... | @@ -32,6 +34,7 @@ import java.math.BigDecimal; |
32 | 34 | import java.util.Date; |
33 | 35 | import java.util.List; |
34 | 36 | import java.util.Collection; |
37 | +import java.util.stream.Stream; | |
35 | 38 | |
36 | 39 | /** |
37 | 40 | * @Description: 盘点明细表 |
... | ... | @@ -58,6 +61,8 @@ public class CycleCountDetailServiceImpl extends ServiceImpl<CycleCountDetailMap |
58 | 61 | private TaskDetailServiceImpl taskDetailService; |
59 | 62 | @Resource |
60 | 63 | private CycleCountHeaderServiceImpl cycleCountHeaderService; |
64 | + @Resource | |
65 | + private ContainerServiceImpl containerServiceImpl; | |
61 | 66 | |
62 | 67 | |
63 | 68 | @Override |
... | ... | @@ -119,21 +124,20 @@ public class CycleCountDetailServiceImpl extends ServiceImpl<CycleCountDetailMap |
119 | 124 | inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getInventoryHeaderId,taskId); |
120 | 125 | List<InventoryDetail> inventoryDetails = inventoryDetailService.list(inventoryDetailLambdaQueryWrapper); |
121 | 126 | |
122 | -// LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery(); | |
123 | -// locationLambdaQueryWrapper.eq(Location::getCode, inventoryDetails.get(0).getLocationCode()) | |
124 | -// .eq(Location::getWarehouseCode, inventoryDetails.get(0).getWarehouseCode()) | |
125 | -// .ne(Location::getStatus, QuantityConstant.STATUS_LOCATION_LOCK); | |
126 | -// Location location = locationService.getOne(locationLambdaQueryWrapper); | |
127 | -// if (StringUtils.isNull(location)) { | |
128 | -// return Result.error("库位已锁定!"); | |
129 | -// } | |
127 | + | |
128 | + LambdaQueryWrapper<CycleCountDetail> cycleCountDetailLambdaQueryWrapper = Wrappers.lambdaQuery(); | |
129 | + cycleCountDetailLambdaQueryWrapper.eq(CycleCountDetail::getContainerCode,inventoryDetails.get(0).getContainerCode()) | |
130 | + .ne(CycleCountDetail::getEnableStatus,QuantityConstant.CYCLECOUNT_STATUS_COMPLETED); | |
131 | + List<CycleCountDetail> cycleCountDetails = this.list(cycleCountDetailLambdaQueryWrapper); | |
132 | + if (cycleCountDetails.size() >0) | |
133 | + { | |
134 | + return Result.error("当前容器已经在盘点队列还没有完成 盘点单号"+cycleCountDetails.get(0).getCycleCountHeadCode()); | |
135 | + } | |
130 | 136 | |
131 | 137 | CycleCountDetail cycleCountDetail = new CycleCountDetail(); |
132 | 138 | cycleCountDetail.setCycleCountHeadId(headerId); |
133 | 139 | cycleCountDetail.setContainerCode(inventoryDetails.get(0).getContainerCode()); |
134 | 140 | |
135 | - | |
136 | - | |
137 | 141 | cycleCountDetail.setCycleCountHeadCode(code); |
138 | 142 | cycleCountDetail.setCompanyCode(inventoryDetails.get(0).getCompanyCode()); |
139 | 143 | cycleCountDetail.setWarehouseCode(inventoryDetails.get(0).getWarehouseCode()); |
... | ... | @@ -198,14 +202,21 @@ public class CycleCountDetailServiceImpl extends ServiceImpl<CycleCountDetailMap |
198 | 202 | } |
199 | 203 | Location location = locationService.getLocationByCode( |
200 | 204 | cycleCountDetail.getLocationCode(), warehouseCode); |
201 | - /*if(!loc.getStatus().equals(QuantityConstant.STATUS_EMPTY)){ | |
202 | - return AjaxResult.error(cycleCountDetail.getLocationCode() + "库位不在空闲状态,请先完成其他任务,操作失败!"); | |
203 | - }*/ | |
205 | + if(!location.getStatus().equals(QuantityConstant.STATUS_LOCATION_EMPTY)){ | |
206 | + return Result.error(cycleCountDetail.getLocationCode() + "库位不在空闲状态,请先完成其他任务,操作失败!"); | |
207 | + } | |
204 | 208 | if(StringUtils.isEmpty(location.getContainerCode())){ |
205 | 209 | return Result.error(cycleCountDetail.getLocationCode() + "库位中没有容器,操作失败!"); |
206 | 210 | } |
211 | + | |
207 | 212 | //生成任务同时锁定库位 |
208 | 213 | locationService.updateStatus(location.getCode(), QuantityConstant.STATUS_LOCATION_LOCK,warehouseCode); |
214 | + | |
215 | + //生成任务同时锁定容器 | |
216 | + containerServiceImpl.updateStatus(location.getContainerCode(),QuantityConstant.STATUS_LOCATION_LOCK,warehouseCode); | |
217 | + | |
218 | + | |
219 | + | |
209 | 220 | //每个明细单生成一张主任务,子单就是任务明细。 |
210 | 221 | TaskHeader task = new TaskHeader(); |
211 | 222 | task.setWarehouseCode(warehouseCode); |
... | ... |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java
... | ... | @@ -1725,6 +1725,10 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
1725 | 1725 | locationService.updateStatus(cycleCountDetail.getLocationCode(), |
1726 | 1726 | QuantityConstant.STATUS_LOCATION_EMPTY, taskHeader.getWarehouseCode()); |
1727 | 1727 | |
1728 | + | |
1729 | + //还原容器状态 | |
1730 | + containerService.restoreContainer(cycleCountDetail.getLocationCode(),taskHeader.getWarehouseCode()); | |
1731 | + | |
1728 | 1732 | return Result.OK("完成盘点任务成功"); |
1729 | 1733 | } |
1730 | 1734 | |
... | ... |
huaheng-wms-core/src/main/resources/application-dev.yml
... | ... | @@ -191,7 +191,7 @@ jeecg: |
191 | 191 | #webapp文件路径 |
192 | 192 | webapp: /opt/webapp |
193 | 193 | shiro: |
194 | - excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**,/sys/getWarehouseByUserCode,/test/test**,/api/wms/** | |
194 | + excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**,/sys/getWarehouseByUserCode,/test/test**,/api/wms/**,/sys/cas/client/validateLogin | |
195 | 195 | #阿里云oss存储和大鱼短信秘钥配置 |
196 | 196 | oss: |
197 | 197 | accessKey: ?? |
... | ... | @@ -269,14 +269,14 @@ jeecg: |
269 | 269 | enabled: true |
270 | 270 | #cas单点登录 |
271 | 271 | cas: |
272 | - prefixUrl: http://cas.example.org:8443/cas | |
272 | + prefixUrl: http://cas.server.com:8443/cas | |
273 | 273 | #Mybatis输出sql日志 |
274 | 274 | logging: |
275 | 275 | level: |
276 | - org.jeecg.common: WARN | |
277 | - org.jeecg.modules: WARN | |
276 | + org.jeecg.common: DEBUG | |
277 | + org.jeecg.modules: DEBUG | |
278 | 278 | org.jeecg.modules.wms: DEBUG |
279 | - org.jeecg.config.shiro: INFO | |
279 | + org.jeecg.config.shiro: DEBUG | |
280 | 280 | #swagger |
281 | 281 | knife4j: |
282 | 282 | #开启增强配置 |
... | ... |
huaheng-wms-core/src/main/resources/application-prod.yml
... | ... | @@ -189,7 +189,7 @@ jeecg: |
189 | 189 | #webapp文件路径 |
190 | 190 | webapp: /opt/jeecg-boot/webapp |
191 | 191 | shiro: |
192 | - excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**,/sys/getWarehouseByUserCode,/test/test**,/api/wms/** | |
192 | + excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**,/sys/getWarehouseByUserCode,/test/test**,/api/wms/**,/sys/cas/client/validateLogin | |
193 | 193 | #阿里云oss存储和大鱼短信秘钥配置 |
194 | 194 | oss: |
195 | 195 | accessKey: ?? |
... | ... | @@ -258,7 +258,7 @@ jeecg: |
258 | 258 | enabled: true |
259 | 259 | #cas单点登录 |
260 | 260 | cas: |
261 | - prefixUrl: http://cas.example.org:8443/cas | |
261 | + prefixUrl: http://172.16.29.77:8443/cas | |
262 | 262 | #Mybatis输出sql日志 |
263 | 263 | logging: |
264 | 264 | level: |
... | ... |
huaheng-wms-core/src/main/resources/application-test.yml
... | ... | @@ -191,7 +191,7 @@ jeecg: |
191 | 191 | #webapp文件路径 |
192 | 192 | webapp: /opt/webapp |
193 | 193 | shiro: |
194 | - excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**,/sys/getWarehouseByUserCode,/test/test**,/api/wms/** | |
194 | + excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**,/sys/getWarehouseByUserCode,/test/test**,/api/wms/**,/sys/cas/client/validateLogin | |
195 | 195 | #阿里云oss存储和大鱼短信秘钥配置 |
196 | 196 | oss: |
197 | 197 | accessKey: ?? |
... | ... | @@ -270,12 +270,12 @@ jeecg: |
270 | 270 | enabled: true |
271 | 271 | #cas单点登录 |
272 | 272 | cas: |
273 | - prefixUrl: http://cas.example.org:8443/cas | |
273 | + prefixUrl: http://172.16.29.77:8443/cas | |
274 | 274 | #Mybatis输出sql日志 |
275 | 275 | logging: |
276 | 276 | level: |
277 | - org.jeecg.common: WARN | |
278 | - org.jeecg.modules: WARN | |
277 | + org.jeecg.common: DEBUG | |
278 | + org.jeecg.modules: DEBUG | |
279 | 279 | org.jeecg.modules.wms: DEBUG |
280 | 280 | org.jeecg.config.shiro: DEBUG |
281 | 281 | #swagger |
... | ... |