Index.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 上海牛之云网络科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用。
  9. * 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
  10. * =========================================================
  11. */
  12. namespace addon\servicer\servicer\controller;
  13. use addon\servicer\model\Dialogue;
  14. use addon\servicer\model\Member;
  15. use think\db\exception\DataNotFoundException;
  16. use think\db\exception\DbException;
  17. use think\db\exception\ModelNotFoundException;
  18. use think\facade\Db;
  19. /**
  20. * 门店首页
  21. * @author Administrator
  22. *
  23. */
  24. class Index extends BaseServicer
  25. {
  26. /**
  27. * 首页
  28. * @return array|mixed|void
  29. * @throws DataNotFoundException
  30. * @throws DbException
  31. * @throws ModelNotFoundException
  32. */
  33. public function index()
  34. {
  35. $page = input('page', 1);
  36. $memberModel = new Member();
  37. $condition = [
  38. ['servicer_id', '=', $this->uid],
  39. ['online', '=', 1]
  40. ];
  41. $onlineMembers = $memberModel->getList($condition);
  42. $condition = [
  43. ['servicer_id', '=', $this->uid],
  44. // ['online', '=', 0]
  45. ];
  46. $offlineMembers = $memberModel->getPageList($condition, true, 'last_online_time desc', $page);
  47. if (request()->isAjax()) {
  48. return $this->result(['onlineMembers' => $onlineMembers, 'offlineMembers' => $offlineMembers]);
  49. }
  50. $this->assign('servicer', $this->user_info);
  51. $this->assign('online_members', $onlineMembers);
  52. $this->assign('online_members_count', @count($onlineMembers) ?? 0);
  53. $this->assign('offline_members', @$offlineMembers['list'] ?? []);
  54. $this->assign('offline_members_count', @$offlineMembers['count'] ?? 0);
  55. $this->assign("menu_info", ['title' => "聊天室"]);
  56. return $this->fetch('index/index');
  57. }
  58. /**
  59. * 获取聊天记录表
  60. * @return array|void
  61. * @throws DataNotFoundException
  62. * @throws DbException
  63. * @throws ModelNotFoundException
  64. */
  65. public function dialogs()
  66. {
  67. $member_id = input('member_id', 0);
  68. if (empty($member_id)) {
  69. return $this->result('', -1, '没有指定会员');
  70. }
  71. $page = input('page', 1);
  72. $limit = input('limit', 15);
  73. $pagelist = (new Dialogue())->getDialogueList($member_id, $page, $limit, $this->site_id, $this->uid);
  74. return $this->result($pagelist);
  75. }
  76. /**
  77. * 获取会员详情
  78. * @return array|void
  79. * @throws DataNotFoundException
  80. * @throws DbException
  81. * @throws ModelNotFoundException
  82. */
  83. public function getMember()
  84. {
  85. $member_id = input('member_id', 0);
  86. if (empty($member_id)) {
  87. return $this->result('', -1, '没有指定会员');
  88. }
  89. $member = (new Member)->getMember($member_id, $this->uid, $this->site_id);
  90. return $this->result($member);
  91. }
  92. /**
  93. * 历史聊天会员
  94. * @return array|void
  95. */
  96. public function historyMembers()
  97. {
  98. $page = input('page', 1);
  99. $size = input('size', 10);
  100. $prefix = config('database.connections.mysql.prefix');
  101. $sql = "select sm.member_id,sm.servicer_id,m.nickname as member_name,m.headimg,(select count(sd.read) from {$prefix}servicer_dialogue sd where sd.member_id=sm.member_id and sd.shop_id=s.shop_id and sd.type=0 and sd.read=0) as unread"
  102. . " from {$prefix}servicer_member sm"
  103. . " left join {$prefix}member m on m.member_id=sm.member_id"
  104. . " left join {$prefix}servicer s on s.user_id=sm.servicer_id"
  105. . " where sm.servicer_id=:id limit :page,:size";
  106. $offlineMembers = Db::query($sql, ['id' => $this->uid, 'page' => ($page - 1) * $size, 'size' => $size]);
  107. $total = Db::query("select count(*) as num from " . config('database.connections.mysql.prefix') . "servicer_member sm where sm.servicer_id=:id", ['id' => $this->uid]);
  108. $total = $total[0]['num'];
  109. $page_count = is_float($total / $size) ? ceil($total / $size) : $total / $size;
  110. return $this->result(['offlineMembers' => ['count' => count($offlineMembers), 'list' => $offlineMembers, 'page_count' => $page_count]]);
  111. }
  112. public function history()
  113. {
  114. $this->assign("menu_info", ['title' => "聊天记录"]);
  115. return $this->fetch('index/history');
  116. }
  117. /**
  118. * 未读消息联系人
  119. * @return array|void
  120. */
  121. public function unreadMembers()
  122. {
  123. $prefix = config('database.connections.mysql.prefix');
  124. $sql = "select sd.member_id,m.nickname as member_name,m.headimg,count(sd.member_id) as unread from {$prefix}servicer_dialogue sd"
  125. . " left join {$prefix}member m on m.member_id=sd.member_id "
  126. . " where sd.type=0 and sd.read=0 and sd.shop_id=:id GROUP BY sd.member_id";
  127. $unreadMembers = Db::query($sql, ['id' => $this->site_id]);
  128. return $this->result(['unread_member' => ['count' => count($unreadMembers), 'list' => $unreadMembers]]);
  129. }
  130. /**
  131. * 聊天联系人
  132. * @return array|void
  133. */
  134. public function memberList()
  135. {
  136. $member_name = input('member_name', 0);
  137. $prefix = config('database.connections.mysql.prefix');
  138. $shop_id = $this->site_id;
  139. $servicer_id = $this->uid;
  140. // 获取有过聊天记录的联系人列表,获取未读消息数量,头像、昵称、在线状态,获取最后一次聊天内容、类型
  141. $sql = "SELECT * FROM (SELECT sd.id,sd.member_id,m.nickname AS member_name,m.headimg,m.login_type,m.login_type_name,IFNULL(sm.`online`, 0) as online,"
  142. . "sd.create_time,sd.add_time,sd.content_type,sd.content,sd.consumer_say,sd.servicer_say,sd.type,"
  143. . "(SELECT count(sd1.member_id) FROM {$prefix}servicer_dialogue sd1 where sd1.type=0 AND sd1.shop_id={$shop_id} AND sd1.`read`=0 AND sd1.member_id = sd.member_id) AS unread "
  144. . "FROM {$prefix}servicer_dialogue sd "
  145. . "INNER JOIN {$prefix}member m on m.member_id=sd.member_id "
  146. . "LEFT JOIN {$prefix}servicer_member sm on sm.member_id=sd.member_id AND sm.online=1 "
  147. . "WHERE sd.shop_id={$shop_id} AND sd.servicer_id={$servicer_id} "
  148. . (!empty($member_name) ? "AND m.nickname LIKE '%{$member_name}%' " : '')
  149. . "ORDER BY `online` desc,sd.id desc) as part "
  150. . "GROUP BY member_id ORDER BY `online` desc,id desc";
  151. $members = Db::query($sql);
  152. return $this->result(['member_list' => ['count' => count($members), 'list' => $members]]);
  153. }
  154. }