跳到主要内容

售后架构

说明:此处取消订单均为订单状态处于确认付款之后确认收货之前

将取消订单作为售后的一种类型:取消订单表示用户拒收商品,需要展示订单相关信息

流程图​

流程整理

取消订单流程(支持原路返回):用户选择取消订单-商家审核-商家确认收货-商家退款-完成

取消订单流程(不支持原路返回):用户取消订单-商家审核-商家确认收货-平台打款-完成

退货流程(支持原路退回):用户申请退货-商家审核-用户发货-商家确认收货-商家退款-完成

退货流程(不支持原路退回):用户申请退货-商家审核-用户发货-商家确认收货-平台确认打款-完成

换货流程:用户申请-商家审核-用户发货-商家确认收货-商家确认换新(新生成订单,订单默认为已付款状态)-完成

补发商品:用户申请-商家审核-商家确认发货(新生成订单,订单默认为已付款)-完成

取消订单流程图​

image-20191216165055163

取消订单涉及退款流程,退款具体流程请查询退款流程图

退货流程图​

image-20191216165416831

退货流程涉及到退款,退款具体流程请参考退款流程图

退款流程图​

image-20191216163059082

换货流程​

image-20191216172715778

补发商品流程​

image-20191216173700625

类图​

DO和VO类图​

image-20191216182936738

状态/操作枚举​

image-20191216184802707

售后业务模型​

image-20191217150415555

退款业务模型​

image-20191217150124292

数据结构​

售后服务单基本信息(es_as_order)​

字段类型说明索引
idint(10)主键是
snvarchar(50)售后单号是
order_snvarchar(50)订单编号是
member_idint(10)用户ID是
member_namevarchar(100)用户名否
seller_idint(10)店铺id是
seller_namevarchar(255)店铺名称否
create_timeInt(20)创建时间否
mobilevarchar(50)手机号是
service_typevarchar(50)售后类型:
RETURN_GOODS-退货;
CHANGE_GOODS-换货;
SUPPLY_AGAIN_GOODS-补发货品;
ORDER_CANCEL-取消订单(订单确认付款且未收货之前)
是
service_statusvarchar(50)售后单状态:
APPLY-待审核
PASS-审核通过
REFUSE-审核拒绝
WAIT_FOR_MANUAL-待人工处理
STOCK_IN-入库
REFUNDING-退款中
REFUNDFAIL-退款失败
COMPLETE-完成
是
reasonvarchar(255)申请原因否
apply_vouchersvarchar(255)申请凭证否
problem_desctext问题描述否
goods_jsontext售后商品信息否
disabledvarchar(50)删除状态 DELETED:已删除 NORMAL:正常否
audit_remarkvarchar(255)审核备注否
stock_remarkvarchar(255)入库备注否
refund_remarkvarchar(255)退款备注否
close_reasonvarchar(255)关闭原因否
return_addrvarchar(500)退货地址否
new_order_snvarchar(50)新订单编号否
create_channelvarchar(50)售后服务单创建渠道
NORMAL:正常渠道创建,
PINTUAN:拼团失败自动创建
否
字段类型说明索引
idint(10)主键是
service_snvarchar(255)售后单号是
imgvarchar(255)图片链接否

申请售后服务退款相关信息表(es_as_refund)​

主要用于取消订单、退货时使用,这两种方式需要进行退款操作

字段类型说明索引
idint(10)主键是
service_snvarchar(255)售后服务单号是
refund_pricedecimal(20,2)申请退款金额否
agree_pricedecimal(20,2)同意退款金额否
actual_pricedecimal(20,2)实际退款金额否
refund_wayvarchar(255)退款方式(原路退回,线下支付)否
account_typevarchar(255)账号类型否
return_accountvarchar(255)退款账号否
bank_namevarchar(255)银行名称否
bank_account_numbervarchar(255)银行账户否
bank_account_namevarchar(255)银行开户名否
bank_deposit_namevarchar(255)银行开户行否
pay_order_novarchar(255)订单支付方式返回的交易号否
refund_timeint(20)退款时间否

售后服务收货地址信息表(es_as_change)​

主要是换货、补发商品时使用,这两种方式需要卖家重新发货

字段类型说明索引
idint(10)主键是
service_snvarchar(50)售后服务单号是
ship_namevarchar(50)收货人姓名否
ship_addrvarchar(255)收货地址详细否
province_idint(8)收货地址省份id否
city_idint(8)收货地址城市id否
county_idint(8)收货地址区县id否
town_idint(8)收货地址城镇id否
provincevarchar(255)收货地址省份否
cityvarchar(255)收货地址城市否
countyvarchar(255)收货地址区县否
townvarchar(255)收货地址城镇否
ship_mobilevarchar(50)收货人手机号否

售后物流信息表(es_as_express)​

退货、换货时使用,这两种方式需要买家将商品寄回卖家

字段类型说明索引
idint(10)主键是
service_snvarchar(50)售后服务单号是
courier_numbervarchar(255)物流单号否
courier_company_idint(10)物流公司id否
courier_companyvarchar(255)物流公司名称否
ship_timeint(20)发货日期否

售后商品表(es_as_goods)​

字段类型说明索引
idint(10)主键是
service_snvarchar(50)售后单号是
goods_idint(10)商品id否
sku_idint(10)商品skuid否
ship_numint(10)发货数量否
pricedecimal(20,2)商品成交价否
return_numint(10)退还数量否
storage_numint(10)入库数量否
goods_namevarchar(255)商品名称是
goods_snvarchar(255)商品编号否
goods_imagevarchar(255)商品缩略图否
spec_jsonvarchar(255)商品规格信息否

售后退款单(es_refund)​

字段类型说明索引
idint(10)主键是
snvarchar(50)售后单号是
order_snvarchar(50)订单编号是
member_idint(8)用户ID否
member_namevarchar(100)用户名是
seller_idint(8)店铺id否
seller_namevarchar(100)店铺名称是
create_timeInt(20)创建时间否
refund_wayvarchar(255)退款方式否
account_typevarchar(255)退款账户类型否
return_accountvarchar(255)退款账号否
bank_namevarchar(255)银行名称否
bank_account_numbervarchar(255)银行账号否
bank_account_namevarchar(255)银行开户名否
bank_deposit_namevarchar(255)银行开户行否
mobilevarchar(50)手机号是
refund_statusvarchar(50)退款单状态
APPLY-待退款
REFUNDING-退款中
REFUNDFAIL-退款失败
COMPLETE-完成
是
refund_pricedecimal(20,2)申请退款金额否
refund_pointint(8)退还积分否
payment_typevarchar(255)订单类型(在线支付,货到付款)否
pay_order_novarchar(255)支付结果交易号否
refund_fail_reasonvarchar(255)退款失败原因否
refund_timeint(20)退款时间否
agree_pricedecimal(20,2)商家同意退款金额否
actual_pricedecimal(20,2)实际退款金额否
goods_jsonlongtext售后商品信息否
disabledvarchar(20)删除状态
DELETED:已删除
NORMAL:正常
否
create_channelvarchar(50)售后服务单创建渠道
NORMAL:正常渠道创建,
PINTUAN:拼团失败自动创建
否

售后日志(es_as_log)​

字段类型说明索引
idint(10)主键是
snvarchar(50)售后服务单编号是
log_timeint(20)创建时间否
log_detailtext详细信息否
operatorvarchar(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>

程序启动的时候加载配置文件,将售后单当前状态允许的操作放入缓存中,在使用时,调用校验方法校验是否允许操作。