diff --git a/backend/ruoyi-modules/ruoyi-stgl/src/main/java/org/dromara/stgl/domain/bo/StglClassBo.java b/backend/ruoyi-modules/ruoyi-stgl/src/main/java/org/dromara/stgl/domain/bo/StglClassBo.java index 89df987d..86ea4fc1 100644 --- a/backend/ruoyi-modules/ruoyi-stgl/src/main/java/org/dromara/stgl/domain/bo/StglClassBo.java +++ b/backend/ruoyi-modules/ruoyi-stgl/src/main/java/org/dromara/stgl/domain/bo/StglClassBo.java @@ -30,7 +30,7 @@ public class StglClassBo extends BaseEntity { /** * 学生姓名 */ - private String name; + private String studentName; /** * 性别 diff --git a/backend/ruoyi-modules/ruoyi-stgl/src/main/java/org/dromara/stgl/domain/vo/StglActivityVo.java b/backend/ruoyi-modules/ruoyi-stgl/src/main/java/org/dromara/stgl/domain/vo/StglActivityVo.java index dacf563c..ccb9848b 100644 --- a/backend/ruoyi-modules/ruoyi-stgl/src/main/java/org/dromara/stgl/domain/vo/StglActivityVo.java +++ b/backend/ruoyi-modules/ruoyi-stgl/src/main/java/org/dromara/stgl/domain/vo/StglActivityVo.java @@ -217,11 +217,18 @@ public class StglActivityVo implements Serializable { /** * 活动状态 + * 注意:此字段返回的是根据时间动态计算后的状态 */ @ExcelProperty(value = "活动状态", converter = ExcelDictConvert.class, index = 24) @ExcelDictFormat(dictType = "stgl_activity_status") private String activityStatus; + /** + * 原始活动状态(数据库中存储的实际状态) + * 用于权限控制和业务逻辑判断 + */ + private String originalActivityStatus; + /** * 是否为已办活动 */ diff --git a/backend/ruoyi-modules/ruoyi-stgl/src/main/java/org/dromara/stgl/service/impl/StglClassServiceImpl.java b/backend/ruoyi-modules/ruoyi-stgl/src/main/java/org/dromara/stgl/service/impl/StglClassServiceImpl.java index 34867143..5c253529 100644 --- a/backend/ruoyi-modules/ruoyi-stgl/src/main/java/org/dromara/stgl/service/impl/StglClassServiceImpl.java +++ b/backend/ruoyi-modules/ruoyi-stgl/src/main/java/org/dromara/stgl/service/impl/StglClassServiceImpl.java @@ -126,8 +126,8 @@ public class StglClassServiceImpl implements IStglClassService { if (StringUtils.isNotBlank(bo.getClassId())) { params.put("classId", bo.getClassId()); } - if (StringUtils.isNotBlank(bo.getName())) { - params.put("studentName", bo.getName()); + if (StringUtils.isNotBlank(bo.getStudentName())) { + params.put("studentName", bo.getStudentName()); } if (StringUtils.isNotBlank(bo.getStudentNo())) { params.put("studentNo", bo.getStudentNo()); @@ -145,7 +145,7 @@ public class StglClassServiceImpl implements IStglClassService { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(StringUtils.isNotBlank(bo.getClassId()), StglClass::getClassId, bo.getClassId()); - lqw.like(StringUtils.isNotBlank(bo.getName()), StglClass::getName, bo.getName()); + lqw.like(StringUtils.isNotBlank(bo.getStudentName()), StglClass::getName, bo.getStudentName()); lqw.like(StringUtils.isNotBlank(bo.getStudentNo()), StglClass::getStudentNo, bo.getStudentNo()); return lqw; } diff --git a/backend/ruoyi-modules/ruoyi-stgl/src/main/resources/mapper/stgl/StglActivityMapper.xml b/backend/ruoyi-modules/ruoyi-stgl/src/main/resources/mapper/stgl/StglActivityMapper.xml index a4adce16..f94ee3f5 100644 --- a/backend/ruoyi-modules/ruoyi-stgl/src/main/resources/mapper/stgl/StglActivityMapper.xml +++ b/backend/ruoyi-modules/ruoyi-stgl/src/main/resources/mapper/stgl/StglActivityMapper.xml @@ -34,6 +34,7 @@ + @@ -81,7 +82,26 @@ 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, - sa.activity_status, sa.is_finished, sa.summary, sa.summary_attachments, sa.achievements, sa.achievements_attachments, sa.import_source, + -- 动态计算活动状态:审批通过后根据时间自动更新状态 + 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, @@ -215,6 +235,26 @@ AND sa.organizer_type = #{activity.organizerType} + + AND ( + 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 + ) = #{activity.activityStatus} + AND ( CASE diff --git a/backend/ruoyi-modules/ruoyi-stgl/src/main/resources/mapper/stgl/StglClassMapper.xml b/backend/ruoyi-modules/ruoyi-stgl/src/main/resources/mapper/stgl/StglClassMapper.xml index ea22f2a6..06ebe6c7 100644 --- a/backend/ruoyi-modules/ruoyi-stgl/src/main/resources/mapper/stgl/StglClassMapper.xml +++ b/backend/ruoyi-modules/ruoyi-stgl/src/main/resources/mapper/stgl/StglClassMapper.xml @@ -81,13 +81,49 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" GROUP BY m.user_id ) volunteer_stats ON s.id = volunteer_stats.user_id LEFT JOIN ( - SELECT - ar.user_id, - COUNT(DISTINCT ar.activity_id) as activity_count - FROM stgl_activity_registration ar - WHERE ar.deleted = 0 - AND ar.approval_status = 1 - GROUP BY ar.user_id + -- 修改活动统计逻辑:同时统计个人报名和团队报名的活动数量 + SELECT + user_id, + COUNT(DISTINCT activity_id) as activity_count + FROM ( + -- 个人报名的活动 + SELECT + ar.user_id, + ar.activity_id + FROM stgl_activity_registration ar + WHERE ar.deleted = 0 + AND ar.approval_status = 1 + AND ar.tenant_id = '000000' + + UNION + + -- 团队报名的活动(通过团队成员信息) + SELECT + JSON_UNQUOTE(JSON_EXTRACT(ati.team_members, CONCAT('$[', numbers.n, '].userId'))) as user_id, + ati.activity_id + FROM stgl_activity_team_info ati + CROSS JOIN ( + SELECT 0 as n UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION + SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION + SELECT 10 UNION SELECT 11 UNION SELECT 12 UNION SELECT 13 UNION SELECT 14 UNION + SELECT 15 UNION SELECT 16 UNION SELECT 17 UNION SELECT 18 UNION SELECT 19 + ) numbers + WHERE ati.deleted = 0 + AND ati.tenant_id = '000000' + AND JSON_UNQUOTE(JSON_EXTRACT(ati.team_members, CONCAT('$[', numbers.n, '].userId'))) IS NOT NULL + AND JSON_UNQUOTE(JSON_EXTRACT(ati.team_members, CONCAT('$[', numbers.n, '].userId'))) != '' + AND EXISTS ( + SELECT 1 FROM stgl_activity_registration team_ar + WHERE team_ar.team_id = ati.id + AND team_ar.deleted = 0 + AND team_ar.approval_status = 1 + AND team_ar.registration_type = 2 + AND team_ar.tenant_id = '000000' + ) + ) all_activities + WHERE user_id IS NOT NULL + AND user_id != '' + GROUP BY user_id ) activity_stats ON s.id = activity_stats.user_id s.deleted = 0 @@ -174,7 +210,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND m.deleted = 0 AND m.status = 2 AND vt.deleted = 0 - AND vt.status = 1 ORDER BY vt.create_time DESC diff --git a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/VolunteerMemberController.java b/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/VolunteerMemberController.java deleted file mode 100644 index 0519ecba..00000000 --- a/backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/VolunteerMemberController.java +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/web/src/api/stgl/activity/types.ts b/web/src/api/stgl/activity/types.ts index aa502267..e5640174 100644 --- a/web/src/api/stgl/activity/types.ts +++ b/web/src/api/stgl/activity/types.ts @@ -145,10 +145,16 @@ export interface StglActivityVO { activityRange?: number; /** - * 活动状态 + * 活动状态(动态计算后的状态) */ activityStatus?: string; + /** + * 原始活动状态(数据库中存储的实际状态) + * 用于权限控制和业务逻辑判断 + */ + originalActivityStatus?: string; + /** * 是否为已办活动 */ diff --git a/web/src/views/stgl/activity/components/ActivityRatingView.vue b/web/src/views/stgl/activity/components/ActivityRatingView.vue index 37569e21..0f4f083d 100644 --- a/web/src/views/stgl/activity/components/ActivityRatingView.vue +++ b/web/src/views/stgl/activity/components/ActivityRatingView.vue @@ -90,7 +90,7 @@