public async Task <IActionResult> GetMyEaringsAsync() { var balanceBiz = new DoctorBalanceBiz(); var balanceModel = await balanceBiz.GetAsync(UserID ?? ""); if (balanceModel == null) { balanceModel = new DoctorBalanceModel { BalanceGuid = UserID, TotalEarnings = 0, AccBalance = 0, TotalWithdraw = 0, Status = DoctorBalanceStatusEnum.Normal.ToString(), CreatedBy = UserID, LastUpdatedBy = UserID, OrgGuid = string.Empty }; var isSucc = await balanceBiz.InsertAsync(balanceModel); if (!isSucc) { return(Failed(ErrorCode.Empty, "网络异常,请检查!")); } } else if (!balanceModel.Enable || balanceModel.Status.Equals(DoctorBalanceStatusEnum.Frozen.ToString())) { return(Failed(ErrorCode.Empty, "该用户收益数据不可用,请检查!")); } var response = balanceModel.ToDto <GetMyEaringsAsyncResponse>(); response.TotalEarnings = response.TotalEarnings / 100; response.AccBalance = response.AccBalance / 100; response.TotalWithdraw = response.TotalWithdraw / 100; return(Success(response)); }
/// <summary> /// 异步批量插入 /// </summary> /// <param name="model"></param> /// <returns></returns> public async Task <bool> InsertApplyModelAndFlowingModelAsync(DoctorWithDrawApplyModel withdrawModel, TransferFlowingModel flowingModel, DoctorBalanceModel balanceModel) { return(await MySqlHelper.TransactionAsync(async (conn, tran) => { if (string.IsNullOrWhiteSpace(await conn.InsertAsync <string, DoctorWithDrawApplyModel>(withdrawModel))) { return false; } if (string.IsNullOrWhiteSpace(await conn.InsertAsync <string, TransferFlowingModel>(flowingModel))) { return false; } await conn.UpdateAsync(balanceModel); return true; })); }
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, "网络错误,设置最佳回答失败")); }
/// <summary> /// 发布问题 /// </summary> /// <param name="scoreModel">发布问题消费积分model</param> /// <param name="questionModel">问题model</param> /// <returns></returns> public async Task <bool> FaqsAutoAllotFeeUpdateAsync(FaqsQuestionModel questionModel, List <DoctorEaringsDetailModel> earingsDetailModelList, DoctorBalanceModel balanceModel) { return(await MySqlHelper.TransactionAsync(async (conn, trans) => { if (string.IsNullOrWhiteSpace(await conn.InsertAsync <string, DoctorBalanceModel>(balanceModel))) { return false; } if (string.IsNullOrWhiteSpace(await conn.InsertAsync <string, FaqsQuestionModel>(questionModel))) { return false; } return true; })); }
/// <summary> /// 问答分配悬赏金额 /// </summary> /// <param name="parentGuid"></param> /// <returns></returns> public async Task <int> FaqsAllotFeeAsync() { var qusetionModelList = await Get15DaysQuestionModelListAsync(); int conpleteNum = 0; foreach (var item in qusetionModelList) { item.Status = FaqsQuestionModel.QuestionStatusEnum.End.ToString(); item.LastUpdatedDate = DateTime.Now; var answerList = await GetAnswerModelListByQuestionGuidAsync(item.QuestionGuid); if (answerList == null || answerList.Count < 1) { //没有回答,金额退给用户,变更问题状态为过期 //获取流水,调用退款接口 var flowingModel = await new TransactionFlowingBiz().GetModelsById(item.TransferFlowingGuid); var requestDto = new Dtos.MallPay.FangDiInterface.DoRefundRequestDto { Reason = "FAQS=>问题无回答,退款.", Refund_Fee = Convert.ToInt32(flowingModel.Amount).ToString(), Refund_No = flowingModel.TransactionNumber, Trade_No = flowingModel?.OutTradeNo }; var response = await new FangDiPayBiz().RefundAsync(requestDto); if (response.ResultCode.Equals("0") && response.ResultMsg.ToLower().Equals("success")) { flowingModel.TransactionStatus = TransactionStatusEnum.RefundSuccess.ToString(); flowingModel.OutRefundNo = response.Refund_No; flowingModel.Update(); item.Update(); } conpleteNum++; continue; } int answerCount = answerList.Count; if (answerCount > 10) { answerList = answerList.Take(10).ToList(); } //.OrderByDescending(a => a.LikeCount).OrderByDescending(a => a.CreationDate) decimal allotNum = 0; GetManthNumber(item.RewardIntergral, answerList.Count, ref allotNum); var balanceBiz = new DoctorBalanceBiz(); if (answerList.Count < 11) { var answerModelList = new List <FaqsAnswerModel>(); var earingsDetailModelList = new List <DoctorEaringsDetailModel>(); var doctorBalanceModelList = new List <Dictionary <bool, DoctorBalanceModel> >(); foreach (var answerItem in answerList) { #region 更新Model var newAnswerModel = new FaqsAnswerModel { AnswerGuid = answerItem.AnswerGuid, MainAnswer = answerItem.MainAnswer, Content = answerItem.Content, QuestionGuid = answerItem.QuestionGuid, UserGuid = answerItem.UserGuid, ReceiveType = FaqsAnswerModel.AnswerReceiveTypeEnum.Money.ToString(), RewardIntergral = Convert.ToInt32(allotNum * 100), CreatedBy = answerItem.CreatedBy, LastUpdatedBy = answerItem.LastUpdatedBy, CreationDate = answerItem.CreationDate.Value, LastUpdatedDate = DateTime.Now, OrgGuid = answerItem.OrgGuid, Enable = answerItem.Enable }; answerModelList.Add(newAnswerModel); var newEaringsDetailModel = new DoctorEaringsDetailModel { DetailGuid = Guid.NewGuid().ToString("N"), AnswerGuid = answerItem.AnswerGuid, DoctorGuid = answerItem.UserGuid, FeeFrom = DoctorEaringsDetailModel.FeeFromTypeEnum.Answer.ToString(), ReceivedFee = Convert.ToInt32(allotNum * 100), OrgGuid = string.Empty, CreatedBy = answerItem.UserGuid, LastUpdatedBy = answerItem.UserGuid, Remark = string.Empty }; earingsDetailModelList.Add(newEaringsDetailModel); var balanceModel = await balanceBiz.GetAsync(answerItem.UserGuid ?? ""); var isNewBalanceModel = false; if (balanceModel == null) { isNewBalanceModel = true; balanceModel = new DoctorBalanceModel { BalanceGuid = answerItem.UserGuid, TotalEarnings = Convert.ToInt32(allotNum * 100), AccBalance = Convert.ToInt32(allotNum * 100), TotalWithdraw = 0, Status = DoctorBalanceModel.DoctorBalanceStatusEnum.Normal.ToString(), CreatedBy = answerItem.UserGuid, LastUpdatedBy = answerItem.UserGuid, OrgGuid = string.Empty }; } else { balanceModel.TotalEarnings += Convert.ToInt32(allotNum * 100); balanceModel.AccBalance += Convert.ToInt32(allotNum * 100); } doctorBalanceModelList.Add(new Dictionary <bool, DoctorBalanceModel> { { isNewBalanceModel, balanceModel } }); #endregion } var isSucc = await FaqsAllotQuestionFee(item, answerModelList, earingsDetailModelList, doctorBalanceModelList); if (!isSucc) { Logger.Error($"FaqsAllotFeeAsync=>问答分配悬赏金失败,QuestionGuid: {item.QuestionGuid}"); continue; } conpleteNum++; } } return(conpleteNum); }
/// <summary> /// 设置回答为最佳答案(金额) /// </summary> /// <param name="model">回答model</param> /// <param name="收益明细">收益明细model</param> /// <returns></returns> public async Task <bool> SetBestAnswerAllotMoneyAsync(FaqsAnswerModel model, DoctorEaringsDetailModel earingsDetailModel, DoctorBalanceModel balanceModel, FaqsQuestionModel questionModel, bool isNewBalanceModel) { return(await MySqlHelper.TransactionAsync(async (conn, trans) => { if (isNewBalanceModel) { if (string.IsNullOrWhiteSpace(await conn.InsertAsync <string, DoctorBalanceModel>(balanceModel))) { return false; } } else { if ((await conn.UpdateAsync(balanceModel)) < 1) { return false; } } if (await conn.UpdateAsync(model) == 0) { return false; } if (await conn.UpdateAsync(questionModel) == 0) { return false; } if (string.IsNullOrWhiteSpace(await conn.InsertAsync <string, DoctorEaringsDetailModel>(earingsDetailModel))) { return false; } return true; })); }