/// <summary> /// 检验所有的assetIds /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private async void btn_checkAll_Click(object sender, EventArgs e) { //全部检验数据 try { this.btn_checkAll.Enabled = false; //获取所有的AssetIds List <string> assetIds = this.GetAllCheckAssetIds(); if (assetIds.Count == 0) { this.btn_checkAll.Enabled = true; //获取所有的assetids异常 MessageBox.Show("获取所有资产Id异常!"); } //获取所有的assetInfo List <OnSellAssetResponse> onSellAssetResponses = await this.GetAllAssetCheckInfos(assetIds); if (onSellAssetResponses.Count == 0 || onSellAssetResponses.Count != assetIds.Count) { this.btn_checkAll.Enabled = true; //获取所有的assetids异常 MessageBox.Show("获取所有资产信息异常!"); } this.txb_DemandCheckAssetIdNums.Text = assetIds.Count.ToString(); //并发去检验数据是否正常 for (int i = 0; i < this.loadAppSettings.CheckAssetInfoThreadNums; i++) { Thread thread = new Thread(async() => { while (true) { string assetId = string.Empty; OnSellAssetResponse onSellAssetResponse = null; if (assetIds.Count > 0) { lock (this.objLock) { if (assetIds.Count > 0 && onSellAssetResponses.Count > 0) { assetId = assetIds[0]; onSellAssetResponse = onSellAssetResponses[0]; //remove assetIds.Remove(assetId); //remove onSellAssetResponses.Remove(onSellAssetResponse); } } //执行 Tuple <bool, int, string> result = await this.CheckOneDiskAssetInfo(assetId, onSellAssetResponse); //显示数据 switch (result.Item2) { case 0: //Success this.UpdateTxtInfo(this.txb_checkSuccess); break; case 1: this.UpdateTxtInfo(this.txb_checkFailed); break; case 2: this.UpdateTxtInfo(this.txb_checkError); break; } //在大文本框中显示错误信息 lock (this.objLock) { this.txb_ShowMsgAll.AppendText($"AssetId:{result.Item1} {result.Item3}---{DateTime.UtcNow.ToChinaStandardTime()}"); this.txb_ShowMsgAll.ScrollToCaret(); } } } }); thread.IsBackground = true; thread.Start(); } Thread threadShow = new Thread(() => { while (true) { if (assetIds.Count == 0) { Thread.Sleep(2000); break; } //如果没跑完就停止5s Thread.Sleep(2000); } this.btn_checkAll.Enabled = true; }); threadShow.IsBackground = true; threadShow.Start(); } catch (Exception ex) { MessageBox.Show("发生了一个错误:" + ex.Message); Logger.LoadData(@"CheckDiskAsset\Error.txt", ex.Message + "----" + ex.StackTrace); this.btn_checkAll.Enabled = true; } }
/// <summary> /// 检验磁盘资产信息 /// </summary> /// <param name="assetId"></param> /// <param name="sellAssetResponse"></param> /// <returns></returns> private async Task <Tuple <bool, int, string> > CheckOneDiskAssetInfo(string assetId, OnSellAssetResponse sellAssetResponse) { try { //获取本金之和 AssetUserRelationResponse assetUserRelationResponse = await this.GetAssetUserInfo(assetId); if (assetUserRelationResponse == null) { Logger.Logw(assetId + "错误信息:获取资产用户比例数据异常或者该资产用户比例关系未load到disk中", 4); return(Tuple.Create(false, (int)CheckStatus.CheckError, "获取资产用户比例数据异常或者该资产用户比例关系未load到disk中")); } //获取数据 long originalTotalPrincipal = assetUserRelationResponse.SumCapital; //计算数据 long computerTotalPrincipal = assetUserRelationResponse.UserAssetRatioDtos.Sum(u => u.Capital); if (originalTotalPrincipal != computerTotalPrincipal) { Logger.Logw(assetId + "错误信息:该资产的本金之和SumCapital与从资产用户关系比例Sum出来的本金之和不正确", 4); return(Tuple.Create(false, (int)CheckStatus.CheckFail, "该资产的本金之和SumCapital与从资产用户关系比例Sum出来的本金之和不正确")); } //比较资产的总融资金额-本金之和==剩余融资金额 if (sellAssetResponse == null) { Logger.Logw(assetId + "错误信息:获取资产信息异常", 4); return(Tuple.Create(false, (int)CheckStatus.CheckError, "获取资产信息异常")); } if (sellAssetResponse.CalculatedAmount - originalTotalPrincipal != sellAssetResponse.RemainderTotal) { Logger.Logw(assetId + "错误信息:资产的总融资金额-本金之和!=剩余融资金额", 4); return(Tuple.Create(false, (int)CheckStatus.CheckFail, "验证完毕,该资产的总融资金额-本金之和 != 剩余融资金额")); } return(Tuple.Create(true, (int)CheckStatus.CheckSuccess, "验证完毕,该资产数据无异常!")); } catch (Exception ex) { Logger.LoadData(@"CheckDiskAsset\Error.txt", $"错误信息:{ex.Message}"); return(Tuple.Create(false, (int)CheckStatus.CheckError, ex.Message)); } }