商品中心

zhangxinlei1996 639f63df1f feat:api接口 il y a 3 ans
api 639f63df1f feat:api接口 il y a 3 ans
doc c34128febb feat:初始化 il y a 3 ans
public 639f63df1f feat:api接口 il y a 3 ans
rpc 639f63df1f feat:api接口 il y a 3 ans
README.md bcb6b30bbb feat:加载分类树 il y a 3 ans
go.mod bcb6b30bbb feat:加载分类树 il y a 3 ans
go.sum bcb6b30bbb feat:加载分类树 il y a 3 ans

README.md

一、项目目的

统一商品标准化,包括:商品定义(维护)、商品分类管理、下单支付、权限(资源)管理。同时兼顾toC、toB用户需求。

二、概念设计

  • 商品分类

    • 标准统一分类
      行业、大类、小类
    • 商家私有商品分类(第三方市场)
      自定义商品分类,可用户商户自己管理,以及商铺中作为分栏(栏目)展示
  • 系统能力树

    定义系统需要检查资源,需要授权的点

    • 能力分组
      • 能力块
        • 接口(能力点)
          • 指标(资源) 指标是指某个(类)功能涉及资源的检查项,这里用于定义某个资源项。 基本属性:代码,类型,模式;
  • 商品 (spu)
    商品基本属性:名称、分类、统一编码、介绍、特性等

    • 规格 (sku)
      规格基本属性:名称、统一编码、各类定价
      多份购买时, 考虑权益合并,企业许可
    • 权限资源配置矩阵
    • 组合商品(多sku)
      可打包多个sku
  • 评价
    基本属性:用户、sku编号、商品编号、订单编号、评分、评价内容等

  • 订单

    订单基础属性:编号、商品、规格、数量、单价、总价、应付、实付、付款方式、付款状态、订单状态。。。。

  • 支付/回款、退款 支付的基本属性:付款类型、付款时间、付款人、付款金额、订单号 退款记录,考虑权益关闭

  • 用户权限资源

    下单后,根据购买商品,给用户开通、增加相应功能资源

  • 服务提供

系统在线提供服务,并与商品标准化的权限资源对接,实现权限验证,消费有资源扣减

  • 营销活动
    • 满减 、 满赠 、 优惠卷
    • 秒杀、抢购

三、概要设计

3.1 架构图

@startuml
    rectangle 1应用 #FFFFCC{
        rectangle 商城 
        rectangle 营销平台
        rectangle 商城控制台
    }

    rectangle 2接口服务 #CCFFCC{
        rectangle 商品服务 
        rectangle 商铺服务 
        rectangle 订单服务
        rectangle 支付服务
        rectangle 发票服务
        rectangle 营销服务
        rectangle 评价服务
        rectangle 权益服务
    }

    rectangle 3领域模型 #CCFFFF{
        rectangle 商品模型 
        rectangle 订单模型
        rectangle 营销模型
        rectangle 评价模型
        rectangle 权益模型
        rectangle 计价模型
        rectangle 计费模型
    }

    rectangle 4中台服务 #CCFFFF{
        rectangle 商品中心
        rectangle 订单中心
        rectangle 权益中心
        rectangle 计价中心
        rectangle 计费中心
    }

    rectangle 5存储 #6699CC{ 
        rectangle TiDB
        rectangle EleasticSearch
        rectangle OSS
        rectangle ArangoDB
    }
    

    1应用 -down-> 2接口服务 
    2接口服务 -down-> 3领域模型 :"调用" 
    3领域模型 -down-> 4中台服务 :"调用" 
    4中台服务-down-> 5存储 :"调用" 
    3领域模型 -right-> 5存储 :"调用" 
    1应用 -right-> OSS :"文件访问"

@enduml

说明: 中台服务,仅抽取多个系统共享部分;

业务部分需要在领域模型实现;并不是说有的领域模型能力都需要抽到中台服务。 计价中心,订单计算价格的服务,等同于医院的划价窗口;

订单包含多个物品、不同规格、参与活动的赠品、折扣、红包(卡劵)抵扣等,均在此做计算,对外提供统一服务。输出订单总价(总价、应付价,预使用的卡劵、积分、红包等)

3.3 关键实体关系图

@startuml
package 1、系统服务能力_静态资源{
    entity 标准商品分类{
        * ID
        * 代码
        * 名称
        * 父级ID
    }
    entity 商家商品分类{
        * ID
        * 代码
        * 名称
        * 父级ID
        * 商家ID
    }
    标准商品分类 ||-|{ 标准商品分类 :"包含"
    商家商品分类 ||-|{ 商家商品分类 :"包含"
    entity 资源定义{
        * 名称
        * 代码
        * 计量类型
        * 检验模式
        * 扣减模式
        * 资源使用限制
    }
    entity 功能分组{
        * ID
        * 名称
        * 代码
        * 父级ID
    }
    entity 功能点定义{
        * 名称
        * 代码
    }

    功能分组 ||-|{ 功能分组 :"包含"
    功能分组 ||-|{ 功能点定义 :"包含"
    功能点定义 ||-|{ 资源定义 :"包含"
}

package 2、商品{
    entity 商品{
        * 名称
        * 代码
        * 标准分类
        * 商户分类
        * 介绍
        * 特点、优势、卖相
    }
    entity 规格 {
        * 名称
        * 代码
        * 描述
        * 各种定价
    }
    entity 功能点<<功能点定义>>{
        * 名称
        * 代码
        * 功能点路径
    }

    entity 资源<<资源定义>>{

    }
    entity 规格快照<<规格>>{
        * 版本号
        * 创建时间
    }
    商品||-|{规格:"包含"
    规格||-|{功能点:"包含"
    功能点||-|{资源:"包含"
    规格快照||-|{功能点:"包含"
    规格||-|{规格快照:"包含,每次修改规格,都会产生快照"
}

package 3、订单权益等{
    entity 订单 {
        * 订单编号
        * 应付
        * 实付
        * 支付方式
        * 支付状态
        * 订单状态
        * 客户标识
        * 下单时间
        * 其他字段balabala
    }
    entity 订单物品 {
        * 商品
        * 规格快照
        * 数量
        * 单价
        * 合计
        * 优惠    
    }

    entity 支付 {
          
    }

    entity 退款 {
          
    }

    entity 发票 {
          
    }

    entity 评价 {
        * 订单号
        * 商品id
        * 规格id
        * 评分
        * 评价内容
        * 时间
        * 用户id     
    }
    entity 客户权益{

    }
    订单||-|{订单物品:"包含"
    客户权益 --> 规格快照:"根据商品规格权益设置,增加客户权益"
    订单--> 客户权益:"下单支付后,更新客户权益"
    评价 --> 订单物品

    订单 -- 支付
    订单 -- 退款
    订单 -- 发票 
}


package 4、营销活动{
    entity 活动{
        * 名称
        * 代码
        * 期限
        * 模式【满减、满赠、打折、秒杀】
    }
    活动 ||--|{商品:"关联"
    活动 ||--|{规格:"关联"
}

@enduml

说明:

  • 标准商品分类、商家商品分类 自身嵌套,多级分类树

3.4 关键对象图

** 商品对象图 **

@startuml
    object 剑鱼标讯服务<<商品>>{
        名称:剑鱼基础标讯服务
        代码:0001
        介绍:大图文
        标准分类:"标讯服务"
        商户分类:"核心服务"
    }
    object 规格1<<商品规格>>{
        名称:基础版
        描述:基础班标讯服务,\n包括订阅、检索、附件下载基础能力
    }

    object 规格2<<商品规格>>{
        名称:豪华版
        描述:豪华版标讯服务,\n包括订阅、检索、附件下载基础能力\n在资源配额上,开放更大范围。
    }

    object 标讯订阅<<功能点>>{
        代码:GND001
        名称:订阅设置
    }

    object 标讯推送<<功能点>>{
        代码:GND002
        名称:标讯推送
    }

    object 权益1<<权益资源>>{
        代码:QY001
        名称:省份配额
        类型:数值
        检验模式:小于等于
        扣减模式:无
        已用:9
        值:10
    }
    object 权益2<<权益资源>>{
        代码:QY002
        名称:关键词词组数量
        类型:数值
        检验模式:小于等于
        扣减模式:无
        已用:240
        值:300
    }
    object 权益3<<权益资源>>{
        代码:QY003
        名称:关键词词组数量
        类型:数值
        检验模式:小于等于
        扣减模式:无
        已用:240
        值:300
    }
    object 权益4<<权益资源>>{
        代码:QY004
        名称:数据条数
        类型:数值
        检验模式:小于等于
        扣减模式:无
        已用:2400
        资源使用限制:每天不超过50条
        值:30000
    }
    object 权益5<<权益资源>>{
        代码:QY005
        名称:有效期
        类型:日期范围
        检验模式:无
        扣减模式:无
        值:"2022-01-01__2023-01-01"
    }
    剑鱼标讯服务 --> 规格1 : 包含
    剑鱼标讯服务 --> 规格2 : 包含
    规格1 --> 标讯订阅:包含
    规格1 --> 标讯推送:包含
    标讯订阅 --> 权益1:包含
    标讯订阅 --> 权益2:包含
    标讯订阅 --> 权益3:包含
    标讯推送 --> 权益4:包含
    标讯推送 --> 权益5:包含
@enduml

3.5 关键序列图

** 秒杀活动 流程图**

@startuml
   autonumber
    alt "活动进行中,并且库存充足"
        客户 -> 商城 : 抢商品,不一定会抢成功
        商城 -> NSQ队列 : 请求进入队列,缓冲
        NSQ队列 -> 营销活动: 请求出队,处理请求
        营销活动 -> 营销活动: 生成订单前检查
        alt "检查活动是在进行,以及库存充足"
            营销活动 -> 订单中心 : 生成订单
            营销活动 -> 营销活动 : 减库存
            订单中心 -> 客户:"通知用户抢成功,需要30分钟内支付"
            客户 -> 客户 : "订单支付"
            alt "30分钟内未完成支付"
                订单中心 -> 订单中心 : "订单失效"
                订单中心 -> 营销活动 : 恢复库存
                营销活动 -> 客户 :"告知抢购失败"
            else
                营销活动 -> 客户 :"告知抢购成功"
            end 
            alt "活动到期、或者库存抢购完了"
                营销活动 -> 营销活动 :"活动结束"
            end
        else
            营销活动 -> 客户:"告知客户活动已经结束,或者库存不足"
        end
    else
        营销活动 -> 客户:"告知客户活动已经结束,或者库存不足"
    end
@enduml

四、成本估算

五、计划安排

goctl rpc protoc goodsCenter.proto --go_out=. --go-grpc_out=. --zrpc_out=.

goctl api go -api goodsCenter.api -dir .