GroupService.php 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | LARAVEL8.0 框架 [ LARAVEL ][ RXThinkCMF ]
  4. // +----------------------------------------------------------------------
  5. // | 版权所有 2017~2021 LARAVEL研发中心
  6. // +----------------------------------------------------------------------
  7. // | 官方网站: http://www.laravel.cn
  8. // +----------------------------------------------------------------------
  9. // | Author: laravel开发员 <laravel.qq.com>
  10. // +----------------------------------------------------------------------
  11. namespace App\Services\Api;
  12. use App\Models\GroupModel;
  13. use App\Models\GroupUserSettingModel;
  14. use App\Models\MemberModel;
  15. use App\Services\BaseService;
  16. use App\Services\ConfigService;
  17. use App\Services\RedisService;
  18. use Illuminate\Support\Facades\DB;
  19. /**
  20. * 群聊服务管理-服务类
  21. * @author laravel开发员
  22. * @since 2020/11/11
  23. * @package App\Services\Api
  24. */
  25. class GroupService extends BaseService
  26. {
  27. // 静态对象
  28. protected static $instance = null;
  29. /**
  30. * 构造函数
  31. * @author laravel开发员
  32. * @since 2020/11/11
  33. * MessageService constructor.
  34. */
  35. public function __construct()
  36. {
  37. $this->model = new GroupModel();
  38. }
  39. /**
  40. * 静态入口
  41. * @return static|null
  42. */
  43. public static function make()
  44. {
  45. if (!self::$instance) {
  46. self::$instance = (new static());
  47. }
  48. return self::$instance;
  49. }
  50. /**
  51. * 群聊列表
  52. * @param $userId
  53. * @param $params
  54. * @param int $pageSize
  55. * @return array
  56. */
  57. public function getDataList($userId, $params, $pageSize = 0)
  58. {
  59. $page = request()->post('page', 1);
  60. $cacheKey = "caches:messages:group_{$page}_" . md5($userId . json_encode($params) . $pageSize);
  61. $datas = RedisService::get($cacheKey);
  62. if ($datas) {
  63. return $datas;
  64. }
  65. $where = ['a.status' => 1, 'a.mark' => 1];
  66. $field = ['a.id','a.user_id', 'a.name', 'a.group_users', 'a.thumb', 'a.status'];
  67. $model = $this->model->from('groups as a')
  68. ->where($where)
  69. ->where(function ($query) use ($params, $userId) {
  70. $query->where(['a.user_id'=> $userId]);
  71. });
  72. $datas = $model->select($field)
  73. ->orderBy('a.create_time', 'desc')
  74. ->paginate($pageSize > 0 ? $pageSize : 9999999);
  75. $datas = $datas ? $datas->toArray() : [];
  76. if ($datas) {
  77. foreach ($datas['data'] as &$item) {
  78. $item['users'] = [];
  79. $groupUsers = $item['group_users']? explode(',', $item['group_users']) : [];
  80. $item['user_count'] = $groupUsers? count($groupUsers) : 1;
  81. $item['thumb']= $item['thumb']? get_image_url($item['thumb']) : '';
  82. if($item['thumb'] == '' ){
  83. $userIds = $groupUsers? array_slice($groupUsers,0,9) : [$userId];
  84. $item['users'] = $this->getGroupUsers($item['id'], $userIds);
  85. }
  86. }
  87. unset($item);
  88. RedisService::set($cacheKey, $datas, rand(5, 10));
  89. }
  90. return [
  91. 'list' => isset($datas['data']) ? $datas['data'] : [],
  92. 'total' => isset($datas['total']) ? $datas['total'] : 0,
  93. 'pageSize' => $pageSize
  94. ];
  95. }
  96. /**
  97. * 群聊默认头像用户
  98. * @param $groupId
  99. * @param int $num
  100. * @return array|mixed
  101. */
  102. public function getGroupUsers($groupId,$userIds, $type=1)
  103. {
  104. $cacheKey = "caches:groups:users_{$groupId}_".md5(json_encode($userIds));
  105. $data = RedisService::get($cacheKey);
  106. if($data){
  107. return $data;
  108. }
  109. $data = MemberModel::from('member as a')
  110. ->leftJoin('groups_user_setting as b',function($join) use($groupId){
  111. $join->on('b.user_id','=','a.id')->where(['b.group_id'=> $groupId,'b.mark'=>1]);
  112. })
  113. ->where(['a.status'=>1,'a.mark'=>1])
  114. ->whereIn('a.id', $userIds)
  115. ->select(['a.id','a.nickname','a.avatar','b.nickname as group_nickname'])
  116. ->get();
  117. $data = $data? $data->toArray() :[];
  118. if($data){
  119. foreach ($data as &$item){
  120. $item['avatar'] = $item['avatar']? $item['avatar'] : '/images/member/logo.png';
  121. $item['avatar_base64'] = $item['avatar'] && $type==1?getImageContent($item['avatar']):'';
  122. $item['avatar'] = get_image_url($item['avatar']);
  123. $item['nickname'] = $item['group_nickname']? $item['group_nickname'] : $item['nickname'];
  124. }
  125. array_multisort($userIds,SORT_ASC, $data);
  126. RedisService::set($cacheKey, $data, rand(300, 600));
  127. }
  128. return $data;
  129. }
  130. /**
  131. * 创建群聊
  132. * @param $userId
  133. * @param $params
  134. * @return array|false
  135. */
  136. public function create($userId, $params)
  137. {
  138. $userIds = isset($params['user_ids'])? $params['user_ids'] : [];
  139. if(!is_array($userIds) || count($userIds)<=0){
  140. $this->error = 3401;
  141. return false;
  142. }
  143. $userCount = ConfigService::make()->getConfigByCode('group_user_count',500);
  144. if(count($userIds) > $userCount){
  145. $this->error = web_lang(3402,['num'=> $userCount]);
  146. return false;
  147. }
  148. // 验证账户
  149. $userInfo = MemberModel::where(['id'=> $userId,'mark'=>1])
  150. ->select(['id','nickname','username','status'])
  151. ->first();
  152. $status = isset($userInfo['status'])? $userInfo['status'] : 0;
  153. $nickname = isset($userInfo['nickname'])? $userInfo['nickname'] : '';
  154. if(empty($userInfo) || $status != 1){
  155. $this->error = 2024;
  156. return false;
  157. }
  158. $users = MemberModel::where(['status'=>1,'mark'=>1])->whereIn('id', $userIds)
  159. ->select(['id','nickname','avatar'])
  160. ->get();
  161. $users = $users? $users->toArray() : [];
  162. if(empty($users)){
  163. $this->error = 3403;
  164. return false;
  165. }
  166. // 群成员
  167. $ids = [$userId];
  168. $names = [$nickname];
  169. $message = [];
  170. $groupId = GroupModel::count('id')+1;
  171. $groupUsers = [];
  172. foreach ($users as $k => $item){
  173. $ids[] = $item['id'];
  174. $groupUsers[] = [
  175. 'user_id'=> $item['id'],
  176. 'group_id'=> $groupId,
  177. 'create_time'=> time(),
  178. 'status'=> 1,
  179. 'mark'=>1
  180. ];
  181. if($k<=3){
  182. $names[] = $item['nickname'];
  183. }
  184. if($k<=10){
  185. $message[] = $item['nickname'];
  186. }
  187. }
  188. if(empty($ids)){
  189. $this->error = 3403;
  190. return false;
  191. }
  192. DB::beginTransaction();
  193. $data= [
  194. 'name'=> isset($params['name'])? trim($params['name']) : '',
  195. 'thumb'=> isset($params['thumb'])? trim($params['thumb']) : '',
  196. 'user_id'=> $userId,
  197. 'manage_users'=> $userId,
  198. 'group_users'=> $ids? implode(',', $ids) : '',
  199. 'chat_status'=> 1,
  200. 'friend_status'=> 1,
  201. 'status'=> 1,
  202. 'mark'=> 1,
  203. 'description'=> isset($params['description'])? trim($params['description']) : '',
  204. 'create_time'=>time(),
  205. ];
  206. if(!$groupId = $this->model->insertGetId($data)){
  207. DB::rollBack();
  208. $this->error = 3404;
  209. return false;
  210. }
  211. // 群成员设置)
  212. if($groupUsers && !GroupUserSettingModel::insert($groupUsers)){
  213. DB::rollBack();
  214. $this->error = 3404;
  215. return false;
  216. }
  217. // 建群消息
  218. $message = $message? implode('、', $message).(count($message)>10?'...':'') : '';
  219. $message = $message? "{$message}" : '您创建了一个群聊';
  220. MessageService::make()->pushGroupMessage($groupId,'建群消息',$message,6);
  221. DB::commit();
  222. $this->error = 3405;
  223. return ['group_id'=> $groupId];
  224. }
  225. /**
  226. * 群聊详情
  227. * @param $userId
  228. * @param $groupId
  229. * @return array
  230. */
  231. public function getInfo($userId, $groupId)
  232. {
  233. $info = $this->model->with(['member'])->where(['id'=> $groupId,'mark'=>1])->first();
  234. $info = $info? $info->toArray() : [];
  235. if($info){
  236. $info['users'] = [];
  237. $info['is_manage'] = 0;
  238. $groupUsers = $info['group_users']? explode(',', $info['group_users']) : [];
  239. $manageUsers = $info['manage_users']? explode(',', $info['manage_users']) : [];
  240. $info['user_count'] = $groupUsers? count($groupUsers) : 1;
  241. $info['thumb'] = $info['thumb']? get_image_url($info['thumb']) : '';
  242. $info['users'] = $this->getGroupUsers($groupId, $groupUsers, 1);
  243. $info['manages'] = $this->getGroupUsers($groupId, $manageUsers, 2);
  244. $info['user_setting'] = GroupUserSettingModel::where(['group_id'=> $groupId,'user_id'=>$userId,'mark'=>1])->first();
  245. if(in_array($userId, $manageUsers)){
  246. $info['is_manage'] = 1;
  247. }
  248. $data = ['gid'=> $groupId,'scene'=>'group'];
  249. $qrcode = MemberService::make()->makeQrcode(json_encode($data));
  250. $info['qrcode'] = $qrcode? get_image_url($qrcode):'';
  251. $info['qrcode_base64'] = $qrcode?getImageContent($qrcode):'';
  252. if($id = GroupUserSettingModel::where(['user_id'=> $userId,'group_id'=> $groupId,'mark'=>1])->value('id')){
  253. GroupUserSettingModel::where(['id'=> $id])->update(['read_time'=>time()]);
  254. }else{
  255. GroupUserSettingModel::insertGetId(['user_id'=> $userId,'group_id'=> $groupId,'read_time'=>time(),'create_time'=>time(),'mark'=>1]);
  256. }
  257. }
  258. return $info;
  259. }
  260. /**
  261. * 邀请入群
  262. * @param $userId
  263. * @param $groupId
  264. * @return bool
  265. */
  266. public function invite($userId, $groupId)
  267. {
  268. $info = $this->model->where(['id'=> $groupId,'mark'=>1])->first();
  269. $info = $info? $info->toArray() : [];
  270. $status = isset($info['status'])? $info['status'] : 0;
  271. $friendStatus = isset($info['friend_status'])? $info['friend_status'] : 0;
  272. $groupUsers = isset($info['group_users'])? $info['group_users'] : '';
  273. $groupUsers = $groupUsers? explode(',', $groupUsers) : [];
  274. if(empty($info)){
  275. $this->error = 3410;
  276. return false;
  277. }
  278. if($status != 1 || $friendStatus==2){
  279. $this->error = 3411;
  280. return false;
  281. }
  282. $userCount = ConfigService::make()->getConfigByCode('group_user_count',500);
  283. if(count($groupUsers) >= $userCount){
  284. $this->error = 3413;
  285. return false;
  286. }
  287. if(in_array($userId, $groupUsers)){
  288. $this->error = 3414;
  289. return true;
  290. }
  291. // 验证账户
  292. $userInfo = MemberModel::where(['id'=> $userId,'mark'=>1])
  293. ->select(['id','nickname','username','status'])
  294. ->first();
  295. $status = isset($userInfo['status'])? $userInfo['status'] : 0;
  296. $nickname = isset($userInfo['nickname'])? $userInfo['nickname'] : '';
  297. if(empty($userInfo) || $status != 1){
  298. $this->error = 2024;
  299. return false;
  300. }
  301. $groupUsers[] = $userId;
  302. if($this->model->where(['id'=> $groupId])->update(['group_users'=> implode(',', $groupUsers),'update_time'=>time()])){
  303. $setting = [
  304. 'user_id'=> $userId,
  305. 'group_id'=> $groupId,
  306. 'create_time'=> time(),
  307. 'status'=> 1,
  308. 'mark'=>1
  309. ];
  310. GroupUserSettingModel::insertGetId($setting);
  311. // 邀请消息
  312. MessageService::make()->pushGroupMessage($groupId,'二维码邀请入群消息', $nickname,6);
  313. $this->error = 3415;
  314. return true;
  315. }
  316. $this->error = 3416;
  317. return false;
  318. }
  319. /**
  320. * 保存设置
  321. * @param $userId
  322. * @param $params
  323. * @return bool
  324. */
  325. public function saveData($userId, $params)
  326. {
  327. $groupId = isset($params['group_id'])? $params['group_id'] : 0;
  328. $updateData = [
  329. 'update_time'=>time(),
  330. ];
  331. if(isset($params['show_nickname']) && $params['show_nickname']){
  332. $updateData['show_nickname'] = intval($params['show_nickname']);
  333. }
  334. if(isset($params['friend_status']) && $params['friend_status']){
  335. $updateData['friend_status'] = intval($params['friend_status']);
  336. }
  337. if(isset($params['chat_status']) && $params['chat_status']){
  338. $updateData['chat_status'] = intval($params['chat_status']);
  339. }
  340. if(isset($params['name']) && $params['name']){
  341. $updateData['name'] = $params['name'];
  342. }
  343. if(isset($params['description']) && $params['description']){
  344. $updateData['description'] = $params['description'];
  345. }
  346. $setting = ['update_time'=>time()];
  347. if(isset($params['show_name']) && $params['show_name']){
  348. $setting['show_nickname'] = intval($params['show_name']);
  349. }
  350. if(isset($params['nickname']) && $params['nickname']){
  351. $setting['nickname'] = trim($params['nickname']);
  352. }
  353. $this->model->where(['id'=> $groupId])->update($updateData);
  354. GroupUserSettingModel::where(['user_id'=> $userId,'group_id'=> $groupId])->update($setting);
  355. if(isset($updateData['chat_status'])){
  356. MessageService::make()->pushGroupMessage($groupId,$updateData['chat_status'] != 1?'本群已开启禁言,仅管理员可发言':'本群已禁言', '',6);
  357. }
  358. return true;
  359. }
  360. /**
  361. * 添加群成员
  362. * @param $userId
  363. * @param $params
  364. * @return bool
  365. */
  366. public function addUser($userId, $params)
  367. {
  368. $groupId = isset($params['group_id'])? $params['group_id'] : 0;
  369. $ids = isset($params['ids'])? $params['ids'] : [];
  370. $info = $this->model->where(['id'=> $groupId,'mark'=>1])->first();
  371. $info = $info? $info->toArray() : [];
  372. $groupUsers = isset($info['group_users'])? $info['group_users'] : '';
  373. $groupUsers = $groupUsers? explode(',', $groupUsers) : [];
  374. if(empty($info)){
  375. $this->error = 3410;
  376. return false;
  377. }
  378. if(empty($ids) || !is_array($ids)){
  379. $this->error = 3450;
  380. return false;
  381. }
  382. $users = MemberModel::whereIn('id', $ids)->where(['mark'=>1])->select(['id','nickname'])->get();
  383. $users = $users? $users->toArray() : [];
  384. if(empty($users)){
  385. $this->error = 3451;
  386. return false;
  387. }
  388. // 加入
  389. $names = [];
  390. $settingData = [];
  391. $count = count($groupUsers);
  392. foreach ($users as $item){
  393. $id = $item['id'];
  394. if (($key = array_search($id, $groupUsers)) === false) {
  395. $names[] = $item['nickname'];
  396. $groupUsers[] = $id;
  397. $settingData[] = [
  398. 'user_id'=> $id,
  399. 'group_id'=> $groupId,
  400. 'create_time'=> time(),
  401. 'status'=> 1,
  402. 'mark'=>1
  403. ];
  404. }
  405. }
  406. if(count($groupUsers) <= $count){
  407. $this->error = 3451;
  408. return false;
  409. }
  410. // 群消息
  411. DB::beginTransaction();
  412. if(!$this->model->where(['id'=> $groupId])->update(['group_users'=> implode(',', $groupUsers),'update_time'=> time()])){
  413. DB::rollBack();
  414. $this->error = 1003;
  415. return false;
  416. }
  417. if($settingData && !GroupUserSettingModel::insert($settingData)){
  418. DB::rollBack();
  419. $this->error = 1003;
  420. return false;
  421. }
  422. MessageService::make()->pushGroupMessage($groupId,'被邀请进入群聊', implode('、', $names),6);
  423. DB::commit();
  424. $this->error = 1002;
  425. return true;
  426. }
  427. /**
  428. * 踢出成员
  429. * @param $userId
  430. * @param $params
  431. * @return bool
  432. */
  433. public function decUser($userId, $params)
  434. {
  435. $groupId = isset($params['group_id'])? $params['group_id'] : 0;
  436. $ids = isset($params['ids'])? $params['ids'] : [];
  437. $info = $this->model->where(['id'=> $groupId,'mark'=>1])->first();
  438. $info = $info? $info->toArray() : [];
  439. $groupUsers = isset($info['group_users'])? $info['group_users'] : '';
  440. $groupUsers = $groupUsers? explode(',', $groupUsers) : [];
  441. if(empty($info)){
  442. $this->error = 3410;
  443. return false;
  444. }
  445. if(empty($ids) || !is_array($ids)){
  446. $this->error = 3420;
  447. return false;
  448. }
  449. $users = MemberModel::whereIn('id', $ids)->where(['mark'=>1])->select(['id','nickname'])->get();
  450. $users = $users? $users->toArray() : [];
  451. if(empty($users)){
  452. $this->error = 3421;
  453. return false;
  454. }
  455. // 踢出
  456. $names = [];
  457. foreach ($users as $item){
  458. $id = $item['id'];
  459. if (($key = array_search($id, $groupUsers)) !== false) {
  460. $names[] = $item['nickname'];
  461. unset($groupUsers[$key]);
  462. }
  463. }
  464. // 群消息
  465. DB::beginTransaction();
  466. if(!$this->model->where(['id'=> $groupId])->update(['group_users'=> implode(',', $groupUsers),'update_time'=> time()])){
  467. DB::rollBack();
  468. $this->error = 1003;
  469. return false;
  470. }
  471. if(!GroupUserSettingModel::where(['group_id'=> $groupId])->whereIn('user_id',$ids)->update(['mark'=>0,'update_time'=> time()])){
  472. DB::rollBack();
  473. $this->error = 1003;
  474. return false;
  475. }
  476. MessageService::make()->pushGroupMessage($groupId,'被踢出群聊', implode('、', $names),6);
  477. DB::commit();
  478. $this->error = 1002;
  479. return true;
  480. }
  481. /**
  482. * 群管理员设置
  483. * @param $userId
  484. * @param $groupId
  485. * @return bool
  486. */
  487. public function addManage($userId, $params)
  488. {
  489. $groupId = isset($params['group_id'])? $params['group_id'] : 0;
  490. $ids = isset($params['ids'])? $params['ids'] : [];
  491. $info = $this->model->where(['id'=> $groupId,'mark'=>1])->first();
  492. $info = $info? $info->toArray() : [];
  493. $status = isset($info['status'])? $info['status'] : 0;
  494. $manageUsers = isset($info['manage_users'])? $info['manage_users'] : '';
  495. $manageUsers = $manageUsers? explode(',', $manageUsers) : [];
  496. if(empty($info) || $status != 1){
  497. $this->error = 3410;
  498. return false;
  499. }
  500. if ($info['user_id'] != $userId){
  501. $this->error = 3422;
  502. return false;
  503. }
  504. $users = MemberModel::whereIn('id', $ids)->where(['mark'=>1])->select(['id','nickname'])->get();
  505. $users = $users? $users->toArray() : [];
  506. if(empty($users)){
  507. $this->error = 3451;
  508. return false;
  509. }
  510. // 加入
  511. $names = [];
  512. $count = count($manageUsers);
  513. foreach ($users as $item){
  514. $id = $item['id'];
  515. if (($key = array_search($id, $manageUsers)) === false) {
  516. $names[] = $item['nickname'];
  517. $manageUsers[] = $id;
  518. }
  519. }
  520. if(count($manageUsers) <= $count){
  521. $this->error = 3421;
  522. return false;
  523. }
  524. // 群消息
  525. DB::beginTransaction();
  526. if(!$this->model->where(['id'=> $groupId])->update(['manage_users'=> implode(',', $manageUsers),'update_time'=> time()])){
  527. DB::rollBack();
  528. $this->error = 1003;
  529. return false;
  530. }
  531. MessageService::make()->pushGroupMessage($groupId,'被设置为管理员', implode('、', $names),6);
  532. DB::commit();
  533. $this->error = 1002;
  534. return true;
  535. }
  536. /**
  537. * 删除群管理员
  538. * @param $userId
  539. * @param $groupId
  540. * @return bool
  541. */
  542. public function decManage($userId, $params)
  543. {
  544. $groupId = isset($params['group_id'])? $params['group_id'] : 0;
  545. $uid = isset($params['id'])? $params['id'] : 0;
  546. $info = $this->model->where(['id'=> $groupId,'mark'=>1])->first();
  547. $info = $info? $info->toArray() : [];
  548. $status = isset($info['status'])? $info['status'] : 0;
  549. $manageUsers = isset($info['manage_users'])? $info['manage_users'] : '';
  550. $manageUsers = $manageUsers? explode(',', $manageUsers) : [];
  551. if(empty($info) || $status != 1){
  552. $this->error = 3410;
  553. return false;
  554. }
  555. if ($info['user_id'] != $userId){
  556. $this->error = 3422;
  557. return false;
  558. }
  559. $userInfo = MemberModel::where(['id'=> $uid,'mark'=>1])->select(['id','nickname'])->first();
  560. $nickname = isset($userInfo['nickname'])? $userInfo['nickname'] : '';
  561. if(empty($userInfo)){
  562. $this->error = 3451;
  563. return false;
  564. }
  565. if(!in_array($uid, $manageUsers)){
  566. $this->error = 3423;
  567. return false;
  568. }
  569. if (($key = array_search($uid, $manageUsers)) !== false) {
  570. unset($manageUsers[$key]);
  571. }
  572. // 群消息
  573. DB::beginTransaction();
  574. if(!$this->model->where(['id'=> $groupId])->update(['manage_users'=> implode(',', $manageUsers),'update_time'=> time()])){
  575. DB::rollBack();
  576. $this->error = 1003;
  577. return false;
  578. }
  579. if($nickname){
  580. MessageService::make()->pushGroupMessage($groupId,'被取消管理员权限', $nickname,6);
  581. }
  582. DB::commit();
  583. $this->error = 1002;
  584. return true;
  585. }
  586. /**
  587. * 清空群聊聊天记录
  588. * @param $userId
  589. * @param $groupId
  590. * @return bool
  591. */
  592. public function exitGroup($userId, $groupId)
  593. {
  594. $info = $this->model->where(['id'=> $groupId,'mark'=>1])->first();
  595. $info = $info? $info->toArray() : [];
  596. $groupUsers = isset($info['group_users'])? $info['group_users'] : '';
  597. $groupUsers = $groupUsers? explode(',', $groupUsers) : [];
  598. if(empty($info)){
  599. $this->error = 3410;
  600. return false;
  601. }
  602. if(!in_array($userId, $groupUsers)){
  603. $this->error = 3417;
  604. return true;
  605. }
  606. if (($key = array_search($userId, $groupUsers)) !== false) {
  607. unset($groupUsers[$key]);
  608. }
  609. $this->model->where(['id'=> $groupId])->update(['group_users'=> implode(',', $groupUsers),'update_time'=> time()]);
  610. GroupUserSettingModel::where(['user_id'=> $userId,'group_id'=> $groupId])->update(['mark'=>0,'update_time'=> time()]);
  611. $this->error = 1002;
  612. return true;
  613. }
  614. /**
  615. * 清空群聊聊天记录
  616. * @param $userId
  617. * @param $groupId
  618. * @return bool
  619. */
  620. public function clear($userId, $groupId)
  621. {
  622. GroupUserSettingModel::where(['user_id'=> $userId,'group_id'=> $groupId])->update(['clear_time'=> time()]);
  623. return true;
  624. }
  625. /**
  626. * 解散群聊
  627. * @param $userId
  628. * @param $groupId
  629. * @return false
  630. */
  631. public function deleteGroup($userId, $groupId)
  632. {
  633. $info = $this->model->where(['id'=> $groupId,'mark'=>1])->first();
  634. $info = $info? $info->toArray() : [];
  635. if(empty($info)){
  636. $this->error = 3410;
  637. return false;
  638. }
  639. $this->model->where(['id'=> $groupId])->update(['mark'=>0,'update_time'=>time()]);
  640. MessageService::make()->pushGroupMessage($groupId,'解散群聊', implode('、', ),6);
  641. }
  642. }