Appearance
1.购物车
购物车表
CREATE TABLE `trade_cart` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号,唯一自增。',
`user_id` bigint NOT NULL COMMENT '用户编号',
`spu_id` bigint NOT NULL COMMENT '商品 SPU 编号',
`sku_id` bigint NOT NULL COMMENT '商品 SKU 编号',
`count` int NOT NULL COMMENT '商品购买数量',
`selected` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否选中',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 70 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '购物车的商品信息';
注意,它存储的是购物项,用户添加了多个商品 SKU 则会有多条记录。字段可以分成三类:
① user_id 字段:对应的用户编号。 ② spu_id、sku_id 字段:商品 SPU、SKU 相关信息。 ③ count、selected 字段:购买数量和选中状态。相同商品 SKU 被多次添加到购物车时,只会记录一条,count 数量进行累加,直到被下单。
2.交易订单
整体表结构
trade_order 订单主表 trade_order_item 订单项子表 trade_order_log 订单日志表
2.1 订单表
CREATE TABLE `trade_order` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '订单编号',
`no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '订单流水号',
`type` int NOT NULL DEFAULT 0 COMMENT '订单类型',
`seckill_activity_id` bigint NULL DEFAULT NULL COMMENT '秒杀活动编号',
`bargain_activity_id` bigint NULL DEFAULT NULL COMMENT '砍价活动编号',
`bargain_record_id` bigint NULL DEFAULT NULL COMMENT '砍价记录编号',
`combination_activity_id` bigint NULL DEFAULT NULL COMMENT '拼团活动编号',
`combination_head_id` bigint NULL DEFAULT NULL COMMENT '拼团团长编号',
`combination_record_id` bigint NULL DEFAULT NULL COMMENT '拼团记录编号',
`user_id` bigint UNSIGNED NOT NULL COMMENT '用户编号',
`terminal` int NOT NULL COMMENT '订单来源终端',
`user_ip` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '用户 IP',
`status` int NOT NULL DEFAULT 0 COMMENT '订单状态',
`cancel_type` int NULL DEFAULT NULL COMMENT '取消类型',
`comment_status` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否评价',
`cancel_time` datetime NULL DEFAULT NULL COMMENT '订单取消时间',
`finish_time` datetime NULL DEFAULT NULL COMMENT '订单完成时间',
`user_remark` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '用户备注',
`product_count` int NOT NULL COMMENT '购买的商品数量',
`remark` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '商家备注',
`brokerage_user_id` bigint NULL DEFAULT NULL COMMENT '推广人编号',
`pay_order_id` bigint NULL DEFAULT NULL COMMENT '支付订单编号',
`pay_status` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否已支付:[0:未支付 1:已经支付过]',
`pay_time` datetime NULL DEFAULT NULL COMMENT '订单支付时间',
`pay_channel_code` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '支付成功的支付渠道',
`total_price` int NOT NULL DEFAULT 0 COMMENT '商品原价(总),单位:分',
`discount_price` int NOT NULL DEFAULT 0 COMMENT '订单优惠(总),单位:分',
`delivery_price` int NOT NULL DEFAULT 0 COMMENT '运费金额,单位:分',
`adjust_price` int NOT NULL DEFAULT 0 COMMENT '订单调价(总),单位:分',
`pay_price` int NOT NULL DEFAULT 0 COMMENT '应付金额(总),单位:分',
`coupon_price` int NOT NULL DEFAULT 0 COMMENT '优惠劵减免金额,单位:分',
`point_price` int NOT NULL DEFAULT 0 COMMENT '积分抵扣的金额',
`vip_price` int NOT NULL DEFAULT 0 COMMENT 'VIP 减免金额,单位:分',
`coupon_id` bigint UNSIGNED NULL DEFAULT NULL COMMENT '优惠劵编号',
`use_point` int NOT NULL DEFAULT 0 COMMENT '使用的积分',
`give_point` int NOT NULL DEFAULT 0 COMMENT '赠送的积分',
`refund_status` tinyint NOT NULL DEFAULT 0 COMMENT '售后状态',
`refund_point` int NOT NULL DEFAULT 0 COMMENT '退还的使用的积分',
`refund_price` int NOT NULL DEFAULT 0 COMMENT '退款金额,单位:分',
`delivery_type` tinyint NOT NULL COMMENT '配送类型',
`logistics_id` bigint NULL DEFAULT NULL COMMENT '发货物流公司编号',
`logistics_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '物流公司单号',
`delivery_time` datetime NULL DEFAULT NULL COMMENT '发货时间',
`receive_time` datetime NULL DEFAULT NULL COMMENT '收货时间',
`receiver_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '收件人名称',
`receiver_mobile` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '收件人手机',
`receiver_area_id` int NULL DEFAULT NULL COMMENT '收件人地区编号',
`receiver_detail_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '收件人详细地址',
`pick_up_store_id` bigint NULL DEFAULT NULL COMMENT '自提门店编号',
`pick_up_verify_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '自提核销码',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 128 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '交易订单表';
字段还是非常多的,我们来分块来看看。
① no 字段:订单流水号,主要展示给用户看,由 TradeNoRedisDAO 的 #generate(...) 方法生成。
而 id 字段是数据库自增的订单编号,系统内部使用,一般不展示给用户查看。
② type 字段:订单类型,使用 TradeOrderTypeEnum 枚举,目前有 4 种类型的订单:
普通:一般情况下的订单,未参与秒杀、砍价、拼团活动 秒杀:参与秒杀活动,会关联 seckill_activity_id 字段 砍价:参与砍价活动,会关联 bargain_activity_id、bargain_record_id 字段 拼团:参与拼团活动,会关联 combination_activity_id、combination_head_id、combination_record_id 字段 ③ 【用户】user_id、terminal、user_ip 字段:下单的用户信息。
④ 【状态】status 字段:订单状态,由 TradeOrderStatusEnum 枚举,流转状态如下图:
cancel_type 字段:取消类型,标记 status 为“已取消”的原因,由 TradeOrderCancelTypeEnum 枚举,例如说:超时未支付、退款关闭、买家取消。
comment_status 字段:订单是否评价。目的是,uni-app 筛选未评价的订单列表,也有商城系统会该字段融合到 status 作为“待评价”状态。
⑤ 【支付】pay_status 字段:是否已支付。由于订单可以全部退款变成“已关闭”状态,所以需要 pay_status 区分该订单实际是否发生过支付。
pay_order_id 字段:关联的支付中心的支付单号。对支付中心还不了解的同学,可以阅读下 《支付手册》 文档。
⑥ 【价格】各种价格字段,最终使用 pay_price 字段进行支付,分类如下:
- 收钱:total_price、delivery_price
- 优惠:discount_price、coupon_price、point_price、vip_price ? 改价:adjust_price 价格字段拆的这些细,主要是 uni-app 或者管理后台需要展示,同时我们也需要搞清楚一个订单的具体价格明细。
⑦ 【营销】coupon_id、use_point、give_point 字段:优惠劵、积分相关信息。
⑧ 【退款】refund_status 字段:订单的整体售后(退款)状态,由 TradeOrderRefundStatusEnum 枚举,有 3 种状态:未退款、部分退款、全部退款。如果全部退款,则订单 status 变成“已关闭”。refund_point、refund_price 字段:退款的积分、金额。
⑨ 【配送】delivery_type 字段:配送类型,由 DeliveryTypeEnum 枚举,有 2 种类型:
快递发货:使用 logistics_id、logistics_no、receiver_name、receiver_mobile、receiver_area_id、receiver_detail_address 字段 用户自提:使用 pick_up_store_id、pick_up_verify_code 字段 ⑩ 各种 _time 结尾的字段,就是各种阶段、操作的时间,满足业务查询、统计需求。
2.2 订单项表
CREATE TABLE `trade_order_item` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '订单项编号',
`user_id` bigint UNSIGNED NOT NULL COMMENT '用户编号',
`order_id` bigint UNSIGNED NOT NULL COMMENT '订单编号',
`cart_id` bigint UNSIGNED NULL DEFAULT NULL COMMENT '购物车项编号',
`spu_id` bigint UNSIGNED NOT NULL COMMENT '商品 SPU 编号',
`spu_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '商品 SPU 名称',
`sku_id` bigint UNSIGNED NOT NULL COMMENT '商品 SKU 编号',
`properties` json NULL COMMENT '商品属性数组,JSON 格式',
`pic_url` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '商品图片',
`count` int NOT NULL COMMENT '购买数量',
`comment_status` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否评价',
`price` int NOT NULL DEFAULT 0 COMMENT '商品原价(单),单位:分',
`discount_price` int NOT NULL DEFAULT 0 COMMENT '商品级优惠(总),单位:分',
`delivery_price` int NOT NULL DEFAULT 0 COMMENT '运费金额,单位:分',
`adjust_price` int NOT NULL DEFAULT 0 COMMENT '订单调价(总),单位:分',
`pay_price` int NOT NULL DEFAULT 0 COMMENT '子订单实付金额(总),不算主订单分摊金额,单位:分',
`coupon_price` int NOT NULL DEFAULT 0 COMMENT '优惠劵减免金额,单位:分',
`point_price` int NOT NULL DEFAULT 0 COMMENT '积分抵扣的金额',
`vip_price` int NOT NULL DEFAULT 0 COMMENT 'VIP 减免金额,单位:分',
`use_point` int NOT NULL DEFAULT 0 COMMENT '使用的积分',
`give_point` int NOT NULL DEFAULT 0 COMMENT '赠送的积分',
`after_sale_id` bigint UNSIGNED NULL DEFAULT NULL COMMENT '售后订单编号',
`after_sale_status` int NOT NULL DEFAULT 0 COMMENT '售后状态',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 124 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '交易订单明细表';
字段也是非常多,但是和订单表类似,我们也来分块来看看。
① 【用户】user_id 字段:对应的用户编号。
② 【订单】order_id 字段:关联的订单编号。
③ 【商品】spu_id、spu_name、sku_id、properties、pic_url、count 字段:商品 SPU、SKU 相关信息。用户下单的每个 SKU 会对应一条 trade_order_item 记录。
④ 【状态】comment_status 字段:订单项是否评价。
⑤ 【价格】price、discount_price、delivery_price、adjust_price、pay_price、coupon_price、point_price、vip_price 字段:订单项的价格信息。
⑥ 【营销】use_point、give_point 字段:订单项的积分信息。
⑦ 【售后】after_sale_id、after_sale_status 字段:订单项的售后信息。每个订单项只能发起一次售后,所以这里只有一个 after_sale_id 字段。
2.3 订单日志表
CREATE TABLE `trade_order_log` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '日志主键',
`user_id` bigint NOT NULL COMMENT '用户编号',
`user_type` tinyint NOT NULL DEFAULT 0 COMMENT '用户类型',
`order_id` bigint NOT NULL COMMENT '订单号',
`before_status` tinyint NULL DEFAULT NULL COMMENT '操作前状态',
`after_status` tinyint NULL DEFAULT NULL COMMENT '操作后状态',
`operate_type` int NOT NULL DEFAULT 0 COMMENT '操作类型',
`content` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '操作内容',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8602 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '交易订单日志';
每次订单状态变更,都会记录一条日志,方便后续查询、统计。
3.售后退款
整体
trade_after_sale_:售后订单表 trade_after_sale_log:售后订单日志表
3.1 售后订单表
CREATE TABLE `trade_after_sale` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '售后编号',
`no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '售后单号',
`user_id` bigint unsigned NOT NULL COMMENT '用户编号',
`type` tinyint DEFAULT NULL COMMENT '售后类型',
`status` int NOT NULL DEFAULT '0' COMMENT '售后状态',
`way` tinyint NOT NULL COMMENT '售后方式',
`refund_price` int NOT NULL DEFAULT '0' COMMENT '退款金额,单位:分',
`apply_reason` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '申请原因',
`apply_description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '补充描述',
`apply_pic_urls` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '补充凭证图片',
`order_id` bigint unsigned NOT NULL COMMENT '订单编号',
`order_no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '订单流水号',
`order_item_Id` bigint unsigned NOT NULL COMMENT '订单项编号',
`spu_id` bigint unsigned NOT NULL COMMENT '商品 SPU 编号',
`spu_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '商品 SPU 名称',
`sku_id` bigint unsigned NOT NULL COMMENT '商品 SKU 编号',
`properties` json DEFAULT NULL COMMENT '商品属性数组,JSON 格式',
`pic_url` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '商品图片',
`count` int NOT NULL COMMENT '购买数量',
`audit_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '审批时间',
`audit_user_id` bigint unsigned DEFAULT NULL COMMENT '审批人',
`audit_reason` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '审批备注',
`logistics_id` bigint DEFAULT NULL COMMENT '退货物流公司编号',
`logistics_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '退货物流单号',
`delivery_time` datetime DEFAULT NULL COMMENT '退货时间',
`receive_time` datetime DEFAULT NULL COMMENT '收货时间',
`receive_reason` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '收货备注',
`pay_refund_id` bigint unsigned DEFAULT NULL COMMENT '支付退款编号',
`refund_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '退款时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='售后订单';
字段还是非常多的,我们来分块来看看。
① no 字段:售后单号,主要展示给用户看,由 TradeNoRedisDAO 的 #generate(...) 方法生成。
而 id 字段是数据库自增的订单编号,系统内部使用,一般不展示给用户查看。
② 【类型】type 字段:售后类型,由 AfterSaleTypeEnum 枚举,分成两种类型:
售中退款:交易完成【前】买家申请退款 售后退款:交易完成【后】买家申请退款 ③ 【状态】status 字段:订单状态,由 AfterSaleStatusEnum 枚举,流转状态如下图:
way 字段:售后方式,由 AfterSaleWayEnum 枚举,分成两种方式:仅退款、退货退款。如上图所示,退款会多 SELLER_AGREE、BUYER_DELIVERY 两个动作。
④ 【申请】refund_price、apply_reason、apply_description、apply_pic_urls 字段:买家发起售后的基本信息。
⑤ 【订单】order_id、order_no、order_item_Id 字段:关联的订单项信息,一个 trade_order_item 可以发起多次售后,同一时间只允许一个,并且最终只能有一个成功。
如果你希望一个售后订单可以退多个订单项,需要自己加个 trade_after_sale_item 表,将部分【订单信息】【商品信息】挪过去。
⑥ 【商品】spu_id、sku_id、count 字段:关联的商品信息。冗余的 spu_name、pic_url、properties 字段,是为了方便查询。
⑦ 【审核】audit_time、audit_user_id、audit_reason 字段:卖家审核的信息。
⑧ 【退货】logistics_id、logistics_no、delivery_time 字段:买家退货的信息。
receive_time、receive_reason 字段:卖家收货的信息。
⑨ 【退款】pay_refund_id、refund_time 字段:退款的信息。 其中,pay_refund_id 关联的支付中心的退款单号。
3.2 售后订单日志表
CREATE TABLE `trade_after_sale_log` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
`user_id` bigint NOT NULL COMMENT '用户编号',
`user_type` tinyint NOT NULL COMMENT '用户类型',
`after_sale_id` bigint NOT NULL COMMENT '售后编号',
`before_status` tinyint DEFAULT NULL COMMENT '售后状态(之前)',
`after_status` tinyint NOT NULL COMMENT '售后状态(之后)',
`operate_type` tinyint NOT NULL COMMENT '操作类型',
`content` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '操作明细',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='售后订单日志';
每次售后状态变更,都会记录一条日志,方便后续查询、统计。
4.快递发货
4.1 快递公司
CREATE TABLE `trade_delivery_express` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
`code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '快递公司编码',
`name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '快递公司名称',
`logo` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '快递公司 logo',
`sort` int NOT NULL DEFAULT '0' COMMENT '排序',
`status` tinyint NOT NULL DEFAULT '0' COMMENT '状态',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='快递公司';
存储下快递公司的基本信息
4.2 快递运费模版
整体
- 运费模版表
CREATE TABLE `trade_delivery_express_template` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
`name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模板名称',
`charge_mode` tinyint NOT NULL COMMENT '配送计费方式',
`sort` int NOT NULL DEFAULT '0' COMMENT '排序',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='快递运费模板';
关键信息都在两个子表中。
唯一需要注意的是,charge_mode 字段,表示配送计费方式,由 DeliveryExpressChargeModeEnum 枚举,有三种:按件、按重量、按体积
- 运费模板【计费】配置表
CREATE TABLE `trade_delivery_express_template_charge` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号,自增',
`template_id` bigint NOT NULL COMMENT '快递运费模板编号',
`charge_mode` tinyint NOT NULL COMMENT '配送计费方式',
`area_ids` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '配送区域 id',
`start_count` double NOT NULL COMMENT '首件数量',
`start_price` int NOT NULL COMMENT '起步价,单位:分',
`extra_count` double NOT NULL COMMENT '续件数量',
`extra_price` int NOT NULL COMMENT '额外价,单位:分',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='快递运费模板计费配置';
① template_id 字段:关联 trade_delivery_express_template 表的 id 字段,表示该计费配置属于哪个运费模版。而 charge_mode 字段,只是进行冗余存储,减少查询次数。
② area_ids 字段:配送区域 id 数组,存储的区级别。如下图所示:
③ start_count、start_price、extra_count、extra_price 字段:配送计费的具体配置。
5.门店自提
5.1 门店信息
CREATE TABLE `trade_delivery_pick_up_store` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
`name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '门店名称',
`introduction` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '门店简介',
`phone` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '门店手机',
`area_id` int NOT NULL COMMENT '区域编号',
`detail_address` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '门店详细地址',
`logo` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '门店 logo',
`opening_time` time NOT NULL COMMENT '营业开始时间',
`closing_time` time NOT NULL COMMENT '营业结束时间',
`latitude` double NOT NULL COMMENT '纬度',
`longitude` double NOT NULL COMMENT '经度',
`status` tinyint NOT NULL DEFAULT '0' COMMENT '门店状态',
`verify_user_ids` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '核销用户编号数组',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='自提门店';
主要是,存储下门店的基本信息。
比较重要特殊的字段,是 verify_user_ids 字段,存储该门店可核销的管理员用户编号数组,关联的是 system_admin_users 的 id 字段。就是说,下单在该门店的订单,只有这些管理员才能核销。
6.分销返佣
整体
6.1 分销用户
CREATE TABLE `trade_brokerage_user` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户编号',
`brokerage_enabled` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否成为推广员',
`brokerage_time` datetime DEFAULT NULL COMMENT '成为分销员时间',
`bind_user_id` bigint DEFAULT NULL COMMENT '推广员编号',
`bind_user_time` datetime DEFAULT NULL COMMENT '推广员绑定时间',
`brokerage_price` int NOT NULL DEFAULT '0' COMMENT '可用佣金',
`frozen_price` int NOT NULL DEFAULT '0' COMMENT '冻结佣金',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=249 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='分销用户';
① 【自身】id 字段:用户编号,对应会员用户(买家)表的 id 字段。因为要存储分佣的绑定关系,所以每个用户都会在这个表有个记录。
brokerage_enabled 字段:是否成为分销用户。只有为 true 的用户才能进行分销。
② 【上级】bind_user_id 字段:推广员编号,自己对应的上级,或者说是由哪个用户分销用户推广来的,后续订单佣金算他的。
③ 【佣金】brokerage_price、frozen_price 字段:可用佣金、冻结佣金。
6.2 分销记录
CREATE TABLE `trade_brokerage_record` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '编号',
`user_id` bigint NOT NULL COMMENT '用户编号',
`source_user_id` bigint NOT NULL DEFAULT '0' COMMENT '来源用户编号',
`source_user_level` int NOT NULL DEFAULT '0' COMMENT '来源用户等级',
`biz_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '业务编号',
`biz_type` tinyint NOT NULL DEFAULT '0' COMMENT '业务类型:1-订单,2-提现',
`title` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '标题',
`description` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '说明',
`price` int NOT NULL DEFAULT '0' COMMENT '金额',
`total_price` int NOT NULL DEFAULT '0' COMMENT '当前总佣金',
`status` tinyint NOT NULL DEFAULT '0' COMMENT '状态:0-待结算,1-已结算,2-已取消',
`frozen_days` int NOT NULL DEFAULT '0' COMMENT '冻结时间(天)',
`unfreeze_time` datetime DEFAULT NULL COMMENT '解冻时间',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_user_id` (`user_id`) USING BTREE COMMENT '用户编号',
KEY `idx_biz` (`biz_type`,`biz_id`) USING BTREE COMMENT '业务',
KEY `idx_status` (`status`) USING BTREE COMMENT '状态'
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='佣金记录';
① id 字段:编号,自增主键。目前佣金每次发生变化时,都会生成一条记录,例如说订单分佣、佣金提现等等。
② 【分销关系】user_id 字段:用户编号,对应分销用户表的 id 字段。
source_user_id 字段:来源用户编号,例如说,订单分佣时,就是订单的买家编号。source_user_level 字段:来源用户等级,例如说,一级分佣、二级分佣。如下图所示:
上下级关系:A 推广 B,B 推广了 C A 购买商品:自己没有返佣 B 购买商品:A 获得一级返佣 C 购买商品:B 获得一级返佣,A 获得二级返佣 ③ 【业务】biz_id、biz_type 字段:业务编号、业务类型(由 BrokerageRecordBizTypeEnum 枚举)。title、description 字段:标题、说明,主要用于展示。
例如说,订单分佣时,biz_type 为 1,biz_id 为订单编号。具体 TradeBrokerageOrderHandler 处理器,订单被支付时,会生成分佣记录。 ④ 【佣金】price、total_price 字段:分佣金额、当前总佣金。每个商品的佣金,可以全局设置,也可以自定设置,如下图所示: ⑤ 【状态】status 字段:状态,由 BrokerageRecordStatusEnum 枚举,目前就待结算(冻结)、已结算(生效)、已取消(失效)三种状态。
frozen_days 字段:冻结时间(天),例如说,订单分佣时,可以设置冻结时间,冻结时间内,佣金不可提现。解冻通过 BrokerageRecordUnfreezeJob 定时任务实现。
6.3 分销提现
CREATE TABLE `trade_brokerage_withdraw` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
`user_id` bigint NOT NULL COMMENT '用户编号',
`price` int NOT NULL DEFAULT '0' COMMENT '提现金额',
`fee_price` int NOT NULL DEFAULT '0' COMMENT '提现手续费',
`total_price` int NOT NULL DEFAULT '0' COMMENT '当前总佣金',
`type` tinyint NOT NULL DEFAULT '0' COMMENT '提现类型:1-钱包;2-银行卡;3-微信;4-支付宝',
`name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '真实姓名',
`account_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '账号',
`bank_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '银行名称',
`bank_address` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '开户地址',
`account_qr_code_url` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '收款码',
`status` tinyint NOT NULL DEFAULT '0' COMMENT '状态:0-审核中,10-审核通过 20-审核不通过;预留:11 - 提现成功;21-提现失败',
`audit_reason` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核驳回原因',
`audit_time` datetime DEFAULT NULL COMMENT '审核时间',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_user_id` (`user_id`) USING BTREE COMMENT '用户编号',
KEY `idx_audit_status` (`status`) USING BTREE COMMENT '状态'
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='佣金提现';
字段虽然比较多,但是都比较简单,就不一一介绍了,只挑选部分重点的。 ① type 字段,提现类型,由 BrokerageWithdrawTypeEnum 枚举,目前支持钱包、银行卡、微信、支付宝。具体需要填写哪些字段,可见 AppBrokerageWithdrawCreateReqVO 类的注释。
② status 字段,提现状态,由 BrokerageWithdrawStatusEnum 枚举,可以分成三个阶段:分佣用户申请、管理员审核(通过、不通过)、管理员打款(成功、失败)。