name = $data['name']; $activity->type = $data['type']; $activity->description = $data['description'] ?? ''; $activity->start_time = Carbon::parse($data['start_time']); $activity->end_time = Carbon::parse($data['end_time']); $activity->status = $data['status'] ?? ACTIVITY_STATUS::NOT_STARTED->value; $activity->display_order = $data['display_order'] ?? 0; $activity->icon = $data['icon'] ?? ''; $activity->banner = $data['banner'] ?? ''; $activity->reward_group_id = $data['reward_group_id'] ?? null; $activity->reward_group_code = $data['reward_group_code'] ?? null; $activity->config_params = $data['config_params'] ?? []; $activity->save(); // 创建活动条件 if (!empty($data['conditions']) && is_array($data['conditions'])) { foreach ($data['conditions'] as $conditionData) { $condition = new ActivityCondition(); $condition->activity_id = $activity->id; $condition->condition_type = $conditionData['condition_type']; $condition->condition_params = $conditionData['condition_params'] ?? []; $condition->is_participation_condition = $conditionData['is_participation_condition'] ?? false; $condition->is_completion_condition = $conditionData['is_completion_condition'] ?? false; $condition->display_order = $conditionData['display_order'] ?? 0; $condition->save(); } } // 提交事务 DB::commit(); return [ 'success' => true, 'message' => '创建活动成功', 'activity_id' => $activity->id ]; } catch (Exception $e) { // 回滚事务 DB::rollBack(); Log::error('创建活动失败', [ 'data' => $data, 'error' => $e->getMessage() ]); return [ 'success' => false, 'message' => $e->getMessage() ]; } } /** * 更新活动 * * @param int $activityId 活动ID * @param array $data 活动数据 * @return array */ public static function updateActivity(int $activityId, array $data): array { try { // 获取活动 $activity = ActivityConfig::findOrFail($activityId); // 开始事务 DB::beginTransaction(); // 更新活动 if (isset($data['name'])) { $activity->name = $data['name']; } if (isset($data['type'])) { $activity->type = $data['type']; } if (isset($data['description'])) { $activity->description = $data['description']; } if (isset($data['start_time'])) { $activity->start_time = Carbon::parse($data['start_time']); } if (isset($data['end_time'])) { $activity->end_time = Carbon::parse($data['end_time']); } if (isset($data['status'])) { $activity->status = $data['status']; } if (isset($data['display_order'])) { $activity->display_order = $data['display_order']; } if (isset($data['icon'])) { $activity->icon = $data['icon']; } if (isset($data['banner'])) { $activity->banner = $data['banner']; } if (isset($data['reward_group_id'])) { $activity->reward_group_id = $data['reward_group_id']; } if (isset($data['reward_group_code'])) { $activity->reward_group_code = $data['reward_group_code']; } if (isset($data['config_params'])) { $activity->config_params = $data['config_params']; } $activity->save(); // 更新活动条件 if (!empty($data['conditions']) && is_array($data['conditions'])) { // 删除旧条件 ActivityCondition::where('activity_id', $activityId)->delete(); // 创建新条件 foreach ($data['conditions'] as $conditionData) { $condition = new ActivityCondition(); $condition->activity_id = $activity->id; $condition->condition_type = $conditionData['condition_type']; $condition->condition_params = $conditionData['condition_params'] ?? []; $condition->is_participation_condition = $conditionData['is_participation_condition'] ?? false; $condition->is_completion_condition = $conditionData['is_completion_condition'] ?? false; $condition->display_order = $conditionData['display_order'] ?? 0; $condition->save(); } } // 提交事务 DB::commit(); return [ 'success' => true, 'message' => '更新活动成功' ]; } catch (Exception $e) { // 回滚事务 DB::rollBack(); Log::error('更新活动失败', [ 'activity_id' => $activityId, 'data' => $data, 'error' => $e->getMessage() ]); return [ 'success' => false, 'message' => $e->getMessage() ]; } } /** * 删除活动 * * @param int $activityId 活动ID * @return array */ public static function deleteActivity(int $activityId): array { try { // 开始事务 DB::beginTransaction(); // 删除活动条件 ActivityCondition::where('activity_id', $activityId)->delete(); // 删除活动 ActivityConfig::where('id', $activityId)->delete(); // 提交事务 DB::commit(); return [ 'success' => true, 'message' => '删除活动成功' ]; } catch (Exception $e) { // 回滚事务 DB::rollBack(); Log::error('删除活动失败', [ 'activity_id' => $activityId, 'error' => $e->getMessage() ]); return [ 'success' => false, 'message' => $e->getMessage() ]; } } /** * 更新活动状态 * * @param int $activityId 活动ID * @param int $status 状态 * @return array */ public static function updateActivityStatus(int $activityId, int $status): array { try { // 获取活动 $activity = ActivityConfig::findOrFail($activityId); // 更新状态 $activity->status = $status; $activity->save(); return [ 'success' => true, 'message' => '更新活动状态成功' ]; } catch (Exception $e) { Log::error('更新活动状态失败', [ 'activity_id' => $activityId, 'status' => $status, 'error' => $e->getMessage() ]); return [ 'success' => false, 'message' => $e->getMessage() ]; } } /** * 获取所有活动 * * @param array $filters 过滤条件 * @return array */ public static function getAllActivities(array $filters = []): array { try { $query = ActivityConfig::query(); // 应用过滤条件 if (!empty($filters['status'])) { $query->where('status', $filters['status']); } if (!empty($filters['type'])) { $query->where('type', $filters['type']); } if (!empty($filters['name'])) { $query->where('name', 'like', "%{$filters['name']}%"); } if (!empty($filters['start_time'])) { $query->where('start_time', '>=', Carbon::parse($filters['start_time'])); } if (!empty($filters['end_time'])) { $query->where('end_time', '<=', Carbon::parse($filters['end_time'])); } // 排序 $query->orderBy('display_order', 'desc') ->orderBy('id', 'desc'); // 获取活动列表 $activities = $query->get(); $result = []; foreach ($activities as $activity) { $result[] = ActivityConfigDto::fromModel($activity); } return $result; } catch (Exception $e) { Log::error('获取所有活动失败', [ 'filters' => $filters, 'error' => $e->getMessage() ]); return []; } } /** * 自动更新活动状态 * * @return array */ public static function autoUpdateActivityStatus(): array { try { $now = Carbon::now(); $updated = 0; // 更新未开始的活动 $notStartedActivities = ActivityConfig::where('status', ACTIVITY_STATUS::NOT_STARTED->value) ->where('start_time', '<=', $now) ->get(); foreach ($notStartedActivities as $activity) { $activity->status = ACTIVITY_STATUS::IN_PROGRESS->value; $activity->save(); $updated++; } // 更新进行中的活动 $inProgressActivities = ActivityConfig::where('status', ACTIVITY_STATUS::IN_PROGRESS->value) ->where('end_time', '<', $now) ->get(); foreach ($inProgressActivities as $activity) { $activity->status = ACTIVITY_STATUS::ENDED->value; $activity->save(); $updated++; } return [ 'success' => true, 'message' => "自动更新活动状态成功,共更新 {$updated} 个活动" ]; } catch (Exception $e) { Log::error('自动更新活动状态失败', [ 'error' => $e->getMessage() ]); return [ 'success' => false, 'message' => $e->getMessage() ]; } } }