售后架构
说明:此处取消订单均为订单状态处于确认付款之后确认收货之前
将取消订单作为售后的一种类型:取消订单表示用户拒收商品,需要展示订单相关信息
流程图
流程整理
取消订单流程(支持原路返回):用户选择取消订单-商家审核-商家确认收货-商家退款-完成
取消订单流程(不支持原路返回):用户取消订单-商家审核-商家确认收货-平台打款-完成
退货流程(支持原路退回):用户申请退货-商家审核-用户发货-商家确认收货-商家退款-完成
退货流程(不支持原路退回):用户申请退货-商家审核-用户发货-商家确认收货-平台确认打款-完成
换货流程:用户申请-商家审核-用户发货-商家确认收货-商家确认换新(新生成订单,订单默认为已付款状态)-完成
补发商品:用户申请-商家审核-商家确认发货(新生成订单,订单默认为已付款)-完成
取消订单流程图
取消订单涉及退款流程,退款具体流程请查询退款流程图
退货流程图
退货流程涉及到退款,退款具体流程请参考退款流程图
退款流程图
换货流程
补发商品流程
类图
DO和VO类图
状态/操作枚举
售后业务模型
退款业务模型
数据结构
售后服务单基本信息(es_as_order)
字段 | 类型 | 说明 | 索引 |
---|---|---|---|
id | int(10) | 主键 | 是 |
sn | varchar(50) | 售后单号 | 是 |
order_sn | varchar(50) | 订单编号 | 是 |
member_id | int(10) | 用户ID | 是 |
member_name | varchar(100) | 用户名 | 否 |
seller_id | int(10) | 店铺id | 是 |
seller_name | varchar(255) | 店铺名称 | 否 |
create_time | Int(20) | 创建时间 | 否 |
mobile | varchar(50) | 手机号 | 是 |
service_type | varchar(50) | 售后类型: RETURN_GOODS-退货; CHANGE_GOODS-换货; SUPPLY_AGAIN_GOODS-补发货品; ORDER_CANCEL-取消订单(订单确认付款且未收货之前) | 是 |
service_status | varchar(50) | 售后单状态: APPLY-待审核 PASS-审核通过 REFUSE-审核拒绝 WAIT_FOR_MANUAL-待人工处理 STOCK_IN-入库 REFUNDING-退款中 REFUNDFAIL-退款失败 COMPLETE-完成 | 是 |
reason | varchar(255) | 申请原因 | 否 |
apply_vouchers | varchar(255) | 申请凭证 | 否 |
problem_desc | text | 问题描述 | 否 |
goods_json | text | 售后商品信息 | 否 |
disabled | varchar(50) | 删除状态 DELETED:已删除 NORMAL:正常 | 否 |
audit_remark | varchar(255) | 审核备注 | 否 |
stock_remark | varchar(255) | 入库备注 | 否 |
refund_remark | varchar(255) | 退款备注 | 否 |
close_reason | varchar(255) | 关闭原因 | 否 |
return_addr | varchar(500) | 退货地址 | 否 |
new_order_sn | varchar(50) | 新订单编号 | 否 |
create_channel | varchar(50) | 售后服务单创建渠道 NORMAL:正常渠道创建, PINTUAN:拼团失败自动创建 | 否 |
售后图片表(es_as_gallery)
字段 | 类型 | 说明 | 索引 |
---|---|---|---|
id | int(10) | 主键 | 是 |
service_sn | varchar(255) | 售后单号 | 是 |
img | varchar(255) | 图片链接 | 否 |
申请售后服务退款相关信息表(es_as_refund)
主要用于取消订单、退货时使用,这两种方式需要进行退款操作
字段 | 类型 | 说明 | 索引 |
---|---|---|---|
id | int(10) | 主键 | 是 |
service_sn | varchar(255) | 售后服务单号 | 是 |
refund_price | decimal(20,2) | 申请退款金额 | 否 |
agree_price | decimal(20,2) | 同意退款金额 | 否 |
actual_price | decimal(20,2) | 实际退款金额 | 否 |
refund_way | varchar(255) | 退款方式(原路退回,线下支付) | 否 |
account_type | varchar(255) | 账号类型 | 否 |
return_account | varchar(255) | 退款账号 | 否 |
bank_name | varchar(255) | 银行名称 | 否 |
bank_account_number | varchar(255) | 银行账户 | 否 |
bank_account_name | varchar(255) | 银行开户名 | 否 |
bank_deposit_name | varchar(255) | 银行开户行 | 否 |
pay_order_no | varchar(255) | 订单支付方式返回的交易号 | 否 |
refund_time | int(20) | 退款时间 | 否 |
售后服务收货地址信息表(es_as_change)
主要是换货、补发商品时使用,这两种方式需要卖家重新发货
字段 | 类型 | 说明 | 索引 |
---|---|---|---|
id | int(10) | 主键 | 是 |
service_sn | varchar(50) | 售后服务单号 | 是 |
ship_name | varchar(50) | 收货人姓名 | 否 |
ship_addr | varchar(255) | 收货地址详细 | 否 |
province_id | int(8) | 收货地址省份id | 否 |
city_id | int(8) | 收货地址城市id | 否 |
county_id | int(8) | 收货地址区县id | 否 |
town_id | int(8) | 收货地址城镇id | 否 |
province | varchar(255) | 收货地址省份 | 否 |
city | varchar(255) | 收货地址城市 | 否 |
county | varchar(255) | 收货地址区县 | 否 |
town | varchar(255) | 收货地址城镇 | 否 |
ship_mobile | varchar(50) | 收货人手机号 | 否 |
售后物流信息表(es_as_express)
退货、换货时使用,这两种方式需要买家将商品寄回卖家
字段 | 类型 | 说明 | 索引 |
---|---|---|---|
id | int(10) | 主键 | 是 |
service_sn | varchar(50) | 售后服务单号 | 是 |
courier_number | varchar(255) | 物流单号 | 否 |
courier_company_id | int(10) | 物流公司id | 否 |
courier_company | varchar(255) | 物流公司名称 | 否 |
ship_time | int(20) | 发货日期 | 否 |
售后商品表(es_as_goods)
字段 | 类型 | 说明 | 索引 |
---|---|---|---|
id | int(10) | 主键 | 是 |
service_sn | varchar(50) | 售后单号 | 是 |
goods_id | int(10) | 商品id | 否 |
sku_id | int(10) | 商品skuid | 否 |
ship_num | int(10) | 发货数量 | 否 |
price | decimal(20,2) | 商品成交价 | 否 |
return_num | int(10) | 退还数量 | 否 |
storage_num | int(10) | 入库数量 | 否 |
goods_name | varchar(255) | 商品名称 | 是 |
goods_sn | varchar(255) | 商品编号 | 否 |
goods_image | varchar(255) | 商品缩略图 | 否 |
spec_json | varchar(255) | 商品规格信息 | 否 |
售后退款单(es_refund)
字段 | 类型 | 说明 | 索引 |
---|---|---|---|
id | int(10) | 主键 | 是 |
sn | varchar(50) | 售后单号 | 是 |
order_sn | varchar(50) | 订单编号 | 是 |
member_id | int(8) | 用户ID | 否 |
member_name | varchar(100) | 用户名 | 是 |
seller_id | int(8) | 店铺id | 否 |
seller_name | varchar(100) | 店铺名称 | 是 |
create_time | Int(20) | 创建时间 | 否 |
refund_way | varchar(255) | 退款方式 | 否 |
account_type | varchar(255) | 退款账户类型 | 否 |
return_account | varchar(255) | 退款账号 | 否 |
bank_name | varchar(255) | 银行名称 | 否 |
bank_account_number | varchar(255) | 银行账号 | 否 |
bank_account_name | varchar(255) | 银行开户名 | 否 |
bank_deposit_name | varchar(255) | 银行开户行 | 否 |
mobile | varchar(50) | 手机号 | 是 |
refund_status | varchar(50) | 退款单状态 APPLY-待退款 REFUNDING-退款中 REFUNDFAIL-退款失败 COMPLETE-完成 | 是 |
refund_price | decimal(20,2) | 申请退款金额 | 否 |
refund_point | int(8) | 退还积分 | 否 |
payment_type | varchar(255) | 订单类型(在线支付,货到付款) | 否 |
pay_order_no | varchar(255) | 支付结果交易号 | 否 |
refund_fail_reason | varchar(255) | 退款失败原因 | 否 |
refund_time | int(20) | 退款时间 | 否 |
agree_price | decimal(20,2) | 商家同意退款金额 | 否 |
actual_price | decimal(20,2) | 实际退款金额 | 否 |
goods_json | longtext | 售后商品信息 | 否 |
disabled | varchar(20) | 删除状态 DELETED:已删除 NORMAL:正常 | 否 |
create_channel | varchar(50) | 售后服务单创建渠道 NORMAL:正常渠道创建, PINTUAN:拼团失败自动创建 | 否 |
售后日志(es_as_log)
字段 | 类型 | 说明 | 索引 |
---|---|---|---|
id | int(10) | 主键 | 是 |
sn | varchar(50) | 售后服务单编号 | 是 |
log_time | int(20) | 创建时间 | 否 |
log_detail | text | 详细信息 | 否 |
operator | varchar(255) | 操作者 | 否 |
状态操作说明
流程是固定的,使用配置文件设置流程:
<?xml version="1.0" encoding="UTF-8"?>
<flows>
<!--取消订单 (订单付款之后,确认收货之前)-->
<flow name="ORDER_CANCEL">
<!--申请状态,商家可以审核-->
<status name="APPLY">
<allow>SELLER_AUDIT</allow>
</status>
<!--审核通过状态,商家可以入库-->
<status name="PASS">
<allow>STOCK_IN</allow>
</status>
<!--入库状态,商家可以退款-->
<status name="STOCK_IN">
<allow>SELLER_REFUND</allow>
</status>
<!--等待人工处理状态,管理员可以退款-->
<status name="WAIT_FOR_MANUAL">
<allow>ADMIN_REFUND</allow>
</status>
<!--异常状态 可以关闭售后服务-->
<status name="ERROR_EXCEPTION">
<allow>CLOSE</allow>
</status>
<!--关闭状态不能进行任何操作-->
<status name="CLOSED"/>
<!--审核未通过状态不能进行任何操作-->
<status name="REFUSE"/>
<!--完成状态不能进行任何操作-->
<status name="COMPLETED"/>
</flow>
<!--退货流程 -->
<flow name="RETURN_GOODS">
<!--申请状态,商家可以审核-->
<status name="APPLY">
<allow>SELLER_AUDIT</allow>
</status>
<!--审核通过状态,买家可以填写物流信息 -->
<status name="PASS">
<allow>FILL_LOGISTICS_INFO</allow>
</status>
<!--物流完善状态可以确认入库-->
<status name="FULL_COURIER">
<allow>STOCK_IN</allow>
</status>
<!--入库状态,商家可以退款-->
<status name="STOCK_IN">
<allow>SELLER_REFUND</allow>
</status>
<!--等待人工处理状态,管理员可以退款-->
<status name="WAIT_FOR_MANUAL">
<allow>ADMIN_REFUND</allow>
</status>
<!--异常状态 可以关闭售后服务-->
<status name="ERROR_EXCEPTION">
<allow>CLOSE</allow>
</status>
<!--关闭状态不能进行任何操作-->
<status name="CLOSED"/>
<!--审核未通过状态不能进行任何操作-->
<status name="REFUSE"/>
<!--完成状态不能进行任何操作-->
<status name="COMPLETED"/>
</flow>
<!--换货流程 -->
<flow name="CHANGE_GOODS">
<!--申请状态,商家可以审核-->
<status name="APPLY">
<allow>SELLER_AUDIT</allow>
</status>
<!--审核通过状态,买家可以填写物流信息 -->
<status name="PASS">
<allow>FILL_LOGISTICS_INFO</allow>
</status>
<!--物流完善状态可以确认入库-->
<status name="FULL_COURIER">
<allow>STOCK_IN</allow>
</status>
<!--异常状态 商家可以手动创建新订单也可以关闭售后服务单-->
<status name="ERROR_EXCEPTION">
<allow>CREATE_NEW_ORDER</allow>
<allow>CLOSE</allow>
</status>
<!--关闭状态不能进行任何操作-->
<status name="CLOSED"/>
<!--审核未通过状态不能进行任何操作-->
<status name="REFUSE"/>
<!--完成状态不能进行任何操作-->
<status name="COMPLETED"/>
</flow>
<!--补发商品流程 -->
<flow name="SUPPLY_AGAIN_GOODS">
<!--申请状态,商家可以审核-->
<status name="APPLY">
<allow>SELLER_AUDIT</allow>
</status>
<!--异常状态 商家可以手动创建新订单也可以关闭售后服务单-->
<status name="ERROR_EXCEPTION">
<allow>CREATE_NEW_ORDER</allow>
<allow>CLOSE</allow>
</status>
<!--关闭状态不能进行任何操作-->
<status name="CLOSED"/>
<!--审核未通过状态不能进行任何操作-->
<status name="REFUSE"/>
<!--完成状态不能进行任何操作-->
<status name="COMPLETED"/>
</flow>
</flows>
程序启动的时候加载配置文件,将售后单当前状态允许的操作放入缓存中,在使用时,调用校验方法校验是否允许操作。