/// <summary> /// 启动结算 /// </summary> /// <param name="Name">添加的操作名</param> /// <param name="action">添加的操作方法</param> public void StartSettle(PSettle Settle) { SettleRecord NewSettleRecord = new SettleRecord(Settle); lock (SettleRecordStack) { SettleRecordStack.Push(NewSettleRecord); } PLogger.Log("开始结算 " + Settle.Name); NewSettleRecord.Settle.SettleAction(Game); //NewSettleRecord.ActionThread.Start(); //PThread.WaitUntil(() => NewSettleRecord.Finished); PLogger.Log("终止结算 " + Settle.Name); //if (NewSettleRecord.ActionThread.IsAlive) { // NewSettleRecord.ActionThread.Abort(); //} lock (SettleRecordStack) { if (SettleRecordStack.Count > 0 && NewSettleRecord.Equals(SettleRecordStack.Peek())) { SettleRecordStack.Pop(); } } }
/// <summary> /// 周结算 /// </summary> public void Send(int type) { using (var tran = BeginTransaction) { try { Xml_Site config = DB.XmlConfig.XmlSite; //周结算,收益 string[] typeName = new string[] { "直推一代奖", "直推二代奖", "互助奖", }; if (type == Enums.SettleType.月计算.GetHashCode()) { typeName = new string[] { "领导奖", //"师长分红", //"社区店分红", "重消奖", }; } //1.添加记录 SettleRecord record = new SettleRecord(); record.CreateTime = DateTime.Now; record.Type = type; //2.处理到账 var list = DB.Fin_Info.Where(q => typeName.Contains(q.TypeName) && q.IsSettlement != true); foreach (var item in list) { //到账处理 Member_Info member = DB.Member_Info.FindEntity(item.MemberId); member.Commission += item.RealAmount; member.CommissionSum += item.RealAmount; member.ShopCoins += item.Poundage ?? 0; member.CommissionBan += item.Amount ?? 0; //如果操作1万,赠送路由积分 if (member.CommissionBan >= config.TourScoresStep) { member.CommissionBan -= config.TourScoresStep; member.TourScores += config.TourScores; } DB.Member_Info.Update(member); //修改记录状态 item.IsSettlement = true; item.SettlementTime = DateTime.Now; DB.Fin_Info.Update(item); record.AllAmount += item.Amount ?? 0; record.AllCoins += item.Poundage ?? 0; record.AllCommission += item.RealAmount ?? 0; record.AllCount++; } if (base.Insert(record) == false) { throw new Exception("添加记录失败"); } //提交处理 tran.Complete(); } catch (Exception ex) { DB.Rollback(); throw ex; } } }