Commit 1d7059e0408a6b658d2b5149317aea74dfc5ca29

Authored by 肖超群
1 parent 959f49b6

模拟工位叫料

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 &#39;@/assets/less/TableExpand.less&#39; @@ -154,11 +155,13 @@ import &#39;@/assets/less/TableExpand.less&#39;
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&lt;AgvTask&gt; { @@ -16,30 +16,32 @@ public interface IAgvTaskService extends IService&lt;AgvTask&gt; {
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&lt;AgvTaskMapper, AgvTask&gt; impl @@ -43,6 +43,8 @@ public class AgvTaskServiceImpl extends ServiceImpl&lt;AgvTaskMapper, AgvTask&gt; 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&lt;AgvTaskMapper, AgvTask&gt; impl @@ -54,16 +56,19 @@ public class AgvTaskServiceImpl extends ServiceImpl&lt;AgvTaskMapper, AgvTask&gt; 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&lt;AgvTaskMapper, AgvTask&gt; impl @@ -182,20 +187,12 @@ public class AgvTaskServiceImpl extends ServiceImpl&lt;AgvTaskMapper, AgvTask&gt; 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&lt;AgvTaskMapper, AgvTask&gt; impl @@ -220,9 +217,19 @@ public class AgvTaskServiceImpl extends ServiceImpl&lt;AgvTaskMapper, AgvTask&gt; 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&lt;AgvTaskMapper, AgvTask&gt; impl @@ -230,7 +237,8 @@ public class AgvTaskServiceImpl extends ServiceImpl&lt;AgvTaskMapper, AgvTask&gt; 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异常