'推文', self::TYPE_REPOST => '转发', ]; protected function media(): Attribute { return Attribute::make( get: fn(string $value = '') => Tools::JonsDecode($value), set: fn(array $value = []) => Tools::JonsEncode($value), ); } protected function postParams(): Attribute { return Attribute::make( get: fn(string $value = '') => Tools::JonsDecode($value), set: fn(array $value = []) => Tools::JonsEncode($value), ); } /** * @throws ModelException */ function addPost($uid, $type = self::TYPE_POST, $content = null, $media = null, $mid = null, $sBachSn = null): \Illuminate\Database\Eloquent\Model|\Illuminate\Database\Eloquent\Builder|array|null { if (!in_array($type, [self::TYPE_POST, self::TYPE_REPOST])) throw new ModelException('type params error'); $aPostParams = []; if($type == self::TYPE_REPOST){ $oRePostModel = $this->findItem($mid); $aPostParams[PostParamsStruct::REPOST_ORG_USER_ID] = $oRePostModel->uid; $aPostParams[PostParamsStruct::REPOST_ORG_POST_ID] = $oRePostModel->mid; } $uuid = Tools::genUuid(); $bsn = 'BSN_' . ($sBachSn ?? Tools::genUuid()); if (!$content && !$media) throw new ModelException('addPost params error'); $aItem['type'] = $type; $aItem['uid'] = $uid; $aItem['uuid'] = $uuid; $aItem['post_batch_sn'] = $bsn; $aItem['mid'] = $mid; $aItem['media'] = $media; $aItem['content'] = $content; $aItem['post_params'] = $aPostParams; $sDateTime = date('Y-m-d H:i:s'); $aItem['created_at'] = $sDateTime; $res = $this->addItem($aItem); if ($res) { //发送到消息队列处理新增post $oQueueAddPostBean = new QueueAddPostBean(); $oQueueAddPostBean->setId($res->id); $oQueueAddPostBean->setType(self::TYPE_POST); AddPostQueue::putToQueue(new QueueAddPostBean(['id' => $res->id, 'type' => $type])); } return $res; } function addBatchPost(array $aPostList): void { $mid = null; $bsn = 'BSN_' . ($sBachSn ?? Tools::genUuid()); foreach ($aPostList as $aPostItem) { $oPost = $this->addPost($aPostItem['uid'], $aPostItem['type'], $aPostItem['content'], $aPostItem['media'], $mid, $bsn); if ($oPost) { $mid = $oPost->id; } } } /** * @throws ModelException */ function delPostById($id) { $oPost = $this->findItem($id); $res = $this->delItem($id); if ($res) { $oPostHistoryModel = new PostHistoryModel(); $oPostHistoryModel->addPostHistory(PostHistoryModel::METHOD_DEL, $oPost->toArray()); } return $res; } /** * @throws ModelException */ function delPostByUuid($uuid) { $oPost = $this->findItemByWhere(['uuid' => $uuid]); $res = $this->newQuery()->where('uuid', $uuid)->delete(); if ($res) { $oPostHistoryModel = new PostHistoryModel(); $oPostHistoryModel->addPostHistory(PostHistoryModel::METHOD_DEL, $oPost->toArray()); } return $res; } function getPostListByUid($uid): \Illuminate\Database\Eloquent\Collection|array { return $this->getItemsByWhere(['uid' => $uid]); } function getPostById($id): \Illuminate\Database\Eloquent\Model|\Illuminate\Database\Eloquent\Collection|\Illuminate\Database\Eloquent\Builder|array|null { return $this->findItem($id); } /** * @throws ModelException */ function updatePostById($aItem): bool|int { if (!isset($aItem['id'])) throw new ModelException('updatePostById params error'); if (empty($aItem['id'])) throw new ModelException('updatePostById params error'); $oPost = $this->findItem($aItem['id']); $res = $this->updateItem($aItem); if ($res) { $oPostHistoryModel = new PostHistoryModel(); $oPostHistoryModel->addPostHistory(PostHistoryModel::METHOD_EDIT, $oPost->toArray()); } return $res; } /** * @throws ModelException */ function updatePostByUuid($aItem): bool|int { if (!isset($aItem['uuid'])) throw new ModelException('updatePostByUuid params error'); if (empty($aItem['uuid'])) throw new ModelException('updatePostByUuid params error'); $oPost = $this->findItemByWhere(['uuid' => $aItem['uuid']]); $res = $this->updateItem($aItem, 'uuid'); if ($res) { $oPostHistoryModel = new PostHistoryModel(); $oPostHistoryModel->addPostHistory(PostHistoryModel::METHOD_EDIT, $oPost->toArray()); } return $res; } function getPostListByMid($mid): \Illuminate\Database\Eloquent\Collection|array { return $this->getItemsByWhere(['mid' => $mid]); } function getPostListByUidMid($uid, $mid): \Illuminate\Database\Eloquent\Collection|array { return $this->getItemsByWhere(['uid' => $uid, 'mid' => $mid]); } function getPostListByUids($uids, $sDateLimit = null,$cols = ['*'],$offset = null, $limit = null): \Illuminate\Database\Eloquent\Collection|array { $oModel = $this->newQuery(); if ($offset) $oModel->offset($offset); if ($limit) $oModel->limit($offset); if ($sDateLimit == null) $sDateLimit = date('Y-m-d H:i:s', strtotime('-3 day')); return $oModel ->where('created_at', $sDateLimit) ->whereIn('uid', $uids) ->orderBy('created_at') ->get($cols); } function CountPostListByUids($uids, $sDateLimit = null): int { if ($sDateLimit == null) $sDateLimit = date('Y-m-d H:i:s', strtotime('-3 day')); return $this->newQuery()->where('created_at', $sDateLimit)->whereIn('uid', $uids)->orderBy('created_at')->count(); } }