|
|
|
@ -13,6 +13,9 @@ import com.gaotao.modules.check.mapper.PhysicalInventoryMapper; |
|
|
|
import com.gaotao.modules.check.service.PhysicalInventoryService; |
|
|
|
import com.gaotao.modules.trans.entity.TransNoControl; |
|
|
|
import com.gaotao.modules.trans.service.TransNoControlService; |
|
|
|
import com.gaotao.modules.api.entity.NotifyDataToWcs; |
|
|
|
import com.gaotao.modules.api.entity.NotifyDataToWcsPalletList; |
|
|
|
import com.gaotao.modules.api.service.WcsApiService; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
@ -42,6 +45,9 @@ public class PhysicalInventoryServiceImpl extends ServiceImpl<PhysicalInventoryM |
|
|
|
@Autowired |
|
|
|
private WcsIntegrationMapper wcsIntegrationMapper; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private WcsApiService wcsApiService; // rqrq - 注入WCS接口服务 |
|
|
|
|
|
|
|
// ==================== 盘点主表 ==================== |
|
|
|
|
|
|
|
@Override |
|
|
|
@ -787,24 +793,163 @@ public class PhysicalInventoryServiceImpl extends ServiceImpl<PhysicalInventoryM |
|
|
|
} |
|
|
|
log.info("已更新栈板推送状态"); |
|
|
|
|
|
|
|
// 9. 推送给WCS(TODO: 接口待确认)- rqrq |
|
|
|
pushToWcs(taskNo, selectedPallets); |
|
|
|
// 9. 推送给WCS - rqrq |
|
|
|
pushToWcs(site, countNo, taskNo, selectedPallets); |
|
|
|
|
|
|
|
return selectedPallets.size(); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @Description 推送任务给WCS - rqrq |
|
|
|
* <p>TODO: WCS接口待确认,暂时留空</p> |
|
|
|
* |
|
|
|
* <p><b>参数说明:</b></p> |
|
|
|
* <ul> |
|
|
|
* <li>notifyNo = 盘点单号 + "-" + 流水号(流水号是这个盘点单的第几个任务单)</li> |
|
|
|
* <li>taskNo = 方法里创建的任务单单号</li> |
|
|
|
* <li>itemNo = 任务单行号(固定为1)</li> |
|
|
|
* <li>orderNo = 盘点单号</li> |
|
|
|
* <li>orderPartNo = 空字符串</li> |
|
|
|
* <li>orderType = 循环盘点是5,手工盘点是4</li> |
|
|
|
* <li>materialRequisitions = 栈板列表,每个栈板一条,materials传空集合</li> |
|
|
|
* </ul> |
|
|
|
* |
|
|
|
* @param site 工厂编码 |
|
|
|
* @param countNo 盘点单号 |
|
|
|
* @param taskNo 任务号 |
|
|
|
* @param pallets 栈板列表 |
|
|
|
* @author rqrq |
|
|
|
*/ |
|
|
|
private void pushToWcs(String site, String countNo, String taskNo, List<CountPalletData> pallets) { |
|
|
|
log.info("推送给WCS开始,site: {}, countNo: {}, taskNo: {}, 栈板数量: {}", site, countNo, taskNo, pallets.size()); |
|
|
|
|
|
|
|
try { |
|
|
|
// 1. 查询盘点类型,确定orderType - rqrq |
|
|
|
String countType = baseMapper.getCountType(site, countNo); |
|
|
|
int orderType = CountHeader.COUNT_TYPE_CYCLE.equals(countType) ? 5 : 4; // 循环盘点=5,手工盘点=4 |
|
|
|
log.info("盘点类型: {}, orderType: {}", countType, orderType); |
|
|
|
|
|
|
|
// 2. 计算流水号(查询该盘点单已有多少个任务单)- rqrq |
|
|
|
int taskCount = baseMapper.countOrderTaskByCountNo(site, countNo); |
|
|
|
String notifyNo = countNo + "-" + taskCount; |
|
|
|
log.info("计算流水号:taskCount={}, notifyNo={}", taskCount, notifyNo); |
|
|
|
|
|
|
|
// 3. 构建WCS数据 - rqrq |
|
|
|
NotifyDataToWcs wcsData = new NotifyDataToWcs(); |
|
|
|
wcsData.setSite(site != null ? site.trim() : null); |
|
|
|
wcsData.setNotifyNo(notifyNo); |
|
|
|
wcsData.setTaskNo(taskNo != null ? taskNo.trim() : null); |
|
|
|
wcsData.setItemNo(1); // 任务单行号固定为1 |
|
|
|
wcsData.setOrderNo(countNo != null ? countNo.trim() : null); |
|
|
|
wcsData.setOrderPartNo(""); // 传空 |
|
|
|
wcsData.setOrderType(orderType); |
|
|
|
|
|
|
|
// 4. 构建栈板列表 - rqrq |
|
|
|
List<NotifyDataToWcsPalletList> palletList = new ArrayList<>(); |
|
|
|
for (CountPalletData pallet : pallets) { |
|
|
|
NotifyDataToWcsPalletList palletData = new NotifyDataToWcsPalletList(); |
|
|
|
palletData.setPalletCode(pallet.getPalletId() != null ? pallet.getPalletId().trim() : null); |
|
|
|
palletData.setMaterials(new ArrayList<>()); // materials传空集合 |
|
|
|
palletList.add(palletData); |
|
|
|
} |
|
|
|
wcsData.setMaterialRequisitions(palletList); |
|
|
|
log.info("构建WCS数据完成,栈板数:{}", palletList.size()); |
|
|
|
|
|
|
|
// 5. 调用WCS接口 - rqrq |
|
|
|
log.info("开始调用WCS接口 - rqrq"); |
|
|
|
wcsApiService.pushNotifyToWcsApi(wcsData); |
|
|
|
log.info("WCS接口调用成功 - rqrq"); |
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
String errorMsg = e.getMessage(); |
|
|
|
log.error("WCS接口调用失败:{} - rqrq", errorMsg); |
|
|
|
|
|
|
|
// 超时错误直接抛出 - rqrq |
|
|
|
if (errorMsg != null && (errorMsg.contains("timeout") || errorMsg.contains("超时"))) { |
|
|
|
throw new RuntimeException("WCS接口调用超时:" + errorMsg); |
|
|
|
} |
|
|
|
|
|
|
|
// 其他错误也抛出,让调用方处理 - rqrq |
|
|
|
throw new RuntimeException("WCS接口调用失败:" + errorMsg); |
|
|
|
} |
|
|
|
|
|
|
|
log.info("推送给WCS结束"); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @Description 推送复核任务给WCS - rqrq |
|
|
|
* |
|
|
|
* <p><b>参数说明:</b></p> |
|
|
|
* <ul> |
|
|
|
* <li>notifyNo = 盘点单号 + "-" + 流水号(流水号是这个盘点单的第几个任务单)</li> |
|
|
|
* <li>taskNo = 方法里创建的任务单单号</li> |
|
|
|
* <li>itemNo = 任务单行号(固定为1)</li> |
|
|
|
* <li>orderNo = 盘点单号</li> |
|
|
|
* <li>orderPartNo = 空字符串</li> |
|
|
|
* <li>orderType = 循环复核是5,手工复核是4</li> |
|
|
|
* <li>materialRequisitions = 栈板列表,每个栈板一条,materials传空集合</li> |
|
|
|
* </ul> |
|
|
|
* |
|
|
|
* @param site 工厂编码 |
|
|
|
* @param countNo 盘点单号 |
|
|
|
* @param taskNo 任务号 |
|
|
|
* @param palletIds 栈板ID列表 |
|
|
|
* @param reviewType 复核类型(MANUAL/CYCLE) |
|
|
|
* @author rqrq |
|
|
|
*/ |
|
|
|
private void pushToWcs(String taskNo, List<CountPalletData> pallets) { |
|
|
|
log.info("推送给WCS开始,taskNo: {}, 栈板数量: {}", taskNo, pallets.size()); |
|
|
|
// TODO: WCS接口待确认 - rqrq |
|
|
|
// 调用WCS接口推送出库任务 |
|
|
|
log.info("推送给WCS结束(接口待实现)"); |
|
|
|
private void pushReviewToWcs(String site, String countNo, String taskNo, List<String> palletIds, String reviewType) { |
|
|
|
log.info("推送复核任务给WCS开始,site: {}, countNo: {}, taskNo: {}, 栈板数量: {}, reviewType: {}", |
|
|
|
site, countNo, taskNo, palletIds.size(), reviewType); |
|
|
|
|
|
|
|
try { |
|
|
|
// 1. 根据复核类型确定orderType - rqrq |
|
|
|
int orderType = "MANUAL".equals(reviewType) ? 4 : 5; // 循环复核=5,手工复核=4 |
|
|
|
log.info("复核类型: {}, orderType: {}", reviewType, orderType); |
|
|
|
|
|
|
|
// 2. 计算流水号(查询该盘点单已有多少个任务单)- rqrq |
|
|
|
int taskCount = baseMapper.countOrderTaskByCountNo(site, countNo); |
|
|
|
String notifyNo = countNo + "-" + taskCount; |
|
|
|
log.info("计算流水号:taskCount={}, notifyNo={}", taskCount, notifyNo); |
|
|
|
|
|
|
|
// 3. 构建WCS数据 - rqrq |
|
|
|
NotifyDataToWcs wcsData = new NotifyDataToWcs(); |
|
|
|
wcsData.setSite(site != null ? site.trim() : null); |
|
|
|
wcsData.setNotifyNo(notifyNo); |
|
|
|
wcsData.setTaskNo(taskNo != null ? taskNo.trim() : null); |
|
|
|
wcsData.setItemNo(1); // 任务单行号固定为1 |
|
|
|
wcsData.setOrderNo(countNo != null ? countNo.trim() : null); |
|
|
|
wcsData.setOrderPartNo(""); // 传空 |
|
|
|
wcsData.setOrderType(orderType); |
|
|
|
|
|
|
|
// 4. 构建栈板列表 - rqrq |
|
|
|
List<NotifyDataToWcsPalletList> palletList = new ArrayList<>(); |
|
|
|
for (String palletId : palletIds) { |
|
|
|
NotifyDataToWcsPalletList palletData = new NotifyDataToWcsPalletList(); |
|
|
|
palletData.setPalletCode(palletId != null ? palletId.trim() : null); |
|
|
|
palletData.setMaterials(new ArrayList<>()); // materials传空集合 |
|
|
|
palletList.add(palletData); |
|
|
|
} |
|
|
|
wcsData.setMaterialRequisitions(palletList); |
|
|
|
log.info("构建WCS数据完成,栈板数:{}", palletList.size()); |
|
|
|
|
|
|
|
// 5. 调用WCS接口 - rqrq |
|
|
|
log.info("开始调用WCS接口 - rqrq"); |
|
|
|
wcsApiService.pushNotifyToWcsApi(wcsData); |
|
|
|
log.info("WCS接口调用成功 - rqrq"); |
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
String errorMsg = e.getMessage(); |
|
|
|
log.error("WCS接口调用失败:{} - rqrq", errorMsg); |
|
|
|
|
|
|
|
// 超时错误直接抛出 - rqrq |
|
|
|
if (errorMsg != null && (errorMsg.contains("timeout") || errorMsg.contains("超时"))) { |
|
|
|
throw new RuntimeException("WCS接口调用超时:" + errorMsg); |
|
|
|
} |
|
|
|
|
|
|
|
// 其他错误也抛出,让调用方处理 - rqrq |
|
|
|
throw new RuntimeException("WCS接口调用失败:" + errorMsg); |
|
|
|
} |
|
|
|
|
|
|
|
log.info("推送复核任务给WCS结束"); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
@ -1572,8 +1717,8 @@ public class PhysicalInventoryServiceImpl extends ServiceImpl<PhysicalInventoryM |
|
|
|
} |
|
|
|
log.info("已更新count_pallet表的task_no,栈板数量: {}", palletIds.size()); |
|
|
|
|
|
|
|
// 8. TODO: 推送给WCS(接口待确认)- rqrq |
|
|
|
log.info("复核任务推送给WCS(接口待实现)"); |
|
|
|
// 8. 推送给WCS - rqrq |
|
|
|
pushReviewToWcs(site, countNo, taskNo, palletIds, reviewType); |
|
|
|
|
|
|
|
log.info("createReviewTask 结束,taskNo: {}", taskNo); |
|
|
|
return taskNo; |
|
|
|
|