Index.php 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  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. $msg = 'token错误';
  22. return json(['code' => $code, 'data' => [], 'msg' => $msg]);
  23. }
  24. try {
  25. $getUserToken = input('server.HTTP_userToken');
  26. $usersField = [
  27. 'a.id',
  28. 'user_name',
  29. 'user_avatar',
  30. 'b.name',
  31. ];
  32. // 关联信息.
  33. $join['groups b'] = 'a.group_id = b.id';
  34. $usersWhere['token'] = $getUserToken;
  35. // 获取用户信息.
  36. $usersInfo = model('users')->findInfo($usersField, $usersWhere, $join);
  37. return json(['code' => 1, 'data' => $usersInfo, 'msg' => '成功']);
  38. } catch (\Exception $e) {
  39. return json(['code' => $code, 'data' => [], 'msg' => $msg]);
  40. }//end try
  41. }//end userInfo()
  42. /**
  43. * 获取用户快捷语
  44. *
  45. * @access public
  46. * @return array JsonString
  47. */
  48. public function userWords()
  49. {
  50. // 验证token.
  51. $tokenStatus = $this->verifyToken();
  52. $code = -2;
  53. $msg = '错误';
  54. if ($tokenStatus === false) {
  55. $msg = 'token错误';
  56. return json(['code' => $code, 'data' => [], 'msg' => $msg]);
  57. }
  58. try {
  59. // 获取用户信息.
  60. $getUserInfo = $this->getUserInfo();
  61. // 获取快捷语.
  62. $wordsField = [
  63. 'id',
  64. 'content',
  65. 'title',
  66. ];
  67. $sysWordsWhere['status'] = 1;
  68. $sysWordsWhere['user_id'] = 0;
  69. // 查询系统快捷语.
  70. $sysWords = model('words')->selectWords($wordsField, $sysWordsWhere);
  71. // 查询用户私有快捷语条件.
  72. $userWordsWhere['user_id'] = $getUserInfo->id;
  73. // 查询用户私有快捷语.
  74. $userWords = model('words')->selectWords($wordsField, $userWordsWhere);
  75. $result = [
  76. 'sysWords' => $sysWords,
  77. 'userWords' => $userWords,
  78. ];
  79. return json(['code' => 1, 'data' => $result, 'msg' => '成功']);
  80. } catch (\Exception $e) {
  81. return json(['code' => $code, 'data' => [], 'msg' => $msg]);
  82. }//end try
  83. }//end userWords()
  84. /*public function index()
  85. {
  86. $getUserInfo = $this->getUserInfo();
  87. // 客服信息
  88. $userInfo = db('users')->where('id', 1)->find();
  89. $this->assign([
  90. 'uinfo' => $userInfo,
  91. 'word' => db('words')->select(),
  92. 'groups' => db('groups')->where('status', 1)->select(),
  93. 'status' => db('kf_config')->where('id', 1)->find()
  94. ]);
  95. return $this->fetch();
  96. }*/
  97. // 获取服务用户列表
  98. // 此方法是为了防止客服工作期间错误的刷新工作台,导致服务人员消失的问题
  99. public function getUserList()
  100. {
  101. if(request()->isAjax()){
  102. // 此处只查询过去 三个小时 内的未服务完的用户
  103. $userList = db('service_log')
  104. ->where(function ($query) {
  105. $query = $query->where('status', 1);
  106. $query = $query->whereOr('status', 3);
  107. return $query;
  108. })
  109. ->select();
  110. return json(['code' => 1, 'data' => $userList, 'msg' => 'ok']);
  111. }
  112. }
  113. // 获取聊天记录
  114. public function getChatLog()
  115. {
  116. if(request()->isAjax()){
  117. $param = input('param.');
  118. $limit = 10; // 一次显示10 条聊天记录
  119. $offset = ($param['page'] - 1) * $limit;
  120. $logs = db('chat_log')->where(function($query) use($param){
  121. $query->where('from_id', $param['uid'])->where('to_id', 'KF' . cookie('l_user_id'));
  122. })->whereOr(function($query) use($param){
  123. $query->where('from_id', 'KF' . cookie('l_user_id'))->where('to_id', $param['uid']);
  124. })->limit($offset, $limit)->order('id', 'desc')->select();
  125. $total = db('chat_log')->where(function($query) use($param){
  126. $query->where('from_id', $param['uid'])->where('to_id', 'KF' . cookie('l_user_id'));
  127. })->whereOr(function($query) use($param){
  128. $query->where('from_id', 'KF' . cookie('l_user_id'))->where('to_id', $param['uid']);
  129. })->count();
  130. foreach($logs as $key=>$vo){
  131. $logs[$key]['type'] = 'user';
  132. $logs[$key]['time_line'] = date('Y-m-d H:i:s', $vo['time_line']);
  133. if($vo['from_id'] == 'KF' . cookie('l_user_id')){
  134. $logs[$key]['type'] = 'mine';
  135. }
  136. }
  137. return json(['code' => 1, 'data' => $logs, 'msg' => intval($param['page']), 'total' => ceil($total / $limit)]);
  138. }
  139. }
  140. // ip 定位
  141. public function getCity()
  142. {
  143. $ip = input('param.ip');
  144. $ip2region = new \Ip2Region();
  145. $info = $ip2region->btreeSearch($ip);
  146. $city = explode('|', $info['region']);
  147. if(0 != $info['city_id']){
  148. return json(['code' => 1, 'data' => $city['2'] . $city['3'] . $city['4'], 'msg' => 'ok']);
  149. }else{
  150. return json(['code' => 1, 'data' => $city['0'], 'msg' => 'ok']);
  151. }
  152. }
  153. //获取访客端入口
  154. public function getGuestEnter()
  155. {
  156. //访客端入口
  157. $guestenter = db('guestenter')->order('sort','asc')->select();
  158. //自动邀请设置信息
  159. $settings = db('settings')->field('id,margin_top,stop_time,copywriting')->find();
  160. $guestenter[] = $settings;
  161. if(!empty($guestenter)){
  162. return json(['code' => 1, 'data' => $guestenter, 'msg' => '成功']);
  163. }else{
  164. return json(['code' => -1, 'data' => '', 'msg' => '失败']);
  165. }
  166. }
  167. /**
  168. * 获取未读公告
  169. * @access public
  170. * @return array JsonString
  171. */
  172. public function unreadnotice()
  173. {
  174. $user_id = input('post.user_id');
  175. //获取未读公告
  176. try{
  177. $admins = db('admins')->select();
  178. $readnotice = db('servicenotice')->field('id,uid,title,atext,sendtime,admin_id')->where('readtime',0)->where('uid',$user_id)->where('sendtime','<',date('Y-m-d H:i:s',time()))->order('sendtime','desc')->select();
  179. for($i=0;$i<count($readnotice);$i++){
  180. for($j=0;$j<count($admins);$j++)
  181. if($readnotice[$i]['admin_id'] == $admins[$j]['id']){
  182. $readnotice[$i]['admin_name'] = $admins[$j]['user_name'];
  183. }
  184. }
  185. return json(['code' => 1, 'data' => $readnotice, 'msg' => '成功']);
  186. } catch (\Exception $e) {
  187. return json(['code' => -2, 'data' => '', 'msg' => $e->getMessage()]);
  188. }
  189. }
  190. /**
  191. * 获取已读公告
  192. * @access public
  193. * @return array JsonString
  194. */
  195. public function readnotice()
  196. {
  197. $user_id = input('post.user_id');
  198. //获取已读公告
  199. try{
  200. $admins = db('admins')->select();
  201. $unreadnotice = db('servicenotice')->field('id,uid,title,atext,sendtime,admin_id')->where('readtime','<>',0)->where('uid',$user_id)->order('sendtime','desc')->select();
  202. for($i=0;$i<count($unreadnotice);$i++){
  203. for($j=0;$j<count($admins);$j++)
  204. if($unreadnotice[$i]['admin_id'] == $admins[$j]['id']){
  205. $unreadnotice[$i]['admin_name'] = $admins[$j]['user_name'];
  206. }
  207. }
  208. return json(['code' => 1, 'data' => $unreadnotice, 'msg' => '成功']);
  209. } catch (\Exception $e) {
  210. return json(['code' => -3, 'data' => '', 'msg' => $e->getMessage()]);
  211. }
  212. }
  213. /**
  214. * 修改公告阅读状态
  215. * @access public
  216. * @return array JsonString
  217. */
  218. public function updatenotice()
  219. {
  220. $servicenotice_id = input('post.servicenotice_id');
  221. $data = db('servicenotice')->where('id',$servicenotice_id)->find();
  222. if(empty($data)){
  223. return json(['code' => -1, 'data' => '', 'msg' => '公告不存在']);
  224. }
  225. try{
  226. //修改公告阅读状态
  227. db('servicenotice')->where('id',$servicenotice_id)->update(['readtime' => time()]);
  228. return json(['code' => 1, 'data' => '', 'msg' => '公告阅读状态修改成功']);
  229. } catch (\Exception $e) {
  230. return json(['code' => -3, 'data' => '', 'msg' => $e->getMessage()]);
  231. }
  232. }
  233. }