ChatController.php 38 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135
  1. <?php
  2. declare (strict_types = 1);
  3. namespace App\Controller;
  4. use App\JsonRpc\ChatServiceInterface;
  5. use App\JsonRpc\UserServiceInterface;
  6. use App\Service\RedisService;
  7. use App\Tools\PublicData;
  8. use App\Tools\Result;
  9. use function Hyperf\Support\env;
  10. use Hyperf\Context\Context;
  11. use Hyperf\Di\Annotation\Inject;
  12. use Hyperf\Validation\Contract\ValidatorFactoryInterface;
  13. // use App\Controller\WebSocketController as WebSocket;
  14. use Hyperf\Context\ApplicationContext as ApplicationContext;
  15. use App\Controller\WebSocketController;
  16. use Swoole\WebSocket\Frame;
  17. /**
  18. *
  19. * Class ChatController
  20. * @package App\Controller
  21. */
  22. //#[AutoController]
  23. class ChatController extends AbstractController
  24. {
  25. #[Inject]
  26. protected ValidatorFactoryInterface $validationFactory;
  27. /**
  28. * @var ChatServiceInterface
  29. */
  30. #[Inject]
  31. private $chatServiceClient;
  32. #[Inject]
  33. private UserServiceInterface $userServiceClient;
  34. // #[Inject]
  35. // private WebSocket $webSocketController;
  36. /**
  37. * 申请添加好友
  38. * @return array
  39. */
  40. public function addFriend()
  41. {
  42. $requireData = $this->request->all();
  43. $validator = $this->validationFactory->make(
  44. $requireData,
  45. [
  46. 'friend_id' => 'required',
  47. ],
  48. [
  49. 'friend_id.required' => '好友ID不能为空',
  50. ]
  51. );
  52. if ($validator->fails()) {
  53. $errorMessage = $validator->errors()->first();
  54. return Result::error($errorMessage);
  55. }
  56. $requireData['user_id'] = Context::get("UserId");
  57. //判断UserId是否是friend_id
  58. $userId = $requireData['user_id'];
  59. $friendId = $requireData['friend_id'];
  60. if ($userId == $friendId) {
  61. return Result::error('不能添加自己为好友');
  62. }
  63. //判断friend_id是否可用
  64. $friendInfo = $this->userServiceClient->getUserInfo((int) $friendId);
  65. if ($friendInfo['code'] == 0) {
  66. return Result::error('好友ID不存在');
  67. }
  68. $result = $this->chatServiceClient->addFriend($requireData);
  69. return $result ? Result::success($result['message']) : Result::error($result['message']);
  70. }
  71. /**
  72. * 话题分类
  73. * @return array
  74. */
  75. public function topicType()
  76. {
  77. $type = array(
  78. '1' => '课题',
  79. '2' => '维权',
  80. '3' => '讨论',
  81. );
  82. $result = array();
  83. foreach ($type as $k => $v) {
  84. $result[] = ['value' => $k, 'label' => $v];
  85. }
  86. return Result::success($result);
  87. }
  88. /**
  89. * 获取话题列表
  90. * @return array
  91. */
  92. public function topicStatus()
  93. {
  94. $status = array(
  95. '1' => '未审核',
  96. '2' => '已通过',
  97. '3' => '已拒绝',
  98. );
  99. $result = array();
  100. foreach ($status as $k => $v) {
  101. $result[] = ['value' => $k, 'label' => $v];
  102. }
  103. return Result::success($result);
  104. }
  105. /**
  106. * 搜索好友列表
  107. * @return array
  108. */
  109. public function searchFriend()
  110. {
  111. $requireData = $this->request->all();
  112. $validator = $this->validationFactory->make(
  113. $requireData,
  114. [
  115. 'keyword' => 'required',
  116. ],
  117. [
  118. 'keyword.required' => '搜索关键字不能为空',
  119. ]
  120. );
  121. if ($validator->fails()) {
  122. $errorMessage = $validator->errors()->first();
  123. return Result::error($errorMessage);
  124. }
  125. $requireData['user_id'] = Context::get("UserId");
  126. // return Result::success($requireData);
  127. $result = $this->chatServiceClient->searchFriend($requireData);
  128. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  129. }
  130. /**
  131. * 获取好友详情
  132. * @return array
  133. */
  134. public function getFriendInfo()
  135. {
  136. $requireData = $this->request->all();
  137. $validator = $this->validationFactory->make(
  138. $requireData,
  139. [
  140. 'friend_id' => 'required',
  141. ],
  142. [
  143. 'friend_id.required' => '好友ID不能为空',
  144. ]
  145. );
  146. if ($validator->fails()) {
  147. $errorMessage = $validator->errors()->first();
  148. return Result::error($errorMessage);
  149. }
  150. $requireData['user_id'] = Context::get("UserId");
  151. $result = $this->chatServiceClient->getFriendInfo($requireData);
  152. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  153. }
  154. /**
  155. * 获取我的好友列表
  156. * @return array
  157. */
  158. public function getFriendsList()
  159. {
  160. $requireData = [];
  161. $requireData['user_id'] = Context::get("UserId");
  162. $requireData['status'] = 2;
  163. $result = $this->chatServiceClient->getFriendsList($requireData);
  164. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  165. }
  166. /**
  167. * 获取好友申请列表
  168. * @return array
  169. */
  170. public function getFriendsApplyList()
  171. {
  172. $requireData = [];
  173. $requireData['friend_id'] = Context::get("UserId");
  174. $requireData['status'] = 1;
  175. $result = $this->chatServiceClient->getFriendsApplyList($requireData);
  176. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  177. }
  178. /**
  179. * 好友申请审核通过或拒绝
  180. * @return array
  181. */
  182. public function applyFriend()
  183. {
  184. $requireData = $this->request->all();
  185. $frindid =$requireData['friend_id']??0;
  186. unset($requireData['friend_id']);
  187. unset($requireData['apply_id']);
  188. // 定义验证规则
  189. $validator = $this->validationFactory->make(
  190. $requireData,
  191. [
  192. 'id' => 'required|integer',
  193. 'status' => 'required|in:2,4',
  194. ],
  195. [
  196. 'friend_id.required' => 'ID不能为空',
  197. 'status.required' => '状态不能为空',
  198. 'status.in' => '状态错误',
  199. ]
  200. );
  201. // 验证请求数据
  202. if ($validator->fails()) {
  203. var_dump($validator->errors()->all());
  204. return Result::error(implode(', ', $validator->errors()->all()), 0);
  205. }
  206. $requireData['user_id'] = Context::get("UserId");
  207. // var_dump($requireData,'1111test');
  208. $result = $this->chatServiceClient->applyFriend($requireData);
  209. if ($result && $result['code'] != 0) {
  210. $realResult = $result;
  211. $redisClient = new RedisService();
  212. $myFriends = $this->chatServiceClient->getFriendsList(['user_id' => $requireData['user_id'], 'status' => 2]);
  213. // var_dump($myFriends, '--------------------1');
  214. $redisClient->setUserFriends((string)$requireData['user_id'], $myFriends['data']);
  215. $myFriends = $this->chatServiceClient->getFriendsList(['user_id' => $frindid, 'status' => 2]);
  216. var_dump($myFriends, '-------------3-------1');
  217. $redisClient->setUserFriends((string)$frindid, $myFriends['data']);
  218. $result = $redisClient->getUserFriends((string)$requireData['user_id']);
  219. // var_dump($result,'redis-结果');
  220. $result = $redisClient->getUserFriends((string)$frindid);
  221. // var_dump($result,'redis-结果');
  222. //redis 添加好友
  223. $result = $realResult;
  224. }
  225. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  226. }
  227. /**
  228. * 批量设置redis好友
  229. * @return array
  230. */
  231. public function setFriends()
  232. {
  233. //获取所有用户
  234. $userList = $this->userServiceClient->getUserList(['page' => 1, 'pageSize' => 1000 ]);
  235. //获取id,循环写入redis
  236. $userList = $userList['data']['rows'];
  237. var_dump($userList,'111111111111');
  238. $redisClient = new RedisService();
  239. foreach ($userList as $key => $value) {
  240. var_dump($value,'----------------------');
  241. $myFriends = $this->chatServiceClient->getFriendsList(['user_id' => $value['id'], 'status' => 2]);
  242. $redisClient->setUserFriends((string)$value['id'], $myFriends['data']);
  243. }
  244. return Result::success();
  245. }
  246. /**
  247. * 删除好友
  248. * @return array
  249. */
  250. public function delFriend()
  251. {
  252. $requireData = $this->request->all();
  253. $validator = $this->validationFactory->make(
  254. $requireData,
  255. [
  256. 'friend_id' => 'required',
  257. ],
  258. [
  259. 'friend_id.required' => '好友ID不能为空',
  260. ]
  261. );
  262. if ($validator->fails()) {
  263. $errorMessage = $validator->errors()->first();
  264. return Result::error($errorMessage);
  265. }
  266. $requireData['user_id'] = Context::get("UserId");
  267. $result = $this->chatServiceClient->delFriend($requireData);
  268. //redis 删除好友
  269. if ($result && $result['code'] != 0) {
  270. $redisClient = new RedisService();
  271. $myFriends = $this->chatServiceClient->getFriendsList(['user_id' => $requireData['user_id'], 'status' => 2]);
  272. $redisClient->setUserFriends((string)$requireData['user_id'], $myFriends['data']);
  273. $myFriends = $this->chatServiceClient->getFriendsList(['user_id' => $requireData['friend_id'], 'status' => 2]);
  274. $redisClient->setUserFriends((string)$requireData['friend_id'], $myFriends['data']);
  275. }
  276. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  277. }
  278. /**
  279. * 是否好友
  280. * @return array
  281. */
  282. public function isFriend()
  283. {
  284. $requireData = $this->request->all();
  285. $validator = $this->validationFactory->make(
  286. $requireData,
  287. [
  288. 'friend_id' => 'required',
  289. ],
  290. [
  291. 'friend_id.required' => '好友ID不能为空',
  292. ]
  293. );
  294. if ($validator->fails()) {
  295. $errorMessage = $validator->errors()->first();
  296. }
  297. $requireData['user_id'] = Context::get("UserId");
  298. $result = $this->chatServiceClient->isFriend($requireData);
  299. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  300. }
  301. /**
  302. * 更新好友备注
  303. * @return array
  304. */
  305. public function updateFriend()
  306. {
  307. $requireData = $this->request->all();
  308. $validator = $this->validationFactory->make(
  309. $requireData,
  310. [
  311. 'friend_id' => 'required',
  312. 'remark' => 'required',
  313. ],
  314. [
  315. 'friend_id.required' => '好友ID不能为空',
  316. 'remark.required' => '备注不能为空',
  317. ]
  318. );
  319. if ($validator->fails()) {
  320. $errorMessage = $validator->errors()->first();
  321. return Result::error($errorMessage);
  322. }
  323. $requireData['user_id'] = Context::get("UserId");
  324. $result = $this->chatServiceClient->updateFriend($requireData);
  325. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  326. }
  327. /**
  328. * 会话
  329. * @return array
  330. */
  331. public function getConversation()
  332. {
  333. $requireData = $this->request->all();
  334. $requireData['user_id'] = Context::get("UserId");
  335. $result = $this->chatServiceClient->getConversation($requireData);
  336. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  337. }
  338. /**
  339. * 获取聊天记录
  340. * @return array
  341. */
  342. public function getChatRecords()
  343. {
  344. $requireData = $this->request->all();
  345. $validator = $this->validationFactory->make(
  346. $requireData,
  347. [
  348. 'friend_id' => 'required',
  349. ],
  350. [
  351. 'friend_id.required' => '好友ID不能为空',
  352. ]
  353. );
  354. if ($validator->fails()) {
  355. $errorMessage = $validator->errors()->first();
  356. return Result::error($errorMessage);
  357. }
  358. $requireData['user_id'] = Context::get("UserId");
  359. $result = $this->chatServiceClient->getChatRecords($requireData);
  360. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  361. }
  362. /**
  363. * 获取群聊天
  364. * @return array
  365. */
  366. public function getGroupChatRecords()
  367. {
  368. $requireData = $this->request->all();
  369. $validator = $this->validationFactory->make(
  370. $requireData,
  371. [
  372. 'group_id' => 'required',
  373. ],
  374. [
  375. 'group_id.required' => '群ID不能为空',
  376. ]
  377. );
  378. if ($validator->fails()) {
  379. $errorMessage = $validator->errors()->first();
  380. }
  381. $requireData['user_id'] = Context::get("UserId");
  382. $result = $this->chatServiceClient->getGroupChatRecords($requireData);
  383. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  384. }
  385. /**
  386. * 获取群成员列表
  387. * @return array
  388. */
  389. public function getGroupMembers()
  390. {
  391. $requireData = $this->request->all();
  392. $validator = $this->validationFactory->make(
  393. $requireData,
  394. [
  395. 'group_id' => 'required',
  396. ],
  397. [
  398. 'group_id.required' => '群ID不能为空',
  399. ]
  400. );
  401. if ($validator->fails()) {
  402. $errorMessage = $validator->errors()->first();
  403. return Result::error($errorMessage);
  404. }
  405. $requireData['user_id'] = Context::get("UserId");
  406. $result = $this->chatServiceClient->getGroupMembers($requireData);
  407. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  408. }
  409. /**
  410. * 获取群信息
  411. * @return array
  412. */
  413. public function getGroupInfo()
  414. {
  415. $requireData = $this->request->all();
  416. $validator = $this->validationFactory->make(
  417. $requireData,
  418. [
  419. 'group_id' => 'required',
  420. ],
  421. [
  422. 'group_id.required' => '群ID不能为空',
  423. ]
  424. );
  425. if ($validator->fails()) {
  426. $errorMessage = $validator->errors()->first();
  427. }
  428. $requireData['user_id'] = Context::get("UserId");
  429. $result = $this->chatServiceClient->getGroupInfo($requireData);
  430. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  431. }
  432. /**
  433. * 获取群列表
  434. * @return array
  435. */
  436. public function getGroupList()
  437. {
  438. $requireData = $this->request->all();
  439. $requireData['user_id'] = Context::get("UserId");
  440. $result = $this->chatServiceClient->getGroupList($requireData);
  441. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  442. }
  443. /**
  444. * 新建群
  445. * @return array
  446. */
  447. public function addGroup()
  448. {
  449. $requireData = $this->request->all();
  450. $validator = $this->validationFactory->make(
  451. $requireData,
  452. [
  453. 'group_name' => 'required',
  454. 'group_desc' => 'required',
  455. // 'group_avatar' => 'required',
  456. // 'group_member' => 'required',
  457. ]
  458. ,
  459. [
  460. 'group_name.required' => '群名称不能为空',
  461. 'group_desc.required' => '群描述不能为空',
  462. // 'group_avatar.required' => '群头像不能为空',
  463. // 'group_member.required' => '群成员不能为空',
  464. ]
  465. );
  466. if ($validator->fails()) {
  467. $errorMessage = $validator->errors()->first();
  468. return Result::error($errorMessage);
  469. }
  470. $requireData['user_id'] = Context::get("UserId");
  471. $requireData['group_member'] = explode(',', ($requireData['group_member']));
  472. $result = $this->chatServiceClient->addGroup($requireData);
  473. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  474. }
  475. /**
  476. * 退出群
  477. * @return array
  478. */
  479. public function quitGroup()
  480. {
  481. $requireData = $this->request->all();
  482. $validator = $this->validationFactory->make(
  483. $requireData,
  484. [
  485. 'group_id' => 'required',
  486. ],
  487. [
  488. 'group_id.required' => '群ID不能为空',
  489. ]
  490. );
  491. if ($validator->fails()) {
  492. $errorMessage = $validator->errors()->first();
  493. }
  494. $requireData['user_id'] = Context::get("UserId");
  495. $result = $this->chatServiceClient->quitGroup($requireData);
  496. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  497. }
  498. /**
  499. * 删除群
  500. * @return array
  501. */
  502. public function delGroup()
  503. {
  504. $requireData = $this->request->all();
  505. $validator = $this->validationFactory->make(
  506. $requireData,
  507. [
  508. 'group_id' => 'required',
  509. ],
  510. [
  511. 'group_id.required' => '群ID不能为空',
  512. ]
  513. );
  514. if ($validator->fails()) {
  515. $errorMessage = $validator->errors()->first();
  516. return Result::error($errorMessage);
  517. }
  518. $requireData['user_id'] = Context::get("UserId");
  519. $result = $this->chatServiceClient->delGroup($requireData);
  520. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  521. }
  522. /**
  523. * 删除群成员
  524. * @return array
  525. */
  526. public function delGroupMembers()
  527. {
  528. $requireData = $this->request->all();
  529. $validator = $this->validationFactory->make(
  530. $requireData,
  531. [
  532. 'group_id' => 'required',
  533. 'group_member' => 'required',
  534. ],
  535. [
  536. 'group_id.required' => '群ID不能为空',
  537. 'group_member.required' => '群成员不能为空',
  538. ]
  539. );
  540. if ($validator->fails()) {
  541. $errorMessage = $validator->errors()->first();
  542. return Result::error($errorMessage);
  543. }
  544. $requireData['user_id'] = Context::get("UserId");
  545. $requireData['group_member'] = explode(',', ($requireData['group_member']));
  546. $result = $this->chatServiceClient->delGroupMembers($requireData);
  547. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  548. }
  549. /**
  550. * 添加群成员
  551. * @return array
  552. */
  553. public function updateGroupMembers()
  554. {
  555. $requireData = $this->request->all();
  556. $validator = $this->validationFactory->make(
  557. $requireData,
  558. [
  559. 'group_id' => 'required',
  560. 'group_member' => 'required',
  561. ],
  562. [
  563. 'group_id.required' => '群ID不能为空',
  564. 'group_member.required' => '群成员不能为空',
  565. ]
  566. );
  567. if ($validator->fails()) {
  568. $errorMessage = $validator->errors()->first();
  569. return Result::error($errorMessage);
  570. }
  571. $requireData['user_id'] = Context::get("UserId");
  572. $requireData['group_member'] = explode(',', ($requireData['group_member']));
  573. $result = $this->chatServiceClient->updateGroupMembers($requireData);
  574. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  575. }
  576. /**
  577. * 删除群成员
  578. * @return array
  579. */
  580. public function deleteGroupMember()
  581. {
  582. $requireData = $this->request->all();
  583. $validator = $this->validationFactory->make(
  584. $requireData,
  585. [
  586. 'group_id' => 'required',
  587. 'group_member' => 'required',
  588. ],
  589. [
  590. 'group_id.required' => '群ID不能为空',
  591. 'group_member.required' => '群成员不能为空',
  592. ]
  593. );
  594. if ($validator->fails()) {
  595. $errorMessage = $validator->errors()->first();
  596. return Result::error($errorMessage);
  597. }
  598. $requireData['user_id'] = Context::get("UserId");
  599. $requireData['group_member'] = explode(',', ($requireData['group_member']));
  600. $result = $this->chatServiceClient->deleteGroupMember($requireData);
  601. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  602. }
  603. /**
  604. * 加入群
  605. * @return array
  606. */
  607. public function joinGroup()
  608. {
  609. $requireData = $this->request->all();
  610. $validator = $this->validationFactory->make(
  611. $requireData,
  612. [
  613. 'group_id' => 'required',
  614. ],
  615. [
  616. 'group_id.required' => '群ID不能为空',
  617. ]
  618. );
  619. if ($validator->fails()) {
  620. $errorMessage = $validator->errors()->first();
  621. return Result::error($errorMessage);
  622. }
  623. $requireData['user_id'] = Context::get("UserId");
  624. $result = $this->chatServiceClient->joinGroup($requireData);
  625. var_dump($result,'-----------1--------');
  626. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  627. }
  628. /**
  629. * 更新群信息
  630. * @return array
  631. */
  632. public function updateGroup()
  633. {
  634. $requireData = $this->request->all();
  635. // 只接受指定的四个字段
  636. $validatedData = $this->validationFactory->make(
  637. $requireData,
  638. [
  639. 'group_id' => 'required|string',
  640. 'group_name' => 'nullable|string',
  641. 'profile' => 'nullable|string',
  642. 'avatar' => 'nullable|string',
  643. ],
  644. [
  645. 'group_id.required' => '群ID不能为空',
  646. // 'group_name.required' => '群名称不能为空',
  647. ]
  648. );
  649. if ($validatedData->fails()) {
  650. $errorMessage = $validatedData->errors()->first();
  651. return Result::error($errorMessage);
  652. }
  653. $requireData['user_id'] = Context::get("UserId");
  654. $result = $this->chatServiceClient->updateGroup($requireData);
  655. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  656. }
  657. /**
  658. * 获取商圈
  659. * @return array
  660. */
  661. public function getTopicsList()
  662. {
  663. $requireData = $this->request->all();
  664. $validator = $this->validationFactory->make(
  665. $requireData,
  666. [
  667. 'page' => 'required|integer',
  668. 'page_size' => 'required|integer',
  669. ],
  670. [
  671. 'page.required' => '页码不能为空',
  672. 'page_size.required' => '每页数量不能为空',
  673. ]
  674. );
  675. if ($validator->fails()) {
  676. $errorMessage = $validator->errors()->first();
  677. return Result::error($errorMessage);
  678. }
  679. $requireData['user_id'] = Context::get("UserId");
  680. $result = $this->chatServiceClient->getTopicsList($requireData);
  681. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  682. }
  683. /**
  684. * 新增话题商圈
  685. * @return array
  686. */
  687. public function addTopic()
  688. {
  689. $requireData = $this->request->all();
  690. $validator = $this->validationFactory->make(
  691. $requireData,
  692. [
  693. 'title' => 'required|string',
  694. 'type' => 'required|int',
  695. 'content' => 'required|string',
  696. ],
  697. [
  698. 'title.required' => '商圈名称不能为空',
  699. 'type.required' => '商圈类型不能为空',
  700. 'content.required' => '商圈内容不能为空',
  701. 'type.int' => '商圈类型只能是数字',
  702. 'content.string' => '商圈内容只能是字符串',
  703. 'title.string' => '商圈名称只能是字符串',
  704. ]
  705. );
  706. if ($validator->fails()) {
  707. $errorMessage = $validator->errors()->first();
  708. return Result::error($errorMessage);
  709. }
  710. $requireData['user_id'] = Context::get("UserId");
  711. $result = $this->chatServiceClient->addTopic($requireData);
  712. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  713. }
  714. /**
  715. * 更新话题商圈
  716. * @return array
  717. */
  718. public function updateTopic()
  719. {
  720. $requireData = $this->request->all();
  721. $validator = $this->validationFactory->make(
  722. $requireData,
  723. [
  724. 'id' => 'required|string',
  725. // 'status' => 'required|integer',
  726. ],
  727. [
  728. 'topic_id.required' => '商圈ID不能为空',
  729. // 'status.required' => '商圈状态不能为空',
  730. ]
  731. );
  732. if ($validator->fails()) {
  733. $errorMessage = $validator->errors()->first();
  734. return Result::error($errorMessage);
  735. }
  736. $requireData['user_id'] = Context::get("UserId");
  737. $result = $this->chatServiceClient->updateTopic($requireData);
  738. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  739. }
  740. /**
  741. * 删除话题商圈
  742. * @return array
  743. */
  744. public function delTopic()
  745. {
  746. $requireData = $this->request->all();
  747. $validator = $this->validationFactory->make(
  748. $requireData,
  749. [
  750. 'id' => 'required|string',
  751. ],
  752. [
  753. 'id.required' => '商圈ID不能为空',
  754. ]
  755. );
  756. if ($validator->fails()) {
  757. $errorMessage = $validator->errors()->first();
  758. return Result::error($errorMessage);
  759. }
  760. $requireData['user_id'] = Context::get("UserId");
  761. $result = $this->chatServiceClient->delTopic($requireData);
  762. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  763. }
  764. /**
  765. * 获取商圈详情
  766. * @return array
  767. */
  768. public function getTopicInfo()
  769. {
  770. $requireData = $this->request->all();
  771. $validator = $this->validationFactory->make(
  772. $requireData,
  773. [
  774. 'id' => 'required|string',
  775. ],
  776. [
  777. 'id.required' => '商圈ID不能为空',
  778. ]
  779. );
  780. if ($validator->fails()) {
  781. $errorMessage = $validator->errors()->first();
  782. return Result::error($errorMessage);
  783. }
  784. $requireData['user_id'] = Context::get("UserId");
  785. $result = $this->chatServiceClient->getTopicInfo($requireData);
  786. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  787. }
  788. /**
  789. * 获取商圈回复
  790. * @return array
  791. */
  792. public function addReply()
  793. {
  794. $requireData = $this->request->all();
  795. $validator = $this->validationFactory->make(
  796. $requireData,
  797. [
  798. 'id' => 'required|string',
  799. 'content' => 'required|string',
  800. ],
  801. [
  802. 'id.required' => '商圈ID不能为空',
  803. 'content.required' => '回复内容不能为空',
  804. ]
  805. );
  806. if ($validator->fails()) {
  807. $errorMessage = $validator->errors()->first();
  808. return Result::error($errorMessage);
  809. }
  810. $requireData['user_id'] = Context::get("UserId");
  811. $result = $this->chatServiceClient->addReply($requireData);
  812. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  813. }
  814. /**
  815. * 获取商圈评论
  816. * @return array
  817. */
  818. public function getTopicReply()
  819. {
  820. $requireData = $this->request->all();
  821. $validator = $this->validationFactory->make(
  822. $requireData,
  823. [
  824. 'id' => 'required|string',
  825. 'page' => 'required|integer',
  826. 'page_size' => 'required|integer',
  827. ],
  828. [
  829. 'id.required' => '商圈ID不能为空',
  830. 'page.required' => '页码不能为空',
  831. 'page_size.required' => '每页数量不能为空',
  832. ]
  833. );
  834. if ($validator->fails()) {
  835. $errorMessage = $validator->errors()->first();
  836. return Result::error($errorMessage);
  837. }
  838. $requireData['user_id'] = Context::get("UserId");
  839. $result = $this->chatServiceClient->getTopicReply($requireData);
  840. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  841. }
  842. /**
  843. * 获取 access_token
  844. * @return array
  845. */
  846. public function getAccessToken()
  847. {
  848. $url = env("WECHAT") . "cgi-bin/token?appid=" . env("APPID") . "&secret=" . env("APP_SECRET") . "&grant_type=client_credential";
  849. $result = PublicData::http_get($url);
  850. $resultData = json_decode($result, true);
  851. var_dump($url, $resultData);
  852. if (isset($resultData['errcode'])) {
  853. return Result::error($resultData['errmsg']);
  854. }
  855. return Result::success($resultData);
  856. }
  857. /**
  858. * 删除一条聊天记录
  859. * @return array
  860. */
  861. public function delRecords()
  862. {
  863. $requireData = $this->request->all();
  864. $validator = $this->validationFactory->make(
  865. $requireData,
  866. [
  867. 'id' => 'required',
  868. ],
  869. [
  870. 'id.required' => '聊天记录ID不能为空',
  871. ]
  872. );
  873. if ($validator->fails()) {
  874. $errorMessage = $validator->errors()->first();
  875. }
  876. $requireData['user_id'] = Context::get("UserId");
  877. $result = $this->chatServiceClient->delRecords($requireData);
  878. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  879. }
  880. /**
  881. * 删除所有聊天记录
  882. * @return array
  883. */
  884. public function clearRecords()
  885. {
  886. $requireData = $this->request->all();
  887. $validator = $this->validationFactory->make(
  888. $requireData,
  889. [
  890. 'friend_id' => 'required',
  891. ],
  892. [
  893. 'friend_id.required' => '聊天记录ID不能为空',
  894. ]
  895. );
  896. if ($validator->fails()) {
  897. $errorMessage =$validator->errors()->first();
  898. }
  899. $requireData['user_id'] = Context::get("UserId");
  900. $result = $this->chatServiceClient->clearRecords($requireData);
  901. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  902. }
  903. /**
  904. * 删除群聊记录
  905. * @return array
  906. */
  907. public function clearGroupRecords()
  908. {
  909. $requireData = $this->request->all();
  910. $validator = $this->validationFactory->make(
  911. $requireData,
  912. [
  913. 'id' => 'required',
  914. ],
  915. [
  916. 'id.required' => '聊天记录ID不能为空',
  917. ]
  918. );
  919. if ($validator->fails()) {
  920. $errorMessage= $validator->errors()->first();
  921. }
  922. $requireData['user_id'] = Context::get("UserId");
  923. $result = $this->chatServiceClient->clearGroupRecords($requireData);
  924. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  925. }
  926. /**
  927. * 撤回一条聊天记录
  928. * @return array
  929. */
  930. public function recallRecord()
  931. {
  932. $webSocketController = ApplicationContext::getContainer()->get(WebSocketController::class);
  933. $frame = new Frame();
  934. $frame->fd = 1; // 替换为实际的客户端 fd
  935. $frame->data = json_encode([
  936. 'talk_type' => 1,
  937. 'receiver_id' => 2, // 接收者 ID
  938. 'content' => 'Hello, this is a test message!'
  939. ]);
  940. $webSocketController->send(1, 'Hello, World!');
  941. return Result::success('');
  942. $requireData = $this->request->all();
  943. $validator = $this->validationFactory->make(
  944. $requireData,
  945. [
  946. 'content' => 'required',
  947. ],
  948. [
  949. 'content.required' => '聊天记录不能为空',
  950. ]
  951. );
  952. $requireData['user_id'] = Context::get("UserId");
  953. if ($validator->fails()) {
  954. $errorMessage = $validator->errors()->first();
  955. }
  956. //接入websocket,发送撤回消息
  957. $redisClient = new RedisService();
  958. $fd = $redisClient->findFd((int) 32);
  959. $maxRetries = 1;
  960. $retryCount = 0;
  961. $interval = 1; // 秒
  962. while ($retryCount < $maxRetries) {
  963. $response = $this->chatServiceClient->getRecordByContent($requireData);
  964. // 如果成功,返回结果
  965. if ($response['code'] === 0) {
  966. if(!empty($response['data']['id'])){
  967. $records = $response['data'];
  968. foreach($records as $record){
  969. //判断 created_at 是否大于一分钟
  970. $createdAt = strtotime($record['created_at']);
  971. $currentTime = time();
  972. $timeDifference = $currentTime - $createdAt;
  973. if ($timeDifference > 60) {
  974. return Result::error('超过一分钟,无法撤回');
  975. }
  976. }
  977. }
  978. $result = $this->chatServiceClient->recallRecord($response['data']);
  979. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  980. }
  981. // 如果失败,等待一段时间后重试
  982. sleep($interval);
  983. $retryCount++;
  984. }
  985. return Result::error('获取失败');
  986. }
  987. /**
  988. * 获取一条信息
  989. * @return array
  990. */
  991. public function getRecord()
  992. {
  993. $requireData = $this->request->all();
  994. $validator = $this->validationFactory->make(
  995. $requireData,
  996. [
  997. 'id' => 'required',
  998. ],
  999. [
  1000. 'id.required' => '聊天记录ID不能为空',
  1001. ]
  1002. );
  1003. if ($validator->fails()) {
  1004. $errorMessage= $validator->errors()->first();
  1005. }
  1006. $requireData['user_id'] = Context::get("UserId");
  1007. $result = $this->chatServiceClient->getRecord($requireData);
  1008. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  1009. }
  1010. /**
  1011. * 删除一条topicRely
  1012. * @return array
  1013. */
  1014. public function delReply()
  1015. {
  1016. $requireData = $this->request->all();
  1017. $validator = $this->validationFactory->make(
  1018. $requireData,
  1019. [
  1020. 'id' => 'required',
  1021. ],
  1022. [
  1023. 'id.required' => '回复ID不能为空',
  1024. ]
  1025. );
  1026. if ($validator->fails()) {
  1027. $errorMessage = $validator->errors()->first();
  1028. }
  1029. $requireData['user_id'] = Context::get("UserId");
  1030. $result = $this->chatServiceClient->delReply($requireData);
  1031. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  1032. }
  1033. /**
  1034. * 删除所有回复
  1035. * @return array
  1036. */
  1037. public function delAllReply()
  1038. {
  1039. $requireData = $this->request->all();
  1040. $validator = $this->validationFactory->make(
  1041. $requireData,
  1042. [
  1043. 'topicid' => 'required',
  1044. ],
  1045. [
  1046. 'topicid.required' => '回复ID不能为空',
  1047. ]
  1048. );
  1049. if ($validator->fails()) {
  1050. $errorMessage =$validator->errors()->first();
  1051. }
  1052. $requireData['user_id'] = Context::get("UserId");
  1053. $result = $this->chatServiceClient->delAllReply($requireData);
  1054. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  1055. }
  1056. /**
  1057. * 获取所有Topic
  1058. * @return array
  1059. */
  1060. public function getTopicsListAdmin()
  1061. {
  1062. $requireData = $this->request->all();
  1063. $validator = $this->validationFactory->make(
  1064. $requireData,
  1065. [
  1066. 'page' => 'required',
  1067. 'limit' => 'required',
  1068. ],
  1069. [
  1070. 'page.required' => '页码不能为空',
  1071. 'limit.required' => '每页数量不能为空',
  1072. ]
  1073. );
  1074. if ($validator->fails()) {
  1075. $errorMessage = $validator->errors()->first();
  1076. }
  1077. $requireData['user_id'] = Context::get("UserId");
  1078. $result = $this->chatServiceClient->getTopicsListAdmin($requireData);
  1079. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  1080. }
  1081. /**
  1082. * 审核Topic
  1083. * @return array
  1084. */
  1085. public function applyTopic()
  1086. {
  1087. $requireData = $this->request->all();
  1088. $validator = $this->validationFactory->make(
  1089. $requireData,
  1090. [
  1091. 'id' => 'required',
  1092. 'status' => 'required|in:2,3',
  1093. ],
  1094. [
  1095. 'id.required' => 'TopicID不能为空',
  1096. 'status.required' => '状态不能为空',
  1097. 'status.in' => '状态值不合法,2或者3',
  1098. ]
  1099. )
  1100. ;
  1101. if ($validator->fails()) {
  1102. $errorMessage = $validator->errors()->first();
  1103. return Result::error($errorMessage);
  1104. }
  1105. $requireData['user_id'] = Context::get("UserId");
  1106. $result = $this->chatServiceClient->applyTopic($requireData);
  1107. return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
  1108. }
  1109. }