• 项目中涉及到金额操作时,应注意的问题


    项目中的金额时敏感数据,不能有半点差错,在操作金额表时也需要采用一些必要的措施,防止并发时金额更新出错,更新延迟等问题。

    方法一:

    给当前操作金额业务加锁

    public static readonly object lockObj = new object();
    
    lock (lockObj)
    {
         业务实现  
    }

    方法二:

    金额表中加入Guid字段以标识每次操作,确保每次更新的唯一性。

    操作时避免直接将字段赋值为金额,采用当前金额+/-操作金额的方式,减少因金额失误导致的问题。

    同时,应遵循一个原则,用户余额发生变动的地方则必须加上金额变动流水。变动前金额和变动后金额的记录,以便日后查账

    //如果更新失败,提示用户重试
    //更新金额时 需要更新Guid 以保证唯一操作
    var sql = string.Format("update account set Balance =Balance-{0},Freeze =Freeze+{0},Guid='{1}' where Guid ='{2}' and id ={3} ", entity.Money, Guid.NewGuid(), account.Guid, account.Id);
    var excuteRes = _dbContext.ExecuteSqlCommand(sql);
    
    if (excuteRes == 0)
    {
    throw new Exception(_localizationService.GetResource("Admin.Account.Withdraw.WithdrawFailedTryAgain"));
         }
  • 相关阅读:
    开启和禁用Wifi热点命令
    C# IE代理操作
    Asp.net QueryString批量插入和更新
    Asp.net 插入或更改查询字符串
    C#如何判断线程池中所有的线程是否已经完成之Demo
    mysql 安装及设置密码
    c# iis回收应用程序池
    判断是否为移动端
    rtmp,m3u8 直播地址
    byte数组转换为字符串
  • 原文地址:https://www.cnblogs.com/opts/p/9178138.html
Copyright © 2020-2023  润新知