Beispiel #1
0
 /// <summary>
 ///     添加修改后的信息
 /// </summary>
 /// <param name="updateUserAssetRatioInfos"></param>
 /// <returns></returns>
 private bool InsertAssetUserRatioInfo(UpdateUserAssetRatioInfos updateUserAssetRatioInfos)
 {
     try
     {
         //判断是否存在
         string sqlQuery = $"select count(*) from UpdateAssetUserRatioInfo where UserAssetRatioId='{updateUserAssetRatioInfos.UserAssetRatioId}'";
         object count    = SqlHelper.SqlHelper.ExecuteScalar(sqlQuery);
         if (count == null)
         {
             return(false);
         }
         if ((int)count > 0)
         {
             return(true);
         }
         string sql = $"insert into UpdateAssetUserRatioInfo(UserId, DealAmount, AssetId,UserAssetRatioId,Capital,Numerator,OriginalUserAssetRatioId,Denominator)values('{updateUserAssetRatioInfos.UserId}',{updateUserAssetRatioInfos.DealAmount},'{updateUserAssetRatioInfos.AssetId}','{updateUserAssetRatioInfos.UserAssetRatioId}',{updateUserAssetRatioInfos.Capital},{updateUserAssetRatioInfos.Numerator},'{updateUserAssetRatioInfos.OriginalUserAssetRatioId}',{updateUserAssetRatioInfos.Denominator})";
         return(SqlHelper.SqlHelper.ExecuteNoneQuery(sql) > 0);
     }
     catch (Exception e)
     {
         //记录失败插入的数据
         Logger.LoadData(@"UD_UpdateAssetUserRation\UpdateUserAssetInfoError_" + updateUserAssetRatioInfos.UserAssetRatioId + ".txt", updateUserAssetRatioInfos.ToJson());
         return(false);
     }
 }
Beispiel #2
0
        private async void btn_HandleThings_Click(object sender, EventArgs e)
        {
            //执行数量
            try
            {
                ShowUpdateAssetUserInfo updateAssetUserInfo = new ShowUpdateAssetUserInfo();
                DateTime dtDkTime      = Convert.ToDateTime(this.txb_updateTime.Text.Trim());
                string   tbNameByUser  = ConfigurationManager.AppSettings["AssetUserAssetRatios"];
                string   tbNameByAsset = ConfigurationManager.AppSettings["AssetUserRelation"];
                //获取需要执行的数据
                this.lbl_showmsg.Text         = "正在准备数据......";
                this.btn_HandleThings.Enabled = false;
                List <string>            userInfos = this.txb_handleUserIds.Text.Trim().Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries).ToList();
                List <UserReleaseAmount> listUserReleaseAmounts = userInfos.Select(t => t.Split(',')).Select(userInfo => new UserReleaseAmount {
                    Amount = Convert.ToInt64(userInfo[1]), UserId = userInfo[0]
                }).ToList();
                //List<string> userIds = listUserReleaseAmounts.Select(x => x.UserId).ToList();
                //获取赎回订单
                //List<string> redemOrderIds = new List<string>();
                //修改所有的赎回订单数量 //备份修改之前的所有赎回订单数据
                //int count = 0;
                //List<UserRedemptionInfo> listRedemptionInfos = this.GetUserRedemptionOrders(userIds).ToList();
                //updateAssetUserInfo.RedemptionTotalNums = listRedemptionInfos.Count;
                //this.lbl_showmsg.Text = "开始修改这批用户的所有赎回订单数据,需执行数量为" + listRedemptionInfos.Count;
                //foreach (UserRedemptionInfo itemRedemption in listRedemptionInfos)
                //{
                //    bool redeemResult = await this.UpdateYemRedeemInfo(itemRedemption.UserId, itemRedemption.OrderId, itemRedemption.AlreadyDealtAmount, 0, 0, 1);
                //    if (redeemResult)
                //    {
                //        count = count + 1;
                //    }
                //}
                //updateAssetUserInfo.RedemptionSuccessNums = count;
                //this.lbl_showmsg.Text = "该次修改成功的赎回订单数据为" + count;
                //获取所有的资产数据
                List <OnSellAssetDto> onSellAssetInfos = this.GetOnSellAssetInfos();
                //修改比例关系并且插入数据库 //备份之前的比例关系
                this.lbl_showmsg.Text = "开始修改比例以及插入信息数据......";
                ConcurrentBag <int> concurrentBag = new ConcurrentBag <int>();
                //显示结果
                //Dictionary<string, int> dicInfos = new Dictionary<string, int>();
                int countDo = listUserReleaseAmounts.Count;
                this.txb_UserNums.Text = countDo.ToString();
                ConcurrentBag <UpdateUserAssetRatio> concurrentBagUpdateInfos = new ConcurrentBag <UpdateUserAssetRatio>();
                List <Task> listTasks = new List <Task>();
                for (int i = 0; i < this.threadNums; i++)
                {
                    Task task = Task.Run(async() =>
                    {
                        while (listUserReleaseAmounts.Count > 0)
                        {
                            UserReleaseAmount userReleaseAmount = null;
                            int nums = 0;
                            lock (this.objLock)
                            {
                                if (listUserReleaseAmounts.Count > 0)
                                {
                                    userReleaseAmount = listUserReleaseAmounts[0];
                                    if (userReleaseAmount != null)
                                    {
                                        //dicInfos.Add(userReleaseAmount.UserId, 0); //显示信息
                                        listUserReleaseAmounts.Remove(userReleaseAmount);
                                    }
                                }
                            }
                            if (userReleaseAmount != null)
                            {
                                //执行
                                string userId     = userReleaseAmount.UserId;
                                long redeemAmount = userReleaseAmount.Amount; //赎回金额
                                //拉取所有的用户比例关系
                                List <UserAssetRatio> userAssetRatios = await this.GetSortUserAssetRatios(userId, tbNameByUser);
                                //拉取所有的已经成功的userassetRatioids
                                //List<string> successUserAssetRatioIds = this.redisHelperSpecial.GetRedisSuccessInsertUserAssetRatioIdsAsync(userId);
                                //userAssetRatios.RemoveAll(x => successUserAssetRatioIds.Contains(x.UserAssetRatioId));
                                Logger.LoadData(@"UD_log\logInfo" + Guid.NewGuid().ToGuidString() + ".txt", "需要执行的数量:" + userAssetRatios.Count);
                                foreach (UserAssetRatio userAssetRatio in userAssetRatios)
                                {
                                    if (redeemAmount == 0)
                                    {
                                        break;
                                    }
                                    List <UpdateUserAssetRatioInfos> addUserAssetRatioInfoses = new List <UpdateUserAssetRatioInfos>();
                                    //执行操作
                                    OnSellAssetDto onSellItem = onSellAssetInfos.FirstOrDefault(p => p.OnSellAssetId == userAssetRatio.AssetId);
                                    if (onSellItem == null)
                                    {
                                        continue;
                                    }
                                    long userPresentValue = this.GetUserPrentValue1(userAssetRatio, dtDkTime);
                                    if (userPresentValue > 0)
                                    {
                                        if (redeemAmount >= userPresentValue)
                                        {
                                            redeemAmount -= userPresentValue;
                                            addUserAssetRatioInfoses.Add(new UpdateUserAssetRatioInfos //给新用户
                                            {
                                                UserId                   = userAssetRatio.UserId,
                                                AssetId                  = userAssetRatio.AssetId,
                                                DealAmount               = userPresentValue,
                                                Capital                  = userAssetRatio.Capital,
                                                UserAssetRatioId         = userAssetRatio.UserAssetRatioId,
                                                OriginalUserAssetRatioId = userAssetRatio.OriginalUserAssetRatioId,
                                                Denominator              = onSellItem.PresentValue,
                                                Numerator                = userPresentValue //待确认
                                            });
                                            //修改部分东西
                                            userAssetRatio.IsDeleted   = true;
                                            userAssetRatio.Reserve     = "1";
                                            userAssetRatio.Denominator = onSellItem.PresentValue;
                                            //updateUserAssetRatioInfoses.Add(new ModifyUserAssetRatioRequest
                                            //{
                                            //    AssetId = userAssetRatio.AssetId,
                                            //    Capital = userAssetRatio.Capital,
                                            //    Denominator = onSellItem.PresentValue,
                                            //    Numerator = userAssetRatio.Numerator,
                                            //    IsInvestSuccess = userAssetRatio.IsInvestSuccess,
                                            //    IsNotifyTradingSuccess = userAssetRatio.IsNotifyTradingSuccess,
                                            //    IsReturned = userAssetRatio.IsReturned,
                                            //    Status = userAssetRatio.Status,
                                            //    UserAssetRatioId = userAssetRatio.UserAssetRatioId,
                                            //    UserId = userAssetRatio.UserId,
                                            //    IsDeleted = true,
                                            //    Reserve = "1",
                                            //    OriginalUserAssetRatioId = userAssetRatio.OriginalUserAssetRatioId
                                            //}); //老用户
                                        }
                                        else if (redeemAmount < userPresentValue)
                                        {
                                            //计算赎回本金
                                            long capital = this.GetCapital(redeemAmount, userPresentValue, userAssetRatio.Capital);

                                            addUserAssetRatioInfoses.Add(new UpdateUserAssetRatioInfos //给老用户
                                            {
                                                UserId                   = userAssetRatio.UserId,
                                                AssetId                  = userAssetRatio.AssetId,
                                                DealAmount               = redeemAmount,
                                                Capital                  = capital,
                                                UserAssetRatioId         = userAssetRatio.UserAssetRatioId,
                                                OriginalUserAssetRatioId = userAssetRatio.OriginalUserAssetRatioId,
                                                Denominator              = onSellItem.PresentValue,
                                                Numerator                = redeemAmount      //待确认
                                            });
                                            userAssetRatio.Capital               -= capital; //剩余本金
                                            userAssetRatio.Numerator              = userPresentValue - redeemAmount;
                                            userAssetRatio.Denominator            = onSellItem.PresentValue;
                                            userAssetRatio.Status                 = 2;
                                            userAssetRatio.IsReturned             = false;
                                            userAssetRatio.IsInvestSuccess        = true;
                                            userAssetRatio.IsNotifyTradingSuccess = true;
                                            userAssetRatio.Reserve                = "1";
                                            //updateUserAssetRatioInfoses.Add(new ModifyUserAssetRatioRequest
                                            //{
                                            //    AssetId = userAssetRatio.AssetId,
                                            //    Capital = userAssetRatio.Capital,
                                            //    Denominator = onSellItem.PresentValue,
                                            //    Numerator = userPresentValue - redeemAmount,
                                            //    IsInvestSuccess = true,
                                            //    IsNotifyTradingSuccess = true,
                                            //    IsReturned = false,
                                            //    Status = 2,
                                            //    UserAssetRatioId = userAssetRatio.UserAssetRatioId,
                                            //    UserId = userAssetRatio.UserId,
                                            //    IsDeleted = false,
                                            //    Reserve = "1",
                                            //    OriginalUserAssetRatioId = userAssetRatio.OriginalUserAssetRatioId
                                            //}); //老用户
                                            redeemAmount = 0;
                                        }
                                        //插入数据库及更新 addUserAssetRatioInfoses
                                        //修改Azure Table数据
                                        userAssetRatio.ETag      = DateTime.UtcNow.ToChinaStandardTime().UnixTimestamp().ToString();
                                        userAssetRatio.Timestamp = DateTimeOffset.UtcNow.ToLocalTime();
                                        //修改两张表中的数据 1.用户资产比例
                                        bool result1 = this.UpdateAssetUserRatioInfo(userAssetRatio, tbNameByUser);
                                        //2.资产用户比例
                                        userAssetRatio.PartitionKey = userAssetRatio.AssetId;
                                        userAssetRatio.RowKey       = userAssetRatio.UserId + "_" + userAssetRatio.UserAssetRatioId;
                                        bool result2 = this.UpdateAssetUserRatioInfo(userAssetRatio, tbNameByAsset);
                                        if (result2 && result1)
                                        {
                                            //数据库
                                            //数据库
                                            UpdateUserAssetRatioInfos addUserAssetRationInfo = addUserAssetRatioInfoses.FirstOrDefault(x => x.UserAssetRatioId == userAssetRatio.UserAssetRatioId);
                                            bool result = this.InsertAssetUserRatioInfo(addUserAssetRationInfo);
                                            if (result)
                                            {
                                                lock (this.objLock)
                                                {
                                                    nums = nums + 1;
                                                }
                                                //记下redis
                                                //await this.redisHelperSpecial.SetRedisSuccessInsertUserAssetRatioIdsAsync(userAssetRatio.UserAssetRatioId, userAssetRatio.UserId);
                                            }
                                        }
                                        //foreach (ModifyUserAssetRatioRequest model in updateUserAssetRatioInfoses)
                                        //{
                                        //    //修改比例
                                        //    bool modifyRatioResult = await this.ModifyUserAssetRatiosByDisk(model);
                                        //    if (modifyRatioResult)
                                        //    {
                                        //        //数据库
                                        //        UpdateUserAssetRatioInfos addUserAssetRationInfo = addUserAssetRatioInfoses.FirstOrDefault(x => x.UserAssetRatioId == model.UserAssetRatioId);
                                        //        bool result = this.InsertAssetUserRatioInfo(addUserAssetRationInfo);
                                        //        if (result)
                                        //        {
                                        //            lock (this.objLock)
                                        //            {
                                        //                nums = nums + 1;
                                        //            }
                                        //            //记下redis
                                        //            await this.redisHelperSpecial.SetRedisSuccessInsertUserAssetRatioIdsAsync(model.UserAssetRatioId, model.UserAssetRatioId);
                                        //        }
                                        //    }
                                        //}
                                    }
                                }
                                concurrentBagUpdateInfos.Add(new UpdateUserAssetRatio {
                                    SuccessNums = nums, TotalNums = userAssetRatios.Count, UserId = userId
                                });
                                concurrentBag.Add(0);
                                lock (this.objLock)
                                {
                                    this.txb_SuccessNums.Text = ((Convert.ToInt32(this.txb_SuccessNums.Text) + 1)).ToString();
                                }
                            }
                        }
                    });
                    listTasks.Add(task);
                }
                Task.WaitAll(listTasks.ToArray());
                updateAssetUserInfo.UdpateAssetUserInfos = concurrentBagUpdateInfos.ToList();
                //this.txb_SuccessNums.Text = ((Convert.ToInt32(this.txb_SuccessNums.Text)) + 1).ToString();
                //执行完毕
                //记下日志
                Logger.LoadData(@"UD_log\logInfo" + Guid.NewGuid().ToGuidString() + ".txt", updateAssetUserInfo.ToJson());
                this.btn_HandleThings.Enabled = true;
                this.lbl_showmsg.Text         = "全部执行完毕,请查看执行日志";
            }
            catch (Exception exception)
            {
                this.lbl_showmsg.Text         = "提示:发生一个错误" + exception.Message;
                this.btn_HandleThings.Enabled = true;
                Logger.LoadData(@"UD_Eoor\Error.txt", exception.Message + "-------------------" + exception.StackTrace);
            }
        }