POINT_TYPE::class, ]; // 状态常量 const STATUS_PENDING = 0; // 待处理 const STATUS_COMPLETED = 1; // 已完成 const STATUS_FAILED = 2; // 已失败 /** * 创建积分转账记录 * * @param int $fromUserId 转出用户ID * @param int $toUserId 转入用户ID * @param int $pointId 积分类型ID * @param int $amount 转账积分数量 * @param string $remark 备注 * @return PointTransferModel|false 成功返回模型,失败返回false */ public static function createRecord( int $fromUserId, int $toUserId, int $pointId, int $amount, string $remark ) { $record = new self(); $record->from_user_id = $fromUserId; $record->to_user_id = $toUserId; $record->point_id = $pointId; $record->amount = $amount; $record->remark = $remark; $record->status = self::STATUS_PENDING; $record->create_time = time(); $record->update_time = time(); if ($record->save()) { return $record; } return false; } /** * 更新记录状态 * * @param int $status 状态 * @return bool 是否成功 */ public function updateStatus(int $status): bool { $this->status = $status; $this->update_time = time(); return $this->save(); } /** * 标记为已完成 * * @return bool 是否成功 */ public function markCompleted(): bool { return $this->updateStatus(self::STATUS_COMPLETED); } /** * 标记为已失败 * * @return bool 是否成功 */ public function markFailed(): bool { return $this->updateStatus(self::STATUS_FAILED); } /** * 获取用户转账记录(包括转出和转入) * * @param int $userId 用户ID * @param int $limit 限制数量 * @return \Illuminate\Database\Eloquent\Collection 记录集合 */ public static function getUserRecords(int $userId, int $limit = 50) { return self::where(function($query) use ($userId) { $query->where('from_user_id', $userId) ->orWhere('to_user_id', $userId); }) ->orderBy('create_time', 'desc') ->limit($limit) ->get(); } /** * 获取用户转出记录 * * @param int $userId 用户ID * @param int $limit 限制数量 * @return \Illuminate\Database\Eloquent\Collection 记录集合 */ public static function getUserTransferOutRecords(int $userId, int $limit = 50) { return self::where('from_user_id', $userId) ->orderBy('create_time', 'desc') ->limit($limit) ->get(); } /** * 获取用户转入记录 * * @param int $userId 用户ID * @param int $limit 限制数量 * @return \Illuminate\Database\Eloquent\Collection 记录集合 */ public static function getUserTransferInRecords(int $userId, int $limit = 50) { return self::where('to_user_id', $userId) ->orderBy('create_time', 'desc') ->limit($limit) ->get(); } /** * 获取状态名称 * * @return string 状态名称 */ public function getStatusName(): string { return match($this->status) { self::STATUS_PENDING => '待处理', self::STATUS_COMPLETED => '已完成', self::STATUS_FAILED => '已失败', default => '未知状态', }; } /** * 判断是否为待处理状态 * * @return bool 是否为待处理 */ public function isPending(): bool { return $this->status === self::STATUS_PENDING; } /** * 判断是否为已完成状态 * * @return bool 是否为已完成 */ public function isCompleted(): bool { return $this->status === self::STATUS_COMPLETED; } /** * 判断是否为已失败状态 * * @return bool 是否为已失败 */ public function isFailed(): bool { return $this->status === self::STATUS_FAILED; } /** * 获取积分类型名称 * * @return string 积分类型名称 */ public function getPointTypeName(): string { return $this->point_id->getTypeName(); } /** * 判断用户是否为转出方 * * @param int $userId 用户ID * @return bool 是否为转出方 */ public function isTransferOut(int $userId): bool { return $this->from_user_id === $userId; } /** * 判断用户是否为转入方 * * @param int $userId 用户ID * @return bool 是否为转入方 */ public function isTransferIn(int $userId): bool { return $this->to_user_id === $userId; } }