Msg.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <?php
  2. namespace app\controller\api;
  3. use app\extra\basic\Base;
  4. use app\middleware\AuthMiddleware;
  5. use app\model\saas\SaasChatMsg;
  6. use app\model\saas\SaasService;
  7. use app\model\saas\SaasStore;
  8. use LinFly\Annotation\Attributes\Route\Controller;
  9. use LinFly\Annotation\Attributes\Route\GetMapping;
  10. use LinFly\Annotation\Attributes\Route\Middleware;
  11. use LinFly\Annotation\Attributes\Route\PostMapping;
  12. use support\Request;
  13. use support\Response;
  14. #[Controller("/dy/msg"),Middleware(AuthMiddleware::class)]
  15. class Msg extends Base
  16. {
  17. protected int $isUser = 1;
  18. #[PostMapping("checkIn")]
  19. public function checkIn(Request $request): Response
  20. {
  21. try {
  22. $param = $request->all();
  23. $store = (new SaasStore)->where("poi_id",$param['poi'])->findOrEmpty();
  24. if ($store->isEmpty()) return error("店铺不存在");
  25. // 获取最新的10条聊天记录
  26. $userAvatar = $request->user['avatar'];
  27. $msg = (new SaasChatMsg)->where(['openid' => $request->user['openid'],'poi_id' => $store['poi_id'],'is_user' => $this->isUser])->append(['avatar','time','userType'])->withAttr(['avatar' => function($data,$resp) use($userAvatar){
  28. if ($resp['source'] == 1) { // 用户
  29. return $userAvatar??'';
  30. } else {
  31. return sConf("service.logo");
  32. }
  33. },'time' => function($resp,$data){
  34. return strtotime($data['create_at']) * 1000;
  35. },'userType' => function($data,$resp) {
  36. if ($resp['source'] == 1) { // 用户
  37. return 'self';
  38. } else {
  39. return 'friend';
  40. }
  41. }])->order("id","asc")->paginate([
  42. "list_rows" => 10,
  43. "page" => 1
  44. ]);
  45. $star = (new SaasService)->where("poi_id",$param['poi'])->with(['quick'])->findOrEmpty();
  46. return $this->encode("ok",[
  47. "msg" => pageFormatMsg($msg),
  48. "avatar" => [
  49. "self" => $userAvatar,
  50. "friend" => empty($store['poi_logo']) ? sConf("service.logo") : $store['poi_logo'],
  51. ],
  52. "quick" => $star,
  53. "store" => ['name' => $store['poi_name'],"chat_id" => $store['poi_id']]
  54. ]);
  55. } catch (\Throwable $throwable) {
  56. return error($throwable);
  57. }
  58. }
  59. #[GetMapping("msg")]
  60. public function getMessageList(Request $request): Response
  61. {
  62. try {
  63. $param = $this->_valid([
  64. "poi.require" => trans("empty.require"),
  65. "page.default" => 1,
  66. "size.default" => 10
  67. ],$request->method());
  68. if (!is_array($param)) return error($param);
  69. $userAvatar = $request->user['avatar'];
  70. $msg = (new SaasChatMsg)->where(['openid' => $request->user['openid'],'poi_id' => $param['poi'],'is_user' => $this->isUser])->append(['avatar','time','userType'])->withAttr(['avatar' => function($data,$resp) use($userAvatar){
  71. if ($resp['source'] == 1) {
  72. return $userAvatar??'';
  73. } else {
  74. return sConf("service.logo");
  75. }
  76. },'time' => function($resp,$data){
  77. return strtotime($data['create_at']) * 1000;
  78. },'userType' => function($data,$resp) {
  79. if ($resp['source'] == 1) { // 用户
  80. return 'self';
  81. } else {
  82. return 'friend';
  83. }
  84. }])->order("id","asc")->paginate([
  85. "list_rows" => $param['size']??10,
  86. "page" => $param['page']??1,
  87. ]);
  88. return $this->encode("ok",pageFormat($msg));
  89. } catch (\Throwable $throwable) {
  90. return error($throwable->getMessage());
  91. }
  92. }
  93. }