• 票据系统设计


    最近做票据系统,在此做一个总结。下面从几个关键点逐一来阐述。

    1. 库存

    通俗地讲,票据系统的主要功能是出票、买票、卖票。买卖双方之间的交易就形成了票据的流转。这个过程中,票是最关键的元素。票据库存是整个票据系统的核心,所有业务最终都是对库存进行操作。对应有出库、入库操作。

    交易类的库存操作是在结算完成后进行处理的,结算完成后通知交易双方然后各自处理自己的库存;

    非交易业务的库存是在对方应答成功后进行的,首先是对方应答同意后处理,然后是本方收到对方应答同意后处理;

    针对库存有几张关键的表设计:

    (1)票据主表:主要是存储票据中不变的一些信息,比如票号、票据类型、出票日期、承兑日期、到期日、出票人、承兑人、收票人等等

    (2)票据子表:存储变化的部分,比如票号、子票区间、票据金额、持票人、票据状态、流通状态、库存状态、拆分状态等等

    (3)票据交易表:记录所有对票据的的操作行为

    (4)应收/应付表:这个主要是挑票用的,维护着谁持有哪些票据,因为有类似质押的行为存在,所以不能跟票据子表合并。这个表相当于是企业的个人记账本。主要字段有票号、子票区间、票据金额、可用余额、本方企业信息、对方企业信息、前手人信息、票据状态等等

    (5)票据背面表:主要用于展示票据背面信息

    (6)加锁表:用于业务操作期间对票据加锁

    2. 拆票

    电票是可以拆分的,持票人在办理票据背书、贴现、保证、质押等业务时,可依实际业务需要,将持有票据包按实际支付金额分包流转使用。

    在发送请求后,收到确认报文后进行拆分。拆票就是把一张票变成两张票。

    反映到表上就是原来票据字表中的一条未拆分的记录,拆分后新增了两条,总共变成三条记录

    假设原票据金额是10元,子票区间是0.01~10,再假设交易金额是2元,那么首先将这个2元的拆出来,即它的子票区间是0.01~2

    应收表中相应票据也需要做同样的拆分

    以上拆票逻辑同意适用于其它类似的凭证拆分流转

    3. 服务划分

    主要微服务:

    • 票据服务:主要是各个业务数据,比如出票、背书、贴现、交易等等
    • 库存服务:票据的流转
    • 企业服务:企业信息、企业账户、企业账户等等
    • 票交所服务:主要是与票交所交互,收发报文
    • 第三方:数据推送第三方
    • 指令服务:业务与票交所交互的桥梁

    下面以质押为例描述整个过程中库存是如何变化的

    1、A(出质人)申请将票据质押给B(质权人),首先保存申请信息,并提交审批,并对被质押的票据加锁

    2、审批通过后,发送质押申请报文

    3、收到确认报文后,更新票据状态,检查是否需要拆票,如有完成拆票动作

    4、B应答同意,收到确认报文后,更新库存。首先,修改票据状态已收票,然后生成入库交易记录,进行入库操作(即向自己的应收表中新增一条票据记录)

    5、A收到B应答同意报文后,更新自己的库存。首先,票据解锁,然后更新票据状态已质押,生成交易,更新自己的应收票据表

    6、以上在库存操作时还会生成统计数据,并更新票据背面

     



    欢迎各位转载,但必须在文章页面中给出作者和原文链接!
  • 相关阅读:
    Godot4实现游戏的多语言版本
    路由进阶:route-policy实验配置
    【机器学习】GBDT (Gradient Boosting Decision Tree) 深入解析
    Liunx 重置MySQL用户密码
    Linux C select 的学习
    我的第一个项目(四):(前端)发送请求以及表单校验
    java版直播商城免费搭建平台规划及常见的营销模式+电商源码+小程序+三级分销+二次开发
    leetcode53: 最大字数组和
    JDK集合源码之ArrayList解析
    UDP程序设计
  • 原文地址:https://www.cnblogs.com/cjsblog/p/17164654.html