note 41:账务系统开发规范

news/2025/1/2 4:44:31/

目录

系统设计

防重控制

流量控制

并发控制

异常处理

备份机制

系统开发​​​​​​​

前端队列操作

外系统交互
​​​​​​​​​​​​​​

系统设计

防重控制

对于进入到系统中的数据(文件导入、手工录入、系统直连等)以及本系统发往外系统的数据都需要进行防重控制处理,主要是采用数据库表的主键或者唯一索引机制来进行防重。

防重表的主键应该选取能够唯一标识该笔交易的字段,例如对于文件导入的数据,可以先计算文件内容的MD5,然后将MD5的值作为防重主键

防重表的数据也需要备份,仅保留一段时期(参数化设置)的数据,其余的可以备份到历史表。

对于实时联机交易,引入幂等流水做好控制

流量控制

为了避免系统被前端流量压垮,以及系统自身的流量把后端系统压垮,因此需要在数据接收和数据发送时引入流量控制机制。

具体实现可以考虑令牌桶、漏桶、计数器等算法,对于微服务架构的项目直接使用熔断器即可。

并发控制

并发控制是为了应对同一条记录被多人同时操作的情况,常见于前端界面队列操作以及后端定时任务,并发控制常用的方式也是数据库表,利用表的主键来防止并发。

异常处理

目前主要是自动流程、外系统交互、定时任务等场景异常情况比较常见,对应的处理机制基本如下:

需要分析出可能的异常点,每一种异常可以先尝试系统自动重试,重试一定次数(参数化设置)仍然不成功的,需要提醒(短信或其他方式)到相应的处理人员,另外还需要展示在前端异常队列,处理人员可以在该队列触发重试或者其他操作(视具体业务而定)。

备份机制

数据库的数据、日志文件、交易文件都需要考虑备份,数据库一般是建立历史表,采用分区的方式,当前表保留一段时间后转到历史表;日志文件和交易文件一般是保留一段时间(参数化设置)后删除。

​​​​​​​​​​​​​​系统开发​​​​​​​

前端队列操作

1、前端按钮点击过后要禁用,防止用户连续点击,造成重复发送请求到后台

2、前端请求发送到后台后,后端逻辑需要先判断该笔交易的状态是否已经发生改变,如果已经改变的话直接返回提示前端;没有改变的话,先加并发控制锁,加锁成功后然后再次判断该笔交易的状态是否已经发生改变,没有改变则进行后续业务逻辑,最后在finally中释放并发控制锁

外系统交互

  1. 需要跟对接系统确定好通讯的字符集编码
  2. 如果通讯数据中包含金额栏位,需要确定好传输过程中金额是否包含小数点,需要处理好精度问题
  3. 在发请求给外系统之前,需要先关闭数据库连接,通讯完成后,再重新开启数据库连接
  1. 需要设置连接超时以及读超时参数,对于串行连接的多个后端系统,则需要遵循越后端的系统超时时间越小
  2. 数据接入和数据转出都需要有防重控制
  3. 发送请求给后端系统时,需要先更新发报流水的状态为发送中,对于长期处于发送中状态的流水需要进行异常预警,技术人员视具体情况进行手工干预处理或者提供前端界面供业务人员处理
  4. 发送请求给后端系统时,需要考虑几种异常情况:组包异常、连接超时、读超时、解包异常、交易重复、交易未明(不一定有),并针对每一种异常都有对应的处理机制,每一种异常都需要预警

http://www.ppmy.cn/news/1559450.html

相关文章

windows C#-嵌套类型

在类、构造或接口中定义的类型称为嵌套类型。 例如 public class Container {class Nested{Nested() { }} } 不论外部类型是类、接口还是构造,嵌套类型均默认为 private;仅可从其包含类型中进行访问。 在上一个示例中,Nested 类无法访问外部…

Tonghttpserver6.0.1.3 使用整理(by lqw)

文章目录 1.声明2.关于单机版控制台和集中管理控制台3.单机版控制台3.1安装,启动和查看授权信息3.2一些常见的使用问题(单机控制台)3.3之前使用的是nginx,现在要配nginx.conf上的配置,在THS上如何配置3.4如何配置密码过…

存储块的删除与状态查询

目录 存储块的删除 设计实现 存储块的删除 仅需删除任务列表的所有任务,无需在意空闲存储块。 设计实现 存储块的删除(清空过程中可能有任务就绪,需执行一次调度)存储块的状态查询(当前存储块的计数、允许的最大计数、…

计算机毕业设计Python+Spark知识图谱酒店推荐系统 酒店价格预测系统 酒店可视化 酒店爬虫 酒店大数据 neo4j知识图谱 深度学习 机器学习

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

JVM运行时数据区的详细解析

JVM(Java虚拟机)的运行时数据区是JVM在执行Java程序时使用的内存区域。这些区域被划分为多个部分,每个部分都有其特定的功能和生命周期。以下是各部分的详细介绍: 1. 方法区 (Method Area) 方法区是所有线程共享的内存区域&…

SQL注入_简记

SQL 注入(SQL Injection)是一种恶意的网络安全攻击技术,攻击者通过在用户输入或其他数据源向应用程序发送的数据中注入恶意的 SQL 语句,从而欺骗数据库执行非预期的操作。以下是关于SQL注入的知识点简记脑图

web组态可视化编辑器

随着工业智能制造的发展,工业企业对设备可视化、远程运维的需求日趋强烈,传统的单机版组态软件已经不能满足越来越复杂的控制需求,那么实现web组态可视化界面成为了主要的技术路径。 行业痛点 对于软件服务商来说,将单机版软件转…

Spring Boot对访问密钥加解密——HMAC-SHA256

HMAC-SHA256 简介 HMAC-SHA256 是一种基于 哈希函数 的消息认证码(Message Authentication Code, MAC),它结合了哈希算法(如 SHA-256)和一个密钥,用于验证消息的完整性和真实性。 HMAC 是 “Hash-based M…