diff --git a/src/main/java/com/gaotao/modules/automatedWarehouse/entity/WmsTransportTask.java b/src/main/java/com/gaotao/modules/automatedWarehouse/entity/WmsTransportTask.java index 520e9365..815d5bf9 100644 --- a/src/main/java/com/gaotao/modules/automatedWarehouse/entity/WmsTransportTask.java +++ b/src/main/java/com/gaotao/modules/automatedWarehouse/entity/WmsTransportTask.java @@ -164,6 +164,12 @@ public class WmsTransportTask { */ private String toAreaName; + /** + * 托盘类型名称(非数据库字段,用于显示)- rqrq + *

通过 site + pallet_type 关联 pallet_type 表获取 type_desc

+ */ + private String palletTypeName; + public Long getId() { return id; } @@ -465,4 +471,12 @@ public class WmsTransportTask { public void setToAreaName(String toAreaName) { this.toAreaName = toAreaName; } + + public String getPalletTypeName() { + return palletTypeName; + } + + public void setPalletTypeName(String palletTypeName) { + this.palletTypeName = palletTypeName; + } } \ No newline at end of file diff --git a/src/main/java/com/gaotao/modules/automatedWarehouse/service/TransportTaskErrorService.java b/src/main/java/com/gaotao/modules/automatedWarehouse/service/TransportTaskErrorService.java new file mode 100644 index 00000000..5d7109d4 --- /dev/null +++ b/src/main/java/com/gaotao/modules/automatedWarehouse/service/TransportTaskErrorService.java @@ -0,0 +1,22 @@ +package com.gaotao.modules.automatedWarehouse.service; + +/** + * 运输任务错误记录服务接口 - rqrq + *

专门用于在独立事务中记录错误信息,避免循环依赖

+ * + * @author rqrq + * @date 2025/12/03 + */ +public interface TransportTaskErrorService { + + /** + * @Description 独立事务记录运输任务错误信息(不受外层事务回滚影响)- rqrq + * @param taskNo 任务单号 + * @param errorCode 错误代码 + * @param errorMsg 错误信息 + * @author rqrq + * @date 2025/12/03 + */ + void updateTransportTaskErrorInNewTransaction(String taskNo, String errorCode, String errorMsg); +} + 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 47b514ca..3cc9beab 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 @@ -12,6 +12,7 @@ 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.automatedWarehouse.service.TransportTaskErrorService; import com.gaotao.modules.trans.entity.TransNoControl; import com.gaotao.modules.trans.service.TransNoControlService; import com.gaotao.modules.warehouse.service.PalletOperationLogService; @@ -45,6 +46,8 @@ public class AutoTaskServiceImpl implements AutoTaskService { private AgvTaskMapper agvTaskMapper; // 添加AgvTaskMapper注入 - rqrq @Autowired private WmsTaskLimitConfig wmsTaskLimitConfig; // 注入任务限制配置 - rqrq + @Autowired + private TransportTaskErrorService transportTaskErrorService; // 用于独立事务记录错误 - rqrq /** * @Description 栈板万能预约任务 - rqrq @@ -236,16 +239,13 @@ public class AutoTaskServiceImpl implements AutoTaskService { "未执行" ); - // 记录错误信息到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"); + // 使用独立事务记录错误信息,避免被主事务回滚影响 - rqrq + transportTaskErrorService.updateTransportTaskErrorInNewTransaction( + wmsTransportTask.getTaskNo(), "500", e.getMessage()); + System.out.println("任务错误信息已通过独立事务记录 - rqrq:errorCode=500"); throw e; -} + } } /** @@ -318,13 +318,10 @@ public class AutoTaskServiceImpl implements AutoTaskService { "未执行" ); - // 记录错误信息到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"); + // 使用独立事务记录错误信息,避免被主事务回滚影响 - rqrq + transportTaskErrorService.updateTransportTaskErrorInNewTransaction( + wmsTransportTask.getTaskNo(), "500", e.getMessage()); + System.out.println("任务错误信息已通过独立事务记录 - rqrq:errorCode=500"); throw e; } diff --git a/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/KitTransportProcessServiceImpl.java b/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/KitTransportProcessServiceImpl.java index a032c464..107ae7f7 100644 --- a/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/KitTransportProcessServiceImpl.java +++ b/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/KitTransportProcessServiceImpl.java @@ -113,19 +113,18 @@ public class KitTransportProcessServiceImpl implements KitTransportProcessServic notifyNo, itemNo, palletLocations); // 如果没有找到任何栈板位置,可能物料还在打托中,跳过 - rqrq - if (palletLocations.isEmpty()) { - log.info("未找到栈板位置信息,物料可能还在打托中 - rqrq:notifyNo={}, itemNo={}", notifyNo, itemNo); - return false; + if (!palletLocations.isEmpty()) { + // 检查是否还有栈板在分拣位 - rqrq + boolean hasInSorting = palletLocations.stream() + .anyMatch(loc -> SORTING_STATIONS.contains(loc)); + + if (hasInSorting) { + log.info("仍有栈板在分拣位,未齐套 - rqrq:notifyNo={}, itemNo={}", notifyNo, itemNo); + return false; + } } - // 检查是否还有栈板在分拣位 - rqrq - boolean hasInSorting = palletLocations.stream() - .anyMatch(loc -> SORTING_STATIONS.contains(loc)); - - if (hasInSorting) { - log.info("仍有栈板在分拣位,未齐套 - rqrq:notifyNo={}, itemNo={}", notifyNo, itemNo); - return false; - } + log.info("所有栈板都不在分拣位,判断为已齐套 - rqrq:notifyNo={}, itemNo={}", notifyNo, itemNo); diff --git a/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/TransportTaskErrorServiceImpl.java b/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/TransportTaskErrorServiceImpl.java new file mode 100644 index 00000000..20f1d5e5 --- /dev/null +++ b/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/TransportTaskErrorServiceImpl.java @@ -0,0 +1,50 @@ +package com.gaotao.modules.automatedWarehouse.service.impl; + +import com.gaotao.modules.automatedWarehouse.mapper.AgvTaskMapper; +import com.gaotao.modules.automatedWarehouse.service.TransportTaskErrorService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +/** + * 运输任务错误记录服务实现类 - rqrq + *

专门用于在独立事务中记录错误信息,避免循环依赖

+ * + * @author rqrq + * @date 2025/12/03 + */ +@Service +public class TransportTaskErrorServiceImpl implements TransportTaskErrorService { + + @Autowired + private AgvTaskMapper agvTaskMapper; + + /** + * @Description 独立事务记录运输任务错误信息(不受外层事务回滚影响)- rqrq + *

使用 REQUIRES_NEW 传播级别,在独立事务中执行,即使外层事务回滚,此方法的更新也会提交

+ * @param taskNo 任务单号 + * @param errorCode 错误代码 + * @param errorMsg 错误信息 + * @author rqrq + * @date 2025/12/03 + */ + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void updateTransportTaskErrorInNewTransaction(String taskNo, String errorCode, String errorMsg) { + System.out.println("独立事务记录错误信息 - rqrq,taskNo=" + taskNo + ",errorCode=" + errorCode); + try { + // 限制错误信息长度 - rqrq + String limitedErrorMsg = errorMsg; + if (limitedErrorMsg != null && limitedErrorMsg.length() > 500) { + limitedErrorMsg = limitedErrorMsg.substring(0, 500); + } + agvTaskMapper.updateTransportTaskError(taskNo, errorCode, limitedErrorMsg); + System.out.println("错误信息记录完成 - rqrq"); + } catch (Exception e) { + System.out.println("记录错误信息失败 - rqrq:" + e.getMessage()); + // 不抛出异常,避免影响主流程 - rqrq + } + } +} + diff --git a/src/main/resources/mapper/automatedWarehouse/AgvTaskMapper.xml b/src/main/resources/mapper/automatedWarehouse/AgvTaskMapper.xml index 66959f26..68d7cf09 100644 --- a/src/main/resources/mapper/automatedWarehouse/AgvTaskMapper.xml +++ b/src/main/resources/mapper/automatedWarehouse/AgvTaskMapper.xml @@ -37,10 +37,12 @@ t.wms_status AS wmsStatus, t.pallet_type AS palletType, t.to_area AS toArea, - isnull(a.area_desc ,b.station_area) AS toAreaName + ISNULL(a.area_desc, b.station_area) AS toAreaName, + pt.type_desc AS palletTypeName FROM wms_transport_task t WITH (NOLOCK) LEFT JOIN area a WITH (NOLOCK) ON t.to_area = a.area_id - left join agv_station b WITH (NOLOCK) on t.to_location= b.station_code + LEFT JOIN agv_station b WITH (NOLOCK) ON t.to_location = b.station_code + LEFT JOIN pallet_type pt WITH (NOLOCK) ON t.site = pt.site AND t.pallet_type = pt.pallet_type WHERE 1=1 AND t.site = #{data.site}