积分换货系统架构设计:从门店核销到“先有订单再生产“的供应链闭环

技术摘要

以顶俏洗衣液为代表的"积分换货"模式,通过"用户下单→门店核销→平台返积分→积分补货"的闭环,实现了平台轻库存、门店不垫资的供应链重构。本文从供应链与库存系统视角,拆解积分账户体系、核销状态机、补货引擎、反向拉动生产的完整技术实现。方案适用于快消品、日化、生鲜等高频刚需行业的分销系统与多门店零售系统。

大家好,我是微三云生态系统架构师彭丹,每天带你洞察行业新风口,拆解爆款新模式。

一、背景与痛点

传统日化分销是"进货→铺货→卖货"的正向供应链:经销商先掏钱囤货,货压在渠道里,资金卡在仓库中。这种模式有三个长期痛点:

第一,渠道资金压力大。门店每进一批货就要付一批货款,资金周转效率低,中小门店不敢大量囤货,导致铺货密度上不去。

第二,平台库存风险高。平台如果自建仓储铺货,库存占压资金、滞销风险高,还要承担物流成本,轻资产运营难以实现。

第三,动销与补货脱节。传统模式下,门店卖了多少货、该补多少货,全靠人工盘点估算,补货滞后导致断货或积压。

近年来,"积分换货"模式提供了新思路。据行业公开报道,某洗衣液品牌通过"先核销再进货"的积分动销闭环,一年拓展超6000家门店,平台全程不碰库存。其核心机制是:用户下单→就近门店核销提货→平台返还等额积分→门店用积分补货→工厂按积分消耗安排生产。

这套模式的技术核心,是"积分即货款"的闭环账户体系和"卖多少补多少"的库存拉动机制。

二、系统架构设计

2.1 整体架构

┌──────────────────────────────────────────────────────┐

│ 用户端(消费者小程序) │

│ 下单 │ 选核销门店 │ 生成核销码 │ 复购 │ 转介绍 │

├──────────────────────────────────────────────────────┤

│ 门店端(核销网点/工厂店) │

│ 扫码核销 │ 库存管理 │ 积分补货 │ 收益看板 │ 下级管理 │

├──────────────────────────────────────────────────────┤

│ 平台核心服务层 │

│ 订单中心 │ 核销引擎 │ 积分账户 │ 补货引擎 │ 生产计划 │

├──────────────────────────────────────────────────────┤

│ 数据层 │

│ 积分台账 │ 库存快照 │ 订单流水 │ 补货批次 │ 对账系统 │

└──────────────────────────────────────────────────────┘

2.2 核心模块划分

模块 职责 关键输入 关键输出

订单中心 消费者下单、分配核销门店 商品、收货方式 订单、核销码

核销引擎 门店核销确认、触发积分返还 核销码、门店身份 核销记录、积分流水

积分账户 积分发放、冻结、兑换补货 核销事件 积分余额、台账流水

补货引擎 积分换货、库存履约 积分、补货申请 补货单、发货指令

生产计划 按积分消耗拉动生产 积分消耗汇总 生产订单、原料计划

2.3 技术选型

订单与核销:订单状态机 + 核销码(短码+签名防伪),Redis缓存核销状态

积分账户:MySQL账户表 + 流水表,账实一致,双写幂等

库存引擎:分布式库存(Redis预占+DB落库),防止超卖

补货履约:积分兑换触发采购单,对接WMS/供应商系统

对账:每日三方对账(积分流水/核销记录/库存变动)

三、核心模块实现

3.1 积分账户体系:积分即货款

积分是整套模式的"货币",必须做到"1积分=1元货款,仅用于体系内补货,不可提现、不可兑换非经营商品",从根源锁定积分流转闭环。

数据结构

-- 积分账户表(每门店一个账户)

CREATE TABLE credit_account (

id BIGINT PRIMARY KEY AUTO_INCREMENT,

merchant_id BIGINT NOT NULL COMMENT '门店ID(核销网点/工厂店)',

merchant_type VARCHAR(20) NOT NULL COMMENT 'STORE/FACTORY',

balance INT NOT NULL DEFAULT 0 COMMENT '可用积分余额',

frozen_balance INT NOT NULL DEFAULT 0 COMMENT '冻结积分(补货中)',

total_earned INT NOT NULL DEFAULT 0 COMMENT '累计获得',

total_spent INT NOT NULL DEFAULT 0 COMMENT '累计消耗',

version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',

updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

UNIQUE KEY uk_merchant (merchant_id)

) COMMENT '积分账户表';

-- 积分流水表(账实一致,每笔可追溯)

CREATE TABLE credit_flow (

id BIGINT PRIMARY KEY AUTO_INCREMENT,

account_id BIGINT NOT NULL,

merchant_id BIGINT NOT NULL,

biz_type VARCHAR(30) NOT NULL COMMENT 'NUCLEAR_REBATE/ORDER_CONSUME/REFUND',

biz_no VARCHAR(64) NOT NULL COMMENT '业务单号(订单号/核销号)',

change_amount INT NOT NULL COMMENT '变动值(正负)',

balance_after INT NOT NULL COMMENT '变动后余额',

remark VARCHAR(255) NULL,

created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,

INDEX idx_account (account_id),

INDEX idx_biz (biz_no)

) COMMENT '积分流水表';

积分入账与乐观锁

class CreditAccountService:

def rebate_on_nuclear(self, merchant_id, order_id, nuclear_amount):

"""核销触发积分返还:1元=1积分"""

credit = int(nuclear_amount) # 1元货款=1积分

复制代码
    with self.db.transaction():
        # 1. 幂等校验:同一核销单不重复返还
        if self.flow_exists('NUCLEAR_REBATE', order_id):
            return {'status': 'DUPLICATE'}

        # 2. 乐观锁更新余额(防止并发覆盖)
        rows = db.execute(
            "UPDATE credit_account SET balance = balance + %s, "
            "total_earned = total_earned + %s, version = version + 1 "
            "WHERE merchant_id = %s AND version = %s",
            (credit, credit, merchant_id, self.get_version(merchant_id))
        )
        if rows == 0:
            raise ConcurrentUpdateException(merchant_id)

        # 3. 记录积分流水(账实一致)
        new_balance = self.get_balance(merchant_id)
        db.insert_credit_flow(
            account_id=self.get_account_id(merchant_id),
            merchant_id=merchant_id,
            biz_type='NUCLEAR_REBATE',
            biz_no=order_id,
            change_amount=credit,
            balance_after=new_balance,
            remark=f'核销返还积分{order_id}'
        )
        return {'status': 'SUCCESS', 'balance': new_balance}

3.2 核销引擎:从下单到积分返还的状态机

核销是整个闭环的"触发点",核销确认后才产生积分,才允许补货。

订单核销状态机

PENDING(待核销)

↓ 门店扫码核销

VERIFYING(核销校验中)

↓ 校验通过(核销码有效+门店有权限)

NUCLEARED(已核销)

↓ 触发积分返还+扣减库存

CREDIT_RETURNED(积分已返)

↓ 同步上级/工厂店积分

SYNCED(已同步)

核销码与核销流程

class NuclearEngine:

def generate_code(self, order):

"""生成带签名的核销码,防伪造"""

payload = f"{order.id}|{order.store_id}|{order.expire_time}"

sign = hmac_sha256(payload, SECRET_KEY):8

return base62_encode(payload + "|" + sign)

复制代码
def verify_and_nuclear(self, code, operator_store_id):
    """门店扫码核销"""
    # 1. 解码并校验签名
    payload, sign = self.parse_code(code)
    if not self.verify_sign(payload, sign):
        return {'status': 'INVALID_CODE'}

    # 2. 校验核销门店权限
    order = order_service.get(order_id=payload.order_id)
    if operator_store_id != order.store_id:
        return {'status': 'NO_PERMISSION'}

    # 3. 校验订单状态(只能核销一次)
    if order.status != 'PENDING':
        return {'status': 'ALREADY_NUCLEARED'}

    # 4. 状态流转:PENDING → NUCLEARED
    order_service.transit_status(order.id, 'PENDING', 'NUCLEARED')

    # 5. 触发积分返还(异步,不阻塞核销)
    mq.publish('credit_rebate_topic', {
        'order_id': order.id,
        'merchant_id': operator_store_id,
        'amount': order.amount,
    })

    return {'status': 'SUCCESS'}

3.3 补货引擎:积分兑换与库存履约

门店用积分向平台申请补货,平台收到积分后履约发货。核心是"卖多少补多少"的动态补货策略。

补货流程

门店提交补货申请(消耗积分)

校验积分余额充足(冻结积分)

生成补货单(关联积分冻结流水)

平台分配货源(工厂店/中央仓)

发货履约(物流单号回填)

核销积分(冻结→扣减)+ 库存入库确认

动态补货策略伪代码

class ReplenishmentEngine:

def suggest_replenish(self, store_id):

"""基于核销数据动态建议补货量"""

近7天日均核销量(滑动窗口)

daily_avg = self.nuclear_stats.daily_avg(store_id, days=7)

复制代码
    # 当前库存(按件)
    current_stock = self.inventory.get(store_id)

    # 安全库存 = 日均核销量 × 补货周期天数 × 安全系数
    lead_days = 3  # 补货到货周期
    safety_stock = daily_avg * lead_days * 1.5

    # 建议补货量
    suggest_qty = max(0, safety_stock - current_stock)
    return {
        'daily_avg': daily_avg,
        'current_stock': current_stock,
        'safety_stock': safety_stock,
        'suggest_qty': suggest_qty,
        'required_credit': suggest_qty * self.unit_price
    }

def apply_replenish(self, store_id, items):
    """门店积分换货"""
    total_credit = sum(item['qty'] * self.unit_price for item in items)

    with self.db.transaction():
        # 1. 冻结积分
        self.credit_service.freeze(store_id, total_credit, 'REPLENISH')

        # 2. 生成补货单
        replenish_no = gen_no('RE')
        db.insert_replenish_order(
            no=replenish_no, store_id=store_id,
            items=items, credit_cost=total_credit,
            status='PENDING_SHIP'
        )

        # 3. 通知库存履约
        mq.publish('replenish_topic', {'no': replenish_no, 'store_id': store_id})
        return replenish_no

3.4 生产计划:按积分消耗拉动生产

积分换货模式最独特的技术点是反向拉动生产:平台不预生产,而是根据积分消耗汇总动态安排生产计划,实现"先有订单再生产"。

class ProductionPlanner:

def plan_by_credit_consumption(self):

"""按积分消耗拉动生产计划"""

1. 汇总近7日积分消耗(补货兑换量)

consumption = self.credit_flow.aggregate(

biz_type='ORDER_CONSUME',

days=7,

group_by='product_id'

)

复制代码
    # 2. 生产计划 = 消耗量 × 安全系数 - 在途库存 - 平台库存
    plans = []
    for product_id, consumed_qty in consumption.items():
        in_transit = self.inventory.in_transit(product_id)
        platform_stock = self.inventory.platform_stock(product_id)
        plan_qty = max(0, int(consumed_qty * 1.3) - in_transit - platform_stock)

        if plan_qty > 0:
            plans.append({
                'product_id': product_id,
                'plan_qty': plan_qty,
                'producer': self.route_producer(product_id),  # 分配工厂店
            })

    # 3. 生成生产订单,下发工厂
    for plan in plans:
        self.production_order.create(plan)

    return plans

3.5 库存引擎:防止超卖

门店核销与平台库存分离,核销时扣减门店虚拟库存,补货时平台实物库存出库。

-- 门店虚拟库存(核销扣减)

CREATE TABLE store_inventory (

id BIGINT PRIMARY KEY AUTO_INCREMENT,

store_id BIGINT NOT NULL,

product_id BIGINT NOT NULL,

qty INT NOT NULL DEFAULT 0 COMMENT '可用库存',

UNIQUE KEY uk_store_product (store_id, product_id)

) COMMENT '门店库存表';

-- 平台实物库存(补货履约)

CREATE TABLE platform_inventory (

id BIGINT PRIMARY KEY AUTO_INCREMENT,

product_id BIGINT NOT NULL,

available_qty INT NOT NULL DEFAULT 0,

in_transit_qty INT NOT NULL DEFAULT 0,

UNIQUE KEY uk_product (product_id)

) COMMENT '平台库存表';

四、风控与边界

4.1 合规设计

积分闭环:积分仅用于体系内补货,不可提现、不可交易、不可兑换非经营商品,避免积分金融化风险

不碰资金池:消费者付款直接进平台或受监管账户,门店通过核销积分补货,不涉及"拉人头"式资金流转

分级谨慎:推荐奖励与真实核销行为挂钩,层级设置需符合《禁止传销条例》,多级团队计酬属高风险设计,应严格规避

4.2 异常处理

异常场景 处理策略

核销码被复用 状态机保证单次核销,重复核销返回错误并告警

积分并发扣减 乐观锁+流水幂等,防止余额被并发覆盖

补货超卖 积分冻结+库存预占,库存不足自动拦截

核销后退款 回退核销状态、回收积分、恢复库存

积分入账延迟 消息队列异步入账+对账扫描兜底

4.3 性能瓶颈与优化

瓶颈 优化方案

核销高并发(大促) Redis缓存核销状态,DB异步落库

积分流水量大 按月分表,按merchant_id哈希分片

库存热点 库存按SKU拆分多分片,预占+扣减分离

对账耗时长 离线批处理+增量对账,每日凌晨跑批

4.4 适用与不适用场景

适用场景:

  • 快消品、日化、生鲜等高复购、高刚需品类
  • 线下门店网络密集、需要低成本铺货的渠道体系
  • 平台希望轻资产运营、不承担库存风险的场景

不适用场景:

  • 低复购、低频次的长尾商品(积分闭环拉动效果弱)
  • 无线下门店网络、纯线上履约的场景(核销环节缺失)
  • 商品毛利过薄、无法支撑积分返还的场景

五、总结与展望

积分换货系统的核心价值,是把传统"进货→铺货→卖货"的正向供应链,重构为"用户下单→核销→返积分→补货→反向生产"的拉动式闭环。平台轻库存、门店不垫资、工厂按需生产,三方资金效率都得到提升。

在微三云做分销与供应链系统架构时,我们验证了一个判断:积分闭环类系统的技术难点不在单点功能,而在"账实一致"------积分账户、核销记录、库存变动三套数据必须完全对得上。任何一环对不上,就会在月底对账时集中爆发。

未来演进方向:一是供应链金融结合,基于核销数据评估门店信用,提供合规的周转支持;二是智能补货升级,结合销量预测模型替代简单滑窗均值;三是多品类扩展,积分体系从单品类扩展到跨品类生态,但需守住"积分锚定实物"的合规底线。

常见问答

Q:积分换货系统的积分为什么不设计成可提现?

A:积分可提现会把"消费激励"变成"金融承诺",触碰非法集资红线。积分锚定实物、仅在体系内闭环流转(补货/兑换),既是合规要求,也是防止积分被炒作的核心设计。

Q:门店核销后积分返还,会不会造成门店囤积分不进货?

A:通过积分有效期管理和动态补货策略约束,同时工厂店有动力协助下级网点周转,系统可设置积分到期回收规则,防止积分沉淀失衡。

Q:平台零库存是怎么实现的?

A:用户下单后由门店核销提货(门店持有实物),平台只记录订单与积分;门店用积分向平台申请补货,平台按积分消耗安排工厂生产。平台实物库存趋近于零,只承担信息与结算。

Q:积分换货系统怎么防止刷单套积分?

A:核销码签名防伪、设备指纹风控、门店核销权限校验、异常核销模式检测(同门店集中核销、同设备批量下单),结合积分流水全程可追溯,异常触发人工审核。

Q:这套系统适合什么样的行业复制?

A:适合高频刚需、复购率高、门店密度大的快消品类(日化、粮油、生鲜)。核心前提是商品毛利足以支撑积分返还,且具备线下自提/核销场景。

📌 含AI辅助内容

本文部分内容由AI辅助整理优化,技术方案仅供参考,实际落地请结合业务场景评估。

积分换货系统 #门店核销引擎 #供应链重构 #积分账户体系 #库存引擎 #拉动式生产 #快消分销系统

相关推荐
敢敢是只喵i15 小时前
一个本地 AI Agent 要操作多个门店或 SaaS 账号,应该怎样安全切换身份?
人工智能·安全·ai·系统架构·业界资讯
筼筜20 小时前
【系统架构设计师】嵌入式系统架构设计理论与实践
系统架构
南城以南溫暖如初14721 小时前
社群电商实战指南:从零搭建高转化社区的技术架构
java·spring boot·mysql·系统架构·vue·mybatis
xierui1231231 天前
Anthropic安全复盘:会操作电脑的 Agent 如何分阶段上岗
人工智能·网络安全·架构·系统架构
LearnYard1 天前
在线IT教育平台中的AI智能体系统架构分析——以职坐标为例
人工智能·系统架构
智造ERP规划3 天前
装备制造 ERP↔CRM 集成深度拆解:从询价到项目立项的 6 个独特挑战与解决方案
系统架构·软件工程·制造
郑州光合科技余经理4 天前
本地生活服务系统:模块边界与结算字段怎么拆
java·开发语言·前端·后端·系统架构·uni-app·php
xierui1231234 天前
OpenAI 拟停止向 Cursor供模:如何设计不绑供应商的AIAgent架构
人工智能·系统架构·软件工程