diff --git a/src/main/java/com/gaotao/modules/automatedWarehouse/mapper/AgvTaskMapper.java b/src/main/java/com/gaotao/modules/automatedWarehouse/mapper/AgvTaskMapper.java index 77a3e945..d40e91dd 100644 --- a/src/main/java/com/gaotao/modules/automatedWarehouse/mapper/AgvTaskMapper.java +++ b/src/main/java/com/gaotao/modules/automatedWarehouse/mapper/AgvTaskMapper.java @@ -67,4 +67,22 @@ public interface AgvTaskMapper extends BaseMapper { * @date 2025/10/31 */ WmsTransportTask getTaskByTaskNo(@Param("site") String site, @Param("taskNo") String taskNo); + + /** + * @Description 更新运输任务错误信息(使用行锁) - rqrq + * @param taskNo 任务号 + * @param errorCode 错误码(空闲站点不足=0,其他错误=500) + * @param errorMsg 错误信息 + * @author rqrq + * @date 2025/10/31 + */ + void updateTransportTaskError(@Param("taskNo") String taskNo, @Param("errorCode") String errorCode, @Param("errorMsg") String errorMsg); + + /** + * @Description 清除运输任务错误信息(执行成功) - rqrq + * @param taskNo 任务号 + * @author rqrq + * @date 2025/10/31 + */ + void clearTransportTaskError(@Param("taskNo") String taskNo); } diff --git a/src/main/java/com/gaotao/modules/automatedWarehouse/mapper/WcsIntegrationMapper.java b/src/main/java/com/gaotao/modules/automatedWarehouse/mapper/WcsIntegrationMapper.java index 7f03d111..c7573b12 100644 --- a/src/main/java/com/gaotao/modules/automatedWarehouse/mapper/WcsIntegrationMapper.java +++ b/src/main/java/com/gaotao/modules/automatedWarehouse/mapper/WcsIntegrationMapper.java @@ -393,6 +393,24 @@ public interface WcsIntegrationMapper { * @date 2025/10/18 */ void updateTransportTaskDetailStatusForId(@Param("id") Long id, @Param("status") String status); + + /** + * @Description 更新运输任务明细为失败状态(包含错误信息) - rqrq + * @param id 明细ID + * @param errorCode 错误码(处理失败=500) + * @param errorMsg 错误信息 + * @author rqrq + * @date 2025/10/31 + */ + void updateTransportTaskDetailWithError(@Param("id") Long id, @Param("errorCode") String errorCode, @Param("errorMsg") String errorMsg); + + /** + * @Description 清除运输任务明细的错误信息(处理成功) - rqrq + * @param id 明细ID + * @author rqrq + * @date 2025/10/31 + */ + void clearTransportTaskDetailError(@Param("id") Long id); List getTransportTaskDetailListWithStatus(@Param("site") String site); diff --git a/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/AgvTaskServiceImpl.java b/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/AgvTaskServiceImpl.java index cb41f3bb..ad29453b 100644 --- a/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/AgvTaskServiceImpl.java +++ b/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/AgvTaskServiceImpl.java @@ -138,8 +138,21 @@ public class AgvTaskServiceImpl implements AgvTaskService { log.info("成功调用AGV接口创建任务:taskNo={}, targets={}, priority={}", task.getTaskNo(), targets, task.getPriority()); + // 下发成功,清除错误信息 - rqrq + agvTaskMapper.clearTransportTaskError(task.getTaskNo()); + log.info("AGV任务下发成功,错误信息已清除:taskNo={} - rqrq", task.getTaskNo()); + } catch (Exception e) { - log.error("下发AGV任务失败:taskNo={}, error={}", task.getTaskNo(), e.getMessage()); + log.error("下发AGV任务失败:taskNo={}, error={}", task.getTaskNo(), e.getMessage(), e); + + // 记录错误信息到error_code和error_msg - rqrq + String errorMsg = e.getMessage(); + if (errorMsg != null && errorMsg.length() > 500) { + errorMsg = errorMsg.substring(0, 500); // 限制错误信息长度 - rqrq + } + agvTaskMapper.updateTransportTaskError(task.getTaskNo(), "500", errorMsg); + log.info("AGV任务下发失败,错误信息已记录:taskNo={}, errorCode=500 - rqrq", task.getTaskNo()); + throw new RuntimeException("下发AGV任务失败:" + e.getMessage(), e); } } @@ -317,6 +330,10 @@ public class AgvTaskServiceImpl implements AgvTaskService { wcsIntegrationMapper.updateTransportTaskDetailStatusForId(taskDetail.getId(), "已完成"); log.info("任务明细处理成功:taskNo={}, id={}", taskDetail.getTaskNo(), taskDetail.getId()); + // 4. 处理成功,清除错误信息 - rqrq + wcsIntegrationMapper.clearTransportTaskDetailError(taskDetail.getId()); + log.info("任务明细错误信息已清除:taskNo={}, id={}", taskDetail.getTaskNo(), taskDetail.getId()); + // if("WCS运输栈板".equals(checkTask.getSourceType())){ // AgvFeedBackToWcs pushWcs=new AgvFeedBackToWcs(); // pushWcs.setPalletId(checkTask.getPalletId()); @@ -329,12 +346,20 @@ public class AgvTaskServiceImpl implements AgvTaskService { // wcsApiService.pushAgvFeedbackToWcs(pushWcs); // } 遗弃方法 } catch (Exception e) { - log.error("处理AGV回调数据失败:taskNo={}, error={}", taskDetail.getTaskNo(), e.getMessage()); + log.error("处理AGV回调数据失败:taskNo={}, error={}", taskDetail.getTaskNo(), e.getMessage(), e); - // 4. 处理失败,将状态改回原始状态 - rqrq + // 5. 处理失败,将状态改回原始状态 - rqrq wcsIntegrationMapper.updateTransportTaskDetailStatusForId(taskDetail.getId(), originalStatus); log.info("处理失败,状态已回滚到:{}", originalStatus); + // 6. 记录错误信息到error_code和error_msg - rqrq + String errorMsg = e.getMessage(); + if (errorMsg != null && errorMsg.length() > 500) { + errorMsg = errorMsg.substring(0, 500); // 限制错误信息长度 - rqrq + } + wcsIntegrationMapper.updateTransportTaskDetailWithError(taskDetail.getId(), "500", errorMsg); + log.info("任务明细错误信息已记录:taskNo={}, id={}, errorCode=500", taskDetail.getTaskNo(), taskDetail.getId()); + throw new RuntimeException("处理AGV回调任务失败: " + e.getMessage(), e); } } diff --git a/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/AutoTaskServiceImpl.java b/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/AutoTaskServiceImpl.java index 6179f33d..01a583a5 100644 --- a/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/AutoTaskServiceImpl.java +++ b/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/AutoTaskServiceImpl.java @@ -8,6 +8,7 @@ import com.gaotao.modules.automatedWarehouse.entity.AgvStation; import com.gaotao.modules.automatedWarehouse.entity.ScheduleDeliveryTask; import com.gaotao.modules.automatedWarehouse.entity.WmsTransportTask; import com.gaotao.modules.automatedWarehouse.entity.WmsTransportTaskDetail; +import com.gaotao.modules.automatedWarehouse.mapper.AgvTaskMapper; import com.gaotao.modules.automatedWarehouse.mapper.WcsIntegrationMapper; import com.gaotao.modules.automatedWarehouse.service.AutoTaskService; import com.gaotao.modules.trans.entity.TransNoControl; @@ -37,6 +38,8 @@ public class AutoTaskServiceImpl implements AutoTaskService { private WcsApiService wcsApiService; @Autowired private AgvClientUtil agvClientUtil; + @Autowired + private AgvTaskMapper agvTaskMapper; // 添加AgvTaskMapper注入 - rqrq //栈板万能预约任务 @Override @@ -197,7 +200,9 @@ public class AutoTaskServiceImpl implements AutoTaskService { processSpecificPalletTask(wmsTransportTask); } - System.out.println("预约取托盘任务处理完成 - rqrq"); + // 4. 处理成功,清除错误信息 - rqrq + agvTaskMapper.clearTransportTaskError(wmsTransportTask.getTaskNo()); + System.out.println("预约取托盘任务处理完成,错误信息已清除 - rqrq"); } catch (Exception e) { // 处理失败,恢复wms_status为未执行 - rqrq System.out.println("任务处理失败,恢复状态 - rqrq:" + e.getMessage()); @@ -210,6 +215,15 @@ public class AutoTaskServiceImpl implements AutoTaskService { "PROCESSING", "未执行" ); + + // 记录错误信息到error_code和error_msg - rqrq + String errorMsg = e.getMessage(); + if (errorMsg != null && errorMsg.length() > 500) { + errorMsg = errorMsg.substring(0, 500); // 限制错误信息长度 - rqrq + } + agvTaskMapper.updateTransportTaskError(wmsTransportTask.getTaskNo(), "500", errorMsg); + System.out.println("任务错误信息已记录 - rqrq:errorCode=500"); + throw e; } } @@ -249,6 +263,10 @@ public class AutoTaskServiceImpl implements AutoTaskService { if(targetStation != null){ // 找到空闲站点,更新任务为已创建状态 - rqrq updateTaskToCreatedStatus(wmsTransportTask, targetStation); + + // 处理成功,清除错误信息 - rqrq + agvTaskMapper.clearTransportTaskError(wmsTransportTask.getTaskNo()); + System.out.println("预约运输栈板任务处理完成,错误信息已清除 - rqrq"); } else { // 没有合适站点,恢复状态等待下一次处理 - rqrq System.out.println("没有空闲站点,恢复状态等待下次处理 - rqrq"); @@ -261,9 +279,12 @@ public class AutoTaskServiceImpl implements AutoTaskService { "PROCESSING", "未执行" ); + + // 记录空闲站点不足的错误信息 - rqrq + agvTaskMapper.updateTransportTaskError(wmsTransportTask.getTaskNo(), "0", "目标区域没有空闲站点"); + System.out.println("已记录空闲站点不足错误信息 - rqrq:errorCode=0"); } - System.out.println("预约运输栈板任务处理完成 - rqrq"); } catch (Exception e) { // 处理失败,恢复wms_status为未执行 - rqrq System.out.println("任务处理失败,恢复状态 - rqrq:" + e.getMessage()); @@ -276,6 +297,15 @@ public class AutoTaskServiceImpl implements AutoTaskService { "PROCESSING", "未执行" ); + + // 记录错误信息到error_code和error_msg - rqrq + String errorMsg = e.getMessage(); + if (errorMsg != null && errorMsg.length() > 500) { + errorMsg = errorMsg.substring(0, 500); // 限制错误信息长度 - rqrq + } + agvTaskMapper.updateTransportTaskError(wmsTransportTask.getTaskNo(), "500", errorMsg); + System.out.println("任务错误信息已记录 - rqrq:errorCode=500"); + throw e; } } diff --git a/src/main/resources/mapper/automatedWarehouse/AgvTaskMapper.xml b/src/main/resources/mapper/automatedWarehouse/AgvTaskMapper.xml index e46b689e..7f2d242a 100644 --- a/src/main/resources/mapper/automatedWarehouse/AgvTaskMapper.xml +++ b/src/main/resources/mapper/automatedWarehouse/AgvTaskMapper.xml @@ -273,4 +273,22 @@ WHERE site = #{site} AND task_no = #{taskNo} + + + UPDATE wms_transport_task WITH (ROWLOCK) + SET error_code = #{errorCode}, + error_msg = #{errorMsg}, + updated_time = GETDATE() + WHERE task_no = #{taskNo} + + + + + UPDATE wms_transport_task WITH (ROWLOCK) + SET error_code = NULL, + error_msg = NULL, + updated_time = GETDATE() + WHERE task_no = #{taskNo} + + diff --git a/src/main/resources/mapper/automatedWarehouse/WcsIntegrationMapper.xml b/src/main/resources/mapper/automatedWarehouse/WcsIntegrationMapper.xml index a1505d84..de87c901 100644 --- a/src/main/resources/mapper/automatedWarehouse/WcsIntegrationMapper.xml +++ b/src/main/resources/mapper/automatedWarehouse/WcsIntegrationMapper.xml @@ -778,6 +778,25 @@ set [status]=#{status} where id=#{id} + + + + UPDATE wms_transport_task_detail + SET error_code = #{errorCode}, + error_msg = #{errorMsg}, + updated_time = GETDATE() + WHERE id = #{id} + + + + + UPDATE wms_transport_task_detail + SET error_code = NULL, + error_msg = NULL, + updated_time = GETDATE() + WHERE id = #{id} + + - + - UPDATE wms_transport_task + UPDATE wms_transport_task WITH (ROWLOCK) SET status = #{newStatus}, pallet_id = #{palletId},