| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373 |
- <?php
- namespace App\Module\Activity\Services;
- use App\Module\Activity\Dtos\ActivityConfigDto;
- use App\Module\Activity\Enums\ACTIVITY_STATUS;
- use App\Module\Activity\Models\ActivityConfig;
- use App\Module\Activity\Models\ActivityCondition;
- use Carbon\Carbon;
- use Exception;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Log;
- /**
- * 活动管理服务类
- */
- class ActivityManagementService
- {
- /**
- * 创建活动
- *
- * @param array $data 活动数据
- * @return array
- */
- public static function createActivity(array $data): array
- {
- try {
- // 开始事务
- DB::beginTransaction();
-
- // 创建活动
- $activity = new ActivityConfig();
- $activity->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;
- $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)
- ->where('start_time', '<=', $now)
- ->get();
-
- foreach ($notStartedActivities as $activity) {
- $activity->status = ACTIVITY_STATUS::IN_PROGRESS;
- $activity->save();
- $updated++;
- }
-
- // 更新进行中的活动
- $inProgressActivities = ActivityConfig::where('status', ACTIVITY_STATUS::IN_PROGRESS)
- ->where('end_time', '<', $now)
- ->get();
-
- foreach ($inProgressActivities as $activity) {
- $activity->status = ACTIVITY_STATUS::ENDED;
- $activity->save();
- $updated++;
- }
-
- return [
- 'success' => true,
- 'message' => "自动更新活动状态成功,共更新 {$updated} 个活动"
- ];
- } catch (Exception $e) {
- Log::error('自动更新活动状态失败', [
- 'error' => $e->getMessage()
- ]);
-
- return [
- 'success' => false,
- 'message' => $e->getMessage()
- ];
- }
- }
- }
|