Index.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. <?php
  2. namespace app\service\controller;
  3. /**
  4. * 客服系统首页类
  5. */
  6. class Index extends Common
  7. {
  8. /**
  9. * 获取用户详情
  10. *
  11. * @access public
  12. * @return array JsonString
  13. */
  14. public function userInfo()
  15. {
  16. // 验证token.
  17. $tokenStatus = $this->verifyToken();
  18. $code = -2;
  19. $msg = '错误';
  20. if ($tokenStatus === false) {
  21. return json(['code' => $code, 'data' => [], 'msg' => $msg]);
  22. }
  23. try {
  24. $getUserToken = input('server.HTTP_userToken');
  25. $usersField = [
  26. 'a.id',
  27. 'user_name',
  28. 'user_avatar',
  29. 'b.name',
  30. ];
  31. // 关联信息.
  32. $join['groups b'] = 'a.group_id = b.id';
  33. $usersWhere['token'] = $getUserToken;
  34. // 获取用户信息.
  35. $usersInfo = model('users')->findInfo($usersField, $usersWhere, $join);
  36. return json(['code' => 200, 'data' => $usersInfo, 'msg' => '成功']);
  37. } catch (\Exception $e) {
  38. return json(['code' => $code, 'data' => [], 'msg' => $msg]);
  39. }//end try
  40. }//end userInfo()
  41. /**
  42. * 获取用户快捷语
  43. *
  44. * @access public
  45. * @return array JsonString
  46. */
  47. public function userWords()
  48. {
  49. // 验证token.
  50. $tokenStatus = $this->verifyToken();
  51. $code = -2;
  52. $msg = '错误';
  53. if ($tokenStatus === false) {
  54. return json(['code' => $code, 'data' => [], 'msg' => $msg]);
  55. }
  56. try {
  57. // 获取用户信息.
  58. $getUserInfo = $this->getUserInfo();
  59. // 获取快捷语.
  60. $wordsField = [
  61. 'id',
  62. 'content',
  63. 'title',
  64. ];
  65. $sysWordsWhere['status'] = 1;
  66. $sysWordsWhere['user_id'] = 0;
  67. // 查询系统快捷语.
  68. $sysWords = model('words')->selectWords($wordsField, $sysWordsWhere);
  69. // 查询用户私有快捷语条件.
  70. $userWordsWhere['user_id'] = $getUserInfo->id;
  71. // 查询用户私有快捷语.
  72. $userWords = model('words')->selectWords($wordsField, $userWordsWhere);
  73. $result = [
  74. 'sysWords' => $sysWords,
  75. 'userWords' => $userWords,
  76. ];
  77. return json(['code' => 200, 'data' => $result, 'msg' => '成功']);
  78. } catch (\Exception $e) {
  79. return json(['code' => $code, 'data' => [], 'msg' => $msg]);
  80. }//end try
  81. }//end userWords()
  82. /**
  83. * 获取敏感词
  84. *
  85. * @access public
  86. * @return array JsonString
  87. */
  88. public function sensitiveWords()
  89. {
  90. // 验证token.
  91. $tokenStatus = $this->verifyToken();
  92. $code = -2;
  93. $msg = '错误';
  94. if ($tokenStatus === false) {
  95. return json(['code' => $code, 'data' => [], 'msg' => $msg]);
  96. }
  97. try {
  98. // 获取快捷语.
  99. $wordsField = ['*'];
  100. $sysWordsWhere['sensitivewords_status'] = 1;
  101. // 查询系统快捷语.
  102. $sensitiveWords = model('sensitivewords')->selectWords($wordsField, $sysWordsWhere);
  103. return json(['code' => 200, 'data' => $sensitiveWords, 'msg' => '成功']);
  104. } catch (\Exception $e) {
  105. return json(['code' => $code, 'data' => [], 'msg' => $msg]);
  106. }//end try
  107. }//end userWords()
  108. public function index()
  109. {
  110. $getUserInfo = $this->getUserInfo();
  111. // 客服信息
  112. $userInfo = db('users')->where('id', 1)->find();
  113. $this->assign([
  114. 'uinfo' => $userInfo,
  115. 'word' => db('words')->select(),
  116. 'groups' => db('groups')->where('status', 1)->select(),
  117. 'status' => db('kf_config')->where('id', 1)->find()
  118. ]);
  119. return $this->fetch();
  120. }
  121. // 获取服务用户列表
  122. // 此方法是为了防止客服工作期间错误的刷新工作台,导致服务人员消失的问题
  123. public function getUserList()
  124. {
  125. if(request()->isAjax()){
  126. // 此处只查询过去 三个小时 内的未服务完的用户
  127. $userList = db('service_log')
  128. ->where(function ($query) {
  129. $query = $query->where('status', 1);
  130. $query = $query->whereOr('status', 3);
  131. return $query;
  132. })
  133. ->select();
  134. return json(['code' => 1, 'data' => $userList, 'msg' => 'ok']);
  135. }
  136. }
  137. // 获取聊天记录
  138. public function getChatLog()
  139. {
  140. if(request()->isAjax()){
  141. $param = input('param.');
  142. $limit = 10; // 一次显示10 条聊天记录
  143. $offset = ($param['page'] - 1) * $limit;
  144. $logs = db('chat_log')->where(function($query) use($param){
  145. $query->where('from_id', $param['uid'])->where('to_id', 'KF' . cookie('l_user_id'));
  146. })->whereOr(function($query) use($param){
  147. $query->where('from_id', 'KF' . cookie('l_user_id'))->where('to_id', $param['uid']);
  148. })->limit($offset, $limit)->order('id', 'desc')->select();
  149. $total = db('chat_log')->where(function($query) use($param){
  150. $query->where('from_id', $param['uid'])->where('to_id', 'KF' . cookie('l_user_id'));
  151. })->whereOr(function($query) use($param){
  152. $query->where('from_id', 'KF' . cookie('l_user_id'))->where('to_id', $param['uid']);
  153. })->count();
  154. foreach($logs as $key=>$vo){
  155. $logs[$key]['type'] = 'user';
  156. $logs[$key]['time_line'] = date('Y-m-d H:i:s', $vo['time_line']);
  157. if($vo['from_id'] == 'KF' . cookie('l_user_id')){
  158. $logs[$key]['type'] = 'mine';
  159. }
  160. }
  161. return json(['code' => 1, 'data' => $logs, 'msg' => intval($param['page']), 'total' => ceil($total / $limit)]);
  162. }
  163. }
  164. // ip 定位
  165. public function getCity()
  166. {
  167. $ip = input('param.ip');
  168. $ip2region = new \Ip2Region();
  169. $info = $ip2region->btreeSearch($ip);
  170. $city = explode('|', $info['region']);
  171. if(0 != $info['city_id']){
  172. return json(['code' => 1, 'data' => $city['2'] . $city['3'] . $city['4'], 'msg' => 'ok']);
  173. }else{
  174. return json(['code' => 1, 'data' => $city['0'], 'msg' => 'ok']);
  175. }
  176. }
  177. }