Exemple #1
0
 public virtual ReturnMessage PaySubmit(int userId, double rmb)
 {
     rmb = double.Parse(rmb.ToString("0.00"));
     //if (rmb <= 0)
     //{
     //	return new ReturnMessage { success = false, message = "请至少充值1元。" };
     //}
     using (var tran = new TransactionScope())
     {
         using (var dc = new DC())
         {
             var user  = dc.users.FirstOrDefault(r => r.userId == userId);
             var golds = rmb * 100 * 10000;
             dc.pays.Add(new pay {
                 userId = user.userId, rmb = rmb, golds = golds, payTime = DateTime.Now, tip = ""
             });
             user.golds += golds;
             var record = new user_golds_record
             {
                 amount       = user.golds,
                 changeAmount = golds,
                 userId       = userId,
                 detail       = string.Format("充值 {0} 元。", rmb.ToString("0.00")),
                 recordTime   = DateTime.Now
             };
             dc.user_golds_records.Add(record);
             dc.SaveChanges();
             tran.Complete();
         }
     }
     return(new ReturnMessage {
         success = true, message = "充值成功!"
     });
 }
        public virtual ReturnMessage CompleteQuiz(int correctOptionId, Enums.QuizStatus quizStatus)
        {
            using (var tran = new TransactionScope())
            {
                using (var dc = new DC())
                {
                    var correctOption = dc.options.FirstOrDefault(r => r.optionId == correctOptionId);
                    var quiz          = correctOption.quiz;
                    var otherOptions  = quiz.options.Where(r => r.optionId != correctOptionId).ToList();
                    if (otherOptions.Any(r => r.optionstatus == Enums.OptionStatus.正确))
                    {
                        return new ReturnMessage {
                                   success = false, message = "结算失败,已有正确答案!"
                        }
                    }
                    ;
                    correctOption.optionstatus = Enums.OptionStatus.正确;
                    var quizId         = quiz.quizId;
                    var user_options   = dc.user_options.Where(r => r.quizId == quizId).ToList();
                    var allLoserMoney  = user_options.Where(r => r.optionId != correctOptionId).Sum(r => r.golds);
                    var allWinnerMoney = user_options.Where(r => r.optionId == correctOptionId).Sum(r => r.golds);

                    var q = (from a in dc.user_options
                             join b in dc.users on a.userId equals b.userId
                             where a.quizId == quizId && a.UserOptionStatus == Enums.UserOptionStatus.竞猜中
                             select new { user_option = a, user = b }).ToList();
                    q.ForEach(uq =>
                    {
                        var isWin = uq.user_option.optionId == correctOptionId;
                        uq.user_option.option.optionstatus = isWin ? Enums.OptionStatus.正确 : Enums.OptionStatus.错误;
                        uq.user_option.UserOptionStatus    = isWin ? Enums.UserOptionStatus.成功 : Enums.UserOptionStatus.失败;
                        var changeAmount    = ((allLoserMoney * 0.9 + allWinnerMoney) / allWinnerMoney * uq.user_option.golds);
                        uq.user_option.odds = changeAmount / uq.user_option.golds;
                        if (isWin)
                        {
                            uq.user.golds += changeAmount;
                            var record     = new user_golds_record
                            {
                                userId       = uq.user.userId,
                                recordTime   = DateTime.Now,
                                amount       = uq.user.golds,
                                changeAmount = changeAmount,
                                detail       = string.Format("竞猜{0}获胜,金币+{1}", uq.user_option.option.quiz.bet.name, changeAmount.ToString("0.00"))
                            };
                            dc.user_golds_records.Add(record);
                        }
                    });
                    dc.SaveChanges();
                    tran.Complete();
                    return(new ReturnMessage {
                        success = true, message = "结算成功!"
                    });
                }
            }
        }
    }
Exemple #3
0
 public virtual ReturnMessage RedeemSubmit(int userId, double golds, string alipay, string phone, string detail)
 {
     golds = double.Parse(golds.ToString("0.00"));
     if (golds < 100)
     {
         return(new ReturnMessage {
             success = false, message = "请至少兑换100金币。"
         });
     }
     using (var tran = new TransactionScope())
     {
         using (var dc = new DC())
         {
             var user = dc.users.FirstOrDefault(r => r.userId == userId);
             if (user.golds < golds)
             {
                 return(new ReturnMessage {
                     success = false, message = "余额不足。"
                 });
             }
             user.golds -= golds;
             dc.redeems.Add(new redeem
             {
                 userId       = userId,
                 golds        = golds,
                 createTime   = DateTime.Now,
                 redeemStatus = RedeemStatus.UnPayed,
                 rmb          = 0,
                 detail       = detail,
                 alipay       = alipay,
                 phone        = phone
             });
             var record = new user_golds_record
             {
                 amount       = user.golds,
                 changeAmount = 0 - golds,
                 userId       = userId,
                 detail       = string.Format("兑换 {0}", golds.ToString("0.00")),
                 recordTime   = DateTime.Now
             };
             dc.user_golds_records.Add(record);
             dc.SaveChanges();
             tran.Complete();
         }
     }
     return(new ReturnMessage {
         success = true, message = "兑换成功!"
     });
 }
     public object GetDailyLoginGolds(int userId)
     {
         using (var dc = new DC())
         {
             var today          = DateTime.Now.Date;
             var isExists       = dc.user_login_bonuses.Any(r => r.bonus_typeId == 2 && r.create_time > today && r.userId == userId);
             var closeIfSuccess = dc.user_login_bonuses.Any(r => r.userId == userId && r.bonus_typeId == 1);
             if (isExists)
             {
                 return new ReturnMessage {
                            success = true, message = "今日已签到!", data = new { close = closeIfSuccess }
                 }
             }
             ;
             var bonusConfig = new UserBLL().GetDailyLoginBonusConfigs(userId).FirstOrDefault(r => r.IsActive);
             var golds       = bonusConfig.golds;
             var bonus       = new user_login_bonus
             {
                 userId       = userId,
                 bonus_typeId = 2,
                 create_time  = DateTime.Now,
                 golds        = golds,
                 remain_golds = golds
             };
             var user = dc.users.FirstOrDefault(r => r.userId == userId);
             user.golds += golds;
             var log = new user_golds_record
             {
                 userId       = userId,
                 amount       = user.golds,
                 changeAmount = golds,
                 recordTime   = DateTime.Now,
                 detail       = $"{bonusConfig.name}签到{golds.ToString("0.00")}金币"
             };
             dc.user_login_bonuses.Add(bonus);
             dc.user_golds_records.Add(log);
             dc.SaveChanges();
             var close = dc.user_login_bonuses.Count(r => r.userId == userId) >= 2;
             return(new ReturnMessage {
                 success = true, message = "签到成功!", data = new { close = closeIfSuccess }
             });
         }
     }
 }
        public object GetNewUserGolds(int userId)
        {
            using (var dc = new DC())
            {
                var isExists       = dc.user_login_bonuses.Any(r => r.bonus_typeId == 1 && r.userId == userId);
                var closeIfSuccess = dc.user_login_bonuses.Any(r => r.userId == userId && r.bonus_typeId == 2);
                if (isExists)
                {
                    return new ReturnMessage {
                               success = true, message = "新手礼包已领取!", data = new { close = closeIfSuccess }
                    }
                }
                ;

                var golds = 88;
                var bonus = new user_login_bonus
                {
                    userId       = userId,
                    bonus_typeId = 1,
                    create_time  = DateTime.Now,
                    golds        = golds,
                    remain_golds = 0
                };
                var user = dc.users.FirstOrDefault(r => r.userId == userId);
                user.golds += golds;
                var log = new user_golds_record
                {
                    userId       = userId,
                    amount       = user.golds,
                    changeAmount = golds,
                    recordTime   = DateTime.Now,
                    detail       = $"新手礼包{golds.ToString("0.00")}金币"
                };
                dc.user_login_bonuses.Add(bonus);
                dc.user_golds_records.Add(log);
                dc.SaveChanges();
                return(new ReturnMessage {
                    success = true, message = "领取成功!", data = new { close = closeIfSuccess }
                });
            }
        }
Exemple #6
0
 public int EditUserMoney(string openId, double changeAmount, string mark)
 {
     using (var dc = new DC())
     {
         var user = dc.users.FirstOrDefault(r => r.openId == openId);
         if (user == null)
         {
             return(0);
         }
         user.golds += changeAmount;
         var record = new user_golds_record
         {
             userId       = user.userId,
             changeAmount = changeAmount,
             amount       = user.golds,
             detail       = mark,
             recordTime   = DateTime.Now
         };
         dc.user_golds_records.Add(record);
         return(dc.SaveChanges());
     }
 }
        public virtual ReturnMessage Submit(int userId, int optionId, double odds, double golds)
        {
            golds = double.Parse(golds.ToString("0.00"));
            if (golds <= 0)
            {
                return(new ReturnMessage {
                    success = false, message = "请至少投注1金币。"
                });
            }
            using (var tran = new TransactionScope())
            {
                using (var dc = new DC())
                {
                    var user = dc.users.FirstOrDefault(r => r.userId == userId);
                    if (user.golds < golds)
                    {
                        return(new ReturnMessage {
                            success = false, message = "余额不足。"
                        });
                    }
                    var option = dc.options.FirstOrDefault(r => r.optionId == optionId);
                    var quiz   = option.quiz;
                    var bet    = quiz.bet;
                    var game   = bet.game;
                    if (quiz.quizstatus != Enums.QuizStatus.竞猜中)
                    {
                        return(new ReturnMessage {
                            success = false, message = "已停止投注。"
                        });
                    }
                    var user_option = new user_option
                    {
                        userId     = userId,
                        gameId     = game.gameId,
                        quizId     = quiz.quizId,
                        optionId   = optionId,
                        odds       = odds,
                        golds      = golds,
                        createTime = DateTime.Now
                    };
                    dc.user_options.Add(user_option);
                    user.golds -= golds;

                    if (user.invite_by_userId != null)
                    {
                        var inviteUser = dc.users.FirstOrDefault(r => r.userId == user.invite_by_userId);
                        if (inviteUser != null)
                        {
                            inviteUser.golds += golds * 0.03;
                            dc.user_golds_records.Add(new user_golds_record
                            {
                                changeAmount = golds * 0.03,
                                amount       = user.golds + golds * 0.03,
                                recordTime   = DateTime.Now,
                                detail       = $"战友竞猜奖励{(user.golds + golds * 0.03).ToString("0.00")}",
                                userId       = inviteUser.userId
                            });
                        }
                    }
                    var record = new user_golds_record
                    {
                        amount       = user.golds,
                        changeAmount = 0 - golds,
                        userId       = userId,
                        detail       = string.Format("竞猜 {2}", option.quiz.bet.game.name, option.quiz.bet.name, option.quiz.subject, option.subject, golds),
                        recordTime   = DateTime.Now
                    };
                    dc.user_golds_records.Add(record);
                    dc.SaveChanges();
                    tran.Complete();
                }
            }
            return(new ReturnMessage {
                success = true, message = "竞猜成功!"
            });
        }
        protected void Resolve(DateTime dt, int GameTypeId = 1)
        {
            var dt_s = dt.Date;
            var dt_e = dt.Date.AddDays(1);

            using (var dc = new DC("prod"))
            {
                var sscList = Wx.Common.Helpers.SSCHelper.FetchSSC(dt);
                var lastSSC = sscList.Where(r => !string.IsNullOrWhiteSpace(r.no)).LastOrDefault();
                if (lastSSC == null)
                {
                    return;
                }
                var toResolvedSubmits = dc.roulette_submits
                                        .Where(r => r.game_typeId == GameTypeId || r.game_typeId == 0)
                                        .Where(r => r.createTime >= dt_s && r.createTime < dt_e && r.createTime <= lastSSC.endTime)
                                        .Where(r => r.rouletteSubmitStatus == Wx.Enums.RouletteSubmitStatus.待定).ToList();
                toResolvedSubmits.ForEach(r =>
                {
                    var ssc = sscList.FirstOrDefault(p => r.createTime >= p.startTime && r.createTime < p.endTime);
                    if (ssc == null)
                    {
                        return;
                    }
                    r.sscPeriod = ssc.period;
                    r.ssc_no    = ssc.no;
                });

                var roulette_property_types = CacheHelper.Get("roulette_property_types", () => dc.roulette_property_types.ToList());
                var roulette_propertys      = CacheHelper.Get("roulette_propertys", () => dc.roulette_propertys.ToList());
                var roulette_heros          = CacheHelper.Get("roulette_heros", () => dc.roulette_heros.ToList());
                var roulette_hero_propertys = CacheHelper.Get("roulette_hero_propertys", () => dc.roulette_hero_propertys.ToList());

                var heroCount = roulette_heros.Count(r => r.game_typeId == GameTypeId);
                var hps       = (from a in roulette_heros
                                 where a.game_typeId == GameTypeId
                                 select new
                {
                    a.roulette_heroId,
                    propertys = roulette_hero_propertys.Where(r => r.roulette_heroId == a.roulette_heroId).Select(r => r.roulette_propertyId)
                }).ToList();
                for (int i = 0; i < toResolvedSubmits.Count(); i++)
                {
                    var trs = toResolvedSubmits[i];
                    if (string.IsNullOrWhiteSpace(trs.ssc_no))
                    {
                        continue;
                    }
                    var selectedPropertys = JsonHelper.Deserialize <int[]>(trs.propertys);
                    var matchedHeroCount  = hps.Count(hp => selectedPropertys.All(s => hp.propertys.Contains(s)));
                    if (matchedHeroCount == 0)
                    {
                        continue;
                    }
                    trs.matched_hero_count = matchedHeroCount;
                    trs.total_hero_count   = hps.Count();
                    trs.odds           = (double)trs.total_hero_count / (double)matchedHeroCount;
                    trs.ssc_no         = sscList.FirstOrDefault(r => r.period == trs.sscPeriod).no;
                    trs.correct_heroId = roulette_heros.OrderBy(r => r.roulette_heroId).Where(r => r.game_typeId == GameTypeId)
                                         .Skip(int.Parse(trs.ssc_no) % trs.total_hero_count).FirstOrDefault().roulette_heroId;
                    var correct_propertys = hps.FirstOrDefault(hp => hp.roulette_heroId == trs.correct_heroId).propertys;
                    trs.correct_propertys = JsonHelper.Serialize(correct_propertys);
                    var isCorrect = selectedPropertys.All(sp => correct_propertys.Contains(sp));
                    trs.rouletteSubmitStatus = isCorrect ? Wx.Enums.RouletteSubmitStatus.正确 : Wx.Enums.RouletteSubmitStatus.错误;
                    if (isCorrect)
                    {
                        var user         = dc.users.FirstOrDefault(r => r.userId == trs.userId);
                        var changeAmount = trs.golds * trs.odds * 0.9;
                        user.golds += changeAmount;
                        var ugr = new user_golds_record
                        {
                            amount       = user.golds,
                            changeAmount = changeAmount,
                            recordTime   = DateTime.Now,
                            userId       = user.userId,
                            detail       = $"英雄猜 {trs.sscPeriod}期"
                        };
                        dc.user_golds_records.Add(ugr);
                    }
                    dc.SaveChanges();
                }
            }
        }
        public virtual ReturnMessage Submit(int userId, int[] propertyIds, double golds, int gameTypeId)
        {
            golds = double.Parse(golds.ToString("0.00"));
            if (golds <= 0)
            {
                return(new ReturnMessage {
                    success = false, message = "请至少投注1金币。"
                });
            }
            using (var tran = new TransactionScope())
            {
                using (var dc = new DC())
                {
                    var user = dc.users.FirstOrDefault(r => r.userId == userId);
                    if (user.golds < golds)
                    {
                        return(new ReturnMessage {
                            success = false, message = "余额不足。"
                        });
                    }

                    dc.roulette_submits.Add(new roulette_submit
                    {
                        userId               = userId,
                        golds                = golds,
                        propertys            = JsonHelper.Serialize(propertyIds),
                        createTime           = DateTime.Now,
                        odds                 = 1,
                        rouletteSubmitStatus = RouletteSubmitStatus.待定,
                        sscPeriod            = "",
                        game_typeId          = gameTypeId
                    });
                    user.golds -= golds;
                    if (user.invite_by_userId != null)
                    {
                        var inviteUser = dc.users.FirstOrDefault(r => r.userId == user.invite_by_userId);
                        if (inviteUser != null)
                        {
                            inviteUser.golds += golds * 0.03;
                            dc.user_golds_records.Add(new user_golds_record
                            {
                                changeAmount = golds * 0.03,
                                amount       = user.golds + golds * 0.03,
                                recordTime   = DateTime.Now,
                                detail       = "战友竞猜奖励",
                                userId       = inviteUser.userId
                            });
                        }
                    }
                    var record = new user_golds_record
                    {
                        amount       = user.golds,
                        changeAmount = 0 - golds,
                        userId       = userId,
                        detail       = string.Format("竞猜 {0}", dc.roulette_propertys.FirstOrDefault(r => propertyIds.Contains(r.roulette_propertyId)).roulette_property_type.game_type.cnName, "", golds),
                        recordTime   = DateTime.Now
                    };
                    dc.user_golds_records.Add(record);
                    dc.SaveChanges();
                    tran.Complete();
                }
            }
            return(new ReturnMessage {
                success = true, message = "竞猜成功!"
            });
        }