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