/// <summary> /// 根据市场获取所有佣金组的实际项 /// </summary> /// <param name="specie">The specie.</param> /// <returns></returns> public IEnumerable<ConcreteCommission> GetConcreteCommission(LotterySpecies specie) { string sql = string.Format(@"select cc.* from tb_CommissionGroup cg join tb_ConcreteCommission cc on cc.GroupId=cg.GroupId where cg.{0}=@{0}", CommissionGroup.SPECIEID); return base.ExecuteList<ConcreteCommission>(sql, new SqlParameter(CommissionGroup.SPECIEID, (int)specie)); }
public MemberPackage GetMemberPackageBySpecie(User user, LotterySpecies specie) { string sql = string.Format(@"SELECT * FROM {0} WHERE {1}=@{1} AND {2}=@{2}", MemberPackage.TABLENAME, MemberPackage.USERID, MemberPackage.SPECIEID); return base.ExecuteModel<MemberPackage>(sql, new SqlParameter(MemberPackage.USERID, user.UserId), new SqlParameter(MemberPackage.SPECIEID, (int)specie)); }
/// <summary> /// 创建自动选码注单. /// </summary> /// <param name="user">The user.</param> /// <param name="specie">The specie.</param> /// <param name="companys">The companys.</param> /// <param name="wagers">The wagers.</param> /// <param name="nums">The nums.</param> /// <returns></returns> private IDictionary<BetSheet, IList<BetOrder>> BuildAutoElectionCodeOrder(User user, LotterySpecies specie, int[] companys, IList<KeyValuePair<PlayWay, decimal>> wagers, int[] nums) { PlayWay[] allowBetPlayWay = new[] { PlayWay.Head, PlayWay.Last, PlayWay.HeadAndLast, PlayWay.Roll }; List<BetItem> betList = new List<BetItem>(); var wagerItems = new List<WagerItem>(); foreach (var wager in wagers) { if (!allowBetPlayWay.Contains(wager.Key)) continue; var gpw = LotterySystem.Current.FindGamePlayWay(GameType.TwoDigital, wager.Key); wagerItems.Add(new WagerItem { GamePlayTypeId = gpw.Id, IsFullPermutation = false, Wager = wager.Value }); } nums.ForEach(num => { betList.Add(new BetItem { Num = num.ToString("D2"), CompanyList = companys, WargerList = wagerItems }); }); return base.BuildOrder(user, specie, betList, new Dictionary<string, object> { { "ISCON", LotterySystem.Current.AutoElectionCodeCommission > 0 } }); }
public CommissionGroup GetMemebersCommGroup(User member, LotterySpecies specie) { string sql = string.Format(@"select cg.* from tb_CommissionGroup cg join tb_MemberPackage mpa on mpa.GroupId=cg.GroupId where mpa.{0}=@{0} and mpa.{1}=@{1}", MemberPackage.USERID, MemberPackage.SPECIEID); return base.ExecuteModel<CommissionGroup>(sql, new SqlParameter(MemberPackage.USERID, member.UserId), new SqlParameter(MemberPackage.SPECIEID, (int)specie)); }
/// <summary> /// 根据用户和市场删除特定的佣金差 /// </summary> /// <param name="user">The user.</param> /// <param name="specie">The specie.</param> public void DeleteCommValues(User user, LotterySpecies specie) { string sql = string.Format(@"delete {0} where {1}=(select {3} from {2} where {4}=@{4} and {5}=@{5})", CommissionValue.TABLENAME, CommissionValue.COMMISSIONID, UserCommission.TABLENAME, UserCommission.COMMISSIONID, UserCommission.USERID, UserCommission.SPECIEID); base.ExecuteNonQuery(sql, new SqlParameter(UserCommission.USERID, user.UserId), new SqlParameter(UserCommission.SPECIEID, (int)specie)); }
/// <summary> /// 获取用户特定市场的佣金差 /// </summary> /// <param name="user">The user.</param> /// <param name="specie">The specie.</param> /// <returns></returns> public IEnumerable<CommissionValue> GetCommissionValue(User user, LotterySpecies specie) { string sql = string.Format(@"SELECT CV.* FROM {0} CV JOIN {1} UC on UC.{3}=cv.{2} where UC.{4}=@{4} and UC.{5}=@{5}", CommissionValue.TABLENAME, UserCommission.TABLENAME, CommissionValue.COMMISSIONID, UserCommission.COMMISSIONID, UserCommission.USERID, UserCommission.SPECIEID); return base.ExecuteList<CommissionValue>(sql, new SqlParameter(UserCommission.USERID, user.UserId), new SqlParameter(UserCommission.SPECIEID, (int)specie)); }
public IDictionary<BetSheet, IList<BetOrder>> BuildOrder(User user, LotterySpecies specie, IEnumerable<AutoBetItem> betList, IDictionary<string, object> parameters) { this._betResult = new BetResult(); BetResult returnResult = new Models.BetResult(); var todayLotteryCompany = TodayLotteryCompany.Instance.GetTodayCompany(); //获取今日开奖公司 var memberComm = CommManager.GetMemberCommissionInSession(user, specie); //获取会员的佣金 IDictionary<BetSheet, IList<BetOrder>> betSheetDic = new Dictionary<BetSheet, IList<BetOrder>>(); IDictionary<BetSheet, IList<BetOrder>> resultDic = new Dictionary<BetSheet, IList<BetOrder>>(); foreach (var betOrder in betList) { int[] nums; switch (betOrder.BetType) { case AutoBetType.TwelveZodiac: nums = LotterySystem.Current.TwelveZodiac; break; case AutoBetType.EvenEven: nums = LotterySystem.Current.EvenEven; break; case AutoBetType.EvenOdd: nums = LotterySystem.Current.EvenOdd; break; case AutoBetType.OddEven: nums = LotterySystem.Current.OddEven; break; case AutoBetType.OddOdd: nums = LotterySystem.Current.OddOdd; break; case AutoBetType.Small: nums = LotterySystem.Current.Small; break; case AutoBetType.Big: nums = LotterySystem.Current.Big; break; default: throw new InvalidDataException("不可到达,数据异常!"); } var sheet = BuildAutoElectionCodeOrder(user, specie, betOrder.CompanyList, betOrder.WagerList, nums); betSheetDic.AddRange(sheet); returnResult.Append(this.BetResult); List<BetOrder> orderList = new List<BetOrder>(); foreach (var item in betSheetDic) orderList.AddRange(item.Value); StringBuilder companySb = new StringBuilder(); foreach (var companyId in betOrder.CompanyList) { var company = todayLotteryCompany.Find(it => it.CompanyId == companyId); if (company == null) throw new InvalidDataException("CompanyId:" + companyId); companySb.AppendFormat("{0} ", company.Abbreviation); } BetSheet orderSheet = new BetSheet { Num = betOrder.BetType.ToString(), Turnover = orderList.Sum(it => it.Turnover), NetAmount = orderList.Sum(it => it.NetAmount), Commission = orderList.Sum(it => it.Commission), UserId = user.UserId, Status = BetStatus.Valid, IPAddress = IPHelper.IPAddress, BetCompany = companySb.ToString(), BetAmount = JoinSheetBetAmount(sheet.Keys) }; resultDic.Add(orderSheet, orderList); betSheetDic.Clear(); } this._betResult = returnResult; return resultDic; }
internal static BuildResult BuildUnionPL2(User user, LotterySpecies specie, IEnumerable<BetItem> betList, LimitChecker checker = null) { var builder = new UnionPL2OrderBuilder(); if (checker != null) builder.Checker = checker; return new BuildResult { Sheet = builder.BuildOrder(user, specie, betList, null), Result = builder.BetResult }; }
internal static BuildResult Build(User user, LotterySpecies specie, FastBetItem fastBetItem, GameType gameType, LimitChecker checker = null) { var builder = new FastBetOrderBuilder(); if (checker != null) builder.Checker = checker; return new BuildResult { Sheet = builder.BuildOrder(user, specie, new[] { fastBetItem }, new Dictionary<string, object> { { "GameType", gameType } }), Result = builder.BetResult }; }
internal static BuildResult Build(User user, LotterySpecies specie, IEnumerable<BetItem> betList, bool isCon = false, LimitChecker checker = null) { var builder = new CommOrderBuilder(); if (checker != null) builder.Checker = checker; return new BuildResult { Sheet = builder.BuildOrder(user, specie, betList, new Dictionary<string, object> { { "ISCON", isCon } }), Result = builder.BetResult }; }
/// <summary> /// 获取指定用户各父级佣金差(包括自身) /// </summary> /// <param name="user">The user.</param> /// <param name="specie">The specie.</param> /// <returns></returns> public IEnumerable<CommissionValue> GetFamilyUserCommissionValue(User user, LotterySpecies specie) { string sql = string.Format(@";WITH FAMILY AS ( SELECT * FROM tb_User WHERE {4}=@{4} UNION ALL SELECT B.* FROM tb_User AS B,FAMILY AS C WHERE B.UserId=C.ParentId and c.UserId>b.UserId ) SELECT CV.*,u.UserId FROM {0} CV JOIN {1} UC on UC.{3}=cv.{2} JOIN FAMILY u on u.UserId=uc.UserId where UC.{5}=@{5}", CommissionValue.TABLENAME, UserCommission.TABLENAME, CommissionValue.COMMISSIONID, UserCommission.COMMISSIONID, User.USERID, UserCommission.SPECIEID); return base.ExecuteList<CommissionValue>(sql, new SqlParameter(User.USERID, user.UserId), new SqlParameter(UserCommission.SPECIEID, (int)specie)); }
public ActionResult EditUserComm(int Id = 0, LotterySpecies specie = LotterySpecies.VietnamLottery) { if (Id == 0) PageNotFound(); User user = null; if (!UserManager.IsParent(MatrixUser.UserId, Id, out user)) PageNotFound(); ViewBag.CompanyTypes = EnumHelper.GetDescription<CompanyType>(); ViewBag.GameTypes = EnumHelper.GetDescription<GameType>(); ViewBag.CommGroups = CommManager.GetCommissionGroupByUser(user, specie); ViewBag.Role = user.Role; var commValues = CommManager.GetCommissionValue(user, specie); return View(commValues); }
public ActionResult EditUserComm(IEnumerable<CommissionValue> model, int Id = 0, LotterySpecies specie = LotterySpecies.VietnamLottery) { if (Id == 0) PageNotFound(); User user = UserManager.GetUser(Id); if (user == null || user.ParentId != MatrixUser.UserId) //只有父级用户才能修改下级的佣金 PageNotFound(); ViewBag.CompanyTypes = EnumHelper.GetDescription<CompanyType>(); ViewBag.GameTypes = EnumHelper.GetDescription<GameType>(); if (!ModelState.IsValid) { if (Request.IsAjaxRequest()) throw new BusinessException(ModelState.ToErrorString()); return View(model); } else { CommManager.UpdateUserCommission(user, specie, model); ActionLogger.Log(CurrentUser, user, LogResources.UpdateUserComm, LogResources.GetUpdateUserComm(specie.ToString())); if (Request.IsAjaxRequest()) { return Json(new JsonResultModel { IsSuccess = true, Message = Resource.Success, Model = model }); } ViewBag.CommGroups = CommManager.GetCommissionGroupByUser(user, specie); return View(model); } }
/// <summary> /// 获取指定父级的佣金 /// </summary> /// <param name="member">The member.</param> /// <param name="role">The role.</param> /// <param name="specie">The specie.</param> /// <returns></returns> private IEnumerable<ConcreteCommission> GetParentCommList(User member, Role role, LotterySpecies specie) { var familyCommDic = HttpContext.Current.Session[M_PARENTCOMMDIC] as IDictionary<Role, IEnumerable<ConcreteCommission>>; if (familyCommDic == null || familyCommDic.Count == 0) { familyCommDic = CommManager.GetParentsCommission(member, specie); HttpContext.Current.Session.Add(M_PARENTCOMMDIC, familyCommDic); } return familyCommDic[role]; }
/// <summary> /// 创建注单的各父级佣金 /// </summary> /// <param name="turnOver">The turn over.</param> /// <param name="member">The member.</param> /// <param name="gt">The gt.</param> /// <param name="ct">The ct.</param> /// <param name="specie">The specie.</param> /// <param name="isCon">if set to <c>true</c> [is con].</param> /// <returns></returns> private IList<OrderAncestorCommInfo> BuildAncestorCommission(decimal turnOver, User member, GameType gt, CompanyType ct, LotterySpecies specie, bool isCon) { List<OrderAncestorCommInfo> ancestorCommList = new List<OrderAncestorCommInfo>(); foreach (int roleId in Enum.GetValues(typeof(Role))) { Role role = (Role)roleId; if (role >= Role.Guest) continue; var concreteComm = GetParentCommList(member, role, specie).Find(it => it.GameType == gt && it.CompanyType == ct); double comm = concreteComm.Commission; //如果十二生肖跌水并且是公司,则要补上会员扣去的那点佣金 if (isCon) { if (role == Role.Company) comm += LotterySystem.Current.AutoElectionCodeCommission; else comm -= LotterySystem.Current.AutoElectionCodeCommission; } ancestorCommList.Add(new OrderAncestorCommInfo { RoleId = roleId, Commission = comm, CommAmount = turnOver * (decimal)(comm / 100) }); } return ancestorCommList; }
/// <summary> /// 在Session中获取会员的佣金信息,若佣金信息不存在,则读取数据库中的佣金信息 /// </summary> /// <param name="member">The member.</param> /// <param name="specie">The specie.</param> /// <returns></returns> public Pair<CommissionGroup, IEnumerable<ConcreteCommission>> GetMemberCommissionInSession(User member, LotterySpecies specie) { string key = string.Format("{0}_{1}_COMM", member.UserId, (int)specie); var comm = HttpContext.Current.Session[key] as Pair<CommissionGroup, IEnumerable<ConcreteCommission>>; if (comm == null) { comm = GetMemberCommission(member, specie); HttpContext.Current.Session.Add(key, comm); } return comm; }
/// <summary> /// 添加新佣金组 /// </summary> /// <param name="specie">The specie.</param> /// <param name="name">The name.</param> /// <param name="comms">The comms.</param> public void AddCommGroup(LotterySpecies specie, string name, IEnumerable<ConcreteCommission> comms) { var group = new CommissionGroup { Specie = specie, GroupName = name }; DaCommGroup.ExecuteWithTransaction(() => { DaCommGroup.Insert(group); comms = comms.ForEach(it => { it.GroupId = group.GroupId; return it; }); DaConcreteComm.InsertComms(comms); }); }
public BetResult AddUnionPL2Bet(User member, LotterySpecies specie, IEnumerable<BetItem> betList) { var result = OrderBuilder.BuildUnionPL2(member, specie, betList); AddBetSheet(member, result.Sheet, result.Result.ActualTurnover); return result.Result; }
public IDictionary<BetSheet, IList<BetOrder>> BuildFastBetOrder(User user, LotterySpecies specie, FastBetItem fastBetItem, GameType gameType) { this._betResult = new BetResult(); var todayLotteryCompany = TodayLotteryCompany.Instance.GetTodayCompany(); //获取今日开奖公司 var memberComm = CommManager.GetMemberCommissionInSession(user, specie); //获取会员的佣金 Dictionary<BetSheet, IList<BetOrder>> betSheetDic = new Dictionary<BetSheet, IList<BetOrder>>(); //注单字典 List<WagerItem> betWagerList = new List<WagerItem>(); //下注金額列表 StringBuilder betCompanySB = new StringBuilder(); BetSheet sheet = new BetSheet //注单 { Num = "FastBet" + EnumHelper.GetEnumDescript(gameType).Description, UserId = user.UserId, Status = BetStatus.Valid }; betSheetDic.Add(sheet, new List<BetOrder>()); foreach (var companyId in fastBetItem.Companys) { IList<long> fullArrangementNum = null; //全排列号码 var company = todayLotteryCompany.Find(it => it.CompanyId == companyId); //找到对应的公司 var companyType = company.CompanyType; foreach (var gpwId in fastBetItem.GamePlayWays) { CheckBetWager(gpwId, fastBetItem.IsFullPermutation, fastBetItem.Wager, betWagerList); var wager = new WagerItem { GamePlayTypeId = gpwId, Wager = fastBetItem.Wager, IsFullPermutation = fastBetItem.IsFullPermutation }; foreach (var num in fastBetItem.NumList) { AddOrderToDic(betSheetDic[sheet], companyType, company, memberComm, num, wager, user, fullArrangementNum, false); } } betCompanySB.AppendFormat("{0} ", company.Abbreviation); //现在只记录公司名称即可 sheet.BetCompany = betCompanySB.ToString(); sheet.BetAmount = GetBetWagerData(betSheetDic[sheet], betWagerList); } return betSheetDic; }
/// <summary> /// 12生肖,快速下单. /// </summary> /// <param name="user">The user.</param> /// <param name="specie">The specie.</param> /// <param name="betList">The bet list.</param> /// <returns></returns> public BetResult AddBet(User member, LotterySpecies specie, IEnumerable<AutoBetItem> betList) { //var betSheetDic = OrderBuilder.BuildAutoBetOrder(member, specie, betList); var result = OrderBuilder.Build(member, specie, betList); AddBetSheet(member, result.Sheet, result.Result.ActualTurnover); return result.Result; }
public BetResult AddBet(User member, LotterySpecies specie, FastBetItem fastBetItem, GameType gameType = GameType.TwoDigital) { //var betSheetDic = OrderBuilder.BuildFastBetOrder(member, specie, fastBetItem, gameType); var result = OrderBuilder.Build(member, specie, fastBetItem, gameType); AddBetSheet(member, result.Sheet, result.Result.ActualTurnover); return result.Result; }
/// <summary> ///获取用户特定市场的佣金差 /// </summary> /// <param name="user">The user.</param> /// <param name="specie">The specie.</param> /// <returns></returns> public IEnumerable<CommissionValue> GetCommissionValue(User user, LotterySpecies specie) { return DaCommValue.GetCommissionValue(user, specie); }
/// <summary> /// 获取会员各父级佣金信息 /// </summary> /// <param name="member">The member.</param> /// <param name="specie">The specie.</param> /// <returns></returns> public IDictionary<Role, IEnumerable<ConcreteCommission>> GetParentsCommission(User member, LotterySpecies specie) { if (member.Role != Role.Guest) throw new InvalidDataException("Role", string.Format("用户必须是Guest,User:{0}", member)); //1.获取会员所在分组 var commGroup = DaCommGroup.GetMemebersCommGroup(member, specie); if (commGroup == null) throw new ApplicationException(string.Format("找不到会员{0}的佣金组信息!", member)); //2.获取分组的信息 var comms = DaConcreteComm.GetConcreteCommission(commGroup); //3.获取各父级佣金差 var userManager = ManagerHelper.Instance.GetManager<UserManager>(); var parents = userManager.GetFamily(member.ParentId); //从父级开始查找 Dictionary<Role, IEnumerable<ConcreteCommission>> resultComm = new Dictionary<Role, IEnumerable<ConcreteCommission>>(); //各级真实佣金信息 Dictionary<Role, IEnumerable<CommissionValue>> roleComm = new Dictionary<Role, IEnumerable<CommissionValue>>(); //各级佣金差 foreach (var parent in parents.OrderBy(it => it.UserId)) { if (parent.Role == Role.Company) continue; //公司特殊计算 var userComms = GetCommissionValue(parent, specie); //获取父级的佣金查 //a.计算佣金差 Dictionary<string, CommissionValue> exaCommValDic = new Dictionary<string, CommissionValue>(); foreach (var comm in userComms) { var key = string.Format("{0}_{1}", comm.GameId, comm.CompanyTypeId); CommissionValue exaCommVal = null; if (exaCommValDic.TryGetValue(key, out exaCommVal)) exaCommVal.Comm += comm.Comm; else exaCommValDic.Add(key, comm); } roleComm.Add(parent.Role, exaCommValDic.Values); //b.累加上级+本级佣金差,获得本级真实佣金 List<ConcreteCommission> commList = new List<ConcreteCommission>(); foreach (var cm in comms) { var key = string.Format("{0}_{1}", (int)cm.GameType, (int)cm.CompanyType); //计算出上级的佣金差 var parentDiff = roleComm.Where(it => it.Key <= parent.Role) .Select(it => it.Value.Where(x => x.GameType == cm.GameType && x.CompanyType == cm.CompanyType).Sum(x => x.Comm)) .Sum(it => it); cm.Commission -= parentDiff; //cm.Odds -= exaCommVal.Odds; commList.Add(cm); } resultComm.Add(parent.Role, commList); } //计算公司佣金=100-super佣金 var superComms = resultComm[Role.Super]; List<ConcreteCommission> companyCommList = new List<ConcreteCommission>(); foreach (var comm in superComms) companyCommList.Add(new ConcreteCommission { GameType = comm.GameType, CompanyType = comm.CompanyType, Commission = 100 - comm.Commission, Odds = comm.Odds }); resultComm.Add(Role.Company, companyCommList); return resultComm; }
public MemberPackage GetMemberPackage(User member, LotterySpecies specie) { if (member.Role != Role.Guest) throw new InvalidDataException("MemberPackage", string.Format("用户{0}没有佣金组信息", member.UserId)); return DaMemPackage.GetMemberPackageBySpecie(member, specie); }
/// <summary> /// 获取用户的佣金信息 /// </summary> /// <param name="user">The user.</param> /// <returns></returns> public UserCommission GetUserCommission(User user, LotterySpecies specie) { string sql = string.Format(@"SELECT * FROM {0} WHERE {1}=@{1} AND {2}=@{2}", UserCommission.TABLENAME, UserCommission.USERID, UserCommission.SPECIEID); return base.ExecuteModel<UserCommission>(sql, new SqlParameter(UserCommission.USERID, user.UserId), new SqlParameter(UserCommission.SPECIEID, (int)specie)); }
/// <summary> /// 获取指定用户特定市场的具体佣金组佣金 /// </summary> /// <param name="user">The user.</param> /// <param name="specie">The specie.</param> /// <returns></returns> public IDictionary<CommissionGroup, IEnumerable<ConcreteCommission>> GetCommissionGroupByUser(User user, LotterySpecies specie) { //1.获取指定市场的佣金分组 var groups = DaCommGroup.GetCommissionGroupBySpecie(specie); var concreteComms = DaConcreteComm.GetConcreteCommission(specie).GroupBy(it => it.GroupId); //2.获取各父级的佣金差 var familyCommVals = DaCommValue.GetFamilyUserCommissionValue(user, specie); //3.累加各级的佣金差 Dictionary<string, CommissionValue> exaCommValDic = new Dictionary<string, CommissionValue>(); foreach (var commVal in familyCommVals) { var key = string.Format("{0}_{1}", commVal.GameId, commVal.CompanyTypeId); CommissionValue exaCommVal = null; if (exaCommValDic.TryGetValue(key, out exaCommVal)) exaCommVal.Comm += commVal.Comm; else exaCommValDic.Add(key, commVal); } //4.计算该用户不同佣金组的实际佣金 Dictionary<CommissionGroup, IEnumerable<ConcreteCommission>> result = new Dictionary<CommissionGroup, IEnumerable<ConcreteCommission>>(); foreach (var gp in concreteComms) { var group = groups.Find(it => it.GroupId == gp.Key); List<ConcreteCommission> commList = new List<ConcreteCommission>(); foreach (var cm in gp) { var key = string.Format("{0}_{1}", (int)cm.GameType, (int)cm.CompanyType); CommissionValue exaCommVal; if (exaCommValDic.TryGetValue(key, out exaCommVal)) { cm.Commission -= exaCommVal.Comm; cm.Odds -= exaCommVal.Odds; } commList.Add(cm); } result.Add(group, commList); } return result; }
/// <summary> /// 创建注单 /// </summary> /// <param name="user">The user.</param> /// <param name="speice">The speice.</param> /// <param name="betList">The bet list.</param> /// <param name="isCon">是否快速下单.</param> /// <returns></returns> public IDictionary<BetSheet, IList<BetOrder>> BuildOrder(User user, LotterySpecies specie, IEnumerable<BetItem> betList, bool isCon = false) { try { this._betResult = new BetResult(); var todayLotteryCompany = TodayLotteryCompany.Instance.GetTodayCompany(); //获取今日开奖公司 var memberComm = CommManager.GetMemberCommissionInSession(user, specie); //获取会员的佣金 Dictionary<BetSheet, IList<BetOrder>> betSheetDic = new Dictionary<BetSheet, IList<BetOrder>>(); //注单字典 List<WagerItem> betWagerList = new List<WagerItem>(); //下注金額列表 StringBuilder betCompanySB = new StringBuilder(); foreach (var betItem in betList) { var numList = ParseBetNums(betItem.Num); if (numList == null) continue; IList<long> fullArrangementNum = null; //全排列号码 BetSheet sheet = new BetSheet //注单 { Num = betItem.Num, UserId = user.UserId, Status = BetStatus.Valid }; betCompanySB.Clear(); betWagerList.Clear(); betSheetDic.Add(sheet, new List<BetOrder>()); foreach (var companyId in betItem.CompanyList) //先遍历公司列表,同个号码支持多个公司 { var company = todayLotteryCompany.Find(it => it.CompanyId == companyId); //找到对应的公司 var companyType = company.CompanyType; foreach (var wager in betItem.WargerList) //便利下注订单 { if (wager.Wager <= 0) continue; CheckBetWager(wager.GamePlayTypeId, wager.IsFullPermutation, wager.Wager, betWagerList); foreach (var num in numList) AddOrderToDic(betSheetDic[sheet], companyType, company, memberComm, num, wager, user, fullArrangementNum, isCon); } betCompanySB.AppendFormat("{0} ", company.Abbreviation); //现在只记录公司名称即可 } sheet.BetCompany = betCompanySB.ToString(); sheet.BetAmount = GetBetWagerData(betSheetDic[sheet], betWagerList); } return betSheetDic; } catch { //回滚注单 foreach (var order in Checker.BeInsertOrderList) Checker.RollLimit(order); throw; } }
/// <summary> /// 根据市场获取佣金组 /// </summary> /// <param name="specie">The specie.</param> /// <returns></returns> public IEnumerable<CommissionGroup> GetCommissionGroupBySpecie(LotterySpecies specie) { string sql = string.Format(@"SELECT * FROM {0} WHERE {1}=@{1}", CommissionGroup.TABLENAME, CommissionGroup.SPECIEID); return base.ExecuteList<CommissionGroup>(sql, new SqlParameter(CommissionGroup.SPECIEID, (int)specie)); }
/// <summary> /// 更新用户特定市场的佣金差(先删除,再插入) /// </summary> /// <param name="user">The user.</param> /// <param name="specie">The specie.</param> /// <param name="commValues">The comm values.</param> public void UpdateUserCommission(User user, LotterySpecies specie, IEnumerable<CommissionValue> commValues) { var userComm = DaUserComm.GetUserCommission(user, specie); commValues = commValues.ForEach(it => { it.CommissionId = userComm.CommissionId; return it; }); DaCommValue.ExecuteWithTransaction(() => { DaCommValue.DeleteCommValues(user, specie); DaCommValue.InsertCommValues(commValues); }); }
/// <summary> /// 获取会员的佣金信息 /// </summary> /// <param name="member">The member.</param> /// <param name="specie">The specie.</param> /// <returns></returns> public Pair<CommissionGroup, IEnumerable<ConcreteCommission>> GetMemberCommission(User member, LotterySpecies specie) { if (member.Role != Role.Guest) throw new InvalidDataException("Role", string.Format("用户必须是Guest,User:{0}", member)); //1.获取会员所在分组 var commGroup = DaCommGroup.GetMemebersCommGroup(member, specie); if (commGroup == null) throw new ApplicationException(string.Format("找不到会员{0}的佣金组信息!", member)); //2.获取分组的信息 var comms = DaConcreteComm.GetConcreteCommission(commGroup); //3.获取父级佣金差 var familyCommVals = DaCommValue.GetFamilyUserCommissionValue(member, specie); //4.累加各级的佣金差 Dictionary<string, CommissionValue> exaCommValDic = new Dictionary<string, CommissionValue>(); foreach (var commVal in familyCommVals) { var key = string.Format("{0}_{1}", commVal.GameId, commVal.CompanyTypeId); CommissionValue exaCommVal = null; if (exaCommValDic.TryGetValue(key, out exaCommVal)) exaCommVal.Comm += commVal.Comm; else exaCommValDic.Add(key, commVal); } var memberComms = comms.ForEach(it => { var key = string.Format("{0}_{1}", it.GameId, it.CompanyTypeId); CommissionValue exaCommVal = null; if (exaCommValDic.TryGetValue(key, out exaCommVal)) it.Commission -= exaCommVal.Comm; return it; }); return new Pair<CommissionGroup, IEnumerable<ConcreteCommission>>(commGroup, memberComms); }