Question.php 6.6 KB

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