ChatController.php 37 KB

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