news 2026/7/29 12:46:48

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/7/30 1:49:52

阴阳师自动化脚本终极指南:3步实现游戏全自动操作

阴阳师自动化脚本终极指南&#xff1a;3步实现游戏全自动操作 【免费下载链接】OnmyojiAutoScript Onmyoji Auto Script | 阴阳师脚本 项目地址: https://gitcode.com/gh_mirrors/on/OnmyojiAutoScript 还在为重复的阴阳师日常任务而烦恼吗&#xff1f;OnmyojiAutoScrip…

作者头像 李华
网站建设 2026/7/29 4:03:19

TS-Loader 源码解析与自定义 Webpack Loader 开发指南

TS-Loader 源码解析与自定义 Webpack Loader 开发指南 1. TS-Loader 源码深度解析 1.1 整体架构与核心模块 TS-Loader 是 Webpack 生态中用于处理 TypeScript 文件的核心 loader。其源码结构主要包含以下几个关键部分&#xff1a; 入口文件 (index.js)&#xff1a;导出一个 pit…

作者头像 李华
网站建设 2026/7/29 1:10:27

【MySQL XA规范】

MySQL XA实现分布式事务的原理与应用 XA规范与DTP模型 XA规范定义了分布式事务处理&#xff08;DTP&#xff09;模型中事务管理器&#xff08;TM&#xff09;与资源管理器&#xff08;RM&#xff09;的交互方式。DTP模型包含三个核心组件&#xff1a; 应用程序&#xff08;AP&a…

作者头像 李华
网站建设 2026/7/28 23:47:29

25年最新java面试题大全(整理版)

身为一个7年的Java开发&#xff0c;我发现今年金九银十来面试的后端都有几个相似的缺点&#xff0c;往往导致他们到嘴的offer悄然飞走&#xff0c;还是需要引以为戒&#xff0c;不然机会与时间都在浪费&#xff01;&#xff01; 1. Java核心掌握不牢 对多线程&#xff08;线程…

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

TranslucentTB安装修复指南:3步彻底解决任务栏透明化难题

想要让Windows任务栏焕然一新却屡屡碰壁&#xff1f;TranslucentTB这款轻量级工具能让你的任务栏实现透明、模糊、亚克力等多种惊艳效果&#xff0c;但安装过程却让不少用户头疼不已。别担心&#xff0c;本文为你准备了从诊断到修复的完整方案&#xff0c;让你的桌面瞬间颜值爆…

作者头像 李华
网站建设 2026/7/26 21:08:04

CAJ文档解密终极指南:3步突破时间限制

CAJ文档解密终极指南&#xff1a;3步突破时间限制 【免费下载链接】ScienceDecrypting 项目地址: https://gitcode.com/gh_mirrors/sc/ScienceDecrypting 还在为科学文库、国家标准数据库下载的文档有时间限制而烦恼吗&#xff1f;想要永久保存这些重要资料吗&#xff…

作者头像 李华