news 2026/5/10 9:47:56

65.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--账本合并

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
65.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--账本合并

有时我们需要把几个账本合并到一个账本中,这样就可以在一个账本中查看所有的交易记录。那么,在本片文章中我们就来一起实现这个功能。

一、需求分析

用户需要能够将多个账本中的交易记录合并到一个目标账本中,以便在统一的视图下管理和查看所有交易数据。用户首先选择一个目标账本作为合并的目的地,然后选择一个或多个源账本,系统将源账本中的所有交易记录复制到目标账本中。

在这里我们暂时不考虑合并后可能出现的重复交易记录问题,因为这个功能属于一个较为复杂的功能,因此我们会把这个功能放在进阶的阶段去讲解具体怎么实现。

二、功能设计

我们现在已经了解了需求,接下来我们来设计一下这个功能。这个功能很简单,只需要一个接口,一个方法就可以实现。

我们在AccountBookController中添加一个新的接口MergeAccountBooks,该方法接受一个目标账本 ID 和一个源账本 ID 列表,代码如下:

///<summary>///账本合并///</summary>///<param name="request">账本合并请求</param>[HttpPost("merge")]publicActionResult<bool>MergeAccountBooks([FromBody]AccountBookMergeRequestrequest){_accountBookServer.Merge(request);returnOk();}

接下来我们需要定义AccountBookMergeRequest类来封装请求参数:

namespaceSP.FinanceService.Models.Request{/// <summary>/// 账本合并请求模型/// </summary>publicclassAccountBookMergeRequest{/// <summary>/// 目标账本ID/// </summary>publiclongTargetAccountBookId{get;set;}/// <summary>/// 源账本ID列表/// </summary>publicList<long>SourceAccountBookIds{get;set;}=new();}}

接下来我们在IAccountBookServer中新增Merge方法,并在AccountBookServerImpl类中实现该方法:

// IAccountBookServer.cs/// <summary>/// 合并账本/// </summary>/// <param name="request"></param>voidMerge(AccountBookMergeRequestrequest);// AccountBookServerImpl.cs/// <summary>/// 合并账本/// </summary>/// <param name="request"></param>/// <exception cref="NotImplementedException"></exception>publicvoidMerge(AccountBookMergeRequestrequest){// 目标账本是否存在booltargetExist=Exist(request.TargetAccountBookId);if(targetExist){thrownewNotFoundException($"账本不存在,ID:{request.TargetAccountBookId}");}// 来源账本是否存在List<long>sourceIds=request.SourceAccountBookIds;List<long>notExistIds=BatchQuery(sourceIds);if(notExistIds.Any()){thrownewNotFoundException($"以下账本不存在,ID:{string.Join(", ",notExistIds)}");}// 迁移账本下的记录// 规则:源账本的记录迁移到目标账本下,修改账本ID为目标账本IDvaraccountingServer=_serviceProvider.GetRequiredService<IAccountingServer>();accountingServer.MigrateAccountBook(request.TargetAccountBookId,sourceIds);}

在上面的代码中,我们首先检查目标账本是否存在,如果不存在则抛出异常。接着检查源账本是否存在,如果有不存在的账本也抛出异常。最后,我们调用IAccountingServerMigrateAccountBook方法来迁移源账本下的记录到目标账本下。

在合并前,系统需要通过Exist方法确认目标账本存在,若不存在则立即抛出NotFoundException异常,中断合并流程。随后使用BatchQuery方法对所有源账本进行批量查询,返回不存在的账本ID列表。这种方式比逐个验证更高效,特别是在源账本数量较多时。

核心的记录迁移操作通过MigrateAccountBook方法实现,将源账本中的所有交易记录转移到目标账本,其本质是更新这些记录的AccountBookId字段为目标账本ID,从而实现记录的归集。在实现此方法时,应当使用数据库事务确保整个迁移过程的原子性,避免数据不一致。对于大量交易记录的迁移场景,应使用批量更新操作而非逐条更新,以提高性能并减少数据库压力。

三、总结

这篇文章我们介绍了如何实现账本合并功能。通过设计一个简单的接口和方法,我们可以将多个账本中的交易记录合并到一个目标账本中,方便用户统一管理和查看所有交易数据。在实际应用中,还可以根据需求进一步完善该功能,例如处理重复交易记录等问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 9:18:40

“Zookeeper Java客户端全解析:面试必知!”

文章目录Zookeeper的Java客户端都有哪些&#xff1f;引言&#xff1a;为什么我们要聊ZooKeeper的Java客户端&#xff1f;第一部分&#xff1a;官方推荐——Curator1.1 Curator是什么&#xff1f;1.2 Curator的特点1.3 Curator的使用示例1.4 Curator的优缺点第二部分&#xff1a…

作者头像 李华
网站建设 2026/5/11 1:25:38

选它还是它?Chubby与ZooKeeper深度对比

文章目录Chubby 是什么&#xff1f;和 ZooKeeper 比&#xff0c;你觉得怎么看待它们&#xff1f;一、Chubby 是什么&#xff1f;1. Chubby 的设计理念2. Chubby 的核心功能3. Chubby 的优缺点优点&#xff1a;缺点&#xff1a;二、ZooKeeper 是什么&#xff1f;1. ZooKeeper 的…

作者头像 李华
网站建设 2026/5/11 9:18:09

2024年WPS365版-模拟训练系统-中级模拟二

2024年WPS365版-模拟训练系统-中级模拟二 单选题 1/33 在 WPS 文档窗口中&#xff0c;要应用一个已有的样式&#xff0c;先选定要应用样式的内容&#xff0c;然后&#xff08;&#xff09;。 A、单击【插入】选项卡中的【样式】按钮 B、单击【开始】选项卡中的【格式化】按钮 C…

作者头像 李华
网站建设 2026/5/11 9:19:15

揭秘原子操作:Java并发编程的高效技巧

文章目录 揭秘原子操作&#xff1a;Java并发编程的高效技巧一、原子操作的基本概念&#xff1a;什么是原子操作&#xff1f;原子操作的特性 二、从JVM层面理解原子操作内存屏障&#xff1a;原子操作的幕后英雄多核处理器的挑战 三、Java中的原子操作&#xff1a;从理论到实践为…

作者头像 李华
网站建设 2026/5/11 9:18:40

AssetStudio完整指南:Unity资源提取与管理的终极解决方案

AssetStudio完整指南&#xff1a;Unity资源提取与管理的终极解决方案 【免费下载链接】AssetStudio AssetStudio is a tool for exploring, extracting and exporting assets and assetbundles. 项目地址: https://gitcode.com/gh_mirrors/as/AssetStudio AssetStudio作…

作者头像 李华
网站建设 2026/5/10 11:19:29

突破百度网盘限速困境:三大开源替代方案深度评测

突破百度网盘限速困境&#xff1a;三大开源替代方案深度评测 【免费下载链接】baidupcs-web 项目地址: https://gitcode.com/gh_mirrors/ba/baidupcs-web 还在为百度网盘的龟速下载而抓狂吗&#xff1f;当官方客户端将你的宽带限制在几十KB/s时&#xff0c;是时候考虑更…

作者头像 李华