Esempio n. 1
0
        /// <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;
            }
        }
Esempio n. 2
0
        /// <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));
            }
        }