Kefu.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <?php
  2. namespace app\admin\controller;
  3. use app\BaseController;
  4. use app\admin\model\Admin;
  5. use app\admin\model\Sign;
  6. use app\admin\model\KefuWork;
  7. use app\admin\model\User;
  8. use Exception;
  9. class Kefu extends BaseController
  10. {
  11. public function statistics()
  12. {
  13. // 统计
  14. $data['visit_count'] = 0; //当前客服页访问量
  15. $data['online_count'] = 0; //当前客服在线人数
  16. $data['handling_count'] = 0; //当前客服接线中的总数
  17. $data['today_handling_count'] = 0; //今日客服接线总数
  18. return $this->success($data);
  19. }
  20. /**
  21. * @api {get} /today 今日在线客服列表
  22. */
  23. public function today()
  24. {
  25. try {
  26. $params = $this->request->param();
  27. $page = $params['page'] ?? 1;
  28. $limit = $params['limit'] ?? 15;
  29. $query = Admin::alias('admin')->join('kefu_work', 'kefu_work.admin_id = admin.id', 'left');
  30. if (isset($params['is_online'])) {
  31. $query->where('is_online', $params['is_online']);
  32. }
  33. $count = $query->count();
  34. $list = $query->field(['admin.*', 'kefu_work.chat_num','kefu_work.transfer_num','kefu_work.intervention_num','kefu_work.completed_num'])
  35. ->order('admin.id', 'asc')
  36. ->limit($limit)
  37. ->page($page)
  38. ->select();
  39. foreach ($list as &$value) {
  40. $value['chat_num'] = intval($value['chat_num']);
  41. $value['transfer_num'] = intval($value['transfer_num']);
  42. $value['intervention_num'] = intval($value['intervention_num']);
  43. $value['completed_num'] = intval($value['completed_num']);
  44. $value['inprocess'] = 0;//进行中
  45. $value['unprocessed'] = 0;//待处理
  46. }
  47. } catch (Exception $e) {
  48. return $this->error($e->getMessage());
  49. }
  50. return $this->success(['count' => $count, 'list' => $list]);
  51. }
  52. /**
  53. * @api {get} /list 客服数据展板列表
  54. */
  55. public function list()
  56. {
  57. try {
  58. $params = $this->request->param();
  59. $page = $params['page'] ?? 1;
  60. $limit = $params['limit'] ?? 15;
  61. $query = KefuWork::alias('kefu_work')->join('admin', 'kefu_work.admin_id = admin.id', 'left');
  62. if (isset($params['is_online'])) {
  63. $query->where('is_online', $params['is_online']);
  64. }
  65. if (!empty($params['start_time'])) {
  66. $query->where('kefu_work.created_at', '>=', $params['start_time'].'00:00:00');
  67. }
  68. if (!empty($params['end_time'])) {
  69. $query->where('kefu_work.created_at', '<=', $params['end_time'].'23:59:59');
  70. }
  71. $count = $query->count();
  72. $list = $query->field(['admin.username','admin.nickname','admin.is_online', 'kefu_work.*'])
  73. ->order('kefu_work.id', 'desc')
  74. ->limit($limit)
  75. ->page($page)
  76. ->select();
  77. foreach ($list as &$value) {
  78. // $value['chat_num'] = intval($value['chat_num']);
  79. // $value['transfer_num'] = intval($value['transfer_num']);
  80. // $value['intervention_num'] = intval($value['intervention_num']);
  81. // $value['completed_num'] = intval($value['completed_num']);
  82. // $value['inprocess'] = 0;//进行中
  83. // $value['unprocessed'] = 0;//待处理
  84. }
  85. } catch (Exception $e) {
  86. return $this->error($e->getMessage());
  87. }
  88. return $this->success(['count' => $count, 'list' => $list]);
  89. }
  90. //客服签到
  91. public function sign()
  92. {
  93. try {
  94. $admin_id = $this->admin_id;
  95. KefuWork::addNum($admin_id, 'sign_num');//客服签到次数更新
  96. $sign = Sign::where('admin_id', $admin_id)->where('created_at', '>=', date('Y-m-d'))->order('id', 'desc')->find();
  97. if ($sign && $sign->time == 0) {
  98. $sign->time = time() - strtotime($sign->created_at);
  99. $sign->updated_at = date('Y-m-d H:i:s');
  100. $sign->save();
  101. }
  102. //签到记录
  103. Sign::create([
  104. 'admin_id' => $admin_id,
  105. ]);
  106. } catch (\Exception $e) {
  107. return $this->error($e->getMessage());
  108. }
  109. //通知客服已签到
  110. $user_id = User::getCsId($admin_id);
  111. wsSendMsg($user_id,'sign',['is_sign'=>0]);
  112. $is_online = Admin::isOnline($admin_id);
  113. if ($is_online == 0 ) {
  114. Admin::setOnline($admin_id, 1);
  115. //上线通知
  116. wsSendMsg(0,'isOnline',['id'=>$user_id, 'is_online'=>1]);
  117. }
  118. return $this->success([], '签到成功');
  119. }
  120. //客服状态设置
  121. public function setStatus()
  122. {
  123. try {
  124. $admin_id = $this->admin_id;
  125. KefuWork::addNum($admin_id, 'sign_num');//客服签到次数更新
  126. //签到记录
  127. Sign::create([
  128. 'admin_id' => $admin_id,
  129. ]);
  130. } catch (\Exception $e) {
  131. return $this->error($e->getMessage());
  132. }
  133. return $this->success([], '签到成功');
  134. }
  135. }