public string CreateArea(string areaName, int parentId) { WorkspaceDataSaveResult saveResult = new WorkspaceDataSaveResult(); areaName = areaName.Trim(); var statusId = SystemStaticData.LookUpSystemIncomeStatusId(SystemStaticData.SystemIncomeDictionary.Normal); var existArea = db.Area.FirstOrDefault(p => p.AreaName == areaName && p.Status == statusId); if (existArea != null) { saveResult.Status = (int)DataSaveStatus.DataValidationError; saveResult.Description = "已存在相关记录"; return(new JavaScriptSerializer().Serialize(saveResult)); } Area model = new Area(); model.AreaName = areaName; model.ParentAreaId = parentId; model.CreateAt = DateTime.Now; model.Status = statusId; db.Area.Add(model); db.SaveChanges(); saveResult.Status = (int)DataSaveStatus.Success; saveResult.Description = "保存成功"; return(new JavaScriptSerializer().Serialize(saveResult)); }
public string GetAreaByParentId(int parentId) { int areaStatusId = SystemStaticData.LookUpSystemIncomeStatusId(SystemStaticData.SystemIncomeDictionary.Normal); var result = db.Area.Where(p => p.ParentAreaId == parentId && p.Status == areaStatusId); return(new JavaScriptSerializer().Serialize(result)); }
public string CreateNewAreaPoint(string pointName, decimal longitude, decimal latitude, int areaId) { WorkspaceDataSaveResult saveResult = new WorkspaceDataSaveResult(); pointName = pointName.Trim(); var statusId = SystemStaticData.LookUpSystemIncomeStatusId(SystemStaticData.SystemIncomeDictionary.Normal); var existPoint = db.AreaPosition.FirstOrDefault(p => p.Latitude == latitude && p.Longitude == longitude); if (existPoint != null) { saveResult.Status = (int)DataSaveStatus.DataValidationError; saveResult.Description = "该点已存在地标"; return(new JavaScriptSerializer().Serialize(saveResult)); } AreaPosition model = new AreaPosition(); model.Status = statusId; model.Latitude = latitude; model.Longitude = longitude; model.CreateAt = DateTime.Now; model.AreaId = areaId; model.PositionName = pointName; db.AreaPosition.Add(model); db.SaveChanges(); saveResult.Status = (int)DataSaveStatus.Success; saveResult.Description = "创建成功"; return(new JavaScriptSerializer().Serialize(saveResult)); }
public string GetIncome() { var incomeStatusId = SystemStaticData.LookUpSystemIncomeStatusId(SystemStaticData.SystemIncomeDictionary.Normal); var inCo = db.SystemConfig.FirstOrDefault(p => p.Status == incomeStatusId); return(new JavaScriptSerializer().Serialize(inCo)); }
private IList <AdvDisplayModel> GetAdvByUserId(int userId) { int[] staticStatus = { SystemStaticData.LookUpAdvStatusId(SystemStaticData.AdvDictionary.Pause), SystemStaticData.LookUpAdvStatusId(SystemStaticData.AdvDictionary.Normal), SystemStaticData.LookUpAdvStatusId(SystemStaticData.AdvDictionary.Stop) }; var allAdv = (from adv in db.AdvInfo join aa in db.AdvInfoArea on adv.AdvId equals aa.AdvId join a in db.Area on aa.AreaId equals a.AreaId join u in db.User on adv.UserId equals u.UserId where adv.UserId == userId && staticStatus.Contains(adv.Status) select new AdvDisplayModel { AdvId = adv.AdvId, AreaId = aa.AreaId, AreaFullName = a.AreaName, AdvTitle = adv.AdvTitle, CostFeeUrl = adv.CostFeeUrl, TotalCount = adv.TotalCount, TotalCash = adv.TotalCash, CreateAt = adv.CreateAt, Status = adv.Status, PublishUserName = u.AccountName, RemainderCash = adv.RemainderCash }).ToList(); return(allAdv); }
public ActionResult RechargeAccount() { var rechargeStatusId = SystemStaticData.LookUpRechargeRewardStatusId(SystemStaticData.RechargeRewardDictionary.Normal); RechargeAccountModel model = new RechargeAccountModel(); model.RechargeRewards = db.RechargeReward.Where(p => p.Status == rechargeStatusId).ToList(); return(View(model)); }
public ActionResult AreaIndex() { int areaStatusId = SystemStaticData.LookUpSystemIncomeStatusId(SystemStaticData.SystemIncomeDictionary.Normal); AreaIndexModel model = new AreaIndexModel(); model.AllAreaList = GetDisplayList(db.Area.Where(p => p.Status == areaStatusId).OrderBy(p => p.ParentAreaId).ToList()); model.AreaPointList = GetAreaPointList(areaStatusId); return(View(model)); }
public ActionResult AdminDeleteAdv(int advId) { var statusId = SystemStaticData.LookUpAdvStatusId(SystemStaticData.AdvDictionary.Fobidden); var adv = db.AdvInfo.First(p => p.AdvId == advId); adv.Status = statusId; //强制下架的广告不退钱 db.SaveChanges(); return(RedirectToAction("AdvList", "Adv")); }
public ActionResult RechargeAccount(RechargeAccountModel model) { //find account var userAccount = db.User.FirstOrDefault( p => p.AccountName == model.RechargeAccount || p.MobilePhone == model.RechargeAccount); if (userAccount == null) { ModelState.AddModelError("RechargeAccount", "帐户不存在,请核对帐户"); return(View(model)); } if (ModelState.IsValid) { var rechargeStatusId = SystemStaticData.LookUpRechargeRewardStatusId(SystemStaticData.RechargeRewardDictionary.Normal); DataAccessLayer.RechargeHistory history = new DataAccessLayer.RechargeHistory(); history.CreateAt = DateTime.Now; history.CreateUserId = this.CurrentLoginUserId; history.Details = model.Remark; history.RechargeCash = model.Cash; var reward = db.RechargeReward.OrderByDescending(p => p.TargetValue) .FirstOrDefault(m => m.TargetValue <= model.Cash && m.Status == rechargeStatusId); history.RechargeRewardTypeId = reward == null ? 0 : reward.RechargeRewardId; history.UserId = userAccount.UserId; //账户余额增加 UserAccount account = db.UserAccount.First(p => p.UserId == userAccount.UserId); //记录账户历史记录 AccountHistory accountHistory = new AccountHistory(); accountHistory.CreateAt = DateTime.Now; accountHistory.AccountId = account.AccountId; accountHistory.ChangeValue = model.Cash; accountHistory.ComeFrom = "账户充值"; account.AccountBalance += model.Cash; if (reward != null) { account.AccountBalance += reward.RewardValue; accountHistory.ChangeValue += reward.RewardValue; accountHistory.Description = "账户充值获得奖励 " + reward.RewardValue; } db.RechargeHistory.Add(history); db.AccountHistory.Add(accountHistory); db.SaveChanges(); if (reward != null) { SystemIncome("充值奖励", -reward.RewardValue, history.RechargeHistoryId, "用户" + userAccount.AccountName + "充值 " + model.Cash + " 元,获得系统奖励 " + reward.RewardValue); db.SaveChanges(); } return(Content("<script>alert('充值成功');window.location.href=window.location.href</script>")); } return(View(model)); }
public ActionResult DeleteRewardType(int rewardTypeId) { var re = db.RewardType.FirstOrDefault(p => p.RewardTypeId == rewardTypeId); if (re == null) { return(RedirectToAction("Index", "SysConfig")); } re.Status = SystemStaticData.LookUpAdvRewardStatusId(SystemStaticData.AdvRewardDictionary.Stop); db.SaveChanges(); return(RedirectToAction("Index", "SysConfig")); }
public ActionResult EnableUserAccount(int userId) { var user = db.User.FirstOrDefault(p => p.UserId == userId); if (user == null) { return(RedirectToAction("UserList", "User")); } user.Status = SystemStaticData.LookUpUserStatusId(SystemStaticData.UserDictionary.Normal); db.SaveChanges(); return(RedirectToAction("UserList", "User")); }
public ActionResult Index() { RewardConfigModel rewardConfig = new RewardConfigModel(); var statusId = SystemStaticData.LookUpAdvRewardStatusId(SystemStaticData.AdvRewardDictionary.Normal); var incomeStatusId = SystemStaticData.LookUpSystemIncomeStatusId(SystemStaticData.SystemIncomeDictionary.Normal); var rechargeStatusId = SystemStaticData.LookUpRechargeRewardStatusId(SystemStaticData.RechargeRewardDictionary.Normal); rewardConfig.IncomeModel = db.SystemConfig.FirstOrDefault(p => p.Status == incomeStatusId); rewardConfig.RechargeRewards = db.RechargeReward.Where(p => p.Status == rechargeStatusId).ToList(); rewardConfig.Rewards = db.RewardType.Where(p => p.Status == statusId).ToList(); return(View(rewardConfig)); }
public ActionResult DeleteAreaPosition(int areaPositonId) { var re = db.AreaPosition.FirstOrDefault(p => p.PositionId == areaPositonId); if (re == null) { return(RedirectToAction("AreaIndex", "SysConfig")); } re.Status = SystemStaticData.LookUpSystemIncomeStatusId(SystemStaticData.SystemIncomeDictionary.Stop); db.SaveChanges(); return(RedirectToAction("AreaIndex", "SysConfig")); }
public ActionResult UserPauseAdv(int advId) { var statusId = SystemStaticData.LookUpAdvStatusId(SystemStaticData.AdvDictionary.Pause); var adv = db.AdvInfo.First(p => p.AdvId == advId); adv.Status = statusId; //退回余额 var userAccount = db.UserAccount.First(p => p.UserId == adv.UserId); LogAccountHistory(userAccount.AccountId, adv.RemainderCash, "用户终止广告,退回余额"); db.SaveChanges(); return(RedirectToAction("UAdvList", "Adv")); }
public ActionResult UpdateAdv() { var ids = Request.Form["AdvId"]; int advId = int.Parse(ids); var adv = db.AdvInfo.First(p => p.AdvId == advId); if (Request.Form["hidRefuse"] != "1") { foreach (var key in Request.Form.AllKeys) { if (key.Contains("rward|")) { var keyInfo = key.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries); AdvReward advReward = new AdvReward(); advReward.AdvId = advId; advReward.AdvRewardId = int.Parse(keyInfo[1]); advReward.RewardTypeId = int.Parse(keyInfo[2]); advReward.AdvRewardUrl = Request.Form[key]; db.AdvReward.Attach(advReward); db.Entry(advReward).State = EntityState.Modified; } } adv.Status = SystemStaticData.LookUpAdvStatusId(SystemStaticData.AdvDictionary.Normal); adv.ContentUrl = Request.Form["ContentUrl"]; adv.ModifyAt = DateTime.Now; var securityKey = ConfigurationManager.AppSettings["Key"]; var securityIV = ConfigurationManager.AppSettings["IV"]; var websiteURL = ConfigurationManager.AppSettings["WebSiteURl"]; var baseStr = advId.ToString(); var costFeeURL = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx37b646528bc2c1d2&redirect_uri={0}?para={1}&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect", websiteURL, SecurityUtility.Encrypt(baseStr, securityKey, securityIV)); adv.CostFeeUrl = costFeeURL; } else { //更新adv状态 adv.Status = SystemStaticData.LookUpAdvStatusId(SystemStaticData.AdvDictionary.Refuse); var userAccount = db.UserAccount.First(p => p.UserId == adv.UserId); //退款 userAccount.AccountBalance += adv.TotalCash; //记录账户日志 LogAccountHistory(userAccount.AccountId, adv.TotalCash, "广告审核未通过,退回扣款"); db.UserAccount.Attach(userAccount); db.Entry(userAccount).State = EntityState.Modified; } db.SaveChanges(); return(RedirectToAction("AdvList", "Adv")); }
public string GetRewardList(string existReward) { string[] existsObj = existReward.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); List <string> existsId = new List <string>(); foreach (var obj in existsObj) { var items = obj.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries); existsId.Add(items[0]); } var statusId = SystemStaticData.LookUpAdvRewardStatusId(SystemStaticData.AdvRewardDictionary.Normal); var result = db.RewardType.Where(p => p.Status == statusId && !existsId.Contains(p.RewardTypeId.ToString())).OrderBy(p => p.RewardValue).ToList(); return(new JavaScriptSerializer().Serialize(result)); }
public ActionResult SaveSystemIncome(SystemConfig incomeModel) { if (incomeModel.ConfigId > 0) { incomeModel.Status = SystemStaticData.LookUpSystemIncomeStatusId(SystemStaticData.SystemIncomeDictionary.Stop); db.SystemConfig.Attach(incomeModel); db.Entry(incomeModel).State = EntityState.Modified; } var income = new SystemConfig(); income.CreateAt = DateTime.Now; income.Status = SystemStaticData.LookUpSystemIncomeStatusId(SystemStaticData.SystemIncomeDictionary.Normal); income.SystemIncomeValue = incomeModel.SystemIncomeValue; db.SystemConfig.Add(income); db.SaveChanges(); return(RedirectToAction("Index", "SysConfig")); }
public ActionResult Create(DataAccessLayer.User user) { if (ModelState.IsValid) { user.CreateAt = DateTime.Now; user.IsAdmin = false; user.Password = SecurityUtility.PasswordHash(user.Password); user.Status = SystemStaticData.LookUpUserStatusId(SystemStaticData.UserDictionary.Normal); db.User.Add(user); db.SaveChanges(); var account = new UserAccount { UserId = user.UserId }; db.UserAccount.Add(account); db.SaveChanges(); } return(RedirectToAction("UserList", "User")); }
public ActionResult SignIn(SignInModel signIn) { if (ModelState.IsValid) { var user = uService.GetUserByUserName(signIn.UserName); if (user == null) { ModelState.AddModelError("UserName", "不存在该用户"); } else { if (user.Status != SystemStaticData.LookUpUserStatusId(SystemStaticData.UserDictionary.Normal)) { ModelState.AddModelError("UserName", "该用户以封停"); } else if (!SecurityUtility.PasswordHash(signIn.Password).Equals(user.Password)) { ModelState.AddModelError("Password", "用户名或者密码不正确"); } else { user.LastLoginIn = DateTime.Now; uService.SaveUserSignInLog(user, Request.UserHostAddress); //获取用户账户余额 var userAccount = db.UserAccount.First(p => p.UserId == user.UserId); Session["Account"] = userAccount.AccountBalance; Session["UserId"] = user.UserId; Session["UserName"] = user.AccountName; if (user.IsAdmin) { Session["Role"] = (int)UserRole.Admin; return(RedirectToAction("UserList", "User")); } else { Session["Role"] = (int)UserRole.NormalUser; return(RedirectToAction("UAdvList", "Adv")); } } } } return(View()); }
public ActionResult CreateRechargeReward(RechargeReward rewardType) { if (ModelState.IsValid) { //判断奖励条件是否已经存在 var rechargeStatusId = SystemStaticData.LookUpRechargeRewardStatusId(SystemStaticData.RechargeRewardDictionary.Normal); var existReward = db.RechargeReward.FirstOrDefault( p => p.TargetValue == rewardType.TargetValue && p.Status == rechargeStatusId); if (existReward != null) { ModelState.AddModelError("TargetValue", "该奖励规则已经存在"); return(View(rewardType)); } rewardType.CreateAt = DateTime.Now; rewardType.Status = SystemStaticData.LookUpRechargeRewardStatusId(SystemStaticData.RechargeRewardDictionary.Normal); db.RechargeReward.Add(rewardType); db.SaveChanges(); } return(RedirectToAction("Index", "SysConfig")); }
public ActionResult CreateReward(RewardType rewardType) { if (ModelState.IsValid) { //判断奖励条件是否已经存在 var statusId = SystemStaticData.LookUpAdvRewardStatusId(SystemStaticData.AdvRewardDictionary.Normal); var existReward = db.RewardType.FirstOrDefault( p => p.RewardValue == rewardType.RewardValue && p.Status == statusId); if (existReward != null) { ModelState.AddModelError("RewardValue", "该红包奖励金额已经存在"); return(View(rewardType)); } rewardType.Description = rewardType.ShortDescription; rewardType.CreateAt = DateTime.Now; rewardType.Status = SystemStaticData.LookUpAdvRewardStatusId(SystemStaticData.AdvRewardDictionary.Normal); db.RewardType.Add(rewardType); db.SaveChanges(); } return(RedirectToAction("Index", "SysConfig")); }
public string GetAreaAdv(string unioId, decimal longitude, decimal latitude) { WorkspaceDataSaveResult saveResult = new WorkspaceDataSaveResult(); var roundValue = decimal.Parse(ConfigurationManager.AppSettings["RoundPostion"]); decimal maxLat = latitude + roundValue; decimal minLat = latitude - roundValue; decimal maxLng = longitude + roundValue; decimal minLng = longitude - roundValue; var query = (from ap in db.AreaPosition where ap.Latitude <= maxLat && ap.Latitude >= minLat && ap.Longitude <= maxLng && ap.Longitude >= minLng select ap.AreaId).Distinct(); var areaIds = query.ToList(); if (areaIds.Count > 0) { var accessLog = db.AccessUserLocation.FirstOrDefault(p => p.UserUnioId == unioId); if (accessLog == null) { db.AccessUserLocation.Add(new AccessUserLocation() { UserUnioId = unioId, AccessLocatonAreaId = areaIds.First() }); } else { accessLog.AccessLocatonAreaId = areaIds.First(); } db.SaveChanges(); } var accessUserHistory = GetAccessedAdvId(unioId); var statusId = SystemStaticData.LookUpAdvStatusId(SystemStaticData.AdvDictionary.Normal); var nquery = from ai in db.AdvInfo join aa in db.AdvInfoArea on ai.AdvId equals aa.AdvId where areaIds.Contains(aa.AreaId) && ai.Status == statusId && !accessUserHistory.Contains(ai.AdvId) select new WxReturnAdvInfo() { Guid = Guid.NewGuid(), AdvId = ai.AdvId, ContentUrl = ai.ContentUrl }; var returnObj = nquery.OrderBy(p => p.Guid).FirstOrDefault(); var allGetCount = nquery.Count(); if (returnObj == null) { saveResult.Status = (int)DataSaveStatus.DataValidationError; saveResult.Description = "本区已领完,请到其他区域抢更多红包"; } else { returnObj.TotalCount = db.AdvHistory.Where(p => p.AdvId == returnObj.AdvId).Count(); returnObj.CanGetCount = (allGetCount - 1 <= 0?0:allGetCount - 1); saveResult.Status = (int)DataSaveStatus.Success; saveResult.Description = "为你搜索到一个红包"; saveResult.Data = returnObj; } return(new JavaScriptSerializer().Serialize(saveResult)); }
public string CreatePreAdv(string advTitle, string areaId, string rewardStr, int count) { WorkspaceDataSaveResult saveResult = new WorkspaceDataSaveResult(); var rewardIds = rewardStr.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); var allReward = db.RewardType.Where(p => rewardIds.Contains(p.RewardTypeId.ToString())).OrderBy(p => p.RewardValue).ToList(); //calc totalcost var averageCount = count / rewardIds.Length; var levValue = count % rewardIds.Length; decimal totalValue = 0; for (int i = 0; i < allReward.Count; i++) { if (i < allReward.Count - 1) { totalValue += averageCount * allReward[i].RewardValue; } else { totalValue += (averageCount + levValue) * allReward[i].RewardValue; } } var incomeStatusId = SystemStaticData.LookUpSystemIncomeStatusId(SystemStaticData.SystemIncomeDictionary.Normal); var inCo = db.SystemConfig.FirstOrDefault(p => p.Status == incomeStatusId); totalValue += count * inCo.SystemIncomeValue; //检测账户余额是否够 var userAccount = db.UserAccount.First(p => p.UserId == this.CurrentLoginUserId); if (userAccount.AccountBalance < totalValue) { saveResult.Status = (int)DataSaveStatus.DataValidationError; saveResult.Description = "账户余额不足,请联系管理员充值"; return(new JavaScriptSerializer().Serialize(saveResult)); } //sava adv AdvInfo adv = new AdvInfo(); adv.AdvTitle = advTitle; //adv.AreaId = areaId; adv.TotalCount = count; adv.TotalCash = totalValue; adv.RemainderCash = totalValue; adv.CreateAt = DateTime.Now; adv.UserId = this.CurrentLoginUserId; adv.Status = SystemStaticData.LookUpAdvStatusId(SystemStaticData.AdvDictionary.Prepare); db.AdvInfo.Add(adv); db.SaveChanges(); //save advArea var publishToAreaIds = areaId.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (var aId in publishToAreaIds) { AdvInfoArea advInfoArea = new AdvInfoArea(); advInfoArea.AdvId = adv.AdvId; advInfoArea.AreaId = int.Parse(aId); db.AdvInfoArea.Add(advInfoArea); } //save adv reward foreach (var id in rewardIds) { AdvReward reward = new AdvReward(); reward.RewardTypeId = int.Parse(id); reward.AdvId = adv.AdvId; db.AdvReward.Add(reward); } //扣款 userAccount.AccountBalance -= totalValue; //记录账户日志 AccountHistory accountHistory = new AccountHistory(); accountHistory.CreateAt = DateTime.Now; accountHistory.AccountId = userAccount.AccountId; accountHistory.ChangeValue = -totalValue; accountHistory.ComeFrom = "发布广告"; db.AccountHistory.Add(accountHistory); db.SaveChanges(); saveResult.Status = (int)DataSaveStatus.Success; saveResult.Description = "申请成功,请联系管理员进行广告内容制作"; return(new JavaScriptSerializer().Serialize(saveResult)); }
public ActionResult GetAdvByPager(string iSortCol_0, string sSortDir_0, int iDisplayStart, int iDisplayLength, string sEcho) { var sortFiled = iSortCol_0; string orderBy = sSortDir_0; var pageIndex = iDisplayStart; var pageSize = iDisplayLength; //条件 var name = Request["key"]; var starTime = Request["sTime"]; var endTime = Request["eTime"]; IQueryable <AdvInfo> list = db.AdvInfo.Where(p => p.UserId == this.CurrentLoginUserId); if (!string.IsNullOrEmpty(name)) { list = list.Where(p => p.AdvTitle.Contains(name.Trim())); } DateTime sTime; DateTime eTime; if (!string.IsNullOrEmpty(starTime)) { if (DateTime.TryParse(starTime, out sTime)) { list = list.Where(p => p.CreateAt > sTime); } } if (!string.IsNullOrEmpty(endTime)) { if (DateTime.TryParse(endTime, out eTime)) { list = list.Where(p => p.CreateAt < eTime); } } switch (sortFiled) { case "1": list = orderBy.Equals("asc") ? list.OrderBy(b => b.AdvTitle) : list.OrderByDescending(b => b.AdvTitle); break; case "2": list = orderBy.Equals("asc") ? list.OrderBy(b => b.TotalCount) : list.OrderByDescending(b => b.TotalCount); break; case "3": list = orderBy.Equals("asc") ? list.OrderBy(b => b.RemainderCash) : list.OrderByDescending(b => b.RemainderCash); break; case "4": list = orderBy.Equals("asc") ? list.OrderBy(b => b.Status) : list.OrderByDescending(b => b.Status); break; case "5": list = orderBy.Equals("asc") ? list.OrderBy(b => b.CreateAt) : list.OrderByDescending(b => b.CreateAt); break; default: list = orderBy.Equals("asc") ? list.OrderBy(b => b.CreateAt) : list.OrderByDescending(b => b.CreateAt); break; } int totalRecords = list.Count(); list = list.Skip(pageIndex).Take(pageSize); var returnlist = list.ToList().Select( p => new AdvAjaxModel { AdvId = p.AdvId, AdvTitle = p.AdvTitle, CreateAt = p.CreateAt.ToString("yyyy-MM-dd"), RemainderCash = p.RemainderCash, Status = SystemStaticData.LookUpAdvStatusId(p.Status), TotalCash = p.TotalCash, TotalCount = p.TotalCount }); var eh = Request["sEcho"]; return(Json(new { sEcho = eh, iTotalRecords = totalRecords, iTotalDisplayRecords = totalRecords, //data.Count(), aaData = returnlist }, JsonRequestBehavior.AllowGet)); }
public ActionResult Cost(string para) { var code = Request.Params["code"]; var appid = ConfigurationManager.AppSettings["AppID"]; var secret = ConfigurationManager.AppSettings["AppSecret"]; var accessToken = OAuthApi.GetAccessToken(appid, secret, code); var accessUserInfo = OAuthApi.GetUserInfo(accessToken.access_token, accessToken.openid); var securityKey = ConfigurationManager.AppSettings["Key"]; var securityIV = ConfigurationManager.AppSettings["IV"]; var advId = int.Parse(SecurityUtility.Decrypt(para, securityKey, securityIV)); int normalStatusId = SystemStaticData.LookUpAdvStatusId(SystemStaticData.AdvDictionary.Normal); var advInfo = db.AdvInfo.First(p => p.AdvId == advId && p.Status == normalStatusId); var advRewardList = (from ar in db.AdvReward join rt in db.RewardType on ar.RewardTypeId equals rt.RewardTypeId where ar.AdvId == advId orderby rt.RewardValue select new AdvRewardModel { AdvId = ar.AdvId, AdvRewardUrl = ar.AdvRewardUrl, AdvRewardId = ar.AdvRewardId, RewardValue = rt.RewardValue }).ToList(); int percentReward = advInfo.TotalCount / advRewardList.Count; int lastReward = advInfo.TotalCount % advRewardList.Count; //获取奖励历史 var advRewardHistory = db.AdvHistory.Where(p => p.AdvId == advId).ToList(); Dictionary <decimal, int> costReward = new Dictionary <decimal, int>(); Dictionary <decimal, int> initReward = new Dictionary <decimal, int>(); for (int i = 0; i < advRewardList.Count; i++) { costReward.Add(advRewardList[i].RewardValue, advRewardHistory.Where(p => p.AdvRewardId == advRewardList[i].AdvRewardId).Count()); if (i < advRewardList.Count - 1) { initReward.Add(advRewardList[i].RewardValue, percentReward); } else { initReward.Add(advRewardList[i].RewardValue, percentReward + lastReward); } } foreach (var key in initReward.Keys) { if (costReward[key] == initReward[key]) { costReward.Remove(key); } } Random r = new Random(); var index = r.Next(costReward.Keys.Count); var keyList = costReward.Keys.ToArray(); decimal finaKey = 0; for (int i = 0; i < keyList.Length; i++) { if (i == index) { finaKey = keyList[i]; break; } } var returnReward = advRewardList.FirstOrDefault(p => p.RewardValue == finaKey); if (returnReward == null) { return(null); } else { var accessUserHistory = GetAccessedAdvId(accessToken.openid); if (accessUserHistory.Contains(advInfo.AdvId)) { return(Redirect("https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx37b646528bc2c1d2&redirect_uri=http://www.mkmoto.com/GetAdv/index&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect")); } AdvHistory adHistory = new AdvHistory(); adHistory.AdvId = advInfo.AdvId; adHistory.AdvRewardId = returnReward.AdvRewardId; adHistory.CreateAt = DateTime.Now; adHistory.GetUserUnioId = accessUserInfo.openid; //获取地理位置 var accessArea = db.AccessUserLocation.First(p => p.UserUnioId == accessUserInfo.openid); adHistory.GetAreaId = accessArea.AccessLocatonAreaId; db.AdvHistory.Add(adHistory); //系统收取服务费 var incomeStatusId = SystemStaticData.LookUpSystemIncomeStatusId(SystemStaticData.SystemIncomeDictionary.Normal); var serviceFee = db.SystemConfig.First(p => p.Status == incomeStatusId); SystemIncome("红包服务费", serviceFee.SystemIncomeValue, advInfo.AdvId, "系统成功发放 " + advInfo.AdvTitle + " 红包,获得服务费" + serviceFee.SystemIncomeValue); //扣除广告剩余金额 advInfo.RemainderCash -= (serviceFee.SystemIncomeValue + returnReward.RewardValue); //余额为0时广告下架 if (advInfo.RemainderCash <= 0) { advInfo.Status = SystemStaticData.LookUpAdvStatusId(SystemStaticData.AdvDictionary.Stop); } db.SaveChanges(); return(Redirect(returnReward.AdvRewardUrl)); } }