Question.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. <?php
  2. namespace app\admin\controller;
  3. use app\BaseController;
  4. use app\admin\model\Question as QuestionModel;
  5. use app\admin\model\QuestionLanguages;
  6. use app\admin\validate\QuestionValidate;
  7. use Exception;
  8. use think\facade\Cache;
  9. /**
  10. * 问题管理
  11. */
  12. class Question extends BaseController
  13. {
  14. /**
  15. * @api {get} /question/list 列表
  16. */
  17. function list()
  18. {
  19. try {
  20. $params = $this->request->param();
  21. $page = $params['page'] ?? 1;
  22. $limit = $params['limit'] ?? 15;
  23. $question = $params['question'] ?? '';
  24. $language_code = $params['language_code'] ?? $this->lang;
  25. $query = QuestionLanguages::alias('question_languages')
  26. ->join('keyword_languages', 'keyword_languages.id = question_languages.keyword_id', 'left');
  27. if (!empty($language_code)) {
  28. $query->where('question_languages.language_code', $language_code);
  29. }
  30. if (!empty($question)) {
  31. $query->where(function ($query) use ($question) {
  32. $query->where('question_languages.question', 'like', "%{$question}%")
  33. ->whereOr('keyword_languages.name', 'like', "%{$question}%");
  34. });
  35. }
  36. if (!empty($params['category_id'])) {
  37. $query->where('question_languages.category_id', $params['category_id']);
  38. }
  39. if (!empty($params['question_type'])) {
  40. $query->where('question_languages.question_type', $params['question_type']);
  41. }
  42. if (!empty($params['start_time'])) {
  43. $query->where('question_languages.created_at', '>=', $params['start_time'].' 00:00:00');
  44. }
  45. if (!empty($params['end_time'])) {
  46. $query->where('question_languages.created_at', '<=', $params['end_time'].' 23:59:59');
  47. }
  48. $count = $query->count();
  49. $list = $query->join('category_languages', 'question_languages.category_id = category_languages.category_id', 'left')
  50. ->field(['question_languages.*', 'question_languages.category_id', 'category_languages.name as category_name', 'keyword_languages.name as keyword_name'])
  51. // ->where('category_languages.language_code', $language_code)
  52. ->order('weight','desc')
  53. ->limit($limit)
  54. ->page($page)
  55. ->select();
  56. $questionTypeList = QuestionModel::questionTypeList($language_code, false);
  57. foreach($list as &$item) {
  58. $item['question_type_text'] = $questionTypeList[$item['question_type']] ?? '';
  59. }
  60. } catch (Exception $e) {
  61. return $this->error($e->getMessage());
  62. }
  63. return $this->success(['questionTypeList' => QuestionModel::questionTypeList($language_code), 'count' => $count, 'list' => $list]);
  64. }
  65. //新增/编辑
  66. public function update()
  67. {
  68. try {
  69. $params = (new QuestionValidate)->post()->goCheck('edit');
  70. $id = $this->request->param('id',0);
  71. $language_code = $params['language_code'] ?? $this->lang;
  72. if (!$id) {
  73. $questionLanguage = new QuestionLanguages();
  74. } else {
  75. $questionLanguage = QuestionLanguages::where('id', $id)->find();
  76. if (!$questionLanguage) {
  77. return $this->error('问题不存在');
  78. }
  79. }
  80. $questionLanguage->category_id = $params['category_id'];
  81. $questionLanguage->question_type = $params['question_type'];
  82. $questionLanguage->question = $params['question'];
  83. $questionLanguage->answer = $params['answer'];
  84. $questionLanguage->keyword_id = $params['keyword_id']??0;
  85. $questionLanguage->weight = $params['weight'];
  86. $questionLanguage->language_code = $language_code;
  87. $questionLanguage->save();
  88. } catch (Exception $e) {
  89. return $this->error($e->getMessage());
  90. }
  91. //删除缓存
  92. Cache::delete('questionList');
  93. return $this->success([],'保存成功');
  94. }
  95. //设置状态
  96. public function setStatus()
  97. {
  98. try {
  99. $params = (new QuestionValidate)->goCheck('id');
  100. $info = QuestionLanguages::where('id', $params['id'])->find();
  101. if (!$info) {
  102. return $this->error('问题不存在');
  103. }
  104. $info->status = $info->status == 0 ? 1 : 0;
  105. $info->save();
  106. } catch (Exception $e) {
  107. return $this->error($e->getMessage());
  108. }
  109. //删除缓存
  110. Cache::delete('questionList');
  111. return $this->success([], '操作成功');
  112. }
  113. //批量修改权重
  114. public function setWeight()
  115. {
  116. try {
  117. $id = request()->post('id');
  118. $weight = request()->post('weight');
  119. if (empty($id) || empty($weight) || !is_array($id)) {
  120. return $this->error('参数错误');
  121. }
  122. QuestionLanguages::whereIn('id', $id)->update(['weight' => $weight]);
  123. } catch (Exception $e) {
  124. return $this->error($e->getMessage());
  125. }
  126. //删除缓存
  127. Cache::delete('questionList');
  128. return $this->success([], '操作成功');
  129. }
  130. //批量修改问题类别
  131. public function setQuestionType()
  132. {
  133. try {
  134. $id = request()->post('id');
  135. $question_type = request()->post('question_type');
  136. if (empty($id) || empty($question_type) || !is_array($id)) {
  137. return $this->error('参数错误');
  138. }
  139. QuestionLanguages::whereIn('id', $id)->update(['question_type' => $question_type]);
  140. } catch (Exception $e) {
  141. return $this->error($e->getMessage());
  142. }
  143. //删除缓存
  144. Cache::delete('questionList');
  145. return $this->success([], '操作成功');
  146. }
  147. //删除
  148. public function delete()
  149. {
  150. try {
  151. $params = (new QuestionValidate)->goCheck('id');
  152. $info = QuestionLanguages::where('id', $params['id'])->find();
  153. if (!$info) {
  154. return $this->error('问题不存在');
  155. }
  156. $question_id = $info->question_id;
  157. $info->delete();
  158. } catch (Exception $e) {
  159. return $this->error($e->getMessage());
  160. }
  161. //删除缓存
  162. Cache::delete('questionList');
  163. return $this->success([], '删除成功');
  164. }
  165. }