id; } /** * 批量处理积分流转 * * @param array $circulations 流转操作数组 * @return array 处理结果数组 */ public static function batchHandle(array $circulations): array { $results = []; foreach ($circulations as $index => $circulation) { if (!isset( $circulation['user_id'], $circulation['from_point_id'], $circulation['to_point_id'], $circulation['amount'], $circulation['re_id'], $circulation['re_type'], $circulation['remark'] )) { $results[$index] = '流转参数不完整'; continue; } $result = self::handle( $circulation['user_id'], $circulation['from_point_id'], $circulation['to_point_id'], $circulation['amount'], $circulation['re_id'], $circulation['re_type'], $circulation['remark'] ); $results[$index] = $result; } return $results; } /** * 完成流转操作 * * @param int $circulationId 流转记录ID * @return bool|string 成功返回true,失败返回错误信息 */ public static function complete(int $circulationId) { $circulation = PointCirculationModel::find($circulationId); if (!$circulation) { return '流转记录不存在'; } if ($circulation->isCompleted()) { return '流转记录已完成'; } if ($circulation->isFailed()) { return '流转记录已失败,无法完成'; } return $circulation->markCompleted(); } /** * 标记流转失败 * * @param int $circulationId 流转记录ID * @return bool|string 成功返回true,失败返回错误信息 */ public static function fail(int $circulationId) { $circulation = PointCirculationModel::find($circulationId); if (!$circulation) { return '流转记录不存在'; } if ($circulation->isCompleted()) { return '流转记录已完成,无法标记为失败'; } if ($circulation->isFailed()) { return '流转记录已失败'; } return $circulation->markFailed(); } /** * 获取用户流转记录 * * @param int $userId 用户ID * @param int $limit 限制数量 * @return array 流转记录数组 */ public static function getUserRecords(int $userId, int $limit = 50): array { $records = PointCirculationModel::getUserRecords($userId, $limit); $result = []; foreach ($records as $record) { $result[] = [ 'id' => $record->id, 'user_id' => $record->user_id, 'from_point_id' => $record->from_point_id, 'to_point_id' => $record->to_point_id, 'amount' => $record->amount, 're_id' => $record->re_id, 're_type' => $record->re_type, 'remark' => $record->remark, 'status' => $record->status, 'status_name' => $record->getStatusName(), 'create_time' => $record->create_time, 'update_time' => $record->update_time, ]; } return $result; } /** * 获取指定积分类型的流转记录 * * @param int $userId 用户ID * @param int $pointId 积分类型ID * @param int $limit 限制数量 * @return array 流转记录数组 */ public static function getPointRecords(int $userId, int $pointId, int $limit = 50): array { $records = PointCirculationModel::getPointRecords($userId, $pointId, $limit); $result = []; foreach ($records as $record) { $result[] = [ 'id' => $record->id, 'user_id' => $record->user_id, 'from_point_id' => $record->from_point_id, 'to_point_id' => $record->to_point_id, 'amount' => $record->amount, 're_id' => $record->re_id, 're_type' => $record->re_type, 'remark' => $record->remark, 'status' => $record->status, 'status_name' => $record->getStatusName(), 'create_time' => $record->create_time, 'update_time' => $record->update_time, ]; } return $result; } /** * 验证流转操作的有效性 * * @param int $userId 用户ID * @param int $fromPointId 源积分类型ID * @param int $toPointId 目标积分类型ID * @param int $amount 流转积分数量 * @return bool|string 有效返回true,无效返回错误信息 */ public static function validate(int $userId, int $fromPointId, int $toPointId, int $amount) { # 检查用户ID if ($userId <= 0) { return '用户ID无效'; } # 检查积分类型 if ($fromPointId === $toPointId) { return '源积分类型和目标积分类型不能相同'; } # 检查积分数量 if ($amount <= 0) { return '流转积分数量必须大于0'; } # 检查源积分余额 $checkResult = User::checkBalance($userId, $fromPointId, $amount); if ($checkResult !== true) { return $checkResult; } return true; } }