FrequentlyAskedQuestionDal.cs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. using Cksoft.Data;
  2. using Cksoft.Unity;
  3. using DllEapEntity;
  4. using DllEapEntity.Dtos;
  5. using DllEapEntity.Enums;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. namespace DllEapDal
  12. {
  13. /// <summary>
  14. /// FAQ
  15. /// </summary>
  16. public class FrequentlyAskedQuestionDal
  17. {
  18. private readonly IDatabase CurrDb = null;
  19. public FrequentlyAskedQuestionDal(IDatabase db)
  20. {
  21. CurrDb = db;
  22. }
  23. /// <summary>
  24. /// /
  25. /// </summary>
  26. /// <param name="question"></param>
  27. /// <param name="visableRange"></param>
  28. /// <param name="pageIndex"></param>
  29. /// <param name="pageSize"></param>
  30. /// <returns></returns>
  31. public async Task<LayuiModel<FrequentlyAskedQuestion>> Get(string question,
  32. EnumQuestionVisableRange? visableRange, int pageIndex, int pageSize)
  33. {
  34. string errorinfo = string.Empty;
  35. var filter = string.Empty;
  36. if (!string.IsNullOrEmpty(question))
  37. {
  38. filter += $" and a.Question like '%{question}%'";
  39. }
  40. if (visableRange.HasValue)
  41. {
  42. filter += $" and a.VisableRange={visableRange}";
  43. }
  44. var datas = await CurrDb.FindListForConditionAsync<FrequentlyAskedQuestion>(
  45. $"{filter} order by id desc limit {(pageIndex - 1) * pageSize},{pageSize}",
  46. ref errorinfo);
  47. var sql = $"select count(1) from FrequentlyAskedQuestion a where 1=1 {filter}";
  48. var count = Convert.ToInt32(CurrDb.FindListAsync<string>(sql, null).Result
  49. .FirstOrDefault() ?? "0");
  50. return new LayuiModel<FrequentlyAskedQuestion>
  51. {
  52. code = 1,
  53. count = count,
  54. data = datas
  55. };
  56. }
  57. /// <summary>
  58. /// 详情
  59. /// </summary>
  60. /// <param name="id"></param>
  61. /// <returns></returns>
  62. public async Task<FrequentlyAskedQuestion> Get(int id)
  63. {
  64. var data = CurrDb.FindEntityFor<FrequentlyAskedQuestion>(id);
  65. await Task.CompletedTask;
  66. return data;
  67. }
  68. /// <summary>
  69. /// 新增
  70. /// </summary>
  71. /// <param name="question"></param>
  72. /// <returns></returns>
  73. public async Task<EapResponse> Add(FrequentlyAskedQuestionAdd question)
  74. {
  75. var res = CurrDb.InsertFor(question, question.RecCode);
  76. await Task.CompletedTask;
  77. return new EapResponse { Code = 1 };
  78. }
  79. /// <summary>
  80. /// 修改
  81. /// </summary>
  82. /// <param name="question"></param>
  83. /// <returns></returns>
  84. public async Task<EapResponse> Update(FrequentlyAskedQuestionAdd question)
  85. {
  86. var exist = CurrDb.FindEntityFor<FrequentlyAskedQuestionAdd>(question.Id);
  87. exist.Question = question.Question;
  88. exist.Answer = question.Answer;
  89. CurrDb.UpdateFor(exist, question.ModCode);
  90. await Task.CompletedTask;
  91. return new EapResponse { Code = 1 };
  92. }
  93. /// <summary>
  94. /// 删除
  95. /// </summary>
  96. /// <param name="id"></param>
  97. /// <returns></returns>
  98. public async Task<EapResponse> Delete(int id)
  99. {
  100. int m = CurrDb.DeleteFor<FrequentlyAskedQuestionAdd>(id);
  101. await Task.CompletedTask;
  102. if (m==0)
  103. {
  104. return new EapResponse { Code = 0, Msg = "删除失败" };
  105. }
  106. else
  107. {
  108. return new EapResponse { Code = 1, Msg = "删除成功" };
  109. }
  110. }
  111. /// <summary>
  112. /// 获取FAQ点踩汇总
  113. /// </summary>
  114. /// <param name="questionId"></param>
  115. /// <param name="staffCode"></param>
  116. /// <returns></returns>
  117. public async Task<FAQEvaluationDto> GetFAQEvaluation(int questionId, string staffCode)
  118. {
  119. string errorinfo = string.Empty;
  120. var sql = $"select count(1) from FrequentlyAskedQuestionEvaluation where " +
  121. $"questionId={questionId}";
  122. var usefulCount = Convert.ToInt32(CurrDb.FindObject(sql + $" and GradeCategory={EnumQuestionEvaluationCategory.Useful}"));
  123. var uselessCount = Convert.ToInt32(CurrDb.FindObject(sql + $" and GradeCategory={EnumQuestionEvaluationCategory.Useless}"));
  124. var currentUserEvaluation = (await CurrDb.FindListForConditionAsync<FrequentlyAskedQuestionEvaluation>
  125. ($" and a.questionId={questionId} and a.staffCode='{staffCode}'", ref errorinfo)).FirstOrDefault();
  126. return new FAQEvaluationDto
  127. {
  128. QuestionId = questionId,
  129. Evaluation = currentUserEvaluation,
  130. UsefullCount = usefulCount,
  131. UselessCount = uselessCount
  132. };
  133. }
  134. /// <summary>
  135. /// 评价
  136. /// </summary>
  137. /// <param name="evaluation"></param>
  138. /// <returns></returns>
  139. public async Task<EapResponse> Evaluate(FrequentlyAskedQuestionEvaluation evaluation)
  140. {
  141. string errorinfo = string.Empty;
  142. var question = CurrDb.FindEntityFor<FrequentlyAskedQuestion>(evaluation.QuestionId);
  143. var exist = (await CurrDb.FindListForConditionAsync<FrequentlyAskedQuestionEvaluation>($"" +
  144. $" and a.questionId={question.Id} and a.staffcode='{evaluation.StaffCode}'",
  145. ref errorinfo)).FirstOrDefault();
  146. if (exist != null)
  147. {
  148. CurrDb.DeleteFor<FrequentlyAskedQuestionEvaluation>(exist.Id);
  149. if(exist.GradeCategory== EnumQuestionEvaluationCategory.Useful)
  150. {
  151. question.Usefuls -= 1;
  152. }
  153. else
  154. {
  155. question.Useless -= 1;
  156. }
  157. }
  158. CurrDb.InsertFor(evaluation, evaluation.StaffCode);
  159. if (evaluation.GradeCategory == EnumQuestionEvaluationCategory.Useful)
  160. {
  161. question.Usefuls += 1;
  162. }
  163. else
  164. {
  165. question.Useless += 1;
  166. }
  167. CurrDb.UpdateFor(question, question.ModCode);
  168. return new EapResponse { Code = 1 };
  169. }
  170. }
  171. }