/// <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;
        }
Esempio n. 8
0
 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
     };
 }
Esempio n. 9
0
 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
     };
 }
Esempio n. 10
0
 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);
     }
 }
Esempio n. 14
0
 /// <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];
 }
Esempio n. 15
0
        /// <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;
        }
Esempio n. 16
0
 /// <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;
 }
Esempio n. 17
0
 /// <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);
     });
 }
Esempio n. 18
0
 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;
 }
Esempio n. 19
0
 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;
 }
Esempio n. 20
0
 /// <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;
 }
Esempio n. 21
0
 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;
 }
Esempio n. 22
0
 /// <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);
 }
Esempio n. 23
0
        /// <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;
        }
Esempio n. 24
0
 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));
 }
Esempio n. 26
0
        /// <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;
        }
Esempio n. 27
0
 /// <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));
 }
Esempio n. 29
0
 /// <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);
     });
 }
Esempio n. 30
0
 /// <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);
 }