From d44a5f8ac2f031f00e755dbed620ec6ee903be48 Mon Sep 17 00:00:00 2001 From: liuxy Date: Mon, 21 Apr 2025 14:59:38 +0800 Subject: [PATCH] =?UTF-8?q?rev=EF=BC=9A1.=E5=A2=9E=E5=8A=A0C=E7=94=9F?= =?UTF-8?q?=E4=BA=A7=E5=8C=BA=E5=88=B0=E5=9C=B0=E9=9D=A2=E8=B4=A7=E6=9E=B6?= =?UTF-8?q?=E5=8F=8C=E5=90=91=E9=85=8D=E7=BD=AE2.=E4=BF=AE=E6=94=B9A=5F2?= =?UTF-8?q?=E7=94=9F=E4=BA=A7=E5=8C=BA=E5=88=B0=E5=9C=B0=E9=9D=A2=E8=B4=A7?= =?UTF-8?q?=E6=9E=B613=E6=8E=92=E8=BD=A6=E8=BE=86=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/InstructionServiceImpl.java | 13 +- .../task/service/impl/TaskServiceImpl.java | 12 +- .../common/utils/enums/RegionEnum.java | 6 + .../modules/quartz/task/AutoCreateInst.java | 12 +- .../task_manage/task/tasks/fj/MCDMTask.java | 148 ++++++++++++++++++ .../task_manage/task/tasks/fj/MDMCTask.java | 148 ++++++++++++++++++ 6 files changed, 329 insertions(+), 10 deletions(-) create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/MCDMTask.java create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/MDMCTask.java diff --git a/acs2/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java b/acs2/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java index cb5042c..186b386 100644 --- a/acs2/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java +++ b/acs2/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java @@ -545,13 +545,18 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu if (ObjectUtil.isEmpty(regionEnumList)) { throw new BadRequestException("任务 [" + instdto.getTask_code() + "] 起点或终点没有找到对应AGV类型无法生成指令。"); } - + // 判断是否是AB生产区到地面货架 if (regionEnumList.size() > 1) { - // 判断终点是否是1层的 - if (nextJson.getString("z").equals("01")) { + // 如果是终点是13排的则是PS30车辆 + if (nextJson.getString("x").equals("13")) { instdto.setMaterial(RegionEnum.AB_DMHJ_ONE.getAgv_type()); } else { - instdto.setMaterial(RegionEnum.AB_DMHJ.getAgv_type()); + // 判断终点是否是1层的 + if (nextJson.getString("z").equals("01")) { + instdto.setMaterial(RegionEnum.AB_DMHJ_ONE.getAgv_type()); + } else { + instdto.setMaterial(RegionEnum.AB_DMHJ.getAgv_type()); + } } } else { instdto.setMaterial(regionEnumList.get(0).getAgv_type()); diff --git a/acs2/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java b/acs2/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java index 4895bbb..13544ad 100644 --- a/acs2/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java +++ b/acs2/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java @@ -459,12 +459,18 @@ public class TaskServiceImpl implements TaskService, ApplicationAutoInitial { throw new BadRequestException("任务 [" + taskcode + "] 起点或终点没有找到对应AGV类型无法生成指令。"); } + // 判断是否是AB生产区到地面货架 if (regionEnumList.size() > 1) { - // 判断终点是否是1层的 - if (nextJson.getString("z").equals("01")) { + // 如果是终点是13排的则是PS30车辆 + if (nextJson.getString("x").equals("13")) { instdto.setMaterial(RegionEnum.AB_DMHJ_ONE.getAgv_type()); } else { - instdto.setMaterial(RegionEnum.AB_DMHJ.getAgv_type()); + // 判断终点是否是1层的 + if (nextJson.getString("z").equals("01")) { + instdto.setMaterial(RegionEnum.AB_DMHJ_ONE.getAgv_type()); + } else { + instdto.setMaterial(RegionEnum.AB_DMHJ.getAgv_type()); + } } } else { instdto.setMaterial(regionEnumList.get(0).getAgv_type()); diff --git a/acs2/nladmin-system/src/main/java/org/nl/modules/common/utils/enums/RegionEnum.java b/acs2/nladmin-system/src/main/java/org/nl/modules/common/utils/enums/RegionEnum.java index 41a4309..1b49b8b 100644 --- a/acs2/nladmin-system/src/main/java/org/nl/modules/common/utils/enums/RegionEnum.java +++ b/acs2/nladmin-system/src/main/java/org/nl/modules/common/utils/enums/RegionEnum.java @@ -41,6 +41,12 @@ public enum RegionEnum { // C生产区-->D生产区 C_D("C", "D","PS20","Group-001"), + // C生产区-->地面货架 + C_DMHJ("C", "DMHJ","PS20","Group-001"), + + // 地面货架-->C生产区 + DMHJ_C("DMHJ", "C","PS20","Group-001"), + // D生产区-->地面货架 D_DMHJ("D", "DMHJ","PS20","Group-001"), diff --git a/acs2/nladmin-system/src/main/java/org/nl/modules/quartz/task/AutoCreateInst.java b/acs2/nladmin-system/src/main/java/org/nl/modules/quartz/task/AutoCreateInst.java index fa4f342..cf80665 100644 --- a/acs2/nladmin-system/src/main/java/org/nl/modules/quartz/task/AutoCreateInst.java +++ b/acs2/nladmin-system/src/main/java/org/nl/modules/quartz/task/AutoCreateInst.java @@ -212,12 +212,18 @@ public class AutoCreateInst { continue; } + // 判断是否是AB生产区到地面货架 if (regionEnumList.size() > 1) { - // 判断终点是否是1层的 - if (nextJson.getString("z").equals("01")) { + // 如果是终点是13排的则是PS30车辆 + if (nextJson.getString("x").equals("13")) { instdto.setMaterial(RegionEnum.AB_DMHJ_ONE.getAgv_type()); } else { - instdto.setMaterial(RegionEnum.AB_DMHJ.getAgv_type()); + // 判断终点是否是1层的 + if (nextJson.getString("z").equals("01")) { + instdto.setMaterial(RegionEnum.AB_DMHJ_ONE.getAgv_type()); + } else { + instdto.setMaterial(RegionEnum.AB_DMHJ.getAgv_type()); + } } } else { instdto.setMaterial(regionEnumList.get(0).getAgv_type()); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/MCDMTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/MCDMTask.java new file mode 100644 index 0000000..aa25af0 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/MCDMTask.java @@ -0,0 +1,148 @@ +package org.nl.wms.sch.task_manage.task.tasks.fj; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.IdUtil; +import org.nl.wms.ext.mes.service.WmsToMesService; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.AcsTaskDto; +import org.nl.wms.sch.task_manage.GeneralDefinition; +import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum; +import org.nl.wms.sch.task_manage.task.TaskType; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.util.TaskUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +/** + * @Author: lxy + * @Description: C生产区到地面货架 + * @Date: 2025/4/21 + */ +@Component(value = "MCDMTask") +@TaskType("MCDMTask") +public class MCDMTask extends AbstractTask { + @Autowired + private ISchBaseTaskService taskService; + + @Autowired + private ISchBaseTaskconfigService taskConfigService; + + @Autowired + private WmsToMesService wmsToMesService; + + @Override + public String create(JSONObject json) { + SchBaseTask task = new SchBaseTask(); + task.setTask_id(IdUtil.getStringId()); + task.setTask_code(json.getString("TaskCode")); + task.setTask_status(TaskStatus.CREATE.getCode()); + task.setConfig_code(json.getString("task_type")); + task.setPoint_code1(json.getString("PickingLocation")); + task.setPoint_code2(json.getString("PlacedLocation")); + task.setIs_vehicle(json.getString("IsPanCode")); + task.setExt_group_data(json.getString("CarryIsEmptyTuoPan")); + task.setRequest_param(json.toString()); + task.setPriority(json.getString("Priority")); + task.setCreate_id(SecurityUtils.getCurrentUserId()); + task.setCreate_name(SecurityUtils.getCurrentNickName()); + task.setCreate_time(DateUtil.now()); + taskService.save(task); + return task.getTask_id(); + } + + @Override + public AcsTaskDto sendAcsParam(String taskId) { + SchBaseTask taskDao = taskService.getById(taskId); + + // 组织下发给acs的数据 + AcsTaskDto acsTaskDto = new AcsTaskDto(); + acsTaskDto.setExt_task_uuid(taskDao.getTask_id()); + acsTaskDto.setTask_code(taskDao.getTask_code()); + acsTaskDto.setStart_device_code(taskDao.getPoint_code1()); + acsTaskDto.setNext_device_code(taskDao.getPoint_code2()); + acsTaskDto.setPriority(taskDao.getPriority()); + acsTaskDto.setTask_type("1"); + acsTaskDto.setIs_vehicle(taskDao.getIs_vehicle()); + acsTaskDto.setIs_empvehicle(taskDao.getExt_group_data()); + + return acsTaskDto; + } + + @Override + protected void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getByCode(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + TaskUtils.setUpdateByAcs(taskObj); + taskService.updateById(taskObj); + } + if (status.equals(TaskStatus.FINISHED)) { + this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + if (status.equals(TaskStatus.CANCELED)) { + this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + } + + @Override + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + @Override + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + @Override + public void backMes(String task_code) { + wmsToMesService.receiveTaskStatusMesData(taskService.getByCode(task_code)); + } + + @Transactional(rollbackFor = Exception.class) + public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark(GeneralDefinition.TASK_FINISH); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + + // 通知mes任务完成 + wmsToMesService.receiveTaskStatusMesData(taskObj); + } + + @Transactional(rollbackFor = Exception.class) + public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + taskObj.setRemark(GeneralDefinition.TASK_CANCEL); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/MDMCTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/MDMCTask.java new file mode 100644 index 0000000..ec66512 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/MDMCTask.java @@ -0,0 +1,148 @@ +package org.nl.wms.sch.task_manage.task.tasks.fj; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.IdUtil; +import org.nl.wms.ext.mes.service.WmsToMesService; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.AcsTaskDto; +import org.nl.wms.sch.task_manage.GeneralDefinition; +import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum; +import org.nl.wms.sch.task_manage.task.TaskType; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.util.TaskUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +/** + * @Author: lxy + * @Description: 地面货架到C生产区 + * @Date: 2025/4/21 + */ +@Component(value = "MDMCTask") +@TaskType("MDMCTask") +public class MDMCTask extends AbstractTask { + @Autowired + private ISchBaseTaskService taskService; + + @Autowired + private ISchBaseTaskconfigService taskConfigService; + + @Autowired + private WmsToMesService wmsToMesService; + + @Override + public String create(JSONObject json) { + SchBaseTask task = new SchBaseTask(); + task.setTask_id(IdUtil.getStringId()); + task.setTask_code(json.getString("TaskCode")); + task.setTask_status(TaskStatus.CREATE.getCode()); + task.setConfig_code(json.getString("task_type")); + task.setPoint_code1(json.getString("PickingLocation")); + task.setPoint_code2(json.getString("PlacedLocation")); + task.setIs_vehicle(json.getString("IsPanCode")); + task.setExt_group_data(json.getString("CarryIsEmptyTuoPan")); + task.setRequest_param(json.toString()); + task.setPriority(json.getString("Priority")); + task.setCreate_id(SecurityUtils.getCurrentUserId()); + task.setCreate_name(SecurityUtils.getCurrentNickName()); + task.setCreate_time(DateUtil.now()); + taskService.save(task); + return task.getTask_id(); + } + + @Override + public AcsTaskDto sendAcsParam(String taskId) { + SchBaseTask taskDao = taskService.getById(taskId); + + // 组织下发给acs的数据 + AcsTaskDto acsTaskDto = new AcsTaskDto(); + acsTaskDto.setExt_task_uuid(taskDao.getTask_id()); + acsTaskDto.setTask_code(taskDao.getTask_code()); + acsTaskDto.setStart_device_code(taskDao.getPoint_code1()); + acsTaskDto.setNext_device_code(taskDao.getPoint_code2()); + acsTaskDto.setPriority(taskDao.getPriority()); + acsTaskDto.setTask_type("1"); + acsTaskDto.setIs_vehicle(taskDao.getIs_vehicle()); + acsTaskDto.setIs_empvehicle(taskDao.getExt_group_data()); + + return acsTaskDto; + } + + @Override + protected void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getByCode(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + TaskUtils.setUpdateByAcs(taskObj); + taskService.updateById(taskObj); + } + if (status.equals(TaskStatus.FINISHED)) { + this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + if (status.equals(TaskStatus.CANCELED)) { + this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + } + + @Override + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + @Override + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + @Override + public void backMes(String task_code) { + wmsToMesService.receiveTaskStatusMesData(taskService.getByCode(task_code)); + } + + @Transactional(rollbackFor = Exception.class) + public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark(GeneralDefinition.TASK_FINISH); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + + // 通知mes任务完成 + wmsToMesService.receiveTaskStatusMesData(taskObj); + } + + @Transactional(rollbackFor = Exception.class) + public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + taskObj.setRemark(GeneralDefinition.TASK_CANCEL); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } +}