南理工体育活动-创建联合工会菜单-设置管理员:新增‘体育活动联合工会管理员’角色(代替原来的工会管理员角色H04);

This commit is contained in:
2026-09-23 17:29:56 +08:00
parent 98a8b8cace
commit 4b110407c6
21 changed files with 305 additions and 90 deletions
@@ -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);
@@ -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()));
}};
}
@@ -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();
@@ -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())));
@@ -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<NutMap> 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<Sys_union> 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);
@@ -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());
@@ -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());
}
}
@@ -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<Record> 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<Record> 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());
@@ -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());
@@ -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());
@@ -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)) {
@@ -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<ActivityPlan> 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());
}
@@ -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<ActivityTissue> 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());
}
@@ -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<Sys_user_role> roles = dao.query(Sys_user_role.class, roleCnd);
return roles.isEmpty() ? Vi.getUnionId() : Strings.sNull(roles.get(0).getUnionid());
}
}
@@ -16,6 +16,16 @@ public interface Roles {
*/
String UNION_MANGER = "5d342e614e9a48288d50154bcdcc75d3";
/**
* 体育活动联合工会管理员
*/
String SPORTS_ACTIVITY_UNION_ADMIN = "b72001e1783448edbba585b441955676";
/**
* 体育活动联合工会管理员角色编码
*/
String SPORTS_ACTIVITY_UNION_ADMIN_CODE = "SportsActivityUnionAdmin";
/**
* 分工会主席
*/
@@ -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<String> 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<NutMap> unionUsers = simpleService.listMap(unionUserSql);
List<String> idList = unionUsers.stream()
.map(v -> v.getString("id")).collect(Collectors.toList());
//删除本公会报名的人然后再加
@@ -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())) {
@@ -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
);
@@ -348,7 +348,7 @@ layout("/layouts/platform.html"){
v-if="row.applyWay.includes(2)">
项目报名
</el-dropdown-item>
<!--#if(@shiro.hasRole('sysadmin')||@shiro.hasRole('H04')||@shiro.hasRole('gh08')){#-->
<!--#if(@shiro.hasRole('sysadmin')||@shiro.hasRole('H04')||@shiro.hasRole('SportsActivityUnionAdmin')||@shiro.hasRole('gh08')){#-->
<el-dropdown-item :command="{type:'delete',row}">
删除报名人员
</el-dropdown-item>
@@ -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") {
@@ -84,7 +84,7 @@ layout("/layouts/platform.html"){
</div>
<!--#if(!@shiro.hasRole('H04')){#-->
<!--#if(!@shiro.hasRole('H04')&&!@shiro.hasRole('SportsActivityUnionAdmin')){#-->
<div class="search-item">
<div class="search-item-label">报名状态</div>
<div class="search-item-option">