|
|
@@ -12,6 +12,7 @@
|
|
|
namespace App\Services\Api;
|
|
|
|
|
|
use App\Models\ImChatModel;
|
|
|
+use App\Models\LiveChatModel;
|
|
|
use App\Models\MerchantModel;
|
|
|
use App\Models\MessageModel;
|
|
|
use App\Services\BaseService;
|
|
|
@@ -144,6 +145,67 @@ class MessageService extends BaseService
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 直播间消息列表
|
|
|
+ * @param $userId
|
|
|
+ * @param $params
|
|
|
+ * @param int $pageSize
|
|
|
+ * @return array
|
|
|
+ */
|
|
|
+ public function getLiveDataList($userId, $params, $pageSize = 0)
|
|
|
+ {
|
|
|
+ $page = request()->post('page', 1);
|
|
|
+ $liveId = request()->post('live_id', 0);
|
|
|
+ $cacheKey = "caches:messages:live_{$liveId}_{$page}_" . md5(json_encode($params) . $pageSize);
|
|
|
+ $datas = RedisService::get($cacheKey);
|
|
|
+ if ($datas) {
|
|
|
+ return $datas;
|
|
|
+ }
|
|
|
+
|
|
|
+ $where = ['a.status' => 1, 'a.mark' => 1];
|
|
|
+ $field = ['a.id', 'a.type', 'a.msg_type','a.chat_key','a.live_id', 'a.description', 'a.message', 'a.from_uid', 'a.to_uid', 'a.create_time', 'a.status'];
|
|
|
+ $datas = LiveChatModel::from('live_chat as a')
|
|
|
+ ->leftJoin('member as b', 'b.id', '=', 'a.from_uid')
|
|
|
+ ->leftJoin('member as c', 'c.id', '=', 'a.to_uid')
|
|
|
+ ->where($where)
|
|
|
+ ->where(function ($query) use ($params, $userId) {
|
|
|
+ $fromUid = isset($params['from_uid']) ? intval($params['from_uid']) : 0;
|
|
|
+ if ($fromUid) {
|
|
|
+ $query->where('a.from_uid', $fromUid);
|
|
|
+ }
|
|
|
+
|
|
|
+ $liveId = isset($params['live_id']) ? intval($params['live_id']) : 0;
|
|
|
+ if ($liveId) {
|
|
|
+ $query->where('a.live_id', $liveId);
|
|
|
+ }
|
|
|
+
|
|
|
+ $chatKey = isset($params['chat_key']) ? trim($params['chat_key']) : '';
|
|
|
+ if ($chatKey) {
|
|
|
+ $query->where('a.chat_key', $chatKey);
|
|
|
+ }
|
|
|
+ })->select($field)
|
|
|
+ ->orderBy('a.create_time', 'desc')
|
|
|
+ ->orderBy('a.id', 'desc')
|
|
|
+ ->paginate($pageSize > 0 ? $pageSize : 9999999);
|
|
|
+ $datas = $datas ? $datas->toArray() : [];
|
|
|
+
|
|
|
+ if ($datas) {
|
|
|
+ foreach ($datas['data'] as &$item) {
|
|
|
+ $item['time_text'] = isset($item['create_time']) && $item['create_time'] ? dateForWeek($item['create_time']) : '';$item['from_user_avatar'] = $item['from_user_avatar'] ? get_image_url($item['from_user_avatar']) : get_image_url('/images/member/logo.png');
|
|
|
+ }
|
|
|
+ unset($item);
|
|
|
+
|
|
|
+ arsort($datas['data'], true);
|
|
|
+ $datas['data'] = array_reverse($datas['data'], false);
|
|
|
+ RedisService::set($cacheKey, $datas, rand(3, 5));
|
|
|
+ }
|
|
|
+ return [
|
|
|
+ 'list' => isset($datas['data']) ? $datas['data'] : [],
|
|
|
+ 'total' => isset($datas['total']) ? $datas['total'] : 0,
|
|
|
+ 'pageSize' => $pageSize
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 获取站内消息窗口列表
|
|
|
* @param $userId
|
|
|
* @return array|mixed
|