/// <summary> /// 设置问题结果 /// </summary> /// <param name="userId">用户userId</param> /// <param name="pkid">问题pkid</param> /// <param name="resOptions">用户选项</param> /// <returns></returns> public async Task <OperationResult <QuestionAnsResponse> > SetAnswerResAsync(QuestionAnsRequestModel request) { Regex regex = new Regex("^([0-9]|[a-z]|[A-Z]){7}([0-9]|[a-z]|[A-Z])$"); if (!regex.IsMatch(request.hashKey)) { return(OperationResult.FromResult(new QuestionAnsResponse() { IsReal = false })); } if (request.pkid <= 0) { return(OperationResult.FromResult(new QuestionAnsResponse() { IsReal = false })); } if (string.IsNullOrWhiteSpace(request.resOptions)) { return(OperationResult.FromResult(new QuestionAnsResponse() { IsReal = false })); } var list = await QuesAnsManager.GetBigBrandQuesList(request.userId, request.hashKey, false); var realValue = list?.Where(_ => _.IsFinish == true)?.Where(_ => _.ResValue == _.OptionsReal)?.Count(); var errorValue = list?.Where(_ => _.IsFinish == true)?.Where(_ => _.ResValue != _.OptionsReal)?.Count(); await QuesAnsManager.UpdateBigBrandQues(request.pkid, request.resOptions); var entity = await QuesAnsManager.GetBigBrandQuesEntity(request.pkid); return(OperationResult.FromResult(new QuestionAnsResponse() { IsReal = entity?.OptionsReal == request.resOptions, OptionsReal = entity?.OptionsReal, RealValue = entity?.OptionsReal == request.resOptions ? (realValue + 1):realValue, Error = entity?.OptionsReal == request.resOptions ? (errorValue) : (errorValue + 1) })); }
/// <summary> /// 更新问题库 /// </summary> /// <returns></returns> public async Task <OperationResult <bool> > UpdateQuestionInfoListAsync() { return(OperationResult.FromResult(await QuesAnsManager.UpdateAnswerInfoList())); }
/// <summary> /// 问答抽奖 /// </summary> /// <param name="userId">用户userId</param> /// <param name="deviceId">设备Id</param> /// <param name="Channal">渠道</param> /// <param name="hashKey">抽奖hashKey</param> /// <param name="phone">手机号</param> /// <param name="refer">url</param> /// <param name="grade">得分</param> /// <returns></returns> public async Task <OperationResult <BigBrandResponse> > GetAnswerPacketAsync(Guid userId, string deviceId, string Channal, string hashKey, string phone, string refer) { if (string.IsNullOrWhiteSpace(hashKey)) { return(OperationResult.FromResult(new BigBrandResponse() { Code = -1, Msg = "抽奖活动不存在" })); } Regex regex = new Regex("^([0-9]|[a-z]|[A-Z]){7}([0-9]|[a-z]|[A-Z])$"); if (!regex.IsMatch(hashKey)) { return(OperationResult.FromResult(new BigBrandResponse() { Code = -1, Msg = "抽奖活动hashkey不匹配" })); } if (userId == null) { return(OperationResult.FromResult(new BigBrandResponse() { Code = -1, Msg = "用户UserId不能为空" })); } BigBrandResponse result = new BigBrandResponse(); BigBrandLogic bigBrand = new BigBrandLogic(hashKey, userId, phone, deviceId, Channal); bigBrand.Refer = refer; var isResult = await bigBrand.IsSelectCanPackage(); if (!isResult.Result) { result.Code = 0; if (bigBrand.entity.BigBrandType == 2) { result.Msg = "您的积分不足,无法抽奖哦"; } else if (bigBrand.entity.BigBrandType == 3) { result.Msg = "抱歉,只有指定用户才能参加此抽奖哦"; } else { result.Msg = "抽奖次数不足"; } return(OperationResult.FromResult(result)); } System.Diagnostics.Stopwatch watcher = new System.Diagnostics.Stopwatch(); watcher.Restart(); bigBrand._time = await QuesAnsManager.GetGrade(userId, hashKey); watcher.Stop(); Logger.Info($"GetAnswerPacketAsync GetGrade times {watcher.ElapsedMilliseconds}"); bigBrand._time += 1; watcher.Restart(); var pageIndex = bigBrand.GetRandomPageckagePKID(); watcher.Stop(); Logger.Info($"GetAnswerPacketAsync GetRandomPageckagePKID times {watcher.ElapsedMilliseconds}"); if (pageIndex <= 0) { result.Code = 0; result.Msg = "对不起,您来晚了"; return(OperationResult.FromResult(result)); } watcher.Restart(); var response = await bigBrand.CreatePageage(pageIndex); watcher.Stop(); Logger.Info($"GetAnswerPacketAsync CreatePageage times {watcher.ElapsedMilliseconds}"); if (!response.Success) { return(OperationResult.FromError <BigBrandResponse>(response.ErrorCode, response.ErrorMessage)); } var page = response.Result; watcher.Restart(); await bigBrand.AddPackageLog(page.PKID, page.PromotionCodePKIDs); watcher.Stop(); Logger.Info($"GetAnswerPacketAsync AddPackageLog times {watcher.ElapsedMilliseconds}"); bigBrand._time -= 1; result.Code = 1; result.PromptImg = page.PromptImg; result.PromptMsg = page.PromptMsg.Replace("{{allquestion}}", bigBrand?.entity?.AnsQuesConfig?.TipCount.ToString()).Replace("{{rightanswer}}", bigBrand?._time.ToString()); result.PromptType = page.PromptType; result.RedirectAPP = page.RedirectAPP; result.RedirectBtnText = page.RedirectBtnText; result.RedirectH5 = page.RedirectH5; result.RedirectWXAPP = page.RedirectWXAPP; result.RedirectHuaWei = page.RedirectHuaWei; result.WxAppId = page.WxAppId; result.RewardType = page.RewardType; result.IsShare = bigBrand.IsShare; result.TimeCount = bigBrand.TimeCount; result.ShareTimes = bigBrand.ShareTimes; result.Time = bigBrand._time; result.RealTip = bigBrand?.RealTip; if (GlobalConstant.HashKey_VehicleTypeCertificationRights.Contains(hashKey)) { result.DefaultPool = bigBrand.DefaultPool; result.CouponRuleItems = await bigBrand.GetCouponRuleItems(page.PKID, DateTime.Now); } produceer?.Send("notification.TaskActionQueue", new { UserId = userId, ActionName = "2LuckyMoney", HashKey = hashKey }); return(OperationResult.FromResult(result)); }
/// <summary> /// 问题列表 /// </summary> /// <param name="userId">用户</param> /// <param name="hashKey">抽奖hashKey</param> /// <returns></returns> public async Task <OperationResult <List <BigBrandQuesList> > > GetQuestionListAsync(Guid userId, string hashKey) { Regex regex = new Regex("^([0-9]|[a-z]|[A-Z]){7}([0-9]|[a-z]|[A-Z])$"); if (!regex.IsMatch(hashKey)) { return(null); } var list = await QuesAnsManager.GetBigBrandQuesList(userId, hashKey); if (list == null || list?.Where(_ => _.IsFinish == false)?.Count() == 0) { var quesList = await QuesAnsManager.GetAnswerInfoList(); if (quesList?.Count <= 0) { throw new Exception("问答题库没有信息"); } //生成问答试卷 Random random = new Random(Guid.NewGuid().GetHashCode()); string curNo = DateTime.Now.ToString("yyyyMMddHHmmss") + (random.Next(0, quesList.Count)).ToString("0000"); var bigBrand = await BigBrandManager.GetBigBrand(hashKey); if (bigBrand.AnsQuesConfig == null || bigBrand?.AnsQuesConfig?.TipCount == 0) { throw new Exception("没有配置问答抽奖的题目数量"); } List <BigBrandQuesList> quesModelList = new List <BigBrandQuesList>(); #region 生成题库随机集合 List <int> indexs = new List <int>(); while (indexs?.Count < bigBrand.AnsQuesConfig?.TipCount) { random = new Random(Guid.NewGuid().GetHashCode()); var number = random.Next(0, quesList.Count); if (!indexs.Exists(_ => _ == number)) { indexs.Add(number); } else { number++; if (number >= quesList.Count || indexs.Exists(_ => _ == number)) { continue; } else { indexs.Add(number); } } } #endregion int orderby = 1; #region 创建试卷 foreach (var index in indexs) { var item = quesList[index]; BigBrandQuesList model = new BigBrandQuesList() { Answer = item.Answer, CreateDateTime = DateTime.Now, CurAnsNo = curNo, HashKey = hashKey, IsFinish = false, LastUpdateDateTime = DateTime.Now, OptionsA = item.OptionsA, OptionsB = item.OptionsB, OptionsC = item.OptionsC, OptionsD = item.OptionsD, OptionsReal = item.OptionsReal, OrderBy = orderby++, Tip = item.Tip, UserId = userId }; quesModelList.Add(model); } #endregion var result = QuesAnsManager.InsertBigBrandQues(quesModelList); if (result) { list = await QuesAnsManager.GetBigBrandQuesList(userId, hashKey, false); } } return(OperationResult.FromResult(list)); }