diff --git a/blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java b/blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java index 5368793c..2f1548cd 100644 --- a/blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java +++ b/blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java @@ -31,8 +31,8 @@ public interface LauncherConstant { /** * nacos dev 地址 */ - String NACOS_DEV_ADDR = "192.168.249.27:8848"; -// String NACOS_DEV_ADDR = "192.168.0.3:8848"; +// String NACOS_DEV_ADDR = "192.168.249.27:8848"; + String NACOS_DEV_ADDR = "127.0.0.1:8848"; /** * nacos prod 地址 diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/entity/Task.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/entity/Task.java index d5fb3ca9..2588443e 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/entity/Task.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/entity/Task.java @@ -26,12 +26,7 @@ public class Task extends BaseEntity { /** * 起点位置 */ - public static final Integer STATUS_START = 0; - - /** - * 输送线起点 - */ - public static final Integer STATUS_CONVEYOR_START = 1; + public static final Integer STATUS_START = 1; /** * 退回(超重) @@ -39,39 +34,20 @@ public class Task extends BaseEntity { public static final Integer STATUS_RETURNED = 2; /** - * 输送线末尾 + * 输送线末尾(配送中) */ public static final Integer STATUS_CONVEYOR_END = 3; - /** - * 站点 - */ - public static final Integer STATUS_STATION = 4; - - /** - * 库位 - */ - public static final Integer STATUS_LOCATION = 5; - - /** - * 等待 - */ - public static final Integer STATUS_WAITING = 6; /** - * 站点接收 - */ - public static final Integer STATUS_STATION_RECEIVE = 7; - - /** - * 回库 + * 结束 */ - public static final Integer STATUS_BACK_TO_STORAGE = 8; + public static final Integer STATUS_FINISHED = 4; /** - * 结束 + * 失败 */ - public static final Integer STATUS_FINISHED = 9; + public static final Integer STATUS_FAILING = 5; /** * ID主键 @@ -125,42 +101,4 @@ public class Task extends BaseEntity { @Schema(description = "备注") private String remark; - /** - * 获取状态描述 - * @return 状态描述 - */ - public String getStatusDesc() { - return getStatusDesc(this.taskStatus); - } - - /** - * 根据状态值获取状态描述 - * @param status 状态值 - * @return 状态描述 - */ - public static String getStatusDesc(Integer status) { - if (STATUS_RETURNED.equals(status)) { - return "退回(超重)"; - } else if (STATUS_STATION.equals(status)) { - return "站点"; - } else if (STATUS_LOCATION.equals(status)) { - return "库位"; - } else if (STATUS_WAITING.equals(status)) { - return "等待"; - } else if (STATUS_BACK_TO_STORAGE.equals(status)) { - return "回库"; - } else if (STATUS_FINISHED.equals(status)) { - return "结束"; - }else if (STATUS_START.equals(status)) { - return "起点位置"; - }else if (STATUS_CONVEYOR_START.equals(status)) { - return "输送线起点"; - }else if (STATUS_CONVEYOR_END.equals(status)) { - return "输送线末尾"; - }else if (STATUS_STATION_RECEIVE.equals(status)) { - return "站点接收"; - } else { - return "未知状态"; - } - } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/constant/AgvConstant.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/constant/AgvConstant.java index 24bbfe86..17e64eed 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/constant/AgvConstant.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/constant/AgvConstant.java @@ -16,4 +16,17 @@ public interface AgvConstant { */ public static final String EQUIPMENT_TYPE_CTU = "05"; + + /** + * 任务模板:CTU + */ + public static final String CTU_TASK_TYP = "QM1"; + + /** + * 容器类型:CTU + */ + public static final String CTU_CTNR_TYP = "1"; + + + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/PipelineController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/PipelineController.java index 376a7259..fc63157e 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/PipelineController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/PipelineController.java @@ -35,7 +35,9 @@ import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.tool.api.R; import org.springblade.desk.basic.util.StatusCountMap; +import org.springblade.desk.logistics.pojo.entity.Station; import org.springblade.desk.logistics.service.IPipelineService; +import org.springblade.desk.logistics.utils.AgvTaskTypeUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -145,6 +147,8 @@ public class PipelineController extends BladeController { return R.data(isPassed); } + @Autowired + AgvTaskTypeUtil agvTaskTypeUtil; /** * 接收空物料箱到输送线通知 @@ -162,6 +166,21 @@ public class PipelineController extends BladeController { } + /** + * 接收空物料箱到输送线通知 + */ + @GetMapping("/test") + @ApiOperationSupport(order = 4) + @Operation(summary = "接收物料箱", description = "传入箱条码") + public R test(@RequestParam String test1,@RequestParam String test2) { + + String taskType = agvTaskTypeUtil.getTaskTypeByPositions(test1,test2); + + return R.data(true); + } + + + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/StationMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/StationMapper.java index 8f552ecf..77fbe263 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/StationMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/StationMapper.java @@ -11,5 +11,5 @@ public interface StationMapper extends BaseMapper { List selectByWcId(@Param("wcId") Long wcId); - Station selectByStationPosition(@Param("StationPosition") String freeStationCode); + Station selectByStationCode(@Param("StationCode") String StationCode); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/StationMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/StationMapper.xml index 7339a211..ed95183e 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/StationMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/StationMapper.xml @@ -10,8 +10,8 @@ from LM_STATION where IS_DELETED = 0 and WC_ID = #{wcId} - select id, station_name, station_code, station_status, status, create_user, create_time, create_dept, update_user, update_time, is_deleted, remark, station_position, wc_id - from LM_STATION where IS_DELETED = 0 and STATION_POSITION = #{StationPosition} + from LM_STATION where IS_DELETED = 0 and STATION_CODE = #{StationCode} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IStationService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IStationService.java index 5a406418..31894efe 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IStationService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IStationService.java @@ -48,8 +48,8 @@ public interface IStationService extends BaseService { /** * 根据站点编码 查询站点信息 - * @param freeStationCode + * @param stationCode * @return */ - Station getByStationPosition(String freeStationCode); + Station getByStationCode(String stationCode); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/ITaskService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/ITaskService.java index 285765c0..020fa7ac 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/ITaskService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/ITaskService.java @@ -45,9 +45,8 @@ public interface ITaskService extends BaseService { * 保存输送线称重数据 * @param boxBarcode 箱条码 * @param actualWeight 输送线重量 - * @param statusReturned 任务状态 */ - void savePipelineWeigh(String boxBarcode, BigDecimal actualWeight, Integer statusReturned); + void savePipelineWeigh(String boxBarcode, BigDecimal actualWeight); /** * 获取输送箱信息 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/IOrderBoxServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/IOrderBoxServiceImpl.java index 5982708d..abd934ff 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/IOrderBoxServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/IOrderBoxServiceImpl.java @@ -70,13 +70,10 @@ public class IOrderBoxServiceImpl implements IOrderBoxService { static { // 初始化运行中任务状态 RUNNING_STATUSES.add(Task.STATUS_START); // 任务启动 - RUNNING_STATUSES.add(Task.STATUS_CONVEYOR_START); // 输送机启动 - RUNNING_STATUSES.add(Task.STATUS_CONVEYOR_END); // 输送机结束 - RUNNING_STATUSES.add(Task.STATUS_STATION); // 站点状态 - RUNNING_STATUSES.add(Task.STATUS_LOCATION); // 库位状态 - RUNNING_STATUSES.add(Task.STATUS_WAITING); // 等待状态 - RUNNING_STATUSES.add(Task.STATUS_STATION_RECEIVE);// 站点接收 - RUNNING_STATUSES.add(Task.STATUS_BACK_TO_STORAGE);// 返库状态 + RUNNING_STATUSES.add(Task.STATUS_RETURNED); // 退回 + RUNNING_STATUSES.add(Task.STATUS_CONVEYOR_END); // 配送 + RUNNING_STATUSES.add(Task.STATUS_FINISHED); // 结束 + RUNNING_STATUSES.add(Task.STATUS_FAILING); // 失败 } public IOrderBoxServiceImpl(IYieldOrderService iYieldOrderService, ITaskService iTaskService, IOrderBindService iOrderBindService, IStationService iStationService, ILocationService iLocationService, AgvTaskTypeUtil agvTaskTypeUtil, IBsWorkCenterService bsWorkCenterService, ITaskExecuteRecordService iTaskExecuteRecordService) { @@ -324,7 +321,7 @@ public class IOrderBoxServiceImpl implements IOrderBoxService { try { // 2. 获取AGV任务类型并调用调度接口 - String taskType = agvTaskTypeUtil.getTaskType(Integer.valueOf(targetStation.getStationPosition()), true); + String taskType = agvTaskTypeUtil.getTaskTypeByPositions(stationCode,DROPOFF_CONVEYOR_LINE); boolean agvResult = iTaskExecuteRecordService.genAgvSchedulingTask( taskType, stationCode, DROPOFF_CONVEYOR_LINE, EQUIPMENT_TYPE_AGV, taskList.get(0) ); @@ -358,7 +355,7 @@ public class IOrderBoxServiceImpl implements IOrderBoxService { try { // 3. 获取AGV任务类型并调用调度接口 - String taskType = agvTaskTypeUtil.getTaskType(Integer.valueOf(targetStation.getStationPosition()), false); + String taskType = agvTaskTypeUtil.getTaskTypeByPositions(sourceStationCode,endStation.getStationCode()); boolean agvResult = iTaskExecuteRecordService.genAgvSchedulingTask( taskType, sourceStationCode, endStation.getStationCode(), EQUIPMENT_TYPE_AGV, taskList.get(0) ); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/IPipelineOrderBoxServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/IPipelineOrderBoxServiceImpl.java index 925c8d59..2eed85ef 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/IPipelineOrderBoxServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/IPipelineOrderBoxServiceImpl.java @@ -46,15 +46,13 @@ public class IPipelineOrderBoxServiceImpl implements IPipelineOrderBoxService { private static final Set RUNNING_STATUSES = new HashSet<>(); static { - // 初始化运行中任务状态 - RUNNING_STATUSES.add(Task.STATUS_START); // 任务启动 - RUNNING_STATUSES.add(Task.STATUS_CONVEYOR_START); // 输送机启动 - RUNNING_STATUSES.add(Task.STATUS_CONVEYOR_END); // 输送机结束 - RUNNING_STATUSES.add(Task.STATUS_STATION); // 站点状态 - RUNNING_STATUSES.add(Task.STATUS_LOCATION); // 库位状态 - RUNNING_STATUSES.add(Task.STATUS_WAITING); // 等待状态 - RUNNING_STATUSES.add(Task.STATUS_STATION_RECEIVE);// 站点接收 - RUNNING_STATUSES.add(Task.STATUS_BACK_TO_STORAGE);// 返库状态 +// // 初始化运行中任务状态 +// RUNNING_STATUSES.add(Task.STATUS_START); // 任务启动 +// RUNNING_STATUSES.add(Task.STATUS_CONVEYOR_END); // 输送机结束 +// RUNNING_STATUSES.add(Task.STATUS_LOCATION); // 库位状态 +// RUNNING_STATUSES.add(Task.STATUS_WAITING); // 等待状态 +// RUNNING_STATUSES.add(Task.STATUS_STATION_RECEIVE);// 站点接收 +// RUNNING_STATUSES.add(Task.STATUS_BACK_TO_STORAGE);// 返库状态 } public IPipelineOrderBoxServiceImpl(ITaskService iTaskService, IStationService iStationService, ILocationService iLocationService, IOrderBindService iOrderBindService) { diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/PipelineServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/PipelineServiceImpl.java index b1405d39..99791218 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/PipelineServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/PipelineServiceImpl.java @@ -78,7 +78,7 @@ public class PipelineServiceImpl implements IPipelineService { // 1. 判断是否超重 if (WeighData.RETURN_STATUS_RETURNED.equals(returnStatus)) { // 2. 保存称重数据 - taskService.savePipelineWeigh(boxBarcode,actualWeight, Task.STATUS_RETURNED); + taskService.savePipelineWeigh(boxBarcode,actualWeight); // 3.超重处理,解绑 R ret = iPipelineOrderBoxService.boxOrderUnbind(boxBarcode); @@ -89,7 +89,7 @@ public class PipelineServiceImpl implements IPipelineService { return false; } else { // 2. 保存称重数据 - taskService.savePipelineWeigh(boxBarcode,actualWeight, Task.STATUS_CONVEYOR_START); + taskService.savePipelineWeigh(boxBarcode,actualWeight); log.info("物料箱[{}]重量校验通过", boxBarcode); return true; } @@ -152,8 +152,7 @@ public class PipelineServiceImpl implements IPipelineService { log.info("站点有预占,将物料箱送往指定站点:{}", station.getStationCode()); - String stationPosition = station.getStationPosition(); - String taskType = agvTaskTypeUtil.getTaskType(Integer.parseInt(stationPosition)); + String taskType = agvTaskTypeUtil.getTaskTypeByPositions(Station.PICKUP_CONVEYOR_LINE,station.getStationCode()); // 入库记录 Task task = taskService.getBoxBarcode(boxBarcode); @@ -178,8 +177,7 @@ public class PipelineServiceImpl implements IPipelineService { if (null != station) { log.info("找到空闲站点:{},将物料箱送往该站点", station.getStationCode()); - String stationPosition = station.getStationPosition(); - String taskType = agvTaskTypeUtil.getTaskType(Integer.parseInt(stationPosition)); + String taskType = agvTaskTypeUtil.getTaskTypeByPositions(Station.PICKUP_CONVEYOR_LINE,station.getStationCode()); boolean agvSchedulingTask = iTaskExecuteRecordService.genAgvSchedulingTask (taskType, Station.PICKUP_CONVEYOR_LINE, station.getStationCode(), AgvConstant.EQUIPMENT_TYPE_AGV, task); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/StationServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/StationServiceImpl.java index 64b09a3e..7255c314 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/StationServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/StationServiceImpl.java @@ -54,7 +54,7 @@ public class StationServiceImpl extends BaseServiceImpl } @Override - public Station getByStationPosition(String freeStationCode) { - return stationMapper.selectByStationPosition(freeStationCode); + public Station getByStationCode(String stationCode) { + return stationMapper.selectByStationCode(stationCode); } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/StorageMonitoringServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/StorageMonitoringServiceImpl.java index bc60b5d1..cde986ae 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/StorageMonitoringServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/StorageMonitoringServiceImpl.java @@ -182,7 +182,7 @@ public class StorageMonitoringServiceImpl implements IStorageMonitoringService { String locationCode = locationList.get(0).getLocationCode(); //调用ctu - AgvSchedulingTaskVO ctuSchedulingTask = taskExecuteRecordService.genCtuSchedulingTask("QM1", "1", firstTask.getBoxBarcode(), location.getLocationCode(), + AgvSchedulingTaskVO ctuSchedulingTask = taskExecuteRecordService.genCtuSchedulingTask(AgvConstant.CTU_TASK_TYP, AgvConstant.CTU_CTNR_TYP, firstTask.getBoxBarcode(), location.getLocationCode(), locationCode, AgvConstant.EQUIPMENT_TYPE_CTU); //调用成功 添加任务 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/TaskExecuteRecordServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/TaskExecuteRecordServiceImpl.java index a41f037c..8752e271 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/TaskExecuteRecordServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/TaskExecuteRecordServiceImpl.java @@ -292,7 +292,7 @@ public class TaskExecuteRecordServiceImpl extends BaseServiceImpl implement TaskMapper taskMapper; @Override - public void savePipelineWeigh(String boxBarcode, BigDecimal actualWeight, Integer statusReturned) { + public void savePipelineWeigh(String boxBarcode, BigDecimal actualWeight) { // 1.查询物料箱 筛选状态 Task task = taskMapper.selectByBoxBarcode(boxBarcode); // 2.更新重量以及任务状态 task.setMachineWeight(actualWeight); - task.setTaskStatus(statusReturned); taskMapper.updateById(task); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/utils/AgvTaskTypeUtil.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/utils/AgvTaskTypeUtil.java index 6ca253d3..1a086972 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/utils/AgvTaskTypeUtil.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/utils/AgvTaskTypeUtil.java @@ -1,4 +1,7 @@ package org.springblade.desk.logistics.utils; +import org.springblade.desk.logistics.pojo.entity.Station; +import org.springblade.desk.logistics.service.IStationService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import lombok.extern.slf4j.Slf4j; @@ -9,103 +12,85 @@ import lombok.extern.slf4j.Slf4j; @Service public class AgvTaskTypeUtil { + @Autowired + IStationService stationService; + + /** - * 获取AGV任务类型 - * @param floor 楼层 (1:一层, 3:三层) - * @param isRecycle 是否回收 (true:空箱回收, false:正常任务) - * @return 任务类型 (QM3, QM5, QM6, QM7) + * 根据起点和终点获取AGV任务类型 + * @param startPosition 起点位置编码 (1001/1002/站点code) + * @param endPosition 终点位置编码 (1001/1002/站点code) + * @return 任务类型 (QM, QM3, QM5, QM6, QM7) */ - public String getTaskType(Integer floor, Boolean isRecycle) { + public String getTaskTypeByPositions(String startPosition, String endPosition) { // 参数校验 - if (floor == null) { - log.error("楼层参数不能为空"); - throw new IllegalArgumentException("楼层参数不能为空"); + if (startPosition == null || endPosition == null) { + log.error("起点或终点位置不能为空"); + throw new IllegalArgumentException("起点和终点位置不能为空"); } - // 默认isRecycle为false - isRecycle = isRecycle != null ? isRecycle : false; - - String taskType; + // 判断起点和终点的类型及楼层 + boolean isStartConveyorStart = "1002".equals(startPosition); + boolean isStartConveyorEnd = "1001".equals(startPosition); + boolean isEndConveyorStart = "1002".equals(endPosition); + boolean isEndConveyorEnd = "1001".equals(endPosition); - switch (floor) { - case 1: - // 一层 - if (isRecycle) { - // 一层空箱回收 -> QM6 (同楼层放货放到输送线上) - taskType = "QM6"; - log.info("一层空箱回收任务,使用QM6"); - } else { - // 一层正常任务 -> QM7 (输送线取货放到普通梳齿架站点) - taskType = "QM7"; - log.info("一层正常任务,使用QM7"); - } - break; + // 获取站点楼层(如果不是站点,返回null) + Integer startFloor = null; + Integer endFloor = null; - case 3: - // 三层 - if (isRecycle) { - // 三层空箱回收 -> QM5 (三楼站点取货放到三楼电梯接驳位到一层) - taskType = "QM5"; - log.info("三层空箱回收任务,使用QM5"); - } else { - // 三层正常任务 -> QM3 (输送线取货-电梯跨楼层) - taskType = "QM3"; - log.info("三层正常任务,使用QM3"); - } - break; + if (!isStartConveyorStart && !isStartConveyorEnd) { + // 起点是站点,查询楼层 + Station startStation = stationService.getByStationCode(startPosition); + if (startStation == null) { + log.error("未找到起点站点信息,站点编码:{}", startPosition); + throw new IllegalArgumentException("无效的起点站点编码:" + startPosition); + } + startFloor = Integer.parseInt(startStation.getStationPosition()); + } - default: - log.error("不支持的楼层:{}", floor); - throw new IllegalArgumentException("不支持的楼层:" + floor); + if (!isEndConveyorStart && !isEndConveyorEnd) { + // 终点是站点,查询楼层 + Station endStation = stationService.getByStationCode(endPosition); + if (endStation == null) { + log.error("未找到终点站点信息,站点编码:{}", endPosition); + throw new IllegalArgumentException("无效的终点站点编码:" + endPosition); + } + endFloor = Integer.parseInt(endStation.getStationPosition()); } - return taskType; - } + // 场景1: 站点 <-----> 站点 -> QM + if (startFloor != null && endFloor != null) { + log.info("站点到站点任务,使用QM"); + return "QM"; + } - /** - * 获取AGV任务类型(简化版,只传楼层) - * @param floor 楼层 - * @return 任务类型 - */ - public String getTaskType(Integer floor) { - return getTaskType(floor, false); - } + // 场景2: 输送线起点(1002) ---> 站点(一层) -> QM7 + if (isStartConveyorStart && endFloor != null && endFloor == 1) { + log.info("输送线起点到一层站点任务,使用QM7"); + return "QM7"; + } - /** - * 判断是否为跨楼层任务 - * @param taskType 任务类型 - * @return true:跨楼层 false:同楼层 - */ - public boolean isCrossFloor(String taskType) { - return "QM3".equals(taskType) || "QM5".equals(taskType); - } + // 场景3: 站点(一层) ----> 输送线终点(1001) -> QM6 + if (startFloor != null && startFloor == 1 && isEndConveyorEnd) { + log.info("一层站点到输送线终点任务,使用QM6"); + return "QM6"; + } - /** - * 判断是否为回收任务 - * @param taskType 任务类型 - * @return true:回收任务 false:正常任务 - */ - public boolean isRecycleTask(String taskType) { - return "QM5".equals(taskType) || "QM6".equals(taskType); - } + // 场景4: 输送线起点(1002) ---> 站点(二层) -> QM3 + if (isStartConveyorStart && endFloor != null && endFloor == 2) { + log.info("输送线起点到二层站点任务,使用QM3"); + return "QM3"; + } - /** - * 获取任务描述 - * @param taskType 任务类型 - * @return 任务描述 - */ - public String getTaskDescription(String taskType) { - switch (taskType) { - case "QM3": - return "输送线取货-电梯跨楼层(小车不做电梯),货物放电梯接驳位,三楼小车接货后放到目标站点"; - case "QM5": - return "三楼站点取货放到三楼电梯接驳位到一层后,一楼小车取电梯内货物放到输送线(空箱回收)"; - case "QM6": - return "同楼层放货放到输送线上(不跨楼层)"; - case "QM7": - return "输送线取货放到普通梳齿架站点(不跨电梯仅同楼层)"; - default: - return "未知任务类型"; + // 场景5: 站点(二层) ----> 输送线终点(1001) -> QM5 + if (startFloor != null && startFloor == 2 && isEndConveyorEnd) { + log.info("二层站点到输送线终点任务,使用QM5"); + return "QM5"; } + + // 其他情况,记录日志并抛出异常 + log.error("无法确定任务类型,起点:{},终点:{}", startPosition, endPosition); + throw new IllegalArgumentException("无法确定任务类型,请检查起点和终点位置的组合"); } }