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 = "结算成功!" }); } } } }
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 } }); } }
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 = "竞猜成功!" }); }