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