cl
6 天以前 50393719d85fc30438456b0d0f065573a404fba5
增加一个单条上报的模式
4个文件已修改
53 ■■■■■ 已修改文件
rsf-server/src/main/java/com/vincent/rsf/server/manager/constant/CloudWmsInoutReportMode.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/CloudWmsNotifySchedule.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
version/db/cloud_wms_integration.sql 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/constant/CloudWmsInoutReportMode.java
@@ -1,7 +1,7 @@
package com.vincent.rsf.server.manager.constant;
/**
 * 云仓入出库回馈模式(sys_config CLOUD_WMS_INOUT_REPORT_MODE,val 小写)
 * 云仓入出库回馈模式(sys_config CLOUD_WMS_INOUT_REPORT_MODE,val 小写;含 single 逐条不合并)
 */
public final class CloudWmsInoutReportMode {
@@ -14,6 +14,9 @@
    /** 实绩写入 notify 待办且暂缓发送,由入库/出库通知单「上报云仓」放行发送 */
    public static final String MANUAL = "manual";
    /** 入出库结果逐条上报云仓,不与同单其它行合并 */
    public static final String SINGLE = "single";
    private CloudWmsInoutReportMode() {
    }
}
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/CloudWmsNotifySchedule.java
@@ -7,6 +7,7 @@
import com.vincent.rsf.server.api.controller.erp.params.InOutResultReportParam;
import com.vincent.rsf.server.api.controller.erp.params.InventoryAdjustReportParam;
import com.vincent.rsf.server.api.service.CloudWmsReportService;
import com.vincent.rsf.server.manager.constant.CloudWmsInoutReportMode;
import com.vincent.rsf.server.manager.entity.CloudWmsNotifyLog;
import com.vincent.rsf.server.manager.service.CloudWmsNotifyLogService;
import com.vincent.rsf.server.system.constant.GlobalConfigCode;
@@ -77,6 +78,21 @@
        return s != null && s != 0;
    }
    /** CLOUD_WMS_INOUT_REPORT_MODE,缺省 immediate */
    private String resolveInOutReportMode() {
        try {
            Config cfg = configService.getCachedOrLoad(GlobalConfigCode.CLOUD_WMS_INOUT_REPORT_MODE);
            if (cfg != null && cfg.getVal() != null) {
                String v = cfg.getVal().trim();
                if (!v.isEmpty()) {
                    return v.toLowerCase();
                }
            }
        } catch (Exception ignored) {
        }
        return CloudWmsInoutReportMode.IMMEDIATE;
    }
    /** 同单多条合并上报 */
    private void dispatchPending(List<CloudWmsNotifyLog> pending) {
        int rowsReported = 0;
@@ -85,6 +101,11 @@
        log.debug("云仓上报派发:读取上报类型配置");
        String rtInOut = cloudWmsNotifyLogService.getReportTypeInOutResult();
        log.debug("云仓上报派发:上报类型={},读配置耗时 {} ms", rtInOut, System.currentTimeMillis() - tCfg);
        String inoutMode = resolveInOutReportMode();
        boolean singleRowOnly = CloudWmsInoutReportMode.SINGLE.equals(inoutMode);
        if (singleRowOnly) {
            log.debug("云仓上报派发:入出库模式 single,不合并同单多条");
        }
        LinkedHashMap<String, List<CloudWmsNotifyLog>> inOutGroups = new LinkedHashMap<>();
        int n = pending.size();
        for (int i = 0; i < n; i++) {
@@ -99,7 +120,9 @@
            if (key == null) {
                continue;
            }
            inOutGroups.computeIfAbsent(key, k -> new ArrayList<>()).add(row);
            if (!singleRowOnly) {
                inOutGroups.computeIfAbsent(key, k -> new ArrayList<>()).add(row);
            }
        }
        log.debug("云仓上报派发:入出库可分组键 {} 个", inOutGroups.size());
        Set<Long> done = new HashSet<>();
@@ -135,6 +158,19 @@
                }
                continue;
            }
            if (singleRowOnly) {
                if (isSendingBusy(row)) {
                    continue;
                }
                log.debug("云仓上报派发:single 模式单条 id={}", rid);
                if (safeProcessOne(row)) {
                    rowsReported++;
                    if (rid != null) {
                        done.add(rid);
                    }
                }
                continue;
            }
            List<CloudWmsNotifyLog> g = inOutGroups.get(key);
            List<CloudWmsNotifyLog> work = new ArrayList<>();
            if (g != null) {
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -3010,7 +3010,7 @@
                || StringUtils.isNotBlank(item.getPlatWorkCode());
    }
    /** sys_config CLOUD_WMS_INOUT_REPORT_MODE:immediate / wait_order / manual */
    /** sys_config CLOUD_WMS_INOUT_REPORT_MODE:immediate / wait_order / manual / single */
    private String resolveCloudWmsInoutReportMode() {
        try {
            Config cfg = configService.getCachedOrLoad(GlobalConfigCode.CLOUD_WMS_INOUT_REPORT_MODE);
version/db/cloud_wms_integration.sql
@@ -27,6 +27,12 @@
-- ---------------------------------------------------------------------------
INSERT INTO `sys_config` (`uuid`, `name`, `flag`, `type`, `val`, `content`, `status`, `deleted`, `tenant_id`, `create_by`, `create_time`, `update_by`, `update_time`, `memo`)
VALUES
(UPPER(UUID()), '云仓入出库回馈模式', 'CLOUD_WMS_INOUT_REPORT_MODE', 3, 'immediate', 'immediate 立即待办;wait_order 暂缓发送后由调度放行;manual 暂缓发送由通知单按钮放行', 1, 0, 1, NULL, NOW(), NULL, NOW(), '默认 immediate'),
(UPPER(UUID()), '云仓入出库回馈模式', 'CLOUD_WMS_INOUT_REPORT_MODE', 3, 'immediate', 'immediate 立即待办;wait_order 暂缓发送后由调度放行;manual 暂缓发送由通知单按钮放行;single 逐条上报不与同单合并', 1, 0, 1, NULL, NOW(), NULL, NOW(), '默认 immediate'),
(UPPER(UUID()), '云仓入出库聚合-空闲部分上报秒数', 'CLOUD_WMS_INOUT_AGG_IDLE_SECONDS', 2, '180', 'wait_order:超过该秒数无新实绩更新则放行暂缓待办(可与整单结束择先触发)', 1, 0, 1, NULL, NOW(), NULL, NOW(), '默认 180'),
(UPPER(UUID()), '云仓入出库聚合-整单完成防抖秒数', 'CLOUD_WMS_INOUT_AGG_COMPLETE_DEBOUNCE_SECONDS', 2, '8', '同订单无执行中任务后,再等待该秒数再整批上报', 1, 0, 1, NULL, NOW(), NULL, NOW(), '默认 8');
UPDATE `sys_config`
SET `content` = 'immediate 立即待办;wait_order 暂缓发送后由调度放行;manual 暂缓发送由通知单按钮放行;single 逐条上报不与同单合并',
    `update_time` = NOW()
WHERE `flag` = 'CLOUD_WMS_INOUT_REPORT_MODE'
  AND (`deleted` = 0 OR `deleted` IS NULL);