/// <summary> /// 矿机产币和分润 /// </summary> private void RunCloudMinerServer() { //处查询矿机产币比例 DataTable dtCloudMinerManufacture = _cloudMinerDal.QueryCloudMinerManufacture(); IList <CloudMinerManufactureModelResult> cloudMinerManufactureModelResults = ModelConvertHelper <CloudMinerManufactureModelResult> .ConvertToModel(dtCloudMinerManufacture); //查询运行中的矿机 DataTable dtRuningCloudMiner = _userCloudMinerDal.QueryRuningCloudMiner(); if (dtRuningCloudMiner.Rows.Count <= 0) { LogHelper.warn("云矿机运行:矿机数量为空" + DateTime.Now); return; } IList <RunCloudMinerModel> runCloudMinerModels = ModelConvertHelper <RunCloudMinerModel> .ConvertToModel(dtRuningCloudMiner); //获取VIP等级 DataTable dt = _vipInfoDal.QueryVipUrCloudminerDistribution(); IList <VipUrCloudminerDistribution> vipUrCloudminerDistributions = ModelConvertHelper <VipUrCloudminerDistribution> .ConvertToModel(dt); //查询每代分销比例 DataTable dtDistributionMechanism = _cloudMinerDistributionMechanismDal.QueryDistributionMechanism(); IList <DistributionMechanismCloudMinerModel> distributionMechanismCloudMinerModels = ModelConvertHelper <DistributionMechanismCloudMinerModel> .ConvertToModel(dtDistributionMechanism); //收款信息 List <TransactionPayDetail> borrowTransactions = new List <TransactionPayDetail>(); List <TransactionServerDal.PayCurrencyEntity> borrowInfoEntities = new List <TransactionServerDal.PayCurrencyEntity>(); List <TransactionPayDetail> dBorrowTransactions = new List <TransactionPayDetail>(); List <TransactionServerDal.PayCurrencyEntity> dBorrowInfoEntities = new List <TransactionServerDal.PayCurrencyEntity>(); //循环遍历在运行的云矿机 foreach (RunCloudMinerModel runCloudMinerModel in runCloudMinerModels) { _userCloudMinerDal.RunUserCloudMiner(runCloudMinerModel.Id); if (runCloudMinerModel.ProductionCount == 149) { _userCloudMinerDal.UpdateUserCloudMinerState(runCloudMinerModel.Id, "1"); } DateTime buyDateTime; try { buyDateTime = Convert.ToDateTime(runCloudMinerModel.BuyTime); } catch (Exception) { continue; } int runDays = (DateTime.Now.Date - buyDateTime.Date).Days; if (runCloudMinerModel.ProductionCycle == runDays + 1) { _userCloudMinerDal.UpdateUserCloudMinerState(runCloudMinerModel.Id, "1"); } if (runCloudMinerModel.ProductionCycle <= runDays) { _userCloudMinerDal.UpdateUserCloudMinerState(runCloudMinerModel.Id, "1"); continue; } #region 产币 borrowTransactions.Clear(); borrowInfoEntities.Clear(); //循环遍历云矿机产币比例(针对拥有者) foreach (var cloudMinerModel in cloudMinerManufactureModelResults.Where(n => n.CommodityId == runCloudMinerModel.CommodityId)) { if (cloudMinerModel.Amount <= 0) { continue; } TransactionPayDetail borrowTransaction = new TransactionPayDetail(); borrowTransaction.CurrencyId = cloudMinerModel.CurrencyId; borrowTransaction.Amount = cloudMinerModel.Amount * (runCloudMinerModel.ProductionAmount / runCloudMinerModel.ProductionCycle); borrowTransactions.Add(borrowTransaction); TransactionServerDal.PayCurrencyEntity borrowInfoEntity = new TransactionServerDal.PayCurrencyEntity(); borrowInfoEntity.CurrencyId = borrowTransaction.CurrencyId; borrowInfoEntity.Amount = borrowTransaction.Amount; borrowInfoEntities.Add(borrowInfoEntity); } int recordId = _cloudMinerProductionDal.InsertCloudMinerProductionRecord(runCloudMinerModel.Id, runCloudMinerModel.CommodityId, runCloudMinerModel.UserId, borrowInfoEntities, runCloudMinerModel.ProductionCount + 1); TransactionService.AddCloudMinerProduce("03", runCloudMinerModel.UserId, recordId, borrowTransactions); _productionAmount += borrowTransactions.Sum(n => n.Amount); #endregion #region 分销 int fansId = runCloudMinerModel.UserId; //循环遍历云矿机拨出比例(针对分销者) foreach (var distributionMechanismModel in distributionMechanismCloudMinerModels) { try { try { dBorrowTransactions.Clear(); dBorrowInfoEntities.Clear(); fansId = Convert.ToInt32(_fansDal.QueryParent(fansId)); if (fansId <= 0) { break; } #region 判断用户当前真实等级是否满足分销等级 RunCloudMinerModel parentRunCloudMinerModel = runCloudMinerModels.FirstOrDefault(n => n.UserId == fansId); if (parentRunCloudMinerModel == null) { continue; } int userRealRank = -1; foreach (var item in vipUrCloudminerDistributions) { if (item.CommodityId == parentRunCloudMinerModel.CommodityId) { userRealRank = item.Rank; break; } } if (userRealRank == -1) { continue; } if (distributionMechanismModel.Rank > userRealRank) { continue; } #endregion foreach (var borrowTransaction in borrowTransactions) { TransactionPayDetail dBorrowTransaction = new TransactionPayDetail(); dBorrowTransaction.CurrencyId = borrowTransaction.CurrencyId; dBorrowTransaction.Amount = borrowTransaction.Amount * distributionMechanismModel.Proportion; dBorrowTransactions.Add(dBorrowTransaction); TransactionServerDal.PayCurrencyEntity tempBorrowInfoEntity = new TransactionServerDal.PayCurrencyEntity(); tempBorrowInfoEntity.CurrencyId = borrowTransaction.CurrencyId; tempBorrowInfoEntity.Amount = borrowTransaction.Amount * distributionMechanismModel.Proportion; dBorrowInfoEntities.Add(tempBorrowInfoEntity); } int cmdrId = _cloudMinerDistributionMechanismDal.InsertCloudMinerDistributionRecord(runCloudMinerModel.Id, runCloudMinerModel.CommodityId, fansId, dBorrowInfoEntities); TransactionService.AddCloudMinerProduceDistribution("04", fansId, cmdrId, dBorrowTransactions); _distributionAmount += dBorrowTransactions.Sum(n => n.Amount); } catch (Exception exception) { LogHelper.error(exception.Message); break; } } catch (Exception exception) { LogHelper.error(exception.Message); break; } } #endregion } State = "2"; }