1、表设计
用户申请开发票需求,最少可以设计如下3张表
1、订单信息表,主要字段如下
字段 | 注释 |
---|---|
trade_number | 交易流水号,订单号 |
amount | 交易金额 |
create_time | 订单创建时间 |
uid | 用户id |
2、申请记录表,主要字段如下
字段 | 注释 |
---|---|
uid | 用户id |
apply_time | 申请时间 |
trade_id | 订单id |
invoice_id | 发票信息id |
state | 审核状态,要经过审核才能开票 |
comment | 审核备注,便于在不通过的时候写原因,然后用户可看 |
3、发票信息表,主要字段如下
字段 | 注释 |
---|---|
uid | 用户id |
type | 开票种类,电子票、专票 |
taxNum | 纳税人识别号 |
…………公司地址、联系电话等等,就是发票需要的一些信息
2、业务流程
1、用户前端看到自己的交易记录(展示订单信息表信息)
2、选取交易记录—>填写发票信息—>提交(申请记录表、发票信息表加一条数据),也可以引用之前填写过的发票信息表记录,此时,只是申请记录表和发票信息表关联一下即可。
3、后台审核(修改申请记录表状态)
(1)审核通过,开发票
(2)不通过,让用户重新填写
4、用户查看开票记录,如果有不通过的,点击修改,再到后台审核(状态又改为待审核)
5、重复3-4步
3、注意事项
注意金额换算,如果交易记录是从第三方接口取到的,比如我这次做的有部分就是速卖通平台的交易记录,是以分为单位存储的,所以计算时务必注意,统一转换成人民币元。
4、汇率换算技巧
假如现有两种货币单位表示的金额,38美元,20新加坡元,需要统一换算成人民币然后再求总金额。目前美元与人民币汇率是1:6.9768,而人民币与新加坡元的汇率是1:19.5735。
1、分别根据汇率求出人民币,美元:38 * (1 / (1 / 6.9768)) = 265.11839999999995,
新加坡元20 * (1 / (19.5735 / 1)) = 1.0217896645975426
2、换算后的人民币相加,结果为266.1401896645975,然后保留2位小数显示266.14。
注意千万不能先把汇率保留2位小数再换算,一定要算好之后,给用户显示时才能保留2位小数!
double dollarToCny = 38 * (1 / (1 / 6.9768));
double sgdToCny = 20 * (1 / (19.5735 / 1));
double sum = dollarToCny + sgdToCny;