1
5 天以前 0d49292f712b2851105c69eed255f95cf2184187
rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/impl/ErpReportServiceImpl.java
@@ -459,12 +459,19 @@
            return CommonResponse.error("回传明细为空");
        }
        // 对回传数据做反映射(WMS字段名 → ERP字段名)
        JSONObject mappedRoot = ParamsMapUtils.reverseApiMaps("erp", "orderId", root);
        JSONArray mappedDataArray = pickArray(mappedRoot, "Data", "data");
        if (Objects.isNull(mappedDataArray) || mappedDataArray.isEmpty()) {
            mappedDataArray = dataArray;
        }
        int allocateCount = 0;
        int erpReportCount = 0;
        List<String> errors = new ArrayList<>();
        for (int i = 0; i < dataArray.size(); i++) {
            JSONObject row = dataArray.getJSONObject(i);
        for (int i = 0; i < mappedDataArray.size(); i++) {
            JSONObject row = mappedDataArray.getJSONObject(i);
            String orderNo = pickString(row, "WMSNO", "wmsNo", "orderNo", "OrderNo");
            String matnrCode = pickString(row, "ItemCode", "itemCode", "matNr", "MatNr");
            String batch = pickString(row, "Batch", "batch", "GoodsNO", "goodsNo");
@@ -486,6 +493,21 @@
            }
        }
        // 反映射后组装ReportParams,参照旧链路上报ERP
        try {
            ReportParams erpReportParams = buildReportParamsFromMappedData(mappedRoot, mappedDataArray);
            CommonResponse erpResp = wmsErpService.reportOrders(erpReportParams);
            if (Objects.nonNull(erpResp) && Objects.equals(erpResp.getCode(), 200)) {
                log.info("反映射上报ERP成功,orderNo={}", pickString(root, "orderNo", "WMSNO"));
            } else {
                String msg = Objects.isNull(erpResp) ? "ERP响应为空" : erpResp.getMsg();
                errors.add("上报ERP失败:" + msg);
            }
        } catch (Exception e) {
            log.error("反映射上报ERP异常", e);
            errors.add("上报ERP异常:" + e.getMessage());
        }
        if (!errors.isEmpty()) {
            reportEvent.setStatus(2);
            openApiOrderReportEventMapper.updateById(reportEvent);
@@ -500,6 +522,42 @@
        return CommonResponse.ok(result);
    }
    /**
     * 根据反映射后的数据组装ReportParams,参照旧链路wmsErpService.reportOrders格式上报ERP
     */
    private ReportParams buildReportParamsFromMappedData(JSONObject root, JSONArray dataArray) {
        String orderType = pickString(root, "OrderType", "orderType", "type", "wkType");
        List<ReportDataParam> reportDataList = new ArrayList<>();
        for (int i = 0; i < dataArray.size(); i++) {
            JSONObject row = dataArray.getJSONObject(i);
            ReportDataParam dataParam = new ReportDataParam()
                    .setWMSNO(pickString(row, "WMSNO", "wmsNo", "orderNo", "OrderNo"))
                    .setPONO(pickString(row, "PONO", "poNo"))
                    .setOrderNO(pickString(row, "OrderNO", "orderNo"))
                    .setGoodsNO(pickString(row, "GoodsNO", "goodsNo", "batch", "Batch"))
                    .setItemCode(pickString(row, "ItemCode", "itemCode", "matNr", "MatNr"))
                    .setEditUser(pickString(row, "EditUser", "editUser"))
                    .setMemoDtl(pickString(row, "MemoDtl", "memoDtl", "memo"));
            BigDecimal inQty = pickDecimal(row, "InQty", "inQty");
            BigDecimal outQty = pickDecimal(row, "OutQty", "outQty");
            if (Objects.nonNull(inQty) && inQty.compareTo(ZERO) > 0) {
                dataParam.setInQty(inQty.doubleValue());
            }
            if (Objects.nonNull(outQty) && outQty.compareTo(ZERO) > 0) {
                dataParam.setOutQty(outQty.doubleValue());
            }
            reportDataList.add(dataParam);
        }
        return new ReportParams()
                .setOrderType(orderType)
                .setAction("Update")
                .setData(reportDataList);
    }
    private OpenApiOrder saveOpenApiOrder(Order order) {
        OpenApiOrder existing = openApiOrderMapper.selectOne(new LambdaQueryWrapper<OpenApiOrder>()
                .eq(OpenApiOrder::getCode, order.getOrderNo())