|
|
|
@ -37,6 +37,8 @@ public class WcsIntegrationServiceImpl implements WcsIntegrationService { |
|
|
|
private WcsApiService wcsApiService; |
|
|
|
@Autowired |
|
|
|
private AgvClientUtil agvClientUtil; |
|
|
|
@Autowired |
|
|
|
private com.gaotao.modules.automatedWarehouse.service.AutoTaskService autoTaskService; |
|
|
|
@Override |
|
|
|
public List<WmsLabelAndPalletData> palletListForPartNo(PartPalletData inData){ |
|
|
|
// inData.setWarehouseId(Pallet.likuWarehouseId); |
|
|
|
@ -2065,4 +2067,132 @@ public class WcsIntegrationServiceImpl implements WcsIntegrationService { |
|
|
|
System.out.println("移出全部物料完成 - rqrq"); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @Description Call料到指定位置(Call料+预约取盘到指定区域/站点)- rqrq |
|
|
|
* @param request Call料到指定位置请求参数 |
|
|
|
* @author rqrq |
|
|
|
* @date 2025/10/17 |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public void callOutToStation(CallOutToStationRequestDto request) { |
|
|
|
System.out.println("开始Call料到指定位置 - rqrq,palletId=" + request.getPalletId() + |
|
|
|
", targetArea=" + request.getTargetArea() + ", targetStation=" + request.getTargetStation()); |
|
|
|
|
|
|
|
String site = request.getSite(); |
|
|
|
String palletId = request.getPalletId(); |
|
|
|
String targetArea = request.getTargetArea(); |
|
|
|
String targetStation = request.getTargetStation(); |
|
|
|
String username = request.getUsername(); |
|
|
|
|
|
|
|
// 1. 校验必填参数 - rqrq |
|
|
|
if (palletId == null || palletId.trim().isEmpty()) { |
|
|
|
throw new RuntimeException("栈板编码不能为空"); |
|
|
|
} |
|
|
|
if (targetArea == null || targetArea.trim().isEmpty()) { |
|
|
|
throw new RuntimeException("目标区域不能为空"); |
|
|
|
} |
|
|
|
|
|
|
|
// 2. 确定目标站点(自动分配或指定站点)- rqrq |
|
|
|
String finalTargetStation = targetStation; |
|
|
|
if (finalTargetStation == null || finalTargetStation.trim().isEmpty()) { |
|
|
|
// 自动分配:根据区域查找第一个空闲站点 - rqrq |
|
|
|
System.out.println("自动分配站点 - rqrq,targetArea=" + targetArea); |
|
|
|
finalTargetStation = wcsIntegrationMapper.findFirstFreeStationByAreaId(targetArea); |
|
|
|
if (finalTargetStation == null || finalTargetStation.trim().isEmpty()) { |
|
|
|
throw new RuntimeException("目标区域【" + targetArea + "】没有空闲站点"); |
|
|
|
} |
|
|
|
System.out.println("自动分配站点成功 - rqrq,stationCode=" + finalTargetStation); |
|
|
|
} else { |
|
|
|
// 指定站点:校验站点是否空闲 - rqrq |
|
|
|
System.out.println("校验指定站点是否空闲 - rqrq,stationCode=" + finalTargetStation); |
|
|
|
Integer stationStatus = wcsIntegrationMapper.getAgvStationStatus(finalTargetStation); |
|
|
|
if (stationStatus == null) { |
|
|
|
throw new RuntimeException("站点【" + finalTargetStation + "】不存在"); |
|
|
|
} |
|
|
|
if (stationStatus != 0) { |
|
|
|
throw new RuntimeException("站点【" + finalTargetStation + "】不是空闲状态(status_db=" + stationStatus + ")"); |
|
|
|
} |
|
|
|
System.out.println("站点校验通过,站点空闲 - rqrq"); |
|
|
|
} |
|
|
|
// 4. 第二步:创建预约取盘任务(autoNeedPalletTask)- rqrq |
|
|
|
System.out.println("开始创建预约取盘任务 - rqrq"); |
|
|
|
com.gaotao.modules.api.entity.NeedPalletTask needPalletTask = |
|
|
|
new com.gaotao.modules.api.entity.NeedPalletTask(); |
|
|
|
needPalletTask.setSite(site); |
|
|
|
needPalletTask.setPalletId(palletId); // 指定栈板ID - rqrq |
|
|
|
needPalletTask.setPalletType(null); // 已知栈板,不需要托盘类型 - rqrq |
|
|
|
needPalletTask.setStationCode(finalTargetStation); |
|
|
|
needPalletTask.setUsername(username); |
|
|
|
|
|
|
|
autoTaskService.autoNeedPalletTask(needPalletTask); |
|
|
|
System.out.println("预约取盘任务创建成功 - rqrq"); |
|
|
|
|
|
|
|
System.out.println("Call料到指定位置完成 - rqrq"); |
|
|
|
|
|
|
|
// 3. 第一步:执行原来的Call料方法(callPalletFromWcsNew)- rqrq |
|
|
|
System.out.println("开始执行Call料 - rqrq"); |
|
|
|
WmsLabelAndPalletData palletData = new WmsLabelAndPalletData(); |
|
|
|
palletData.setSite(site); |
|
|
|
palletData.setPalletId(palletId); |
|
|
|
palletData.setPartNo(request.getPartNo()); |
|
|
|
palletData.setQty(request.getQty()); |
|
|
|
palletData.setBatchNo(request.getBatchNo()); |
|
|
|
|
|
|
|
List<WmsLabelAndPalletData> palletList = new java.util.ArrayList<>(); |
|
|
|
palletList.add(palletData); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Map<String, Object> callResult = this.callPalletFromWcsNew(palletList); |
|
|
|
Integer failedCount = (Integer) callResult.get("failedCount"); |
|
|
|
|
|
|
|
if (failedCount != null && failedCount > 0) { |
|
|
|
// Call料失败 - rqrq |
|
|
|
@SuppressWarnings("unchecked") |
|
|
|
List<String> failedReasons = (List<String>) callResult.get("failedReasons"); |
|
|
|
String errorMsg = failedReasons != null && !failedReasons.isEmpty() ? |
|
|
|
failedReasons.get(0) : "Call料失败"; |
|
|
|
System.out.println("Call料失败 - rqrq:" + errorMsg); |
|
|
|
throw new RuntimeException("Call料失败:" + errorMsg); |
|
|
|
} |
|
|
|
|
|
|
|
System.out.println("Call料成功 - rqrq"); |
|
|
|
|
|
|
|
// 5. 第三步:查询Call料后生成的OrderTask,并更新TransportTask的来源单据信息 - rqrq |
|
|
|
System.out.println("开始关联OrderTask和TransportTask - rqrq"); |
|
|
|
try { |
|
|
|
// 查询最新的OrderTask(手工Call料生成的)- rqrq |
|
|
|
WmsOrderTask latestOrderTask = wcsIntegrationMapper.findLatestOrderTaskByPallet( |
|
|
|
site, |
|
|
|
palletId, |
|
|
|
"手工Call料" |
|
|
|
); |
|
|
|
|
|
|
|
if (latestOrderTask != null) { |
|
|
|
System.out.println("查询到OrderTask - rqrq,taskNo=" + latestOrderTask.getTaskNo() + |
|
|
|
", itemNo=" + latestOrderTask.getItemNo()); |
|
|
|
|
|
|
|
// 更新TransportTask的source_bill_no和source_line_id - rqrq |
|
|
|
wcsIntegrationMapper.updateTransportTaskSourceInfo( |
|
|
|
site, |
|
|
|
palletId, |
|
|
|
latestOrderTask.getTaskNo(), |
|
|
|
latestOrderTask.getItemNo() |
|
|
|
); |
|
|
|
|
|
|
|
System.out.println("已更新TransportTask的来源单据信息 - rqrq,sourceBillNo=" + |
|
|
|
latestOrderTask.getTaskNo() + ", sourceLineId=" + latestOrderTask.getItemNo()); |
|
|
|
} else { |
|
|
|
System.out.println("警告:未找到对应的OrderTask - rqrq"); |
|
|
|
} |
|
|
|
} catch (Exception e) { |
|
|
|
// 这步失败不影响整体流程,只记录日志 - rqrq |
|
|
|
System.out.println("关联OrderTask和TransportTask失败 - rqrq:" + e.getMessage()); |
|
|
|
} |
|
|
|
|
|
|
|
System.out.println("Call料到指定位置完成 - rqrq"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |