跳到主要内容

发票架构文档

架构思路

  1. 发票类型共分为增值税普通发票、电子普通发票和增值税专用发票。买家可根据购买商品的实际情况申请不同类型的发票。
  2. 买家如果想开具增值税专用发票,必须要先提出增票资质申请,平台审核通过后,会员在购买商品时可申请开具增值税专用发票。
  3. 买家申请开具发票后,由商家根据实际发票信息开具。电子发票商家需要自行上传电子发票附件以供买家下载,其它类型发票商家需自行邮寄给买家。

数据结构

1.增票资质相关数据结构

会员增票资质表(es_member_zpzz)

字段名提示文字类型长度主键
id主键IDint10
member_id会员IDint10
uname会员登陆用户名varchar50
status状态 NEW_APPLY:新申请,AUDIT_PASS:审核通过,AUDIT_REFUSE:审核未通过varchar50
company_name单位名称varchar255
taxpayer_code纳税人识别码varchar100
register_address公司注册地址varchar255
register_tel公司注册电话varchar100
bank_name开户银行varchar255
bank_account银行账户varchar100
audit_remark平台审核备注varchar255
apply_time申请时间long20

会员收票地址表(es_receipt_address)

字段名称提示文字类型长度主键
id主键IDint10
member_id会员IDint10
member_name收票人姓名varchar50
member_mobile收票人手机号varchar50
province_id收票地址-所属省份IDint10
city_id收票地址-所属城市IDint10
county_id收票地址-所属区县IDint10
town_id收票地址-所属乡镇IDint10
province收票地址-所属省份varchar100
city收票地址-所属城市varchar100
county收票地址-所属区县varchar100
town收票地址-所属乡镇varchar100
detail_addr收票地址-详细地址varchar255

2.发票信息相关数据结构

会员发票信息缓存表(es_member_receipt)

字段名称提示文字类型长度主键
receipt_id主键IDint10
member_id会员IDint10
receipt_type发票类型 ELECTRO:电子普通发票,VATORDINARY:增值税普通发票varchar50
receipt_title发票抬头varchar255
receipt_content发票内容varchar255
tax_no纳税人识别号varchar100
member_mobile收票人手机号varchar50
member_email收票人邮箱varchar100
is_default是否为默认选项 0:否,1:是int1

会员开票历史记录表(es_receipt_history)

字段名称提示文字类型长度主键
history_id主键IDint10
order_sn订单编号varchar100
order_price订单金额decimal20
seller_id开票商家IDint10
seller_name开票商家varchar255
member_id会员IDint10
status开票状态 0:未开,1:已开int1
receipt_method开票方式varchar100
receipt_type发票类型 ELECTRO:电子普通发票,VATORDINARY:增值税普通发票,VATOSPECIAL:增值税专用发票varchar255
logi_id物流公司IDint10
logi_name物流公司名称varchar100
logi_code快递单号varchar100
receipt_title发票抬头varchar255
receipt_content发票内容varchar255
tax_no纳税人识别号varchar100
reg_addr注册地址varchar255
reg_tel注册电话varchar100
bank_name开户银行varchar255
bank_account银行账户varchar100
member_name收票人名称varchar50
member_mobile收票人手机号varchar50
member_email收票人邮箱varchar100
province_id收票地址-所属省份IDint10
city_id收票地址-所属城市IDint10
county_id收票地址-所属区县IDint10
town_id收票地址-所属乡镇IDint10
province收票地址-所属省份varchar100
city收票地址-所属城市varchar100
county收票地址-所属区县varchar100
town收票地址-所属乡镇varchar100
detail_addr收票地址-详细地址varchar255
add_time申请开票日期long20
goods_json订单商品数据text0
order_status相关订单出库状态varchar50

会员电子发票附件表(es_receipt_file)

字段名称提示文字类型长度主键
id主键IDint10
history_id会员开票历史记录IDint10
elec_file电子发票附件varchar255

领域模型

1.增票资质领域模型

会员与增票资质信息关系为一对一。

image-20191217150124292

模型说明

属性说明备注
id主键
memberId会员ID
uname会员登陆用户名
status状态NEW_APPLY:新申请,AUDIT_PASS:审核通过,AUDIT_REFUSE:审核未通过
companyName单位名称
taxpayerCode纳税人识别码
registerAddress公司注册地址
registerTel公司注册电话
bankName开户银行
bankAccount银行账户
auditRemark平台审核备注备注最多允许输入200个字符
applyTime申请时间

2.会员收票地址领域模型

会员与收票地址关系为一对一。

申请开票时默认使用收票地址信息,但是可以修改,修改后不改变一开始添加的收票地址信息。

image-20191217150124292

模型说明

属性说明备注
id主键
memberId会员ID
memberName收票人姓名此字段值不是会员用户名,而是会员添加的收票人姓名
memberMobile收票人手机号此字段值不是会员注册手机号,而是会员添加的收票人手机号
provinceId所属省份ID
cityId所属城市ID
countyId所属区县ID
townId所属乡镇ID
province所属省份
city所属城市
county所属区县
town所属乡镇
detailAddr详细地址

3.会员发票信息缓存领域模型

不缓存增值税专用发票和抬头为个人的发票信息。

image-20191217150124292

模型说明

属性说明备注
receiptId主键
memberId会员ID
receiptType发票类型ELECTRO:电子普通发票,VATORDINARY:增值税普通发票
receiptTitle发票抬头
receiptContent发票内容
taxNo纳税人识别码
memberMobile收票人手机号
memberEmail收票人邮箱
isDefault是否为默认选项0:否,1:是

4.会员开票历史记录领域模型

流程图

image-20191217150124292

模型图

image-20191217150124292

模型说明

ReceiptHistory
属性说明备注
historyId主键
orderSn订单编号一个订单对应一条发票信息
orderPrice订单金额此订单金额不等于发票金额,发票金额由商家根据具体情况而定
sellerId商家ID
sellerName商家名称
memberId会员ID
status开票状态0:未开,1:已开
receiptMethod开票方式针对增值税专用发票,暂时只有"订单完成后开票"一种方式
receiptType发票类型发票类型 ELECTRO:电子普通发票,VATORDINARY:增值税普通发票,VATOSPECIAL:增值税专用发票
logiId物流公司ID针对发票类型为增值税普通发票和增值税专用发票才会有值
logiName物流公司名称针对发票类型为增值税普通发票和增值税专用发票才会有值
logiCode快递号针对发票类型为增值税普通发票和增值税专用发票才会有值
receiptTitle发票抬头个人或单位(单位必须是公司完整名称)
receiptContent发票内容
taxNo纳税人识别码发票抬头是单位的,此项必填
regAddr注册地址公司注册时填写的地址信息
regTel注册电话公司注册时填写的电话信息
bankName银行名称公司注册时填写的开户银行名称
bankAccount银行账户公司注册时填写的银行账户信息
memberName收票人姓名此字段值不是会员用户名,而是会员添加的收票人姓名
memberMobile收票人手机号此字段值不是会员注册手机号,而是会员添加的收票人手机号
memberEmail收票人邮箱此字段值不是会员绑定的邮箱,而是会员添加的收票人邮箱
provinceId所属省份ID收票地址--所属省份ID
cityId所属城市ID收票地址--所属城市ID
countyId所属区县ID收票地址--所属区县ID
townId所属乡镇ID收票地址--所属乡镇ID
province所属省份收票地址--所属省份
city所属城市收票地址--所属城市
county所属区县收票地址--所属区县
town所属乡镇收票地址--所属乡镇
detailAddr详细地址收票地址--详细地址
addTime申请开票日期
ReceiptHistoryVO

ReceiptHistoryVO继承ReceiptHistory

属性说明备注
skuList商品信息集合包含的是订单下单商品的信息
ReceiptFileVO

电子普通发票附件VO,用于商家上传电子发票附件时使用。

电子发票可上传多张附件。

属性说明备注
historyId开票记录ID关联会员开票历史记录表
files附件集合类型是List

其他

  1. 商家可以手动设置开启和关闭开票功能。开启后,购买此商家的商品才可以申请开具相对应类型的发票。

    商家店铺详情表(es_shop_detail)需要新增两个字段:

    ordin_receipt_status:是否允许开具增值税普通发票 0:否,1:是

    elec_receipt_status:是否允许开具电子普通发票 0:否,1:是

    tax_receipt_status:是否允许开具增值税专用发票 0:否,1:是

请求路径请求方式请求参数返回值备注
/seller/shops/receiptPOSTShopReceiptDTO此API在ShopSellerController中
  1. 结算页面会员申请发票时,需要判断是否允许开具发票。

如果购买多个商家店铺的商品,需要判断商家店铺是否开启了相关类型发票的开票功能,只要有一个商家不允许开具某个类型的发票,那么所有商家的商品都不允许开具此类型的发票

请求路径请求方式请求参数返回值备注
/shops/{ids}/check/receiptGETids(Integer[])ShopReceiptDTO此API在ShopBuyerController中