|
|
|
@ -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); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
|