状态修改

liweidong
liweidong-hj 1 month ago
parent 3ae4747c61
commit 56c548de81
  1. 4
      blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java
  2. 74
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/entity/Task.java
  3. 13
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/constant/AgvConstant.java
  4. 19
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/PipelineController.java
  5. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/StationMapper.java
  6. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/StationMapper.xml
  7. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IStationService.java
  8. 3
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/ITaskService.java
  9. 15
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/IOrderBoxServiceImpl.java
  10. 16
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/IPipelineOrderBoxServiceImpl.java
  11. 10
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/PipelineServiceImpl.java
  12. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/StationServiceImpl.java
  13. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/StorageMonitoringServiceImpl.java
  14. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/TaskExecuteRecordServiceImpl.java
  15. 3
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/TaskServiceImpl.java
  16. 151
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/utils/AgvTaskTypeUtil.java

@ -31,8 +31,8 @@ public interface LauncherConstant {
/** /**
* nacos dev 地址 * nacos dev 地址
*/ */
String NACOS_DEV_ADDR = "192.168.249.27:8848"; // String NACOS_DEV_ADDR = "192.168.249.27:8848";
// String NACOS_DEV_ADDR = "192.168.0.3:8848"; String NACOS_DEV_ADDR = "127.0.0.1:8848";
/** /**
* nacos prod 地址 * nacos prod 地址

@ -26,12 +26,7 @@ public class Task extends BaseEntity {
/** /**
* 起点位置 * 起点位置
*/ */
public static final Integer STATUS_START = 0; public static final Integer STATUS_START = 1;
/**
* 输送线起点
*/
public static final Integer STATUS_CONVEYOR_START = 1;
/** /**
* 退回(超重) * 退回(超重)
@ -39,39 +34,20 @@ public class Task extends BaseEntity {
public static final Integer STATUS_RETURNED = 2; public static final Integer STATUS_RETURNED = 2;
/** /**
* 输送线末尾 * 输送线末尾(配送中)
*/ */
public static final Integer STATUS_CONVEYOR_END = 3; 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主键 * ID主键
@ -125,42 +101,4 @@ public class Task extends BaseEntity {
@Schema(description = "备注") @Schema(description = "备注")
private String remark; 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 "未知状态";
}
}
} }

@ -16,4 +16,17 @@ public interface AgvConstant {
*/ */
public static final String EQUIPMENT_TYPE_CTU = "05"; 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";
} }

@ -35,7 +35,9 @@ import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.log.exception.ServiceException; import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.tool.api.R; import org.springblade.core.tool.api.R;
import org.springblade.desk.basic.util.StatusCountMap; 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.service.IPipelineService;
import org.springblade.desk.logistics.utils.AgvTaskTypeUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
@ -145,6 +147,8 @@ public class PipelineController extends BladeController {
return R.data(isPassed); 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);
}

@ -11,5 +11,5 @@ public interface StationMapper extends BaseMapper<Station> {
List<Station> selectByWcId(@Param("wcId") Long wcId); List<Station> selectByWcId(@Param("wcId") Long wcId);
Station selectByStationPosition(@Param("StationPosition") String freeStationCode); Station selectByStationCode(@Param("StationCode") String StationCode);
} }

@ -10,8 +10,8 @@
from LM_STATION where IS_DELETED = 0 and WC_ID = #{wcId} from LM_STATION where IS_DELETED = 0 and WC_ID = #{wcId}
</select> </select>
<select id="selectByStationPosition" resultType="org.springblade.desk.logistics.pojo.entity.Station"> <select id="selectByStationCode" resultType="org.springblade.desk.logistics.pojo.entity.Station">
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 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}
</select> </select>
</mapper> </mapper>

@ -48,8 +48,8 @@ public interface IStationService extends BaseService<Station> {
/** /**
* 根据站点编码 查询站点信息 * 根据站点编码 查询站点信息
* @param freeStationCode * @param stationCode
* @return * @return
*/ */
Station getByStationPosition(String freeStationCode); Station getByStationCode(String stationCode);
} }

@ -45,9 +45,8 @@ public interface ITaskService extends BaseService<Task> {
* 保存输送线称重数据 * 保存输送线称重数据
* @param boxBarcode 箱条码 * @param boxBarcode 箱条码
* @param actualWeight 输送线重量 * @param actualWeight 输送线重量
* @param statusReturned 任务状态
*/ */
void savePipelineWeigh(String boxBarcode, BigDecimal actualWeight, Integer statusReturned); void savePipelineWeigh(String boxBarcode, BigDecimal actualWeight);
/** /**
* 获取输送箱信息 * 获取输送箱信息

@ -70,13 +70,10 @@ public class IOrderBoxServiceImpl implements IOrderBoxService {
static { static {
// 初始化运行中任务状态 // 初始化运行中任务状态
RUNNING_STATUSES.add(Task.STATUS_START); // 任务启动 RUNNING_STATUSES.add(Task.STATUS_START); // 任务启动
RUNNING_STATUSES.add(Task.STATUS_CONVEYOR_START); // 输送机启动 RUNNING_STATUSES.add(Task.STATUS_RETURNED); // 退回
RUNNING_STATUSES.add(Task.STATUS_CONVEYOR_END); // 输送机结束 RUNNING_STATUSES.add(Task.STATUS_CONVEYOR_END); // 配送
RUNNING_STATUSES.add(Task.STATUS_STATION); // 站点状态 RUNNING_STATUSES.add(Task.STATUS_FINISHED); // 结束
RUNNING_STATUSES.add(Task.STATUS_LOCATION); // 库位状态 RUNNING_STATUSES.add(Task.STATUS_FAILING); // 失败
RUNNING_STATUSES.add(Task.STATUS_WAITING); // 等待状态
RUNNING_STATUSES.add(Task.STATUS_STATION_RECEIVE);// 站点接收
RUNNING_STATUSES.add(Task.STATUS_BACK_TO_STORAGE);// 返库状态
} }
public IOrderBoxServiceImpl(IYieldOrderService iYieldOrderService, ITaskService iTaskService, IOrderBindService iOrderBindService, IStationService iStationService, ILocationService iLocationService, AgvTaskTypeUtil agvTaskTypeUtil, IBsWorkCenterService bsWorkCenterService, ITaskExecuteRecordService iTaskExecuteRecordService) { 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 { try {
// 2. 获取AGV任务类型并调用调度接口 // 2. 获取AGV任务类型并调用调度接口
String taskType = agvTaskTypeUtil.getTaskType(Integer.valueOf(targetStation.getStationPosition()), true); String taskType = agvTaskTypeUtil.getTaskTypeByPositions(stationCode,DROPOFF_CONVEYOR_LINE);
boolean agvResult = iTaskExecuteRecordService.genAgvSchedulingTask( boolean agvResult = iTaskExecuteRecordService.genAgvSchedulingTask(
taskType, stationCode, DROPOFF_CONVEYOR_LINE, EQUIPMENT_TYPE_AGV, taskList.get(0) taskType, stationCode, DROPOFF_CONVEYOR_LINE, EQUIPMENT_TYPE_AGV, taskList.get(0)
); );
@ -358,7 +355,7 @@ public class IOrderBoxServiceImpl implements IOrderBoxService {
try { try {
// 3. 获取AGV任务类型并调用调度接口 // 3. 获取AGV任务类型并调用调度接口
String taskType = agvTaskTypeUtil.getTaskType(Integer.valueOf(targetStation.getStationPosition()), false); String taskType = agvTaskTypeUtil.getTaskTypeByPositions(sourceStationCode,endStation.getStationCode());
boolean agvResult = iTaskExecuteRecordService.genAgvSchedulingTask( boolean agvResult = iTaskExecuteRecordService.genAgvSchedulingTask(
taskType, sourceStationCode, endStation.getStationCode(), EQUIPMENT_TYPE_AGV, taskList.get(0) taskType, sourceStationCode, endStation.getStationCode(), EQUIPMENT_TYPE_AGV, taskList.get(0)
); );

@ -46,15 +46,13 @@ public class IPipelineOrderBoxServiceImpl implements IPipelineOrderBoxService {
private static final Set<Integer> RUNNING_STATUSES = new HashSet<>(); private static final Set<Integer> RUNNING_STATUSES = new HashSet<>();
static { static {
// 初始化运行中任务状态 // // 初始化运行中任务状态
RUNNING_STATUSES.add(Task.STATUS_START); // 任务启动 // 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_CONVEYOR_END); // 输送机结束 // RUNNING_STATUSES.add(Task.STATUS_LOCATION); // 库位状态
RUNNING_STATUSES.add(Task.STATUS_STATION); // 站点状态 // RUNNING_STATUSES.add(Task.STATUS_WAITING); // 等待状态
RUNNING_STATUSES.add(Task.STATUS_LOCATION); // 库位状态 // RUNNING_STATUSES.add(Task.STATUS_STATION_RECEIVE);// 站点接收
RUNNING_STATUSES.add(Task.STATUS_WAITING); // 等待状态 // RUNNING_STATUSES.add(Task.STATUS_BACK_TO_STORAGE);// 返库状态
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) { public IPipelineOrderBoxServiceImpl(ITaskService iTaskService, IStationService iStationService, ILocationService iLocationService, IOrderBindService iOrderBindService) {

@ -78,7 +78,7 @@ public class PipelineServiceImpl implements IPipelineService {
// 1. 判断是否超重 // 1. 判断是否超重
if (WeighData.RETURN_STATUS_RETURNED.equals(returnStatus)) { if (WeighData.RETURN_STATUS_RETURNED.equals(returnStatus)) {
// 2. 保存称重数据 // 2. 保存称重数据
taskService.savePipelineWeigh(boxBarcode,actualWeight, Task.STATUS_RETURNED); taskService.savePipelineWeigh(boxBarcode,actualWeight);
// 3.超重处理,解绑 // 3.超重处理,解绑
R ret = iPipelineOrderBoxService.boxOrderUnbind(boxBarcode); R ret = iPipelineOrderBoxService.boxOrderUnbind(boxBarcode);
@ -89,7 +89,7 @@ public class PipelineServiceImpl implements IPipelineService {
return false; return false;
} else { } else {
// 2. 保存称重数据 // 2. 保存称重数据
taskService.savePipelineWeigh(boxBarcode,actualWeight, Task.STATUS_CONVEYOR_START); taskService.savePipelineWeigh(boxBarcode,actualWeight);
log.info("物料箱[{}]重量校验通过", boxBarcode); log.info("物料箱[{}]重量校验通过", boxBarcode);
return true; return true;
} }
@ -152,8 +152,7 @@ public class PipelineServiceImpl implements IPipelineService {
log.info("站点有预占,将物料箱送往指定站点:{}", station.getStationCode()); log.info("站点有预占,将物料箱送往指定站点:{}", station.getStationCode());
String stationPosition = station.getStationPosition(); String taskType = agvTaskTypeUtil.getTaskTypeByPositions(Station.PICKUP_CONVEYOR_LINE,station.getStationCode());
String taskType = agvTaskTypeUtil.getTaskType(Integer.parseInt(stationPosition));
// 入库记录 // 入库记录
Task task = taskService.getBoxBarcode(boxBarcode); Task task = taskService.getBoxBarcode(boxBarcode);
@ -178,8 +177,7 @@ public class PipelineServiceImpl implements IPipelineService {
if (null != station) { if (null != station) {
log.info("找到空闲站点:{},将物料箱送往该站点", station.getStationCode()); log.info("找到空闲站点:{},将物料箱送往该站点", station.getStationCode());
String stationPosition = station.getStationPosition(); String taskType = agvTaskTypeUtil.getTaskTypeByPositions(Station.PICKUP_CONVEYOR_LINE,station.getStationCode());
String taskType = agvTaskTypeUtil.getTaskType(Integer.parseInt(stationPosition));
boolean agvSchedulingTask = iTaskExecuteRecordService.genAgvSchedulingTask boolean agvSchedulingTask = iTaskExecuteRecordService.genAgvSchedulingTask
(taskType, Station.PICKUP_CONVEYOR_LINE, station.getStationCode(), AgvConstant.EQUIPMENT_TYPE_AGV, task); (taskType, Station.PICKUP_CONVEYOR_LINE, station.getStationCode(), AgvConstant.EQUIPMENT_TYPE_AGV, task);

@ -54,7 +54,7 @@ public class StationServiceImpl extends BaseServiceImpl<StationMapper, Station>
} }
@Override @Override
public Station getByStationPosition(String freeStationCode) { public Station getByStationCode(String stationCode) {
return stationMapper.selectByStationPosition(freeStationCode); return stationMapper.selectByStationCode(stationCode);
} }
} }

@ -182,7 +182,7 @@ public class StorageMonitoringServiceImpl implements IStorageMonitoringService {
String locationCode = locationList.get(0).getLocationCode(); String locationCode = locationList.get(0).getLocationCode();
//调用ctu //调用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); locationCode, AgvConstant.EQUIPMENT_TYPE_CTU);
//调用成功 添加任务 //调用成功 添加任务

@ -292,7 +292,7 @@ public class TaskExecuteRecordServiceImpl extends BaseServiceImpl<TaskExecuteRe
if(null == task.getLocationId()){ if(null == task.getLocationId()){
//证明不需要送到库位 //证明不需要送到库位
//更新task状态 根据taskCode查询 //更新task状态 根据taskCode查询
task.setTaskStatus(Task.STATUS_STATION); task.setTaskStatus(Task.STATUS_FINISHED);
boolean taskUpdate = taskService.updateById(task); boolean taskUpdate = taskService.updateById(task);
if(!taskUpdate){ if(!taskUpdate){
log.error("Task状态修改失败"); log.error("Task状态修改失败");
@ -303,10 +303,10 @@ public class TaskExecuteRecordServiceImpl extends BaseServiceImpl<TaskExecuteRe
Location location = locationService.getById(task.getLocationId()); Location location = locationService.getById(task.getLocationId());
AgvSchedulingTaskVO ctuSchedulingTask = genCtuSchedulingTask AgvSchedulingTaskVO ctuSchedulingTask = genCtuSchedulingTask
("QM1", "1", task.getBoxBarcode(), taskExecuteRecord.getEndPos(), location.getLocationCode(), AgvConstant.EQUIPMENT_TYPE_CTU); (AgvConstant.CTU_TASK_TYP, AgvConstant.CTU_CTNR_TYP, task.getBoxBarcode(), taskExecuteRecord.getEndPos(), location.getLocationCode(), AgvConstant.EQUIPMENT_TYPE_CTU);
if(null != ctuSchedulingTask){ if(null != ctuSchedulingTask){
task.setTaskStatus(Task.STATUS_LOCATION); task.setTaskStatus(Task.STATUS_FINISHED);
boolean taskUpdate = taskService.updateById(task); boolean taskUpdate = taskService.updateById(task);
if(!taskUpdate){ if(!taskUpdate){
log.error("Task状态修改失败"); log.error("Task状态修改失败");
@ -423,7 +423,7 @@ public class TaskExecuteRecordServiceImpl extends BaseServiceImpl<TaskExecuteRe
//调用agv小车 //调用agv小车
// 调用AGV // 调用AGV
String taskType = agvTaskTypeUtil.getTaskType(Integer.valueOf(station.getStationPosition())); String taskType = agvTaskTypeUtil.getTaskTypeByPositions(location.getLocationCode(),station.getStationCode());
boolean agvResult = genAgvSchedulingTask( boolean agvResult = genAgvSchedulingTask(
taskType, location.getLocationCode(),station.getStationCode() , EQUIPMENT_TYPE_AGV, task taskType, location.getLocationCode(),station.getStationCode() , EQUIPMENT_TYPE_AGV, task

@ -56,12 +56,11 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
TaskMapper taskMapper; TaskMapper taskMapper;
@Override @Override
public void savePipelineWeigh(String boxBarcode, BigDecimal actualWeight, Integer statusReturned) { public void savePipelineWeigh(String boxBarcode, BigDecimal actualWeight) {
// 1.查询物料箱 筛选状态 // 1.查询物料箱 筛选状态
Task task = taskMapper.selectByBoxBarcode(boxBarcode); Task task = taskMapper.selectByBoxBarcode(boxBarcode);
// 2.更新重量以及任务状态 // 2.更新重量以及任务状态
task.setMachineWeight(actualWeight); task.setMachineWeight(actualWeight);
task.setTaskStatus(statusReturned);
taskMapper.updateById(task); taskMapper.updateById(task);
} }

@ -1,4 +1,7 @@
package org.springblade.desk.logistics.utils; 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 org.springframework.stereotype.Service;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -9,103 +12,85 @@ import lombok.extern.slf4j.Slf4j;
@Service @Service
public class AgvTaskTypeUtil { public class AgvTaskTypeUtil {
@Autowired
IStationService stationService;
/** /**
* 获取AGV任务类型 * 根据起点和终点获取AGV任务类型
* @param floor 楼层 (1:一层, 3:三层) * @param startPosition 起点位置编码 (1001/1002/站点code)
* @param isRecycle 是否回收 (true:空箱回收, false:正常任务) * @param endPosition 终点位置编码 (1001/1002/站点code)
* @return 任务类型 (QM3, QM5, QM6, QM7) * @return 任务类型 (QM, QM3, QM5, QM6, QM7)
*/ */
public String getTaskType(Integer floor, Boolean isRecycle) { public String getTaskTypeByPositions(String startPosition, String endPosition) {
// 参数校验 // 参数校验
if (floor == null) { if (startPosition == null || endPosition == null) {
log.error("楼层参数不能为空"); log.error("起点或终点位置不能为空");
throw new IllegalArgumentException("楼层参数不能为空"); throw new IllegalArgumentException("起点和终点位置不能为空");
} }
// 默认isRecycle为false // 判断起点和终点的类型及楼层
isRecycle = isRecycle != null ? isRecycle : false; boolean isStartConveyorStart = "1002".equals(startPosition);
boolean isStartConveyorEnd = "1001".equals(startPosition);
String taskType; boolean isEndConveyorStart = "1002".equals(endPosition);
boolean isEndConveyorEnd = "1001".equals(endPosition);
switch (floor) { // 获取站点楼层(如果不是站点,返回null)
case 1: Integer startFloor = null;
// 一层 Integer endFloor = null;
if (isRecycle) {
// 一层空箱回收 -> QM6 (同楼层放货放到输送线上)
taskType = "QM6";
log.info("一层空箱回收任务,使用QM6");
} else {
// 一层正常任务 -> QM7 (输送线取货放到普通梳齿架站点)
taskType = "QM7";
log.info("一层正常任务,使用QM7");
}
break;
case 3: if (!isStartConveyorStart && !isStartConveyorEnd) {
// 三层 // 起点是站点,查询楼层
if (isRecycle) { Station startStation = stationService.getByStationCode(startPosition);
// 三层空箱回收 -> QM5 (三楼站点取货放到三楼电梯接驳位到一层) if (startStation == null) {
taskType = "QM5"; log.error("未找到起点站点信息,站点编码:{}", startPosition);
log.info("三层空箱回收任务,使用QM5"); throw new IllegalArgumentException("无效的起点站点编码:" + startPosition);
} else { }
// 三层正常任务 -> QM3 (输送线取货-电梯跨楼层) startFloor = Integer.parseInt(startStation.getStationPosition());
taskType = "QM3"; }
log.info("三层正常任务,使用QM3");
}
break;
default: if (!isEndConveyorStart && !isEndConveyorEnd) {
log.error("不支持的楼层:{}", floor); // 终点是站点,查询楼层
throw new IllegalArgumentException("不支持的楼层:" + floor); 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";
}
/** // 场景2: 输送线起点(1002) ---> 站点(一层) -> QM7
* 获取AGV任务类型简化版只传楼层 if (isStartConveyorStart && endFloor != null && endFloor == 1) {
* @param floor 楼层 log.info("输送线起点到一层站点任务,使用QM7");
* @return 任务类型 return "QM7";
*/ }
public String getTaskType(Integer floor) {
return getTaskType(floor, false);
}
/** // 场景3: 站点(一层) ----> 输送线终点(1001) -> QM6
* 判断是否为跨楼层任务 if (startFloor != null && startFloor == 1 && isEndConveyorEnd) {
* @param taskType 任务类型 log.info("一层站点到输送线终点任务,使用QM6");
* @return true:跨楼层 false:同楼层 return "QM6";
*/ }
public boolean isCrossFloor(String taskType) {
return "QM3".equals(taskType) || "QM5".equals(taskType);
}
/** // 场景4: 输送线起点(1002) ---> 站点(二层) -> QM3
* 判断是否为回收任务 if (isStartConveyorStart && endFloor != null && endFloor == 2) {
* @param taskType 任务类型 log.info("输送线起点到二层站点任务,使用QM3");
* @return true:回收任务 false:正常任务 return "QM3";
*/ }
public boolean isRecycleTask(String taskType) {
return "QM5".equals(taskType) || "QM6".equals(taskType);
}
/** // 场景5: 站点(二层) ----> 输送线终点(1001) -> QM5
* 获取任务描述 if (startFloor != null && startFloor == 2 && isEndConveyorEnd) {
* @param taskType 任务类型 log.info("二层站点到输送线终点任务,使用QM5");
* @return 任务描述 return "QM5";
*/
public String getTaskDescription(String taskType) {
switch (taskType) {
case "QM3":
return "输送线取货-电梯跨楼层(小车不做电梯),货物放电梯接驳位,三楼小车接货后放到目标站点";
case "QM5":
return "三楼站点取货放到三楼电梯接驳位到一层后,一楼小车取电梯内货物放到输送线(空箱回收)";
case "QM6":
return "同楼层放货放到输送线上(不跨楼层)";
case "QM7":
return "输送线取货放到普通梳齿架站点(不跨电梯仅同楼层)";
default:
return "未知任务类型";
} }
// 其他情况,记录日志并抛出异常
log.error("无法确定任务类型,起点:{},终点:{}", startPosition, endPosition);
throw new IllegalArgumentException("无法确定任务类型,请检查起点和终点位置的组合");
} }
} }

Loading…
Cancel
Save