|
|
|
@ -61,28 +61,35 @@ public class AutoSortServiceImpl implements AutoSortService { |
|
|
|
* @date 2025/10/09 |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public void processAutoSortCallback(WcsCallbackPalletScan callback) throws Exception { |
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
public void processAutoSortCallback(WcsCallbackPalletScan callback) { |
|
|
|
System.out.println("开始处理WCS自动拣选回调记录 - rqrq,palletId=" + callback.getPalletId() |
|
|
|
+ ",分拣方式=" + callback.getSoreType() + "(1=气胀轴, 2=抱箱)"); |
|
|
|
|
|
|
|
try { |
|
|
|
// 1. 更新回调记录状态为处理中(乐观锁)- rqrq |
|
|
|
wcsCallbackPalletScanMapper.updateProcessStatus(callback.getId(), "PROCESSING", null); |
|
|
|
// 1. 使用乐观锁更新回调记录状态为处理中(防止重复处理)- rqrq |
|
|
|
int lockResult = wcsCallbackPalletScanMapper.updateProcessStatusWithLock( |
|
|
|
callback.getId(), callback.getProcessStatus(), "PROCESSING"); |
|
|
|
|
|
|
|
if (lockResult == 0) { |
|
|
|
System.out.println("乐观锁更新失败 - rqrq:记录可能已被其他线程处理,跳过"); |
|
|
|
return; // 获取锁失败,直接返回 - rqrq |
|
|
|
} |
|
|
|
System.out.println("乐观锁更新成功 - rqrq:状态已更新为处理中"); |
|
|
|
|
|
|
|
// 2. 解析jsonStr为PushPalletDetailDto对象 - rqrq |
|
|
|
if (!StringUtils.hasText(callback.getJsonStr())) { |
|
|
|
throw new Exception("jsonStr为空,无法解析栈板和明细信息"); |
|
|
|
throw new RuntimeException("jsonStr为空,无法解析栈板和明细信息"); |
|
|
|
} |
|
|
|
|
|
|
|
PushPalletDetailDto pushData = JSONObject.parseObject(callback.getJsonStr(), PushPalletDetailDto.class); |
|
|
|
if (pushData == null) { |
|
|
|
throw new Exception("jsonStr解析为PushPalletDetailDto失败"); |
|
|
|
throw new RuntimeException("jsonStr解析为PushPalletDetailDto失败"); |
|
|
|
} |
|
|
|
|
|
|
|
String targetPalletId = pushData.getPalletBarcode(); |
|
|
|
if (!StringUtils.hasText(targetPalletId)) { |
|
|
|
throw new Exception("PushPalletDetailDto中未找到目标栈板编码(palletBarcode)"); |
|
|
|
throw new RuntimeException("PushPalletDetailDto中未找到目标栈板编码(palletBarcode)"); |
|
|
|
} |
|
|
|
|
|
|
|
// 解析明细列表 - rqrq |
|
|
|
@ -151,12 +158,22 @@ public class AutoSortServiceImpl implements AutoSortService { |
|
|
|
List<String> processedSerialNos = new ArrayList<>(); |
|
|
|
|
|
|
|
for (IncrementalDetail detail : incrementalDetails) { |
|
|
|
// 先检查是否在其他栈板,如果是则删除 - rqrq |
|
|
|
// 先检查是否在其他栈板 - rqrq |
|
|
|
Map<String, Object> existingPalletInfo = wcsIntegrationMapper.findPalletByLabel( |
|
|
|
callback.getSite(), detail.serialNo); |
|
|
|
|
|
|
|
if (existingPalletInfo != null) { |
|
|
|
String existingPalletId = (String) existingPalletInfo.get("palletId"); |
|
|
|
System.out.println("条码" + detail.serialNo + "在栈板" + existingPalletId + "中,先删除旧记录 - rqrq"); |
|
|
|
|
|
|
|
// 如果已经在目标栈板上,跳过(避免删除重建导致数据丢失)- rqrq |
|
|
|
if (targetPalletId.equals(existingPalletId)) { |
|
|
|
System.out.println("条码" + detail.serialNo + "已在目标栈板上,跳过 - rqrq"); |
|
|
|
processedSerialNos.add(detail.serialNo); |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
// 在其他栈板,先删除 - rqrq |
|
|
|
System.out.println("条码" + detail.serialNo + "在其他栈板" + existingPalletId + "中,先删除旧记录 - rqrq"); |
|
|
|
wcsIntegrationMapper.deletePalletDetailBySerialNo(callback.getSite(), detail.serialNo); |
|
|
|
} |
|
|
|
|
|
|
|
@ -168,26 +185,14 @@ public class AutoSortServiceImpl implements AutoSortService { |
|
|
|
System.out.println("扫进成功 - rqrq:serialNo=" + detail.serialNo + |
|
|
|
", position=" + detail.position + ", layer=" + detail.layer); |
|
|
|
|
|
|
|
// 更新SOIssueNotifyOrderMaterialList_detail的out_wcs_flag为Y - rqrq |
|
|
|
try { |
|
|
|
// wcsIntegrationMapper.updateSOIssueNotifyDetailOutWcsFlagByTask( |
|
|
|
// callback.getSite(), callback.getTaskNo(), callback.getItemNo(), detail.serialNo); |
|
|
|
// System.out.println("更新out_wcs_flag成功 - rqrq:taskNo=" + callback.getTaskNo() + |
|
|
|
// ", itemNo=" + callback.getItemNo() + ", serialNo=" + detail.serialNo); |
|
|
|
//这边不应该处理out_wcs_flag 会影响下面数据 |
|
|
|
// 记录处理成功的序列号 - rqrq |
|
|
|
processedSerialNos.add(detail.serialNo); |
|
|
|
} catch (Exception ex) { |
|
|
|
// 更新失败不影响主流程,只打印日志 - rqrq |
|
|
|
// System.err.println("更新out_wcs_flag失败 - rqrq:" + ex.getMessage()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 7. 根据序列号查询SOIssueNotifyOrderMaterialList_detail明细,获取task_seq等信息 - rqrq |
|
|
|
if (!processedSerialNos.isEmpty()) { |
|
|
|
System.out.println("开始更新wms_order_task_detail状态 - rqrq,序列号数量=" + processedSerialNos.size()); |
|
|
|
|
|
|
|
try { |
|
|
|
// 查询申请单明细 - rqrq |
|
|
|
List<com.gaotao.modules.notify.entity.SOIssueNotifyOrderMaterialListDetail> notifyDetails = |
|
|
|
wcsIntegrationMapper.getSOIssueNotifyDetailsBySerialNos(callback.getSite(), processedSerialNos); |
|
|
|
@ -247,44 +252,49 @@ public class AutoSortServiceImpl implements AutoSortService { |
|
|
|
} |
|
|
|
|
|
|
|
System.out.println("更新wms_order_task_detail和wms_order_task状态完成 - rqrq"); |
|
|
|
|
|
|
|
} catch (Exception ex) { |
|
|
|
// 更新任务状态失败不影响主流程,只打印日志 - rqrq |
|
|
|
System.err.println("更新任务状态失败 - rqrq:" + ex.getMessage()); |
|
|
|
ex.printStackTrace(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 9. 更新out_wcs_flag标识 - rqrq |
|
|
|
for (IncrementalDetail detail : incrementalDetails) { |
|
|
|
wcsIntegrationMapper.updateSOIssueNotifyDetailOutWcsFlagByTask( |
|
|
|
callback.getSite(), callback.getTaskNo(), callback.getItemNo(), detail.serialNo); |
|
|
|
System.out.println("更新out_wcs_flag成功 - rqrq:taskNo=" + callback.getTaskNo() + |
|
|
|
", itemNo=" + callback.getItemNo() + ", serialNo=" + detail.serialNo); |
|
|
|
} |
|
|
|
// 9. 更新空栈板标记 - rqrq |
|
|
|
|
|
|
|
// 10. 查询栈板信息并创建配送任务 - rqrq |
|
|
|
Pallet pallet = wcsIntegrationMapper.getPalletByCode(callback.getSite(), callback.getPalletId()); |
|
|
|
if (pallet == null) { |
|
|
|
throw new RuntimeException("栈板不存在:" + callback.getPalletId()); |
|
|
|
} |
|
|
|
|
|
|
|
// 11. 更新空栈板标记 - rqrq |
|
|
|
wcsIntegrationMapper.updatePalletEmptyFlag(callback.getSite(), targetPalletId, "N", username); |
|
|
|
|
|
|
|
// 12. 创建配送任务 - rqrq |
|
|
|
ScheduleDeliveryTask scheduleDeliveryTask = new ScheduleDeliveryTask(); |
|
|
|
scheduleDeliveryTask.setSite(callback.getSite()); |
|
|
|
scheduleDeliveryTask.setSourceBillNo(callback.getTaskNo()); |
|
|
|
try { |
|
|
|
scheduleDeliveryTask.setSourceLineId(Long.valueOf(callback.getItemNo())); |
|
|
|
} catch (NumberFormatException e) { |
|
|
|
// 解析失败,返回默认值 0 |
|
|
|
// 解析失败,返回默认值 0 - rqrq |
|
|
|
scheduleDeliveryTask.setSourceLineId(0L); |
|
|
|
} |
|
|
|
scheduleDeliveryTask.setPalletId(callback.getPalletId()); |
|
|
|
Pallet pallet = wcsIntegrationMapper.getPalletByCode(callback.getSite(), callback.getPalletId()); |
|
|
|
scheduleDeliveryTask.setFromLocation(pallet.getLocationCode()); |
|
|
|
scheduleDeliveryTask.setToArea("Z104"); |
|
|
|
scheduleDeliveryTask.setUsername("SYS_WMS"); |
|
|
|
autoTaskService.scheduleDeliveryTask(scheduleDeliveryTask); |
|
|
|
// 10. 更新回调记录状态为已完成 - rqrq |
|
|
|
|
|
|
|
// 13. 更新回调记录状态为已完成 - rqrq |
|
|
|
wcsCallbackPalletScanMapper.updateProcessStatus(callback.getId(), "COMPLETED", |
|
|
|
"成功处理" + incrementalDetails.size() + "条增量数据"); |
|
|
|
|
|
|
|
System.out.println("WCS自动拣选回调处理完成 - rqrq,palletId=" + targetPalletId |
|
|
|
+ ",增量数据=" + incrementalDetails.size() + "条"); |
|
|
|
|
|
|
|
} catch (RuntimeException e) { |
|
|
|
} catch (Exception e) { |
|
|
|
System.err.println("处理WCS自动拣选回调失败 - rqrq,palletId=" + callback.getPalletId() |
|
|
|
+ ",错误:" + e.getMessage()); |
|
|
|
e.printStackTrace(); |
|
|
|
@ -295,7 +305,7 @@ public class AutoSortServiceImpl implements AutoSortService { |
|
|
|
// 增加重试次数 - rqrq |
|
|
|
wcsCallbackPalletScanMapper.incrementRetryCount(callback.getId()); |
|
|
|
|
|
|
|
throw e; |
|
|
|
throw new RuntimeException("处理WCS自动拣选回调失败:" + e.getMessage(), e); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|