跳到主要内容

发票架构文档

架构思路​

  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中