当前位置: 首页 > news >正文

金融投资网站模板凡科建站

金融投资网站模板,凡科建站,中国建设人力资源网官网,国外网站建设素材这篇文章我们将结合主币种设置以及收支记录实现切换主币种后重新计算以前记录的转换后的金额。那么,为什么要在切换主币种后要重新计算转换后的金额呢?有以下两个原因: 统一的币种,方便我们统计数据方便用户按照当地的币种查看收…

这篇文章我们将结合主币种设置以及收支记录实现切换主币种后重新计算以前记录的转换后的金额。那么,为什么要在切换主币种后要重新计算转换后的金额呢?有以下两个原因:

  1. 统一的币种,方便我们统计数据
  2. 方便用户按照当地的币种查看收支

下面我们就一起来实现吧。

一、实现逻辑

我们先来看一下要实现这个功能所需要的数据:

  1. 新的主币种
  2. 转换前币种
  3. 转换前金额
    接着我们一起把实现的思路写出来。首先我们要修改主币种配置,将旧的主币种替换成新的主币种,主币种配置修改成后,我们会利用消息队列发送一条主币种修改通知,负责重新计算转换后的金额的代码订阅这个通知,当它收到通知后就开始执行重新计算记录转换后的金额。负责重新计算转换后的金额的代码会先去查询当前用户全部记录,然后对账本中每条记录进行重新计算转换后的金额,最后将修改结果更新到数据库。

二、实现

我们根据上一小节的思路,先自己实现切换主币种的全部功能,然后把自己的代码和下面的代码核对一下,看看哪里不一样。这里提醒一下,我们订阅主币种修改通知的代码应放在RabbitMQBackgroundService类中。

2.1 修改主币种

ConfigController

/// <summary>
/// 更新用户配置
/// </summary>
/// <param name="configViewModel"></param>
/// <returns></returns>
[HttpPut]
[Route("Update")]
public ActionResult<ResponseData<bool>> Update([FromBody] ConfigViewModel configViewModel)
{try{string userId = GetUserId();bool isExist = _configServer.IsExist(userId, configViewModel.Id);if (!isExist){return Ok(new ResponseData<bool>(HttpStatusCode.NotFound, "用户配置不存在"));}_configServer.Update(userId, configViewModel.Id, configViewModel.Value);//如果切换的是主币种,那么就将以前的所有金额全部转换成新的主币种的金额if (configViewModel.ConfigTypeEnum == ConfigTypeEnum.Currency){_ = _rabbitMqPublisher.Publish<MainCurrency>("UpdateConversionAmount", "UpdateConversionAmount",new MainCurrency(){UserId = userId,Currency = configViewModel.Value});}return Ok(new ResponseData<bool>(HttpStatusCode.OK, data: true));}catch (Exception ex){return Ok(new ResponseData<bool>(HttpStatusCode.InternalServerError, "服务器异常"));}
}

这段代码的作用是更新用户配置,并在特定条件下触发与主币种切换相关的业务逻辑。首先,代码通过 GetUserId() 方法获取当前操作用户的唯一标识符 userId。随后,通过 _configServer.IsExist 方法检查用户配置是否存在。如果配置不存在,返回包含 NotFound 状态的响应,提示“用户配置不存在”。如果配置存在,调用 _configServer.Update 方法,更新指定的配置值 configViewModel.Value。接着,代码进一步判断 configViewModel.ConfigTypeEnum 是否为 Currency 类型,即当前更新的配置是否为主币种。当更新的配置是主币种时,通过 _rabbitMqPublisher.Publish 方法向消息队列发送一条 UpdateConversionAmount 消息,其中包含用户 Id 和新的主币种Id。这一步的目的是通知其他系统或模块,执行与主币种切换相关的金额转换逻辑。

2.2 重新计算转换后的金额

RabbitMQBackgroundService

//more codeawait _subscriberService.SubscribeAsync<MainCurrency>("UpdateConversionAmount", "UpdateConversionAmount",
async (mainCurrency) =>
{//1.获取所有收支记录var recordService = _serviceProvider.GetRequiredService<IIncomeExpenditureRecordServer>();var records = recordService.QueryByUserId(mainCurrency.UserId);//2.将所有记录的金额转换为新的主币种(记录中的币种转换为新的主币种)var currencyServer = _serviceProvider.GetRequiredService<ICurrencyServer>();var exchangeRateRecordServer = _serviceProvider.GetRequiredService<IExchangeRateRecordServer>();Currency? query = currencyServer.Query( mainCurrency.Currency);if (query == null){return;}for (int i = 0; i < records.Count; i++){var record = records[i];var currency = record.Currency;//获取记录币种和主币种的汇率ExchangeRateRecord? exchangeRateRecord =exchangeRateRecordServer.Query($"{query.Abbreviation}_{currency.Abbreviation}");if (exchangeRateRecord != null)record.AfterAmount = exchangeRateRecord.ExchangeRate * record.BeforAmount;}//3.更新所有记录recordService.UpdateRecord(records);
});//more code

这段代码实现了一个异步消息订阅和处理的逻辑,用于在主币种发生变更时更新所有收支记录的金额。代码逻辑通过订阅消息队列中的 UpdateConversionAmount 主题来触发。 核心流程是:通过 _subscriberService.SubscribeAsync 方法订阅名为 UpdateConversionAmount 的消息,并注册一个异步处理函数。在处理函数中,首先从依赖注入容器中获取 IIncomeExpenditureRecordServer 服务,查询出指定用户的所有收支记录。接着,使用 ICurrencyServer 查询新的主币种信息,确保其存在;然后通过 IExchangeRateRecordServer 获取当前记录的币种和新的主币种之间的汇率。如果汇率数据存在,则将记录中的金额 (BeforAmount) 转换为以新的主币种为单位的金额 (AfterAmount)。最后,通过 recordService.UpdateRecord 将更新后的记录批量保存到数据库中。

三、总结

通过主币种切换的业务场景,探讨了如何在用户更改主币种配置后重新计算历史收支记录的转换金额。这一功能的实现基于两个核心需求:统一币种便于统计数据,以及方便用户按照本地币种查看收支信息。实现过程中,首先修改主币种配置,当用户设置新的主币种后,系统通过消息队列发送变更通知。相关处理逻辑通过 RabbitMQBackgroundService 订阅该通知,触发重新计算金额的操作。具体流程包括:查询当前用户的所有收支记录,获取新的主币种和原币种之间的汇率,并根据汇率计算每条记录的转换金额,最后更新数据库中的记录。
该方案采用分层设计和异步消息机制,将主币种的配置管理与金额转换逻辑解耦,提升了系统的可扩展性和维护性。整体流程清晰,代码实现规范,为类似场景的开发提供了良好的参考。

http://www.ds6.com.cn/news/118256.html

相关文章:

  • 济南怎样做网站推广常州seo
  • php英文商城网站建设网络广告图片
  • 一个空间做两个网站平台seo
  • 摩洛哥vs葡萄牙直播网站优化外包公司
  • 自动链接 wordpressseo技术306
  • 电子商务网站开发与建设试卷网络营销策略分析方法
  • 做网站系统具体步骤推广普通话宣传语100字
  • 如何鉴别建设银行网站真伪购物链接
  • 哪个网站能看到医生做的全部手术无锡网站seo顾问
  • 长沙做网站工作室企业网站怎么推广
  • wordpress右键插件百度网站排名关键词整站优化
  • 网站建设的什么是开发实施注意什么合肥网站快速优化排名
  • 梅州做网站多少钱珠海seo排名收费
  • 帮企网站建设代运营整站优化排名
  • 海北高端网站建设价格正规的推文平台
  • wordpress前端发布主题seo教程免费
  • 宁波医院通网站建设网络营销软件推广
  • 移动端响应式网站怎么做游戏推广员骗局
  • 创意网站建设设计公司网络推广员要怎么做
  • 建立读音西安企业网站seo
  • 长春网站建设硕成传媒个人网站备案
  • 深圳网站建设公司服务商seo引擎
  • 青岛网站开发公司电话免费行情软件网站大全
  • 遵义网站建设排名前十的大学
  • 河西做网站的公司杭州百度推广公司有几家
  • 徐州网站开发公司北京网络营销推广
  • 如何做国外的网站2345浏览器导航页
  • 做公众号封面图的网站广州 竞价托管
  • wordpress托管站点seo发外链的网站
  • 重庆沙坪坝企业网站建设联系电话百度seo策略