diff --git a/src/main/java/com/gaotao/modules/autoWareHourceHaian/mapper/HaiAnAgvTaskMapper.java b/src/main/java/com/gaotao/modules/autoWareHourceHaian/mapper/HaiAnAgvTaskMapper.java index 5e2ef1c4..d8b1575b 100644 --- a/src/main/java/com/gaotao/modules/autoWareHourceHaian/mapper/HaiAnAgvTaskMapper.java +++ b/src/main/java/com/gaotao/modules/autoWareHourceHaian/mapper/HaiAnAgvTaskMapper.java @@ -18,6 +18,16 @@ import java.util.List; @Mapper public interface HaiAnAgvTaskMapper { + /** + * 按工厂、托盘、实际任务号及来源WOT判断齐套运输;仅下达和缺主单取消使用,未匹配返回false。- rqrq + * 只认WOT的齐套运输类型,不兼容旧单据;SQL失败由调用方事务回滚。- rqrq + */ + boolean isCacheTransportTask(@Param("site") String site, + @Param("palletId") String palletId, + @Param("taskNo") String taskNo, + @Param("sourceBillNo") String sourceBillNo); + + /** * @author rqrq * @Description 分页查询海安运输任务主表 - rqrq diff --git a/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnAgvTaskServiceImpl.java b/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnAgvTaskServiceImpl.java index 16198fdd..4a7f2758 100644 --- a/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnAgvTaskServiceImpl.java +++ b/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnAgvTaskServiceImpl.java @@ -23,6 +23,7 @@ import com.gaotao.modules.autoWareHourceHaian.staticData.HaiAnOperatorStaticData import com.gaotao.modules.autoWareHourceHaian.staticData.HaiAnOutboundRfidActionStaticData; import com.gaotao.modules.autoWareHourceHaian.staticData.HaiAnRfidCheckResultStaticData; import com.gaotao.modules.autoWareHourceHaian.staticData.HaiAnStatusStaticData; +import com.gaotao.modules.autoWareHourceHaian.staticData.HaiAnTaskSourceStaticData; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -213,7 +214,7 @@ public class HaiAnAgvTaskServiceImpl implements HaiAnAgvTaskService { taskData.setSite(site); taskData.setTaskNo(taskNo); taskData.setItemNo(1); - taskData.setSourceType("运输栈板"); + taskData.setSourceType(HaiAnTaskSourceStaticData.TRANSPORT_PALLET); taskData.setSourceBillNo(normalizeText(taskDetail.getComment())); // 海安AGV来源指向WOT主任务,来源行号统一为1(原为0),新增与补偿更新保持一致 - rqrq taskData.setSourceLineId(1L); @@ -240,8 +241,22 @@ public class HaiAnAgvTaskServiceImpl implements HaiAnAgvTaskService { taskData.setToArea(toArea); HaiAnWmsTransportTask existedTask = haiAnAgvTaskMapper.getTransportTaskByTaskNo(site, taskNo); - // 下达回调证明WCS已受理,可供齐套调度核实超时结果;与本回调一起回滚。- rqrq - haiAnCacheTransportMapper.recordExecution(site, palletId, taskNo, taskData.getSourceBillNo(), "DISPATCH", null, null); + // 重复下达保留已有来源WOT,避免空备注覆盖后无法关联齐套明细。- rqrq + if (!StringUtils.hasText(taskData.getSourceBillNo()) && existedTask != null) { + taskData.setSourceBillNo(existedTask.getSourceBillNo()); + } + // 仅下达时按site、托盘和WOT识别齐套来源;查询失败由回调事务回滚,后续阶段直接使用主单类型。- rqrq + boolean cacheTransport = existedTask != null + && HaiAnTaskSourceStaticData.CACHE_TRANSPORT.equals(existedTask.getSourceType()); + if (!cacheTransport) { + // 精确查询来源WOT的齐套运输类型;旧单据不补判,不按单号前缀猜测。- rqrq + cacheTransport = haiAnAgvTaskMapper.isCacheTransportTask(site, palletId, taskNo, taskData.getSourceBillNo()); + } + if (cacheTransport) { + taskData.setSourceType(HaiAnTaskSourceStaticData.CACHE_TRANSPORT); + // 下达回调证明WCS已受理;仅齐套运输更新执行事实,失败与本回调一起回滚。- rqrq + haiAnCacheTransportMapper.recordExecution(site, palletId, taskNo, taskData.getSourceBillNo(), "DISPATCH", null, null); + } if (existedTask == null) { int insertRows = haiAnAgvTaskMapper.insertTransportTask(taskData); if (insertRows <= 0) { @@ -274,7 +289,10 @@ public class HaiAnAgvTaskServiceImpl implements HaiAnAgvTaskService { HaiAnOperatorStaticData.AGV_SCHEDULER ); // 持久化本齐套明细实际取货时间;仅匹配本运输来源,不用当前托盘位置推算历史。- rqrq - haiAnCacheTransportMapper.recordExecution(site, palletId, taskNo, task.getSourceBillNo(), "PICK", null, null); + if (HaiAnTaskSourceStaticData.CACHE_TRANSPORT.equals(task.getSourceType())) { + // 复用已读取主单类型,仅齐套运输按site、托盘及来源WOT更新;失败回滚回调事务。- rqrq + haiAnCacheTransportMapper.recordExecution(site, palletId, taskNo, task.getSourceBillNo(), "PICK", null, null); + } } /** @@ -327,7 +345,10 @@ public class HaiAnAgvTaskServiceImpl implements HaiAnAgvTaskService { HaiAnOperatorStaticData.AGV_SCHEDULER ); // 实际送达与自动下发完成分开记录,放货事务失败时一并回滚。- rqrq - haiAnCacheTransportMapper.recordExecution(site, palletId, taskNo, task.getSourceBillNo(), "ARRIVE", toArea, null); + if (HaiAnTaskSourceStaticData.CACHE_TRANSPORT.equals(task.getSourceType())) { + // 复用已读取主单类型,仅齐套运输按site、托盘及来源WOT更新;失败回滚回调事务。- rqrq + haiAnCacheTransportMapper.recordExecution(site, palletId, taskNo, task.getSourceBillNo(), "ARRIVE", toArea, null); + } } /** @@ -358,9 +379,17 @@ public class HaiAnAgvTaskServiceImpl implements HaiAnAgvTaskService { if (pickupDoneCount != null && pickupDoneCount > 0) { haiAnPdaAutoWarehouseMapper.clearHaiAnPalletLocationAndArea(site, palletId, HaiAnOperatorStaticData.AGV_SCHEDULER); } - // 取消释放本齐套明细的活跃关联,后续回到缓存区可再次建单;历史仍显示取消。- rqrq - haiAnCacheTransportMapper.recordExecution(site, palletId, taskNo, - task == null ? normalizeText(taskDetail.getComment()) : task.getSourceBillNo(), "CANCEL", null, callbackType); + String sourceBillNo = task == null ? normalizeText(taskDetail.getComment()) : task.getSourceBillNo(); + boolean cacheTransport = task != null + && HaiAnTaskSourceStaticData.CACHE_TRANSPORT.equals(task.getSourceType()); + if (task == null) { + // 主单尚未生成的异常取消才补查来源;无精确关联则跳过,查询失败回滚本回调。- rqrq + cacheTransport = haiAnAgvTaskMapper.isCacheTransportTask(site, palletId, taskNo, sourceBillNo); + } + if (cacheTransport) { + // 仅齐套取消释放本明细关联,普通运输不访问齐套明细更新;历史保留取消事实。- rqrq + haiAnCacheTransportMapper.recordExecution(site, palletId, taskNo, sourceBillNo, "CANCEL", null, callbackType); + } } /** diff --git a/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnCacheTransportDispatchServiceImpl.java b/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnCacheTransportDispatchServiceImpl.java index c9448190..d994d184 100644 --- a/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnCacheTransportDispatchServiceImpl.java +++ b/src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnCacheTransportDispatchServiceImpl.java @@ -368,7 +368,8 @@ public class HaiAnCacheTransportDispatchServiceImpl implements HaiAnCacheTranspo orderTask.setSite(detail.getSite()); orderTask.setTaskNo(detail.getTaskNo()); orderTask.setItemNo(1); - orderTask.setSourceType(HaiAnTaskSourceStaticData.TRANSPORT_PALLET); + // 单独标记齐套来源,供AGV下达回调传递到实际运输主单。- rqrq + orderTask.setSourceType(HaiAnTaskSourceStaticData.CACHE_TRANSPORT); orderTask.setSourceBillNo(detail.getOrderNo()); orderTask.setSourceLineId(detail.getId()); orderTask.setPartNo(""); diff --git a/src/main/java/com/gaotao/modules/autoWareHourceHaian/staticData/HaiAnTaskSourceStaticData.java b/src/main/java/com/gaotao/modules/autoWareHourceHaian/staticData/HaiAnTaskSourceStaticData.java index c1973f9c..594a455b 100644 --- a/src/main/java/com/gaotao/modules/autoWareHourceHaian/staticData/HaiAnTaskSourceStaticData.java +++ b/src/main/java/com/gaotao/modules/autoWareHourceHaian/staticData/HaiAnTaskSourceStaticData.java @@ -39,6 +39,9 @@ public final class HaiAnTaskSourceStaticData { */ public static final String TRANSPORT_PALLET = "运输栈板"; + /** 齐套缓存运输来源,写入WOT及实际AGV主单,回调据此决定是否联动齐套明细。- rqrq */ + public static final String CACHE_TRANSPORT = "齐套运输"; + /** * 任务来源:空托盘入库。空托盘通知入库/入库并运输写 WOT.source_type。 - rqrq */ diff --git a/src/main/resources/mapper/autoWareHourceHaian/HaiAnAgvTaskMapper.xml b/src/main/resources/mapper/autoWareHourceHaian/HaiAnAgvTaskMapper.xml index abe018d4..fa164a6c 100644 --- a/src/main/resources/mapper/autoWareHourceHaian/HaiAnAgvTaskMapper.xml +++ b/src/main/resources/mapper/autoWareHourceHaian/HaiAnAgvTaskMapper.xml @@ -2,6 +2,16 @@ + + +