| | |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * 立库侧请求云仓:9.1 鼎捷 ilcwmsplus 入/出库两接口;9.2 仍为 /api/report/inventoryAdjust,报文与 9.1 同为 {data:[]}。 |
| | | * 立库侧请求云仓:ICusStockService 入库/出库/调拨完成反馈;9.2 增减调整仍为 /api/report/inventoryAdjust,报文同为 {data:[]}。 |
| | | */ |
| | | @Slf4j |
| | | @Service |
| | |
| | | } else { |
| | | return resultMap(400, "不支持的 changeType:" + changeType, null); |
| | | } |
| | | Map<String, Object> raw = cloudWmsErpFeignClient.reportInventoryAdjust(req); |
| | | return DapIlcwmsResponseNormalizer.toNotifyFormatFlexible(raw); |
| | | Map<String, Object> raw = changeType == 3 |
| | | ? cloudWmsErpFeignClient.stockTransferCompleted(req) |
| | | : cloudWmsErpFeignClient.reportInventoryAdjust(req); |
| | | return changeType == 3 |
| | | ? DapIlcwmsResponseNormalizer.toNotifyFormat(raw) |
| | | : DapIlcwmsResponseNormalizer.toNotifyFormatFlexible(raw); |
| | | } |
| | | |
| | | private DapIlcwmsCompletionLine buildInOutLine(InOutResultReportParam param, boolean inbound) { |
| | | RemotesInfoProperties.Dap dap = erpApi.getDap(); |
| | | CloudMatnrParts matnrParts = parseCloudMatnr(param.getMatNr()); |
| | | DapIlcwmsCompletionLine line = new DapIlcwmsCompletionLine() |
| | | .setOrgNo(dap.getOrgNo()) |
| | | .setDocType(inbound ? dap.getDocTypeIn() : dap.getDocTypeOut()) |
| | | .setDocNo(param.getOrderNo()) |
| | | .setDocSeqNo(StringUtils.isNotBlank(param.getLineId()) ? param.getLineId() : "1") |
| | | .setItemNo(param.getMatNr()) |
| | | // 按云仓规则拆分物料编码 |
| | | .setItemNo(matnrParts.getItemNo()) |
| | | .setQty(parseQty(param.getQty())) |
| | | .setUnitNo(dap.getUnitNo()) |
| | | .setCombinationLotNo(param.getBatch()) |
| | | .setBarcode(resolveBarcode(param)); |
| | | .setCombinationLotNo(matnrParts.getCombinationLotNo()) |
| | | .setBarcode(matnrParts.getBarcode()); |
| | | if (inbound) { |
| | | line.setInWarehouseNo(param.getWareHouseId()).setInCellNo(param.getLocId()); |
| | | } else { |
| | |
| | | String docSeq = docSeqOverride != null ? docSeqOverride |
| | | : (StringUtils.isNotBlank(param.getDocSeqNo()) ? param.getDocSeqNo() : "1"); |
| | | String unit = StringUtils.isNotBlank(param.getUnitNo()) ? param.getUnitNo() : dap.getUnitNo(); |
| | | CloudMatnrParts matnrParts = parseCloudMatnr(param.getMatNr()); |
| | | DapIlcwmsCompletionLine line = new DapIlcwmsCompletionLine() |
| | | .setOrgNo(dap.getOrgNo()) |
| | | .setDocType(docType) |
| | | .setDocNo(docNo) |
| | | .setDocSeqNo(docSeq) |
| | | .setItemNo(param.getMatNr()) |
| | | // 按云仓规则拆分物料编码 |
| | | .setItemNo(matnrParts.getItemNo()) |
| | | .setQty(parseQty(param.getQty())) |
| | | .setUnitNo(unit) |
| | | .setCombinationLotNo(param.getBatch()) |
| | | .setBarcode(resolveAdjustBarcode(param)); |
| | | .setCombinationLotNo(matnrParts.getCombinationLotNo()) |
| | | .setBarcode(matnrParts.getBarcode()); |
| | | if (fillIn) { |
| | | line.setInWarehouseNo(param.getWareHouseId()); |
| | | line.setInCellNo(StringUtils.isNotBlank(param.getTargetLocId()) ? param.getTargetLocId() : param.getSourceLocId()); |
| | |
| | | return dap.getDocTypeIn(); |
| | | } |
| | | |
| | | private static String resolveBarcode(InOutResultReportParam param) { |
| | | if (StringUtils.isNotBlank(param.getBarcode())) { |
| | | return param.getBarcode(); |
| | | // private static String resolveBarcode(InOutResultReportParam param) { |
| | | // if (StringUtils.isNotBlank(param.getBarcode())) { |
| | | // return param.getBarcode(); |
| | | // } |
| | | // if (StringUtils.isNotBlank(param.getPalletId())) { |
| | | // return param.getPalletId(); |
| | | // } |
| | | // if (param.getMatNr() != null && param.getLocId() != null) { |
| | | // return param.getMatNr() + ":" + param.getLocId(); |
| | | // } |
| | | // return param.getMatNr(); |
| | | // } |
| | | // |
| | | // private static String resolveAdjustBarcode(InventoryAdjustReportParam param) { |
| | | // if (StringUtils.isNotBlank(param.getBarcode())) { |
| | | // return param.getBarcode(); |
| | | // } |
| | | // if (StringUtils.isNotBlank(param.getPalletId())) { |
| | | // return param.getPalletId(); |
| | | // } |
| | | // return param.getMatNr(); |
| | | // } |
| | | |
| | | /** |
| | | * 云仓回报字段映射:三段式取前两段,barcode 保留原串。 |
| | | */ |
| | | private static CloudMatnrParts parseCloudMatnr(String matNr) { |
| | | if (StringUtils.isBlank(matNr)) { |
| | | return new CloudMatnrParts(null, null, null); |
| | | } |
| | | if (StringUtils.isNotBlank(param.getPalletId())) { |
| | | return param.getPalletId(); |
| | | String[] arr = matNr.split("#", -1); |
| | | if (arr.length >= 3) { |
| | | return new CloudMatnrParts(arr[0], arr[1], matNr); |
| | | } |
| | | if (param.getMatNr() != null && param.getLocId() != null) { |
| | | return param.getMatNr() + ":" + param.getLocId(); |
| | | } |
| | | return param.getMatNr(); |
| | | return new CloudMatnrParts(matNr, null, matNr); |
| | | } |
| | | |
| | | private static String resolveAdjustBarcode(InventoryAdjustReportParam param) { |
| | | if (StringUtils.isNotBlank(param.getBarcode())) { |
| | | return param.getBarcode(); |
| | | private static class CloudMatnrParts { |
| | | private final String itemNo; |
| | | private final String combinationLotNo; |
| | | private final String barcode; |
| | | |
| | | private CloudMatnrParts(String itemNo, String combinationLotNo, String barcode) { |
| | | this.itemNo = itemNo; |
| | | this.combinationLotNo = combinationLotNo; |
| | | this.barcode = barcode; |
| | | } |
| | | if (StringUtils.isNotBlank(param.getPalletId())) { |
| | | return param.getPalletId(); |
| | | |
| | | public String getItemNo() { |
| | | return itemNo; |
| | | } |
| | | return param.getMatNr(); |
| | | |
| | | public String getCombinationLotNo() { |
| | | return combinationLotNo; |
| | | } |
| | | |
| | | public String getBarcode() { |
| | | return barcode; |
| | | } |
| | | } |
| | | |
| | | private static Double parseQty(String q) { |