SELECT sa.id, sa.activity_name, sa.activity_type, sa.activity_theme, sa.start_time, sa.end_time, sa.location, sa.description, sa.poster_url, sa.related_dept_id, sa.related_dept_name, sa.related_dept_ids, sa.related_dept_names, sa.related_club_id, sa.related_type, sa.organizer_name, sa.organizer_type, sa.organizer_contact, sa.organizer_phone, sa.co_organizers, sa.instructors, sa.registration_type, sa.registration_start, sa.registration_end, -- 动态计算报名状态:只有审批通过的活动才根据时间计算报名状态 CASE -- 草稿、待审批、已驳回状态不映射报名状态,保持为空 WHEN sa.activity_status IN ('0', '2', '7') THEN NULL -- 已取消的活动设置为已关闭 WHEN sa.activity_status = '6' THEN '3' -- 已取消 → 已关闭(固定) -- 只有审批通过的活动(已通过、进行中、已结束)才根据时间计算报名状态 WHEN sa.activity_status IN ('3', '4', '5') THEN CASE -- 已结束的活动强制设置报名结束 WHEN sa.activity_status = '5' THEN '2' -- 已结束 → 报名结束(固定) -- 已通过和进行中的活动根据报名时间判断 WHEN sa.registration_start IS NULL OR sa.registration_end IS NULL THEN sa.registration_status = sa.registration_start AND NOW() <= sa.registration_end THEN '1']]> sa.registration_end THEN '2']]> ELSE sa.registration_status END -- 其他情况保持原状态 ELSE sa.registration_status END AS registration_status, sa.max_participants, sa.max_teams, sa.team_size_min, sa.team_size_max, sa.need_approval, sa.activity_range, -- 动态计算活动状态:审批通过后根据时间自动更新状态 CASE -- 手动控制的状态保持不变(草稿、待审批、已取消、已驳回) WHEN sa.activity_status IN ('0', '2', '6', '7') THEN sa.activity_status -- 审批通过后的状态根据时间自动计算 WHEN sa.activity_status IN ('3', '4', '5') THEN CASE -- 已通过(未开始) = sa.start_time AND NOW() <= sa.end_time THEN '4']]> -- 进行中 sa.end_time THEN '5']]> -- 已结束 ELSE sa.activity_status END -- 其他情况保持原状态 ELSE sa.activity_status END AS activity_status, -- 返回原始活动状态(用于权限控制) sa.activity_status AS original_activity_status, sa.is_finished, sa.summary, sa.summary_attachments, sa.achievements, sa.achievements_attachments, sa.import_source, sa.remark, sa.create_by, sa.create_time, sa.update_by, sa.update_time, -- 关联查询创建者姓名 su.nick_name AS create_by_name, -- 根据关联类型查询对应的名称 CASE WHEN sa.related_type = 1 THEN CASE WHEN sc.deleted = 1 THEN CONCAT(sc.club_name, '(已删除)') ELSE sc.club_name END WHEN sa.related_type = 2 THEN CASE WHEN svt.deleted = 1 THEN CONCAT(svt.team_name, '(已删除)') ELSE svt.team_name END ELSE NULL END AS related_club_name, -- 统计报名人数(子查询)- 只统计审核通过的报名记录 (SELECT COUNT(*) FROM stgl_activity_registration sar WHERE sar.activity_id = sa.id AND sar.deleted = 0 AND sar.approval_status = 1) AS registration_count, -- 统计平均评分(子查询) (SELECT ROUND(AVG(rating_score), 1) FROM stgl_activity_rating sar2 WHERE sar2.activity_id = sa.id AND sar2.deleted = 0) AS average_rating FROM stgl_activity sa LEFT JOIN sys_user su ON sa.create_by = su.user_id LEFT JOIN stgl_club sc ON sa.related_club_id = sc.id AND sa.related_type = 1 LEFT JOIN stgl_volunteer_team svt ON sa.related_club_id = svt.id AND sa.related_type = 2 INSERT INTO stgl_activity ( id, tenant_id, create_dept, create_by, create_time, update_by, update_time, activity_name, activity_type, activity_theme, start_time, end_time, location, description, poster_url, related_dept_id, related_dept_name, related_dept_ids, related_dept_names, related_club_id, organizer_name, organizer_type, organizer_contact, organizer_phone, co_organizers, instructors, registration_type, registration_start, registration_end, registration_status, max_participants, max_teams, team_size_min, team_size_max, need_approval, activity_status, is_finished, summary, achievements, import_source, remark ) SELECT #{newActivity.id}, #{newActivity.tenantId}, #{newActivity.createDept}, #{newActivity.createBy}, #{newActivity.createTime}, #{newActivity.updateBy}, #{newActivity.updateTime}, #{newActivity.activityName}, activity_type, activity_theme, #{newActivity.startTime}, #{newActivity.endTime}, location, description, poster_url, related_dept_id, related_dept_name, related_dept_ids, related_dept_names, related_club_id, organizer_name, organizer_type, organizer_contact, organizer_phone, co_organizers, instructors, registration_type, #{newActivity.registrationStart}, #{newActivity.registrationEnd}, #{newActivity.registrationStatus}, max_participants, max_teams, team_size_min, team_size_max, need_approval, #{newActivity.activityStatus}, 0, NULL, NULL, import_source, remark FROM stgl_activity WHERE id = #{sourceId} AND deleted = 0