Browse Source

agv任务大优化

master
常熟吴彦祖 11 months ago
parent
commit
1b4bb5ae02
  1. 18
      src/main/java/com/gaotao/modules/automatedWarehouse/mapper/AgvTaskMapper.java
  2. 18
      src/main/java/com/gaotao/modules/automatedWarehouse/mapper/WcsIntegrationMapper.java
  3. 31
      src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/AgvTaskServiceImpl.java
  4. 34
      src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/AutoTaskServiceImpl.java
  5. 18
      src/main/resources/mapper/automatedWarehouse/AgvTaskMapper.xml
  6. 23
      src/main/resources/mapper/automatedWarehouse/WcsIntegrationMapper.xml

18
src/main/java/com/gaotao/modules/automatedWarehouse/mapper/AgvTaskMapper.java

@ -67,4 +67,22 @@ public interface AgvTaskMapper extends BaseMapper<WmsTransportTask> {
* @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);
}

18
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<WmsTransportTaskDetail> getTransportTaskDetailListWithStatus(@Param("site") String site);

31
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);
}
}

34
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;
}
}

18
src/main/resources/mapper/automatedWarehouse/AgvTaskMapper.xml

@ -273,4 +273,22 @@
WHERE site = #{site} AND task_no = #{taskNo}
</select>
<!-- rqrq - 更新运输任务错误信息(使用行锁) -->
<update id="updateTransportTaskError">
UPDATE wms_transport_task WITH (ROWLOCK)
SET error_code = #{errorCode},
error_msg = #{errorMsg},
updated_time = GETDATE()
WHERE task_no = #{taskNo}
</update>
<!-- rqrq - 清除运输任务错误信息(执行成功,使用行锁) -->
<update id="clearTransportTaskError">
UPDATE wms_transport_task WITH (ROWLOCK)
SET error_code = NULL,
error_msg = NULL,
updated_time = GETDATE()
WHERE task_no = #{taskNo}
</update>
</mapper>

23
src/main/resources/mapper/automatedWarehouse/WcsIntegrationMapper.xml

@ -778,6 +778,25 @@
set [status]=#{status}
where id=#{id}
</update>
<!-- rqrq - 更新运输任务明细为失败状态(包含错误信息) -->
<update id="updateTransportTaskDetailWithError">
UPDATE wms_transport_task_detail
SET error_code = #{errorCode},
error_msg = #{errorMsg},
updated_time = GETDATE()
WHERE id = #{id}
</update>
<!-- rqrq - 清除运输任务明细的错误信息(处理成功) -->
<update id="clearTransportTaskDetailError">
UPDATE wms_transport_task_detail
SET error_code = NULL,
error_msg = NULL,
updated_time = GETDATE()
WHERE id = #{id}
</update>
<!-- rqrq - 查询待处理的AGV回调任务明细(状态控制并发) -->
<select id="getTransportTaskDetailListWithStatus" resultType="WmsTransportTaskDetail">
select id,site,task_no as taskNo,item_no as itemNo,seq_no as seqNo,action_type as actionType,[comment],from_location as fromLocation,
@ -1410,9 +1429,9 @@
AND s.active = 'Y'
</select>
<!-- rqrq - 使用乐观锁更新运输任务状态 -->
<!-- rqrq - 使用锁更新运输任务状态 -->
<update id="updateTransportTaskWithLock">
UPDATE wms_transport_task
UPDATE wms_transport_task WITH (ROWLOCK)
SET status = #{newStatus},
<if test="palletId != null and palletId != ''">
pallet_id = #{palletId},

Loading…
Cancel
Save