| | |
| | | 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 { |
| | | |
| | |
| | | /** 实绩写入 notify 待办且暂缓发送,由入库/出库通知单「上报云仓」放行发送 */ |
| | | public static final String MANUAL = "manual"; |
| | | |
| | | /** 入出库结果逐条上报云仓,不与同单其它行合并 */ |
| | | public static final String SINGLE = "single"; |
| | | |
| | | private CloudWmsInoutReportMode() { |
| | | } |
| | | } |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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++) { |
| | |
| | | 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<>(); |
| | |
| | | } |
| | | 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) { |
| | |
| | | || 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); |
| | |
| | | -- --------------------------------------------------------------------------- |
| | | 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); |