cl
7 天以前 1a7a40cde5018124cac598f4a8db0cbcbeba386b
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/CloudWmsReportServiceImpl.java
@@ -104,16 +104,22 @@
    private DapIlcwmsCompletionLine buildInOutLine(InOutResultReportParam param, boolean inbound) {
        RemotesInfoProperties.Dap dap = erpApi.getDap();
        CloudMatnrParts matnrParts = parseCloudMatnr(param.getMatNr());
        String docType = StringUtils.isNotBlank(param.getWkType())
                ? param.getWkType()
                : (inbound ? "IN" : "OUT");
        String unitNo = StringUtils.isNotBlank(param.getUnitNo()) ? param.getUnitNo() : "PCS";
        DapIlcwmsCompletionLine line = new DapIlcwmsCompletionLine()
                .setOrgNo(dap.getOrgNo())
                .setDocType(inbound ? dap.getDocTypeIn() : dap.getDocTypeOut())
                .setDocType(docType)
                .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));
                .setUnitNo(unitNo)
                .setCombinationLotNo(matnrParts.getCombinationLotNo())
                .setBarcode(matnrParts.getBarcode());
        if (inbound) {
            line.setInWarehouseNo(param.getWareHouseId()).setInCellNo(param.getLocId());
        } else {
@@ -129,21 +135,23 @@
     */
    private DapIlcwmsCompletionLine buildAdjustLine(InventoryAdjustReportParam param, boolean fillIn, boolean fillOut, String docSeqOverride) {
        RemotesInfoProperties.Dap dap = erpApi.getDap();
        String docType = resolveAdjustDocType(param, dap);
        String docType = resolveAdjustDocType(param);
        String docNo = StringUtils.isNotBlank(param.getDocNo()) ? param.getDocNo() : "ADJ";
        String docSeq = docSeqOverride != null ? docSeqOverride
                : (StringUtils.isNotBlank(param.getDocSeqNo()) ? param.getDocSeqNo() : "1");
        String unit = StringUtils.isNotBlank(param.getUnitNo()) ? param.getUnitNo() : dap.getUnitNo();
        String unit = StringUtils.isNotBlank(param.getUnitNo()) ? param.getUnitNo() : "PCS";
        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());
@@ -155,41 +163,79 @@
        return line;
    }
    private static String resolveAdjustDocType(InventoryAdjustReportParam param, RemotesInfoProperties.Dap dap) {
    private static String resolveAdjustDocType(InventoryAdjustReportParam param) {
        if (StringUtils.isNotBlank(param.getDocType())) {
            return param.getDocType();
        }
        Integer ct = param.getChangeType();
        if (ct != null && ct == 2) {
            return dap.getDocTypeOut();
            return "OUT";
        }
        if (ct != null && ct == 3) {
            return dap.getDocTypeAdj();
            return "ADJ";
        }
        return dap.getDocTypeIn();
        return "IN";
    }
    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) {