Commit 1d7059e0408a6b658d2b5149317aea74dfc5ca29
1 parent
959f49b6
模拟工位叫料
Showing
10 changed files
with
252 additions
and
44 deletions
ant-design-vue-jeecg/src/api/api.js
@@ -275,7 +275,7 @@ export const qualityInventoryDetail = (params) => postAction('/inventory/invento | @@ -275,7 +275,7 @@ export const qualityInventoryDetail = (params) => postAction('/inventory/invento | ||
275 | //质检登记 | 275 | //质检登记 |
276 | export const qualityRegister = (params) => postAction('/task/taskHeader/qualityRegister', params); | 276 | export const qualityRegister = (params) => postAction('/task/taskHeader/qualityRegister', params); |
277 | //创建出库任务,AGV去接 | 277 | //创建出库任务,AGV去接 |
278 | -export const createShipmentTaskByAgv = (params) => postAction('/shipment/shipmentCombination/createShipmentTask', params); | 278 | +export const createShipmentTaskByAgv = (params) => postAction('/shipment/shipmentCombination/createShipmentTaskByAgv', params); |
279 | 279 | ||
280 | // 中转HTTP请求 | 280 | // 中转HTTP请求 |
281 | export const transitRESTful = { | 281 | export const transitRESTful = { |
ant-design-vue-jeecg/src/views/system/shipment/ShipmentContainerHeaderList.vue
@@ -122,8 +122,8 @@ | @@ -122,8 +122,8 @@ | ||
122 | </span> | 122 | </span> |
123 | 123 | ||
124 | <span slot="action" slot-scope="text, record"> | 124 | <span slot="action" slot-scope="text, record"> |
125 | - <a v-if="record.status == 0 && record.zoneType =='A'" @click="createShipmentTaskByAgv(record)"><a-button type="primary">生成任务</a-button><a-divider type="vertical"/></a> | ||
126 | - <a v-if="record.status == 0 && record.zoneType !='A'" @click="selectPort(record)"><a-button type="primary">生成任务</a-button><a-divider type="vertical"/></a> | 125 | +<!-- <a v-if="record.status == 0 && record.zoneType =='A'" @click="selectPort(record)"><a-button type="primary">生成任务</a-button><a-divider type="vertical"/></a>--> |
126 | + <a v-if="record.status == 0 && record.zoneType =='L'" @click="selectPort(record)"><a-button type="primary">生成任务</a-button><a-divider type="vertical"/></a> | ||
127 | <a-popconfirm v-if="record.status == 0" v-has="'shipmentContainerHeader:delete'" title="确定取消配盘吗?" @confirm="() => handleDelete(record.id)"> | 127 | <a-popconfirm v-if="record.status == 0" v-has="'shipmentContainerHeader:delete'" title="确定取消配盘吗?" @confirm="() => handleDelete(record.id)"> |
128 | <a><a-button type="danger">取消配盘</a-button> <a-divider type="vertical"/></a> | 128 | <a><a-button type="danger">取消配盘</a-button> <a-divider type="vertical"/></a> |
129 | </a-popconfirm> | 129 | </a-popconfirm> |
@@ -140,6 +140,7 @@ | @@ -140,6 +140,7 @@ | ||
140 | 140 | ||
141 | <shipmentContainerHeader-modal ref="modalForm" @ok="modalFormOk"></shipmentContainerHeader-modal> | 141 | <shipmentContainerHeader-modal ref="modalForm" @ok="modalFormOk"></shipmentContainerHeader-modal> |
142 | <shipmentContainerSelect-modal ref="modalForm2" @ok="modalFormOk"></shipmentContainerSelect-modal> | 142 | <shipmentContainerSelect-modal ref="modalForm2" @ok="modalFormOk"></shipmentContainerSelect-modal> |
143 | + <createShipmentTaskByAgv-modal ref="modalForm3" @ok="modalFormOk"></createShipmentTaskByAgv-modal> | ||
143 | </a-card> | 144 | </a-card> |
144 | </template> | 145 | </template> |
145 | 146 | ||
@@ -154,11 +155,13 @@ import '@/assets/less/TableExpand.less' | @@ -154,11 +155,13 @@ import '@/assets/less/TableExpand.less' | ||
154 | import {createShipmentTask, execute, getCompanyList, getCustomerList, getShipmentTypeList, getZoneList} from '@/api/api' | 155 | import {createShipmentTask, execute, getCompanyList, getCustomerList, getShipmentTypeList, getZoneList} from '@/api/api' |
155 | import {selectSortingPort, createShipmentTaskByAgv} from '@/api/api' | 156 | import {selectSortingPort, createShipmentTaskByAgv} from '@/api/api' |
156 | import ShipmentContainerSelectModal from "./modules/ShipmentContainerSelectModal"; | 157 | import ShipmentContainerSelectModal from "./modules/ShipmentContainerSelectModal"; |
158 | +import CreateShipmentTaskByAgvModal from "./modules/CreateShipmentTaskByAgvModal"; | ||
157 | 159 | ||
158 | export default { | 160 | export default { |
159 | name: "ShipmentContainerHeaderList", | 161 | name: "ShipmentContainerHeaderList", |
160 | mixins: [JeecgListMixin], | 162 | mixins: [JeecgListMixin], |
161 | components: { | 163 | components: { |
164 | + CreateShipmentTaskByAgvModal, | ||
162 | ShipmentContainerSelectModal, | 165 | ShipmentContainerSelectModal, |
163 | ShipmentContainerDetailList, | 166 | ShipmentContainerDetailList, |
164 | ShipmentContainerHeaderModal | 167 | ShipmentContainerHeaderModal |
@@ -341,6 +344,10 @@ export default { | @@ -341,6 +344,10 @@ export default { | ||
341 | this.$refs.modalForm2.edit(record); | 344 | this.$refs.modalForm2.edit(record); |
342 | this.$refs.modalForm2.title = "选择出库口"; | 345 | this.$refs.modalForm2.title = "选择出库口"; |
343 | }, | 346 | }, |
347 | + openCreateShipmentTaskAgv(record) { | ||
348 | + this.$refs.modalForm3.edit(record); | ||
349 | + this.$refs.modalForm3.title = "选择出库口"; | ||
350 | + }, | ||
344 | createShipmentTaskByAgv(record) { | 351 | createShipmentTaskByAgv(record) { |
345 | this.loading = true; | 352 | this.loading = true; |
346 | createShipmentTaskByAgv(record).then((res) => { | 353 | createShipmentTaskByAgv(record).then((res) => { |
ant-design-vue-jeecg/src/views/system/shipment/modules/CreateShipmentTaskByAgvModal.vue
0 → 100644
1 | +<template> | ||
2 | + <j-modal | ||
3 | + :title="title" | ||
4 | + :width="width" | ||
5 | + :visible="visible" | ||
6 | + :confirmLoading="confirmLoading" | ||
7 | + switchFullscreen | ||
8 | + @ok="handleOk" | ||
9 | + @cancel="handleCancel" | ||
10 | + cancelText="关闭"> | ||
11 | + <a-spin :spinning="confirmLoading"> | ||
12 | + <a-form-model ref="form" :model="model" :rules="validatorRules"> | ||
13 | + <a-row> | ||
14 | + <a-col :span="24"> | ||
15 | + <a-form-model-item label="出库口" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="toPort"> | ||
16 | + <a-select | ||
17 | + show-search | ||
18 | + placeholder="请选择出库口" | ||
19 | + option-filter-prop="children" | ||
20 | + v-model="model.toPort"> | ||
21 | + <a-select-option v-for="item in portList" :key="item.name" :value="item.code">{{ | ||
22 | + item.name | ||
23 | + }} | ||
24 | + </a-select-option> | ||
25 | + </a-select> | ||
26 | + </a-form-model-item> | ||
27 | + <a-col :span="24"> | ||
28 | + <a-form-model-item label="去向工位" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="toAgvPort"> | ||
29 | + <a-input v-model="model.toAgvPort" placeholder="请输入去向工位" style="width: 100%"/> | ||
30 | + </a-form-model-item> | ||
31 | + </a-col> | ||
32 | + </a-col> | ||
33 | + </a-row> | ||
34 | + </a-form-model> | ||
35 | + </a-spin> | ||
36 | + </j-modal> | ||
37 | +</template> | ||
38 | + | ||
39 | +<script> | ||
40 | + | ||
41 | +import {httpAction} from '@/api/manage' | ||
42 | +import {validateDuplicateValue} from '@/utils/util' | ||
43 | +import {createShipmentTask, createShipmentTaskByAgv, createShipmentBatchTask} from '@/api/api' | ||
44 | +import {selectSortingPort} from '@/api/api' | ||
45 | + | ||
46 | +export default { | ||
47 | + name: "CreateShipmentTaskByAgvModal", | ||
48 | + components: {}, | ||
49 | + props: { | ||
50 | + mainId: { | ||
51 | + type: String, | ||
52 | + required: false, | ||
53 | + default: '' | ||
54 | + } | ||
55 | + }, | ||
56 | + data() { | ||
57 | + return { | ||
58 | + portList: [], | ||
59 | + flag:'0', | ||
60 | + shipmentContainerHeaderList:[], | ||
61 | + title: "操作", | ||
62 | + width: 500, | ||
63 | + visible: false, | ||
64 | + model: {}, | ||
65 | + labelCol: { | ||
66 | + xs: {span: 24}, | ||
67 | + sm: {span: 5}, | ||
68 | + }, | ||
69 | + wrapperCol: { | ||
70 | + xs: {span: 24}, | ||
71 | + sm: {span: 16}, | ||
72 | + }, | ||
73 | + | ||
74 | + confirmLoading: false, | ||
75 | + validatorRules: {}, | ||
76 | + url: { | ||
77 | + createTask: "/shipment/shipmentContainerHeader/createShipmentTask", | ||
78 | + } | ||
79 | + | ||
80 | + } | ||
81 | + }, | ||
82 | + created() { | ||
83 | + //备份model原始值 | ||
84 | + this.modelDefault = JSON.parse(JSON.stringify(this.model)); | ||
85 | + }, | ||
86 | + methods: { | ||
87 | + add() { | ||
88 | + this.edit(this.modelDefault); | ||
89 | + }, | ||
90 | + edit(record) { | ||
91 | + this.flag='0'; | ||
92 | + this.getPortList(record); | ||
93 | + }, | ||
94 | + batchEdit(record) { | ||
95 | + this.visible = true; | ||
96 | + this.flag='1'; | ||
97 | + this.getPortList(record[0]) | ||
98 | + this.shipmentContainerHeaderList=record; | ||
99 | + }, | ||
100 | + close() { | ||
101 | + this.$emit('close'); | ||
102 | + this.visible = false; | ||
103 | + this.$refs.form.clearValidate(); | ||
104 | + }, | ||
105 | + handleOk() { | ||
106 | + const that = this; | ||
107 | + if (this.flag=='1'){ | ||
108 | + this.$refs.form.validate(valid => { | ||
109 | + if (valid) { | ||
110 | + this.shipmentContainerHeaderList.forEach(x=>{ | ||
111 | + x["toPort"]=that.model.toPort; | ||
112 | + x["toAgvPort"]=that.model.toAgvPort; | ||
113 | + }) | ||
114 | + createShipmentBatchTask(this.shipmentContainerHeaderList).then((res) => { | ||
115 | + if (res.success) { | ||
116 | + that.$message.success(res.message); | ||
117 | + that.$emit('ok'); | ||
118 | + } else { | ||
119 | + that.$message.warning(res.message); | ||
120 | + } | ||
121 | + }).finally(() => { | ||
122 | + that.confirmLoading = false; | ||
123 | + that.close(); | ||
124 | + }); | ||
125 | + }else { | ||
126 | + return false | ||
127 | + } | ||
128 | + }) | ||
129 | + | ||
130 | + }else{ | ||
131 | + // 触发表单验证 | ||
132 | + this.$refs.form.validate(valid => { | ||
133 | + if (valid) { | ||
134 | + that.confirmLoading = true; | ||
135 | + createShipmentTaskByAgv(this.model).then((res) => { | ||
136 | + if (res.success) { | ||
137 | + that.$message.success(res.message); | ||
138 | + that.$emit('ok'); | ||
139 | + } else { | ||
140 | + that.$message.warning(res.message); | ||
141 | + } | ||
142 | + }).finally(() => { | ||
143 | + that.confirmLoading = false; | ||
144 | + that.close(); | ||
145 | + }); | ||
146 | + } else { | ||
147 | + return false | ||
148 | + } | ||
149 | + }) | ||
150 | + } | ||
151 | + | ||
152 | + | ||
153 | + }, | ||
154 | + handleCancel() { | ||
155 | + this.close() | ||
156 | + }, | ||
157 | + getPortList(record) { | ||
158 | + console.log("getPortList"); | ||
159 | + selectSortingPort(record).then((res) => { | ||
160 | + if (res.success) { | ||
161 | + this.portList = res.result; | ||
162 | + console.log("getPortList11"); | ||
163 | + this.model = Object.assign({}, record); | ||
164 | + this.visible = true; | ||
165 | + } | ||
166 | + }); | ||
167 | + } | ||
168 | + | ||
169 | + } | ||
170 | +} | ||
171 | +</script> |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/AutoCreateAgvTask.java
@@ -36,18 +36,18 @@ public class AutoCreateAgvTask implements Job { | @@ -36,18 +36,18 @@ public class AutoCreateAgvTask implements Job { | ||
36 | 36 | ||
37 | @Override | 37 | @Override |
38 | public void execute(JobExecutionContext context) throws JobExecutionException { | 38 | public void execute(JobExecutionContext context) throws JobExecutionException { |
39 | - log.info(String.format("AutoSendAgvTask 下发AGV任务开始执行,时间:" + DateUtils.getTimestamp())); | 39 | + log.info(String.format("AutoCreateAgvTask 生成AGV任务开始执行,时间:" + DateUtils.getTimestamp())); |
40 | LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); | 40 | LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); |
41 | - taskHeaderLambdaQueryWrapper.eq(TaskHeader::getSendAgv, QuantityConstant.AGV_NEED_SEND).le(TaskHeader::getStatus, QuantityConstant.TASK_STATUS_RELEASE) | ||
42 | - .eq(TaskHeader::getTaskType, QuantityConstant.TASK_TYPE_WHOLESHIPMENT).ge(TaskHeader::getCreateTime, DateUtil.offsetDay(new Date(), -180)) | ||
43 | - .orderByAsc(TaskHeader::getCreateTime); | 41 | + taskHeaderLambdaQueryWrapper.eq(TaskHeader::getCreateAgvTask, QuantityConstant.AGV_CREATE_NEED) |
42 | + .eq(TaskHeader::getStatus, QuantityConstant.TASK_STATUS_COMPLETED).eq(TaskHeader::getTaskType, QuantityConstant.TASK_TYPE_WHOLESHIPMENT) | ||
43 | + .ge(TaskHeader::getCreateTime, DateUtil.offsetDay(new Date(), -180)).orderByAsc(TaskHeader::getCreateTime); | ||
44 | List<TaskHeader> taskHeaderList = taskHeaderService.list(taskHeaderLambdaQueryWrapper); | 44 | List<TaskHeader> taskHeaderList = taskHeaderService.list(taskHeaderLambdaQueryWrapper); |
45 | for (TaskHeader taskHeader : taskHeaderList) { | 45 | for (TaskHeader taskHeader : taskHeaderList) { |
46 | String containerCode = taskHeader.getContainerCode(); | 46 | String containerCode = taskHeader.getContainerCode(); |
47 | String warehouseCode = taskHeader.getWarehouseCode(); | 47 | String warehouseCode = taskHeader.getWarehouseCode(); |
48 | String zoneCode = taskHeader.getZoneCode(); | 48 | String zoneCode = taskHeader.getZoneCode(); |
49 | - String fromPortCode = taskHeader.getFromLocationCode(); | ||
50 | - String toPortCode = taskHeader.getToPortCode(); | 49 | + String fromPortCode = taskHeader.getToPortCode(); |
50 | + String toPortCode = taskHeader.getToAgvPort(); | ||
51 | AgvTask agvTask = new AgvTask(); | 51 | AgvTask agvTask = new AgvTask(); |
52 | agvTask.setWarehouseCode(warehouseCode); | 52 | agvTask.setWarehouseCode(warehouseCode); |
53 | agvTask.setZoneCode(zoneCode); | 53 | agvTask.setZoneCode(zoneCode); |
@@ -63,7 +63,7 @@ public class AutoCreateAgvTask implements Job { | @@ -63,7 +63,7 @@ public class AutoCreateAgvTask implements Job { | ||
63 | taskHeader = new TaskHeader(); | 63 | taskHeader = new TaskHeader(); |
64 | taskHeader.setId(taskHeaderId); | 64 | taskHeader.setId(taskHeaderId); |
65 | taskHeader.setAgvTaskId(agvTask.getId()); | 65 | taskHeader.setAgvTaskId(agvTask.getId()); |
66 | - taskHeader.setSendAgv(QuantityConstant.AGV_SEND_OK); | 66 | + taskHeader.setCreateAgvTask(QuantityConstant.AGV_CREATE_OK); |
67 | if (!taskHeaderService.updateById(taskHeader)) { | 67 | if (!taskHeaderService.updateById(taskHeader)) { |
68 | throw new JeecgBootException("更新下发任务状态失败"); | 68 | throw new JeecgBootException("更新下发任务状态失败"); |
69 | } | 69 | } |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/controller/ShipmentCombinationController.java
@@ -240,10 +240,11 @@ public class ShipmentCombinationController { | @@ -240,10 +240,11 @@ public class ShipmentCombinationController { | ||
240 | } | 240 | } |
241 | 241 | ||
242 | /** | 242 | /** |
243 | - * 创建出库任务,AGV去接 | 243 | + * 立库区 |
244 | + * 创建出库任务, 出库任务完成以后,AGV去接 | ||
244 | * @return | 245 | * @return |
245 | */ | 246 | */ |
246 | - @ApiOperation(value = "创建出库任务,AGV去接", notes = "创建出库任务,AGV去接") | 247 | + @ApiOperation(value = "创建出库任务, 出库任务完成以后,AGV去接", notes = "创建出库任务, 出库任务完成以后,AGV去接") |
247 | @PostMapping("/createShipmentTaskByAgv") | 248 | @PostMapping("/createShipmentTaskByAgv") |
248 | @ResponseBody | 249 | @ResponseBody |
249 | public Result createShipmentTaskByAgv(@RequestBody ShipmentContainerHeader shipmentContainerHeader, HttpServletRequest req) { | 250 | public Result createShipmentTaskByAgv(@RequestBody ShipmentContainerHeader shipmentContainerHeader, HttpServletRequest req) { |
@@ -251,4 +252,19 @@ public class ShipmentCombinationController { | @@ -251,4 +252,19 @@ public class ShipmentCombinationController { | ||
251 | Result result = shipmentCombinationService.createShipmentTask(shipmentContainerHeader, QuantityConstant.TASK_TYPE_WHOLESHIPMENT, warehouseCode, 0, 0, 0); | 252 | Result result = shipmentCombinationService.createShipmentTask(shipmentContainerHeader, QuantityConstant.TASK_TYPE_WHOLESHIPMENT, warehouseCode, 0, 0, 0); |
252 | return result; | 253 | return result; |
253 | } | 254 | } |
255 | + | ||
256 | + /** | ||
257 | + * AGV库区 | ||
258 | + * 同时创建出库任务和AGV任务 | ||
259 | + * @return | ||
260 | + */ | ||
261 | + @ApiOperation(value = "同时创建出库任务和AGV任务", notes = "同时创建出库任务和AGV任务") | ||
262 | + @PostMapping("/createShipmentTaskAndAgvTask") | ||
263 | + @ResponseBody | ||
264 | + public Result createShipmentTaskAndAgvTask(@RequestBody ShipmentContainerHeader shipmentContainerHeader, HttpServletRequest req) { | ||
265 | + String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req); | ||
266 | + Result result = shipmentCombinationService.createShipmentTask(shipmentContainerHeader, QuantityConstant.TASK_TYPE_WHOLESHIPMENT, warehouseCode, 0, 0, 0); | ||
267 | + | ||
268 | + return result; | ||
269 | + } | ||
254 | } | 270 | } |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/impl/ShipmentCombinationServiceImpl.java
@@ -852,6 +852,8 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi | @@ -852,6 +852,8 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi | ||
852 | int sequenceNumber) { | 852 | int sequenceNumber) { |
853 | Integer preTaskNo = 0; | 853 | Integer preTaskNo = 0; |
854 | boolean success = false; | 854 | boolean success = false; |
855 | + String toPort = shipmentContainerHeader.getToPort(); | ||
856 | + String toAgvPort = shipmentContainerHeader.getToAgvPort(); | ||
855 | shipmentContainerHeader = shipmentContainerHeaderService.getById(shipmentContainerHeader.getId()); | 857 | shipmentContainerHeader = shipmentContainerHeaderService.getById(shipmentContainerHeader.getId()); |
856 | if (shipmentContainerHeader == null) { | 858 | if (shipmentContainerHeader == null) { |
857 | return Result.error("生成出库任务时, 出库组盘头" + "未找到,操作中止"); | 859 | return Result.error("生成出库任务时, 出库组盘头" + "未找到,操作中止"); |
@@ -871,7 +873,6 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi | @@ -871,7 +873,6 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi | ||
871 | String fromLocationCode = shipmentContainerHeader.getFromLocationCode(); | 873 | String fromLocationCode = shipmentContainerHeader.getFromLocationCode(); |
872 | String toLocationCode = shipmentContainerHeader.getToLocationCode(); | 874 | String toLocationCode = shipmentContainerHeader.getToLocationCode(); |
873 | String containerCode = shipmentContainerHeader.getContainerCode(); | 875 | String containerCode = shipmentContainerHeader.getContainerCode(); |
874 | - String toPort = shipmentContainerHeader.getToPort(); | ||
875 | if (StringUtils.isEmpty(fromLocationCode)) { | 876 | if (StringUtils.isEmpty(fromLocationCode)) { |
876 | return Result.error("生成出库任务时, 出库组盘头没有起始库位编码"); | 877 | return Result.error("生成出库任务时, 出库组盘头没有起始库位编码"); |
877 | } | 878 | } |
@@ -936,13 +937,16 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi | @@ -936,13 +937,16 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi | ||
936 | taskHeader.setInnernalTaskType(QuantityConstant.TASK_INTENERTYPE_SHIPMENT); | 937 | taskHeader.setInnernalTaskType(QuantityConstant.TASK_INTENERTYPE_SHIPMENT); |
937 | taskHeader.setZoneCode(zoneCode); | 938 | taskHeader.setZoneCode(zoneCode); |
938 | taskHeader.setShipmentOrder(shipmentOrder); | 939 | taskHeader.setShipmentOrder(shipmentOrder); |
939 | - taskHeader.setToAgvPort(shipmentContainerHeader.getToAgvPort()); | 940 | + if (StringUtils.isNotEmpty(toAgvPort)) { |
941 | + taskHeader.setToAgvPort(toAgvPort); | ||
942 | + taskHeader.setCreateAgvTask(QuantityConstant.AGV_CREATE_NEED); | ||
943 | + } | ||
940 | taskHeader.setSequence(sequence); | 944 | taskHeader.setSequence(sequence); |
941 | taskHeader.setSequenceNumber(sequenceNumber); | 945 | taskHeader.setSequenceNumber(sequenceNumber); |
942 | taskHeader.setWarehouseCode(warehouseCode); | 946 | taskHeader.setWarehouseCode(warehouseCode); |
943 | taskHeader.setStatus(QuantityConstant.TASK_STATUS_BUILD); | 947 | taskHeader.setStatus(QuantityConstant.TASK_STATUS_BUILD); |
944 | taskHeader.setContainerCode(containerCode); | 948 | taskHeader.setContainerCode(containerCode); |
945 | - taskHeader.setToPortCode(shipmentContainerHeader.getToPort()); | 949 | + taskHeader.setToPortCode(toPort); |
946 | taskHeader.setFromLocationCode(fromLocationCode); | 950 | taskHeader.setFromLocationCode(fromLocationCode); |
947 | if (taskType == QuantityConstant.TASK_TYPE_SORTINGSHIPMENT) { | 951 | if (taskType == QuantityConstant.TASK_TYPE_SORTINGSHIPMENT) { |
948 | taskHeader.setToLocationCode(toLocationCode); | 952 | taskHeader.setToLocationCode(toLocationCode); |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/agvTask/service/IAgvTaskService.java
@@ -16,30 +16,32 @@ public interface IAgvTaskService extends IService<AgvTask> { | @@ -16,30 +16,32 @@ public interface IAgvTaskService extends IService<AgvTask> { | ||
16 | /** | 16 | /** |
17 | * 新建AGV任务 | 17 | * 新建AGV任务 |
18 | */ | 18 | */ |
19 | - public Result addAgvTask(AgvTask agvTask, String warehouseCode); | 19 | + Result addAgvTask(AgvTask agvTask, String warehouseCode); |
20 | 20 | ||
21 | /** | 21 | /** |
22 | * 下发AGV任务给ACS系统 | 22 | * 下发AGV任务给ACS系统 |
23 | */ | 23 | */ |
24 | - public Result sendAgvTaskToAcs(Integer taskId); | 24 | + Result sendAgvTaskToAcs(Integer taskId); |
25 | 25 | ||
26 | /** | 26 | /** |
27 | * 完成AGV任务 | 27 | * 完成AGV任务 |
28 | */ | 28 | */ |
29 | - public Result completeAgvTask(Integer taskId); | 29 | + Result completeAgvTask(Integer taskId); |
30 | 30 | ||
31 | /** | 31 | /** |
32 | * 取消AGV任务 | 32 | * 取消AGV任务 |
33 | */ | 33 | */ |
34 | - public Result cancelAgvTask(Integer taskId); | 34 | + Result cancelAgvTask(Integer taskId); |
35 | 35 | ||
36 | - public AgvTask getAgvTaskByPort(String portCode, String warehouseCode); | 36 | + AgvTask getAgvTaskByPort(String portCode, String warehouseCode); |
37 | 37 | ||
38 | - public AgvTask getAgvTaskBuFromPort(String fromPortCode, String warehouseCode); | 38 | + AgvTask getAgvTaskBuContainerCode(String containerCode, String warehouseCode); |
39 | 39 | ||
40 | - public AgvTask getAgvTaskBuToPort(String toPortCode, String warehouseCode); | 40 | + AgvTask getAgvTaskBuFromPort(String fromPortCode, String warehouseCode); |
41 | 41 | ||
42 | - public AgvTask getAgvTaskById(Integer agvTaskId, String warehouseCode); | 42 | + AgvTask getAgvTaskBuToPort(String toPortCode, String warehouseCode); |
43 | 43 | ||
44 | - public Result editAgvTask(AgvTask agvTask,String warehouseCode); | 44 | + AgvTask getAgvTaskById(Integer agvTaskId, String warehouseCode); |
45 | + | ||
46 | + Result editAgvTask(AgvTask agvTask, String warehouseCode); | ||
45 | } | 47 | } |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/agvTask/service/impl/AgvTaskServiceImpl.java
@@ -43,6 +43,8 @@ public class AgvTaskServiceImpl extends ServiceImpl<AgvTaskMapper, AgvTask> impl | @@ -43,6 +43,8 @@ public class AgvTaskServiceImpl extends ServiceImpl<AgvTaskMapper, AgvTask> impl | ||
43 | private ITaskHeaderService taskHeaderService; | 43 | private ITaskHeaderService taskHeaderService; |
44 | @Resource | 44 | @Resource |
45 | private IInventoryDetailService inventoryDetailService; | 45 | private IInventoryDetailService inventoryDetailService; |
46 | + @Resource | ||
47 | + private IAgvTaskService agvTaskService; | ||
46 | 48 | ||
47 | @Override | 49 | @Override |
48 | public Result addAgvTask(AgvTask agvTask, String warehouseCode) { | 50 | public Result addAgvTask(AgvTask agvTask, String warehouseCode) { |
@@ -54,16 +56,19 @@ public class AgvTaskServiceImpl extends ServiceImpl<AgvTaskMapper, AgvTask> impl | @@ -54,16 +56,19 @@ public class AgvTaskServiceImpl extends ServiceImpl<AgvTaskMapper, AgvTask> impl | ||
54 | if (container == null) { | 56 | if (container == null) { |
55 | return Result.error("生成AGV任务,容器号:" + containerCode + "未找到"); | 57 | return Result.error("生成AGV任务,容器号:" + containerCode + "未找到"); |
56 | } | 58 | } |
57 | - if (!container.getStatus().equals(QuantityConstant.STATUS_CONTAINER_LOCK)) { | ||
58 | - if (!containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, warehouseCode)) { | ||
59 | - throw new JeecgBootException("生成AGV任务,锁定容器失败:" + containerCode); | ||
60 | - } | 59 | +// if (!container.getStatus().equals(QuantityConstant.STATUS_CONTAINER_LOCK)) { |
60 | +// if (!containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, warehouseCode)) { | ||
61 | +// throw new JeecgBootException("生成AGV任务,锁定容器失败:" + containerCode); | ||
62 | +// } | ||
63 | +// } | ||
64 | + if (agvTaskService.getAgvTaskBuContainerCode(containerCode, warehouseCode) != null) { | ||
65 | + return Result.error("生成AGV任务失败,已经生成AGV任务"); | ||
61 | } | 66 | } |
62 | agvTask.setWarehouseCode(warehouseCode); | 67 | agvTask.setWarehouseCode(warehouseCode); |
63 | agvTask.setTaskType(QuantityConstant.AGV_TYPE_TAKE_AND_RELEASE); | 68 | agvTask.setTaskType(QuantityConstant.AGV_TYPE_TAKE_AND_RELEASE); |
64 | agvTask.setStatus(QuantityConstant.AGV_TASK_STATUS_BUILD); | 69 | agvTask.setStatus(QuantityConstant.AGV_TASK_STATUS_BUILD); |
65 | agvTask.setPriority(10); | 70 | agvTask.setPriority(10); |
66 | - boolean success = save(agvTask); | 71 | + boolean success = agvTaskService.save(agvTask); |
67 | if (!success) { | 72 | if (!success) { |
68 | return Result.OK("添加失败"); | 73 | return Result.OK("添加失败"); |
69 | } | 74 | } |
@@ -182,20 +187,12 @@ public class AgvTaskServiceImpl extends ServiceImpl<AgvTaskMapper, AgvTask> impl | @@ -182,20 +187,12 @@ public class AgvTaskServiceImpl extends ServiceImpl<AgvTaskMapper, AgvTask> impl | ||
182 | throw new JeecgBootException("取消AGV任务。 更新终点库位状态失败"); | 187 | throw new JeecgBootException("取消AGV任务。 更新终点库位状态失败"); |
183 | } | 188 | } |
184 | } | 189 | } |
185 | - Container container = containerService.getContainerByCode(containerCode, warehouseCode); | ||
186 | - if (container == null) { | ||
187 | - throw new JeecgBootException("取消AGV任务。 根据容器编码没有找到容器"); | ||
188 | - } | ||
189 | // 2023-04-11 托盘状态与填充状态分离 | 190 | // 2023-04-11 托盘状态与填充状态分离 |
190 | // String containerStatus = QuantityConstant.STATUS_CONTAINER_EMPTY; | 191 | // String containerStatus = QuantityConstant.STATUS_CONTAINER_EMPTY; |
191 | // List<InventoryDetail> inventoryDetailList = inventoryDetailService.getInventoryDetailListByContainerCode(containerCode, warehouseCode); | 192 | // List<InventoryDetail> inventoryDetailList = inventoryDetailService.getInventoryDetailListByContainerCode(containerCode, warehouseCode); |
192 | // if (inventoryDetailList.size() != 0) { | 193 | // if (inventoryDetailList.size() != 0) { |
193 | // containerStatus = QuantityConstant.STATUS_CONTAINER_SOME; | 194 | // containerStatus = QuantityConstant.STATUS_CONTAINER_SOME; |
194 | // } | 195 | // } |
195 | - success = containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_EMPTY, warehouseCode); | ||
196 | - if (!success) { | ||
197 | - throw new JeecgBootException("取消AGV任务。 更新容器状态失败"); | ||
198 | - } | ||
199 | int status = agvTask.getStatus(); | 196 | int status = agvTask.getStatus(); |
200 | if (status != QuantityConstant.AGV_TASK_STATUS_BUILD) { | 197 | if (status != QuantityConstant.AGV_TASK_STATUS_BUILD) { |
201 | Result result = acsService.cancelAGVTask(agvTask); | 198 | Result result = acsService.cancelAGVTask(agvTask); |
@@ -220,9 +217,19 @@ public class AgvTaskServiceImpl extends ServiceImpl<AgvTaskMapper, AgvTask> impl | @@ -220,9 +217,19 @@ public class AgvTaskServiceImpl extends ServiceImpl<AgvTaskMapper, AgvTask> impl | ||
220 | } | 217 | } |
221 | 218 | ||
222 | @Override | 219 | @Override |
220 | + public AgvTask getAgvTaskBuContainerCode(String containerCode, String warehouseCode) { | ||
221 | + LambdaQueryWrapper<AgvTask> agvTaskLambdaQueryWrapper = Wrappers.lambdaQuery(); | ||
222 | + agvTaskLambdaQueryWrapper.eq(AgvTask::getContainerCode, containerCode).eq(AgvTask::getWarehouseCode, warehouseCode).lt(AgvTask::getStatus, | ||
223 | + QuantityConstant.AGV_TASK_STATUS_COMPLETED); | ||
224 | + AgvTask agvTask = getOne(agvTaskLambdaQueryWrapper); | ||
225 | + return agvTask; | ||
226 | + } | ||
227 | + | ||
228 | + @Override | ||
223 | public AgvTask getAgvTaskBuFromPort(String fromPortCode, String warehouseCode) { | 229 | public AgvTask getAgvTaskBuFromPort(String fromPortCode, String warehouseCode) { |
224 | LambdaQueryWrapper<AgvTask> agvTaskLambdaQueryWrapper = Wrappers.lambdaQuery(); | 230 | LambdaQueryWrapper<AgvTask> agvTaskLambdaQueryWrapper = Wrappers.lambdaQuery(); |
225 | - agvTaskLambdaQueryWrapper.eq(AgvTask::getFromPort, fromPortCode).eq(AgvTask::getWarehouseCode, warehouseCode); | 231 | + agvTaskLambdaQueryWrapper.eq(AgvTask::getFromPort, fromPortCode).eq(AgvTask::getWarehouseCode, warehouseCode).lt(AgvTask::getStatus, |
232 | + QuantityConstant.AGV_TASK_STATUS_COMPLETED); | ||
226 | AgvTask agvTask = getOne(agvTaskLambdaQueryWrapper); | 233 | AgvTask agvTask = getOne(agvTaskLambdaQueryWrapper); |
227 | return agvTask; | 234 | return agvTask; |
228 | } | 235 | } |
@@ -230,7 +237,8 @@ public class AgvTaskServiceImpl extends ServiceImpl<AgvTaskMapper, AgvTask> impl | @@ -230,7 +237,8 @@ public class AgvTaskServiceImpl extends ServiceImpl<AgvTaskMapper, AgvTask> impl | ||
230 | @Override | 237 | @Override |
231 | public AgvTask getAgvTaskBuToPort(String toPortCode, String warehouseCode) { | 238 | public AgvTask getAgvTaskBuToPort(String toPortCode, String warehouseCode) { |
232 | LambdaQueryWrapper<AgvTask> agvTaskLambdaQueryWrapper = Wrappers.lambdaQuery(); | 239 | LambdaQueryWrapper<AgvTask> agvTaskLambdaQueryWrapper = Wrappers.lambdaQuery(); |
233 | - agvTaskLambdaQueryWrapper.eq(AgvTask::getToPort, toPortCode).eq(AgvTask::getWarehouseCode, warehouseCode); | 240 | + agvTaskLambdaQueryWrapper.eq(AgvTask::getToPort, toPortCode).eq(AgvTask::getWarehouseCode, warehouseCode).lt(AgvTask::getStatus, |
241 | + QuantityConstant.AGV_TASK_STATUS_COMPLETED); | ||
234 | AgvTask agvTask = getOne(agvTaskLambdaQueryWrapper); | 242 | AgvTask agvTask = getOne(agvTaskLambdaQueryWrapper); |
235 | return agvTask; | 243 | return agvTask; |
236 | } | 244 | } |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/TaskHeader.java
@@ -123,7 +123,7 @@ public class TaskHeader implements Serializable { | @@ -123,7 +123,7 @@ public class TaskHeader implements Serializable { | ||
123 | @ApiModelProperty(value = "AGV关联任务ID") | 123 | @ApiModelProperty(value = "AGV关联任务ID") |
124 | private Integer agvTaskId; | 124 | private Integer agvTaskId; |
125 | @ApiModelProperty(value = "生成agv任务") | 125 | @ApiModelProperty(value = "生成agv任务") |
126 | - private Integer sendAgv; | 126 | + private Integer createAgvTask; |
127 | @ApiModelProperty(value = "回传MES信息") | 127 | @ApiModelProperty(value = "回传MES信息") |
128 | private Integer backMes; | 128 | private Integer backMes; |
129 | @ApiModelProperty(value = "MES提交次数") | 129 | @ApiModelProperty(value = "MES提交次数") |
huaheng-wms-core/src/main/java/org/jeecg/utils/constant/QuantityConstant.java
@@ -487,12 +487,12 @@ public class QuantityConstant { | @@ -487,12 +487,12 @@ public class QuantityConstant { | ||
487 | // 待确认 | 487 | // 待确认 |
488 | public static final String QUALITY_DISUSSED = "discussed"; | 488 | public static final String QUALITY_DISUSSED = "discussed"; |
489 | 489 | ||
490 | + // 需要发送AGV任务成功 | ||
491 | + public static final int AGV_CREATE_NEED = 1; | ||
490 | // 发送AGV任务成功 | 492 | // 发送AGV任务成功 |
491 | - public static final int AGV_NEED_SEND = 0; | ||
492 | - // 发送AGV任务成功 | ||
493 | - public static final int AGV_SEND_OK = 1; | 493 | + public static final int AGV_CREATE_OK = 2; |
494 | // 发送AGV任务异常 | 494 | // 发送AGV任务异常 |
495 | - public static final int AGV_SEND_ERROR = 2; | 495 | + public static final int AGV_CREATE_ERROR = 3; |
496 | // 回传MES成功 | 496 | // 回传MES成功 |
497 | public static final int MES_SEND_OK = 1; | 497 | public static final int MES_SEND_OK = 1; |
498 | // 回传MES异常 | 498 | // 回传MES异常 |