/// <summary>
 /// 自动的执行任务
 /// </summary>
 /// <remarks>
 /// Interval 单位为毫秒
 /// Begin 从 2019-1-1 0:0:0 开始计时执行
 /// </remarks>
 public override void Run()
 {
     try
     {
         var stopwatch = new Stopwatch();
         stopwatch.Start();
         //Logger.Info("开始问答分配悬赏金");
         var num = new FaqsAnswerBiz().FaqsAllotFeeAsync().Result;
         stopwatch.Stop();
         if (num >= 0)
         {
             Logger.Info($"问答分配悬赏金完成,共处理条 {num} 数据。耗时:{stopwatch.ElapsedMilliseconds / 1000}秒");
         }
     }
     catch (Exception ex)
     {
         Logger.Info($"问答自动分配悬赏金报错,Error:{ex.Message} ");
     }
 }
Exemple #2
0
        public async Task <IActionResult> ReplyFaqsQuestionAsync([FromBody] ReplyFaqsQuestionRequestDto request)
        {
            var questionBiz = new FaqsQuestionBiz();
            var question    = await new FaqsQuestionBiz().GetModelAsync(request.QuestionGuid);

            if (question == null)
            {
                return(Failed(ErrorCode.Empty, "参数错误"));
            }
            var isExistAnswer = await questionBiz.GetIsAnswerExist(question.QuestionGuid, UserID);

            if (isExistAnswer)
            {
                return(Failed(ErrorCode.DataBaseError, "该问题已回答过,不能二次回答!"));
            }
            var model = new FaqsAnswerModel
            {
                CreatedBy       = UserID,
                Enable          = true,
                Content         = request.Content,
                AnswerGuid      = Guid.NewGuid().ToString("N"),
                LastUpdatedBy   = UserID,
                ReceiveType     = question.RewardType,
                MainAnswer      = false,
                OrgGuid         = string.Empty,
                QuestionGuid    = request.QuestionGuid,
                UserGuid        = UserID,
                RewardIntergral = 0
            };
            FaqsAnswerBiz faqsAnswerBiz = new FaqsAnswerBiz();

            lock (lockObject)
            {
                question.AnswerNum = (faqsAnswerBiz.GetTotalByQuestionIdAsync(question.QuestionGuid).Result + 1);
                var result = faqsAnswerBiz.InsertAsync(model, question).Result;
                return(Success());
            }
        }
Exemple #3
0
        public async Task <IActionResult> GetFaqsQuestionInfoAsync([FromQuery] GetFaqsQuestionInfoRequestDto request)
        {
            var question = await new FaqsQuestionBiz().GetModelAsync(request.QuestionGuid);

            if (question == null)
            {
                return(Failed(ErrorCode.Empty, "参数错误"));
            }
            var           hot                = await new HotBiz().GetModelAsync(request.QuestionGuid);
            var           user               = await new UserBiz().GetModelAsync(question.UserGuid);
            FaqsAnswerBiz faqsAnswerBiz      = new FaqsAnswerBiz();
            var           attachmentGuidList = JsonConvert.DeserializeObject <string[]>(question.AttachmentGuidList ?? "[]");
            var           accessorys         = await new AccessoryExBiz().GetModelsAsync(attachmentGuidList);
            var           userPortrait       = await new AccessoryBiz().GetAsync(user.PortraitGuid);
            var           resopnse           = new GetFaqsQuestionInfoResponseDto
            {
                QuestionGuid     = question.QuestionGuid,
                AnswerNum        = question.AnswerNum,
                Content          = question.Content,
                CreationDate     = question.CreationDate,
                Enable           = question.Enable,
                Status           = question.Status,
                VisitCount       = hot?.VisitCount ?? 0,
                RewardIntergral  = question.RewardType.Equals(FaqsQuestionModel.RewardTypeEnum.Money.ToString()) ? (decimal)question.RewardIntergral / 100 : question.RewardIntergral,
                RewardType       = question.RewardType,
                UserGuid         = question.UserGuid,
                UserName         = user?.UserName,
                AttachedPictures = accessorys.Select(a => new GetFaqsQuestionInfoResponseDto.Attachment
                {
                    Guid = a.AccessoryGuid,
                    Url  = $"{a.BasePath}{a.RelativePath}"
                }).ToArray(),
                Portrait = $"{userPortrait?.BasePath}{userPortrait?.RelativePath}"
            };

            return(Success(resopnse));
        }
        public async Task <IActionResult> SetBestAnswerAsync(string answerGuid)
        {
            var biz   = new FaqsAnswerBiz();
            var model = await biz.GetModelAsync(answerGuid);

            if (!(model?.Enable ?? false))
            {
                return(Failed(ErrorCode.Empty, "该回答不存在"));
            }
            var questionModel = await new FaqsQuestionBiz().GetModelAsync(model.QuestionGuid);

            if (!string.Equals(questionModel.Status, FaqsQuestionModel.QuestionStatusEnum.Solving.ToString(), StringComparison.OrdinalIgnoreCase))
            {
                return(Failed(ErrorCode.UserData, "当前问题状态不是[未解决],不能设置最佳回答"));
            }
            model.LastUpdatedBy   = UserID;
            model.LastUpdatedDate = DateTime.Now;
            model.MainAnswer      = true;
            model.RewardIntergral = questionModel.RewardIntergral;

            questionModel.Status          = FaqsQuestionModel.QuestionStatusEnum.Solved.ToString();
            questionModel.LastUpdatedBy   = UserID;
            questionModel.LastUpdatedDate = DateTime.Now;
            var result = false;

            if (questionModel.RewardType.Equals(FaqsQuestionModel.RewardTypeEnum.Intergral.ToString()))
            {
                model.ReceiveType = FaqsQuestionModel.RewardTypeEnum.Intergral.ToString();
                var scoreModel = new ScoreModel
                {
                    ScoreGuid     = Guid.NewGuid().ToString("N"),
                    UserGuid      = model.UserGuid,
                    UserTypeGuid  = GD.Common.EnumDefine.UserType.Doctor.ToString(),
                    Variation     = questionModel.RewardIntergral,
                    Reason        = "回答被设为最佳",
                    PlatformType  = GD.Common.EnumDefine.PlatformType.CloudDoctor.ToString(),
                    CreatedBy     = UserID,
                    LastUpdatedBy = UserID,
                    OrgGuid       = string.Empty
                };
                result = await biz.SetBestAnswerAsync(model, scoreModel, questionModel);
            }
            else if (questionModel.RewardType.Equals(FaqsQuestionModel.RewardTypeEnum.Money.ToString()))
            {
                model.ReceiveType = FaqsQuestionModel.RewardTypeEnum.Money.ToString();
                var balanceModel      = await new DoctorBalanceBiz().GetModelsById(model.UserGuid);
                var isNewBalanceModel = false;
                if (balanceModel == null)
                {
                    isNewBalanceModel = true;
                    balanceModel      = new DoctorBalanceModel
                    {
                        BalanceGuid   = model.UserGuid,
                        TotalEarnings = 0,
                        AccBalance    = 0,
                        TotalWithdraw = 0,
                        Status        = DoctorBalanceModel.DoctorBalanceStatusEnum.Normal.ToString(),
                        CreatedBy     = UserID,
                        LastUpdatedBy = UserID,
                        OrgGuid       = string.Empty
                    };
                }
                var newEaringsDetailModel = new DoctorEaringsDetailModel
                {
                    DetailGuid    = Guid.NewGuid().ToString("N"),
                    AnswerGuid    = model.AnswerGuid,
                    DoctorGuid    = model.UserGuid,
                    FeeFrom       = DoctorEaringsDetailModel.FeeFromTypeEnum.Answer.ToString(),
                    ReceivedFee   = questionModel.RewardIntergral,
                    OrgGuid       = string.Empty,
                    CreatedBy     = UserID,
                    LastUpdatedBy = UserID,
                    Remark        = string.Empty
                };
                balanceModel.TotalEarnings += newEaringsDetailModel.ReceivedFee;
                balanceModel.AccBalance    += newEaringsDetailModel.ReceivedFee;
                result = await biz.SetBestAnswerAllotMoneyAsync(model, newEaringsDetailModel, balanceModel, questionModel, isNewBalanceModel);
            }
            return(result ? Success() : Failed(ErrorCode.DataBaseError, "网络错误,设置最佳回答失败"));
        }