2 Commits
21 changed files with 390 additions and 112 deletions
@@ -3,8 +3,8 @@ package io.v.nutz.activity.controller.applets;
import io.v.nutz.activity.models.ActivitySchoolApply; import io.v.nutz.activity.models.ActivitySchoolApply;
import io.v.nutz.activity.services.ActivitySchoolApplyService; import io.v.nutz.activity.services.ActivitySchoolApplyService;
import io.v.nutz.activity.services.ActivitySchoolService; import io.v.nutz.activity.services.ActivitySchoolService;
import io.v.nutz.activity.utils.ActivityRoleUtil;
import io.v.nutz.annontation.ViReturn; import io.v.nutz.annontation.ViReturn;
import io.v.nutz.base.utils.Roles;
import io.v.nutz.dao.CndPlus; import io.v.nutz.dao.CndPlus;
import io.v.nutz.modules.models.PageForm; import io.v.nutz.modules.models.PageForm;
import io.v.nutz.service.ViService; import io.v.nutz.service.ViService;
@@ -158,14 +158,17 @@ public class ActivityListController {
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
Sql sql = Sqls.create(""" Sql sql = Sqls.create("""
SELECT id applyUser, loginname, username, sex, mobile, unitid unitId, unionid unionId FROM `user` $condition SELECT u.id applyUser, u.loginname, u.username, u.sex, u.mobile, u.unitid unitId, un.unionid unionId
""").setParam("userId", userId).setParam("roleId", Roles.UNION_MANGER); 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)) { if (Strings.isNotBlank(searchName)) {
SqlExpressionGroup group = new SqlExpressionGroup(); SqlExpressionGroup group = new SqlExpressionGroup();
group.andLike("username", searchName).orLike("loginname", searchName); group.andLike("u.username", searchName).orLike("u.loginname", searchName);
cnd.and(group); cnd.and(group);
} }
sql.setCondition(cnd); sql.setCondition(cnd);
@@ -10,11 +10,11 @@ import cn.hutool.core.util.StrUtil;
import cn.wizzer.framework.base.Result; import cn.wizzer.framework.base.Result;
import io.v.nutz.activity.models.ActivityUserCnd; import io.v.nutz.activity.models.ActivityUserCnd;
import io.v.nutz.activity.models.ActivityUserScope; 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.services.ActivityBasicScopeService;
import io.v.nutz.activity.template.UserTemp; import io.v.nutz.activity.template.UserTemp;
import io.v.nutz.annontation.ViReturn; import io.v.nutz.annontation.ViReturn;
import io.v.nutz.base.service.SimpleService; 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.modules.models.PageForm;
import io.v.nutz.sys.models.Sys_role; import io.v.nutz.sys.models.Sys_role;
import io.v.nutz.util.ViTool; import io.v.nutz.util.ViTool;
@@ -255,7 +255,7 @@ public class ActivityBasicScopeController {
"""); """);
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
if (!ShiroUtil.hasAnyRoles("sysadmin,H06,H10")) { 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")); cnd.and("creator", "=", ShiroUtil.getPrincipalProperty("id"));
} }
} }
@@ -300,11 +300,11 @@ public class ActivityBasicScopeController {
return new NutMap() {{ return new NutMap() {{
addv("is_H10", ShiroUtil.hasRole("H10")); addv("is_H10", ShiroUtil.hasRole("H10"));
addv("is_A06", ShiroUtil.hasRole("A06")); 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_H02", ShiroUtil.hasRole("club01"));
addv("is_H03", ShiroUtil.hasRole("H03")); addv("is_H03", ShiroUtil.hasRole("H03"));
addv("is_sysadmin", ShiroUtil.hasRole("sysadmin")); 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" + "\tgh.*,\n" +
"\tun.isEnable AS unisEnable,\n" + "\tun.isEnable AS unisEnable,\n" +
"\t(SELECT COUNT(*) FROM activity_basic_unit WHERE unionid=gh.id) unitnum,\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" + "FROM\n" +
"\tactivity_basic_union gh\n" + "\tactivity_basic_union gh\n" +
"\tLEFT JOIN sys_union un ON un.id = gh.id\n" + "\tLEFT JOIN sys_union un ON un.id = gh.id\n" +
"\tLEFT JOIN sys_user_role sur ON gh.id = sur.unionid \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"); "\tLEFT JOIN sys_user fzr ON sur.userId = fzr.id $condition");
sql.setParam("ghfzrrole", Roles.UNION_MANGER); sql.setParam("ghfzrrole", Roles.UNION_MANGER);
sql.setParam("activityUnionAdminRole", Roles.SPORTS_ACTIVITY_UNION_ADMIN);
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
cnd.groupBy("gh.id"); cnd.groupBy("gh.id");
if (Strings.isNotBlank(searchName) && Strings.isNotBlank(searchKeyword)) { 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.update("activity_basic_unit", Chain.make("unionid", ""), Cnd.where("unionid", "=", id));
//再删除工会负责人的权限 //只清理当前联合工会的体育活动管理员,不影响H04和其他联合工会关系
// sysUnionService.clear("sys_user_role", Cnd.where("unionid", "=", id).and("roleid", "=", Roles.UNION_MANGER)); sysUnionService.clear("sys_user_role", Cnd.where("unionid", "=", id).and("roleid", "=", Roles.SPORTS_ACTIVITY_UNION_ADMIN));
sysUserService.clearCache();
sysRoleService.clearCache();
// flushDict(); // flushDict();
@@ -332,7 +335,7 @@ public class ActivityUnionController {
public Object getUserAndFzr(String id) { public Object getUserAndFzr(String id) {
try { 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 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))); return Result.success().addData(Record.create().set("data", sysUnionService.list(sql)).set("value", sysUnionService.list(sql1)));
} catch (Exception e) { } catch (Exception e) {
return Result.error(); return Result.error();
@@ -349,10 +352,10 @@ public class ActivityUnionController {
@At @At
public Object doEditFzr(String unionid, String userids) { public Object doEditFzr(String unionid, String userids) {
try { try {
//再删除工会负责人的权限 //只维护体育活动联合工会管理员,不修改原H04关系
sysUnionService.clear("sys_user_role", Cnd.where("unionid", "=", unionid).and("roleid", "=", Roles.UNION_MANGER)); sysUnionService.clear("sys_user_role", Cnd.where("unionid", "=", unionid).and("roleid", "=", Roles.SPORTS_ACTIVITY_UNION_ADMIN));
for (String id : Json.fromJsonAsList(String.class, userids)) { 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(); sysUserService.clearCache();
sysRoleService.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.ActivitySchoolApplyService;
import io.v.nutz.activity.services.ActivitySchoolService; import io.v.nutz.activity.services.ActivitySchoolService;
import io.v.nutz.activity.services.ActivitySchoolTeamService; import io.v.nutz.activity.services.ActivitySchoolTeamService;
import io.v.nutz.activity.utils.ActivityRoleUtil;
import io.v.nutz.annontation.ViReturn; import io.v.nutz.annontation.ViReturn;
import io.v.nutz.base.service.SimpleService; import io.v.nutz.base.service.SimpleService;
import io.v.nutz.base.utils.DateUtil; 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("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()))); 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()); """).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.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()))); cnd.and(new Static("(SELECT COUNT(1) FROM activity_user_scope WHERE groupId=school.activityGroupId AND userId='%s') >0".formatted(ShiroUtil.getUserId())));
@@ -11,14 +11,19 @@ import io.v.nutz.activity.models.*;
import io.v.nutz.activity.services.ActivityPlanService; import io.v.nutz.activity.services.ActivityPlanService;
import io.v.nutz.activity.services.ActivitySchoolApplyService; import io.v.nutz.activity.services.ActivitySchoolApplyService;
import io.v.nutz.activity.services.ActivitySchoolService; import io.v.nutz.activity.services.ActivitySchoolService;
import io.v.nutz.activity.utils.ActivityRoleUtil;
import io.v.nutz.annontation.ViReturn; import io.v.nutz.annontation.ViReturn;
import io.v.nutz.dao.CndPlus; import io.v.nutz.dao.CndPlus;
import io.v.nutz.service.ViService; import io.v.nutz.service.ViService;
import io.v.nutz.sys.models.Sys_union; 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.sys.services.SysUnionService;
import io.v.nutz.util.ShiroUtil; import io.v.nutz.util.ShiroUtil;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shiro.authz.annotation.RequiresAuthentication; import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.nutz.dao.Cnd; import org.nutz.dao.Cnd;
@@ -164,18 +169,9 @@ public class ActivityCommonController {
return activityPlanService.listMap(Sqls.create("select * from activity_plan where type = @type").setParam("type", type)); 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 @At
@ViReturn @ViReturn
public Object findOne(String id) { public Object findOne(String id) {
String unionid = getUnionId();
Sql sql = Sqls.create(""" Sql sql = Sqls.create("""
SELECT SELECT
act.*, act.*,
@@ -216,15 +212,16 @@ public class ActivityCommonController {
LEFT JOIN activity_school_team team ON app.teamId = team.id LEFT JOIN activity_school_team team ON app.teamId = team.id
LEFT JOIN sys_unit unit ON app.unitId = unit.id LEFT JOIN sys_unit unit ON app.unitId = unit.id
WHERE WHERE
app.activityId = @id app.activityId = @id
$union
ORDER BY ORDER BY
app.identity DESC, app.identity DESC,
team.location ASC, team.location ASC,
app.sex app.sex
""").setParam("id", id); """).setParam("id", id).setVar("union", "");
if (!ShiroUtil.hasAnyRoles("sysadmin,A06") && ShiroUtil.hasRole("H04")) { if (!ShiroUtil.hasAnyRoles("sysadmin,A06") && ActivityRoleUtil.isUnionManager()) {
sql1.setVar("union", " AND app.unionId = '" + unionid + "' "); sql1.setVar("union", " AND app.unionId IN " + ActivityRoleUtil.getManageUnionStr(ShiroUtil.getUserId()));
} }
List<NutMap> applies = activitySchoolApplyService.listMap(sql1); List<NutMap> applies = activitySchoolApplyService.listMap(sql1);
@@ -236,8 +233,8 @@ public class ActivityCommonController {
Cnd unionCnd = Cnd.NEW(); Cnd unionCnd = Cnd.NEW();
if (!ShiroUtil.hasAnyRoles("sysadmin,A06") && ShiroUtil.hasRole("H04")) { if (!ShiroUtil.hasAnyRoles("sysadmin,A06") && ActivityRoleUtil.isUnionManager()) {
unionCnd.and("id", "=", unionid); unionCnd.and("id", "in", ActivityRoleUtil.getManageUnionStr(ShiroUtil.getUserId()));
} }
List<Sys_union> unions = sysUnionService.query(unionCnd); List<Sys_union> unions = sysUnionService.query(unionCnd);
@@ -265,33 +262,45 @@ public class ActivityCommonController {
@At @At
@Ok("void")
public void exportXlsx(String id, String unionId, HttpServletResponse response) throws IOException { public void exportXlsx(String id, String unionId, HttpServletResponse response) throws IOException {
Sql sql = Sqls.create(""" Sql sql = Sqls.create("""
SELECT SELECT
app.username, app.username,
app.loginname, COALESCE(NULLIF(app.loginname, ''), u.loginname) loginname,
app.identity, app.identity,
app.activityUnionName, app.activityUnionName,
app.sex, app.sex,
app.mobile, COALESCE(NULLIF(app.mobile, ''), u.mobile) mobile,
u.idCard, u.idCard idcard,
u.userState, COALESCE(unit.unitcode, u.unitcode) unitcode,
ev.allName, CASE WHEN u.member = 1 THEN '是' ELSE '否' END isMember,
sc.`name` activityName, CASE
app.`team` teamName, WHEN u.userState IN ('在职', '在岗')
app.`unitname` AND (u.preparedBy LIKE '%事业编%' OR u.preparedBy LIKE '%在编%')
AND u.preparedBy NOT LIKE '%非事业编%'
THEN '是' ELSE '否'
END isOnStaff,
apply_user.username applyUsername,
ev.allName,
sc.`name` activityName,
app.`team` teamName,
app.`unitname`
FROM FROM
`activity_school_apply` app `activity_school_apply` app
LEFT JOIN `user` u ON u.id = app.userId LEFT JOIN `user` u ON u.id = app.userId
LEFT JOIN activity_event ev ON ev.id = app.eventId LEFT JOIN `user` apply_user ON apply_user.id = app.applyUser
LEFT JOIN activity_school sc ON sc.id=app.activityId LEFT JOIN sys_unit unit ON unit.id = app.unitId
LEFT JOIN activity_event ev ON ev.id = app.eventId
LEFT JOIN activity_school sc ON sc.id=app.activityId
WHERE WHERE
activityId = @id activityId = @id
$cnd $cnd
ORDER BY ORDER BY
ev.projectCode desc, COALESCE(unit.unitcode, u.unitcode) ASC,
app.activityUnionName DESC, ev.projectCode DESC,
app.`team` ASC, app.activityUnionName DESC,
app.`team` ASC,
CASE CASE
WHEN JSON_SEARCH( app.identity, 'one', '7' ) IS NOT NULL THEN WHEN JSON_SEARCH( app.identity, 'one', '7' ) IS NOT NULL THEN
1 1
@@ -321,7 +330,10 @@ public class ActivityCommonController {
entityList.add(new ExcelExportEntity("姓名", "username", 20)); entityList.add(new ExcelExportEntity("姓名", "username", 20));
entityList.add(new ExcelExportEntity("性别", "sex", 10)); entityList.add(new ExcelExportEntity("性别", "sex", 10));
entityList.add(new ExcelExportEntity("身份证号", "idcard", 20)); entityList.add(new ExcelExportEntity("身份证号", "idcard", 20));
entityList.add(new ExcelExportEntity("电话", "mobile", 20)); entityList.add(new ExcelExportEntity("报名人电话号码", "mobile", 20));
entityList.add(new ExcelExportEntity("是否会员", "isMember", 15));
entityList.add(new ExcelExportEntity("是否在职在编", "isOnStaff", 20));
entityList.add(new ExcelExportEntity("填报人", "applyUsername", 20));
entityList.add(new ExcelExportEntity("所在单位", "unitname", 50)); entityList.add(new ExcelExportEntity("所在单位", "unitname", 50));
entityList.add(new ExcelExportEntity("身份", "sf", 30)); entityList.add(new ExcelExportEntity("身份", "sf", 30));
@@ -333,9 +345,51 @@ public class ActivityCommonController {
response.setContentType("application/octet-stream"); response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + new String((activityName + "报名表.xls").getBytes("utf-8"), "ISO8859-1")); response.setHeader("Content-Disposition", "attachment;filename=" + new String((activityName + "报名表.xls").getBytes("utf-8"), "ISO8859-1"));
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), entityList, nutMaps); Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), entityList, nutMaps);
markMissingRequiredInfo(workbook);
workbook.write(response.getOutputStream()); workbook.write(response.getOutputStream());
} }
/**
* 对导出名单中缺失的必要信息进行醒目标记。
*/
private void markMissingRequiredInfo(Workbook workbook) {
Sheet sheet = workbook.getSheetAt(0);
Row headerRow = sheet.getRow(0);
if (headerRow == null) {
return;
}
Set<String> requiredHeaders = new HashSet<>(Arrays.asList("工号", "身份证号", "报名人电话号码"));
List<Integer> requiredColumns = new ArrayList<>();
for (Cell cell : headerRow) {
if (requiredHeaders.contains(cell.getStringCellValue())) {
requiredColumns.add(cell.getColumnIndex());
}
}
Map<Short, CellStyle> warningStyles = new HashMap<>();
for (int rowIndex = 1; rowIndex <= sheet.getLastRowNum(); rowIndex++) {
Row row = sheet.getRow(rowIndex);
if (row == null) {
continue;
}
for (Integer columnIndex : requiredColumns) {
Cell cell = row.getCell(columnIndex, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
if (Strings.isBlank(cell.toString())) {
cell.setCellValue("信息缺失");
CellStyle warningStyle = warningStyles.computeIfAbsent(cell.getCellStyle().getIndex(), key -> {
CellStyle style = workbook.createCellStyle();
style.cloneStyleFrom(cell.getCellStyle());
style.setFillForegroundColor(IndexedColors.LIGHT_ORANGE.getIndex());
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
return style;
});
cell.setCellStyle(warningStyle);
}
}
}
}
private static class personType { private static class personType {
@@ -384,10 +438,8 @@ public class ActivityCommonController {
"""); """);
if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) { if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) {
if (ShiroUtil.hasRole("H04")) { if (ActivityRoleUtil.isUnionManager()) {
Sys_user user = (Sys_user) ShiroUtil.getPrincipal(); unionCnd.and("un.id", "in", ActivityRoleUtil.getManageUnionStr(ShiroUtil.getUserId()));
Sys_unit unit = user.getUnit();
unionCnd.and("un.id", "=", unit.getUnionid());
} }
} else { } else {
unionCnd.andExcludeEmpty("un.id", "=", unionId); unionCnd.andExcludeEmpty("un.id", "=", unionId);
@@ -3,6 +3,7 @@ package io.v.nutz.activity.controller.school;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import io.v.nutz.activity.models.*; import io.v.nutz.activity.models.*;
import io.v.nutz.activity.services.ActivitySchoolService; import io.v.nutz.activity.services.ActivitySchoolService;
import io.v.nutz.activity.utils.ActivityRoleUtil;
import io.v.nutz.annontation.ViReturn; import io.v.nutz.annontation.ViReturn;
import io.v.nutz.base.result.Result; import io.v.nutz.base.result.Result;
import io.v.nutz.base.utils.DateUtil; import io.v.nutz.base.utils.DateUtil;
@@ -104,8 +105,8 @@ public class ActivityInfoManageController {
cnd.and(new Static("now() > school.endTime")); cnd.and(new Static("now() > school.endTime"));
} }
if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) { if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) {
if (ShiroUtil.hasRole("H04")) { if (ActivityRoleUtil.isUnionManager()) {
cnd.and("school.belongUnionId", "=", Vi.getUnionId()); cnd.and("school.belongUnionId", "in", ActivityRoleUtil.getManageUnionStr(ShiroUtil.getUserId()));
} }
if (ShiroUtil.hasRole("H02")) { if (ShiroUtil.hasRole("H02")) {
cnd.and("school.belongClubId", "in", vi.getMangeClubStr()); 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) { public Object doEdit(@Param("data") ActivitySchool activitySchool, @Param("events") ActivitySchoolEvent[] events) {
ActivitySchool school = activitySchoolService.fetch(activitySchool.getId()); ActivitySchool school = activitySchoolService.fetch(activitySchool.getId());
if (school.getActivityLevel() == 40002) { if (school.getActivityLevel() == 40002) {
school.setBelongUnionId(Vi.getUnionId()); activitySchool.setBelongUnionId(ActivityRoleUtil.getCurrentUnionId(activitySchoolService.dao()));
} }
activitySchoolService.doEdit(activitySchool, events, school.getApplyEndTime()); 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.models.*;
import io.v.nutz.activity.services.ActivitySchoolApplyService; import io.v.nutz.activity.services.ActivitySchoolApplyService;
import io.v.nutz.activity.services.ActivitySchoolService; import io.v.nutz.activity.services.ActivitySchoolService;
import io.v.nutz.activity.utils.ActivityRoleUtil;
import io.v.nutz.annontation.ViReturn; import io.v.nutz.annontation.ViReturn;
import io.v.nutz.base.service.BaseService; import io.v.nutz.base.service.BaseService;
import io.v.nutz.base.utils.DateUtil; import io.v.nutz.base.utils.DateUtil;
@@ -89,7 +90,11 @@ public class ActivityReadingController {
cnd.and("activityLevel", "=", activityLevel); cnd.and("activityLevel", "=", activityLevel);
if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) { if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) {
if (activityLevel.equals("40002")) { 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")) { if (activityLevel.equals("40003")) {
cnd.and("belongClubId", "in", vi.getMangeClubStr()); cnd.and("belongClubId", "in", vi.getMangeClubStr());
@@ -133,7 +138,7 @@ public class ActivityReadingController {
// cnd.and("YEAR(app.applyDate)", "=", year); // cnd.and("YEAR(app.applyDate)", "=", year);
sql.setCondition(cnd); sql.setCondition(cnd);
if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) { 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("app.activityUnionId", "=", basicUnit.getUnionid());
cnd.and("school.belongUnionId", "=", basicUnit.getUnionid()); cnd.and("school.belongUnionId", "=", basicUnit.getUnionid());
} }
@@ -148,7 +153,7 @@ public class ActivityReadingController {
Cnd unionCnd = Cnd.NEW(); Cnd unionCnd = Cnd.NEW();
if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) { if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) {
if (ShiroUtil.hasAnyRoles("H04,gh08")) { if (ActivityRoleUtil.isUnionManager() || ShiroUtil.hasRole("gh08")) {
unionCnd.and("id", "=", basicUnit.getUnionid()); 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.models.ActivitySchoolEvent;
import io.v.nutz.activity.services.ActivitySchoolApplyService; import io.v.nutz.activity.services.ActivitySchoolApplyService;
import io.v.nutz.activity.services.ActivitySchoolService; import io.v.nutz.activity.services.ActivitySchoolService;
import io.v.nutz.activity.utils.ActivityRoleUtil;
import io.v.nutz.annontation.ViReturn; import io.v.nutz.annontation.ViReturn;
import io.v.nutz.base.utils.RCSCloudAPI; import io.v.nutz.base.utils.RCSCloudAPI;
import io.v.nutz.base.utils.Roles; import io.v.nutz.base.utils.Roles;
@@ -118,33 +119,35 @@ public class ActivityRemindController {
un.unionname, un.unionname,
( (
SELECT SELECT
GROUP_CONCAT(su.mobile) GROUP_CONCAT(DISTINCT su.mobile)
FROM FROM
sys_user_role sur sys_user_role sur
LEFT JOIN sys_user su ON su.id = sur.userId LEFT JOIN sys_user su ON su.id = sur.userId
LEFT JOIN sys_role sr ON sr.id = sur.roleId LEFT JOIN sys_role sr ON sr.id = sur.roleId
WHERE WHERE
sur.unionid = un.id sur.unionid = un.id
AND sr.id = @roleId AND sr.id IN (@h04RoleId, @activityRoleId)
) telephone, ) telephone,
( (
SELECT SELECT
GROUP_CONCAT(su.username) GROUP_CONCAT(DISTINCT su.username)
FROM FROM
sys_user_role sur sys_user_role sur
LEFT JOIN sys_user su ON su.id = sur.userId LEFT JOIN sys_user su ON su.id = sur.userId
LEFT JOIN sys_role sr ON sr.id = sur.roleId LEFT JOIN sys_role sr ON sr.id = sur.roleId
WHERE WHERE
sur.unionid = un.id sur.unionid = un.id
AND sr.id = @roleId AND sr.id IN (@h04RoleId, @activityRoleId)
) unionleader, ) unionleader,
( SELECT COUNT( 1 ) FROM activity_school_apply asp WHERE asp.unionId = un.id AND asp.activityId = @activityId ) num ( SELECT COUNT( 1 ) FROM activity_school_apply asp WHERE asp.unionId = un.id AND asp.activityId = @activityId ) num
FROM FROM
`sys_union` un `sys_union` un
ORDER BY ORDER BY
un.unioncode 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); List<Record> unions = sysUnionService.list(sql);
@@ -174,21 +177,23 @@ public class ActivityRemindController {
un.unionname, un.unionname,
( (
SELECT SELECT
su.mobile GROUP_CONCAT(DISTINCT su.mobile)
FROM FROM
sys_user_role sur sys_user_role sur
LEFT JOIN sys_user su ON su.id = sur.userId LEFT JOIN sys_user su ON su.id = sur.userId
LEFT JOIN sys_role sr ON sr.id = sur.roleId LEFT JOIN sys_role sr ON sr.id = sur.roleId
WHERE WHERE
sur.unionid = un.id sur.unionid = un.id
AND sr.id = @roleId AND sr.id IN (@h04RoleId, @activityRoleId)
) telephone, ) telephone,
( SELECT COUNT( 1 ) FROM activity_school_apply asp WHERE asp.unionId = un.id AND asp.activityId = @activityId ) num ( SELECT COUNT( 1 ) FROM activity_school_apply asp WHERE asp.unionId = un.id AND asp.activityId = @activityId ) num
FROM FROM
`sys_union` un `sys_union` un
ORDER BY ORDER BY
un.unioncode 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); List<Record> unions = sysUnionService.list(sql);
@@ -197,7 +202,9 @@ public class ActivityRemindController {
}).collect(Collectors.toList()); }).collect(Collectors.toList());
collect.forEach(v -> { 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; return null;
@@ -208,8 +215,8 @@ public class ActivityRemindController {
public Object getActivitys() { public Object getActivitys() {
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) { if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) {
if (ShiroUtil.hasRole("H04")) { if (ActivityRoleUtil.isUnionManager()) {
cnd.and("school.belongUnionId", "=", Vi.getUnionId()); cnd.and("school.belongUnionId", "in", ActivityRoleUtil.getManageUnionStr(ShiroUtil.getUserId()));
} }
if (ShiroUtil.hasRole("H02")) { if (ShiroUtil.hasRole("H02")) {
cnd.and("school.belongClubId", "in", vi.getMangeClubStr()); 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.models.ActivityTissuePerson;
import io.v.nutz.activity.services.ActivitySchoolService; import io.v.nutz.activity.services.ActivitySchoolService;
import io.v.nutz.activity.services.ActivityTissueService; import io.v.nutz.activity.services.ActivityTissueService;
import io.v.nutz.activity.utils.ActivityRoleUtil;
import io.v.nutz.annontation.ViReturn; import io.v.nutz.annontation.ViReturn;
import io.v.nutz.base.utils.DateUtil; import io.v.nutz.base.utils.DateUtil;
import io.v.nutz.base.utils.Vi; import io.v.nutz.base.utils.Vi;
@@ -101,20 +102,27 @@ public class ActivityUnionManageController {
CndPlus cnd = CndPlus.create(); CndPlus cnd = CndPlus.create();
Sql sql = Sqls.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 (!ShiroUtil.hasRole("sysadmin")) {
if (activity_type == 40002) { 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) { } 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)) { if (Strings.isNotBlank(serachWord)) {
SqlExpressionGroup group = new SqlExpressionGroup(); SqlExpressionGroup group = new SqlExpressionGroup();
group.andLike("username", serachWord); group.andLike("u.username", serachWord);
group.orLike("loginname", serachWord); group.orLike("u.loginname", serachWord);
cnd.and(group); cnd.and(group);
} }
@@ -136,7 +144,7 @@ public class ActivityUnionManageController {
tissue.setApplyTime(DateUtil.getDate()); tissue.setApplyTime(DateUtil.getDate());
if (tissue.getType() == 40002) { if (tissue.getType() == 40002) {
tissue.setState(1); tissue.setState(1);
tissue.setUnionId(Vi.getUnionId()); tissue.setUnionId(ActivityRoleUtil.getCurrentUnionId(activityTissueService.dao()));
} else if (tissue.getType() == 40003) { } else if (tissue.getType() == 40003) {
tissue.setState(1); tissue.setState(1);
tissue.setClubId(vi.getClubId()); 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.models.ActivityPlan;
import io.v.nutz.activity.services.ActivityPlanService; import io.v.nutz.activity.services.ActivityPlanService;
import io.v.nutz.activity.utils.ActivityRoleUtil;
import io.v.nutz.annontation.ViReturn; import io.v.nutz.annontation.ViReturn;
import io.v.nutz.base.utils.Vi; import io.v.nutz.base.utils.Vi;
import io.v.nutz.dao.CndPlus; import io.v.nutz.dao.CndPlus;
@@ -87,7 +88,7 @@ public class ActivityUnionPlanController {
activityPlan.setActivityType(activityType); activityPlan.setActivityType(activityType);
if (type.equals("40002")) { if (type.equals("40002")) {
activityPlan.setType("40002"); activityPlan.setType("40002");
activityPlan.setTissueId(Vi.getUnionId()); activityPlan.setTissueId(ActivityRoleUtil.getCurrentUnionId(activityPlanService.dao()));
} else if (type.equals("40003")) { } else if (type.equals("40003")) {
activityPlan.setType("40003"); activityPlan.setType("40003");
activityPlan.setTissueId(vi.getClubId()); activityPlan.setTissueId(vi.getClubId());
@@ -5,6 +5,7 @@ import cn.wizzer.framework.base.Result;
import cn.wizzer.framework.base.service.BaseService; import cn.wizzer.framework.base.service.BaseService;
import io.v.nutz.activity.models.ActivityYearSummary; import io.v.nutz.activity.models.ActivityYearSummary;
import io.v.nutz.activity.services.ActivityYearSummaryService; import io.v.nutz.activity.services.ActivityYearSummaryService;
import io.v.nutz.activity.utils.ActivityRoleUtil;
import io.v.nutz.annontation.ViReturn; import io.v.nutz.annontation.ViReturn;
import io.v.nutz.base.utils.Roles; import io.v.nutz.base.utils.Roles;
import io.v.nutz.base.utils.Vi; import io.v.nutz.base.utils.Vi;
@@ -105,7 +106,11 @@ public class ActivityUnionYearSummaryController {
if ("2".equals(summaryFrom)) { if ("2".equals(summaryFrom)) {
str += " left join sys_union un on su.tissueId = un.id"; str += " left join sys_union un on su.tissueId = un.id";
if (!ShiroUtil.hasAnyRoles(new String[]{"sysadmin", "A06"})) { 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)) { 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.models.ActivityPlan;
import io.v.nutz.activity.services.ActivityPlanService; 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.base.utils.Vi;
import io.v.nutz.dao.CndPlus; import io.v.nutz.dao.CndPlus;
import io.v.nutz.modules.models.PageForm; 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.hasAnyRoles("sysadmin,H10,A06")) {
if (ShiroUtil.hasRole("H04")) { if (ActivityRoleUtil.isUnionManager()) {
cnd.and("tissueId", "in", vi.getMangeUnionStr()); cnd.and("tissueId", "in", ActivityRoleUtil.getManageUnionStr(ShiroUtil.getUserId()));
} else if (ShiroUtil.hasRole("H02")) { } else if (ShiroUtil.hasRole("H02")) {
cnd.and("tissueId", "in", vi.getMangeClubStr()); 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.ActivityTissue;
import io.v.nutz.activity.models.ActivityTissuePerson; import io.v.nutz.activity.models.ActivityTissuePerson;
import io.v.nutz.activity.services.ActivityTissueService; 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.base.utils.Vi;
import io.v.nutz.common.models.Goods; import io.v.nutz.common.models.Goods;
import io.v.nutz.dao.CndPlus; 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.hasAnyRoles("sysadmin,H10,A06")) {
if (ShiroUtil.hasRole("H04")) { if (ActivityRoleUtil.isUnionManager()) {
cnd.and("tissue.unionId", "in", vi.getMangeUnionStr()); cnd.and("tissue.unionId", "in", ActivityRoleUtil.getManageUnionStr(ShiroUtil.getUserId()));
} else if (ShiroUtil.hasRole("H02")) { } else if (ShiroUtil.hasRole("H02")) {
cnd.and("tissue.clubId", "in", vi.getMangeClubStr()); 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 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.ActivityTissue;
import io.v.nutz.activity.models.ActivityTissuePerson; import io.v.nutz.activity.models.ActivityTissuePerson;
import io.v.nutz.activity.models.ActivityUserScope; import io.v.nutz.activity.models.ActivityUserScope;
import io.v.nutz.activity.utils.ActivityRoleUtil;
import io.v.nutz.annontation.ViReturn; import io.v.nutz.annontation.ViReturn;
import io.v.nutz.base.service.SimpleService; import io.v.nutz.base.service.SimpleService;
import io.v.nutz.base.utils.DateUtil; import io.v.nutz.base.utils.DateUtil;
import io.v.nutz.base.utils.Vi; import io.v.nutz.base.utils.Vi;
import io.v.nutz.modules.models.PageForm; import io.v.nutz.modules.models.PageForm;
import io.v.nutz.sys.models.Sys_user; import io.v.nutz.sys.models.Sys_user;
import io.v.nutz.sys.models.User;
import io.v.nutz.web.commons.utils.ShiroUtil; import io.v.nutz.web.commons.utils.ShiroUtil;
import org.apache.shiro.authz.annotation.RequiresAuthentication; import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.nutz.dao.Chain; import org.nutz.dao.Chain;
import org.nutz.dao.Cnd; import org.nutz.dao.Cnd;
import org.nutz.dao.FieldFilter;
import org.nutz.dao.Sqls; import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql; import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.Daos;
import org.nutz.dao.util.cri.Static; import org.nutz.dao.util.cri.Static;
import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.ioc.loader.annotation.IocBean;
@@ -158,7 +156,7 @@ public class UnionActivityRegisterController {
allCnd.andEX("signUpMethod", "is not", null); 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()))); 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.hasAnyRoles(Lang.list("sysadmin", "A06"))) {
if (ShiroUtil.hasRole("H04")) { if (ActivityRoleUtil.isUnionManager()) {
allCnd.andEX("signUpMethod", "in", Lang.array(1, 2)); allCnd.andEX("signUpMethod", "in", Lang.array(1, 2));
} else { } else {
allCnd.andEX("signUpMethod", "=", 1); allCnd.andEX("signUpMethod", "=", 1);
@@ -272,10 +270,17 @@ public class UnionActivityRegisterController {
@ViReturn @ViReturn
@RequiresAuthentication @RequiresAuthentication
public Object selectRegisterList(String activityId) { 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; return list;
} }
/**
* 获取当前用户所在单位对应的活动联合工会
*/
private String getActivityUnionId() {
return ActivityRoleUtil.getCurrentUnionId(simpleService.dao());
}
/** /**
* 查询没报名的人 * 查询没报名的人
* *
@@ -287,7 +292,7 @@ public class UnionActivityRegisterController {
@ViReturn @ViReturn
@RequiresAuthentication @RequiresAuthentication
public Object searchNoRegisterUser(String searchKey, String activityId) { public Object searchNoRegisterUser(String searchKey, String activityId) {
if (!ShiroUtil.hasRole("H04")) { if (!ActivityRoleUtil.isUnionManager()) {
return Result.error().addMsg("请使用部门工会管理员报名!"); return Result.error().addMsg("请使用部门工会管理员报名!");
} }
@@ -301,23 +306,27 @@ public class UnionActivityRegisterController {
sex, sex,
unitname AS unitName unitname AS unitName
FROM FROM
`user` `user` u
LEFT JOIN activity_basic_unit un ON un.id = u.unitid
$condition $condition
"""); """);
String unionId = Vi.getUnionId(); String unionId = getActivityUnionId();
if (Strings.isBlank(unionId)) {
return Result.error().addMsg("未找到您管理的活动联合工会!");
}
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
cnd.andEX("unionId", "=", unionId); cnd.andEX("un.unionId", "=", unionId);
// cnd.and(Cnd.likeEX("username", searchKey.trim())); // cnd.and(Cnd.likeEX("username", searchKey.trim()));
cnd.and(Cnd.exps(Cnd.likeEX("username", searchKey.trim())).or(Cnd.likeEX("loginname", searchKey.trim()))); cnd.and(Cnd.exps(Cnd.likeEX("username", searchKey.trim())).or(Cnd.likeEX("loginname", searchKey.trim())));
cnd.and(new Static(""" 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))); """.formatted(activityId)));
// AND id IN // 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 ) ) // ( 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) { if (tissue.getGroupId() != null) {
cnd.and(new Static(""" 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))); """.formatted(activityId)));
} }
@@ -348,10 +357,13 @@ public class UnionActivityRegisterController {
@ViReturn @ViReturn
@RequiresAuthentication @RequiresAuthentication
public synchronized Object doSaveUnionRegister(String activityId, String[] personIds) { public synchronized Object doSaveUnionRegister(String activityId, String[] personIds) {
if (!ShiroUtil.hasRole("H04")) { if (!ActivityRoleUtil.isUnionManager()) {
return Result.error().addMsg("请使用部门工会管理员报名!"); 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); ActivityTissue activityTissue = simpleService.dao().fetch(ActivityTissue.class, activityId);
@@ -371,9 +383,11 @@ public class UnionActivityRegisterController {
} }
FieldFilter fieldFilter = FieldFilter.create(User.class, "^id$"); 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")
List<String> idList = Daos.ext(simpleService.dao(), fieldFilter).query(User.class, Cnd.where("unionid", "=", unionId)) .setParam("unionId", unionId);
.stream().map(User::getId).collect(Collectors.toList()); 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 requestIp = Lang.getIP(Mvcs.getReq());
// String universalPassword = Globals.MyConfig.getString("UniversalPassword"); // 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"); // 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())) { 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)"> v-if="row.applyWay.includes(2)">
项目报名 项目报名
</el-dropdown-item> </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 :command="{type:'delete',row}">
删除报名人员 删除报名人员
</el-dropdown-item> </el-dropdown-item>
@@ -356,7 +356,7 @@ layout("/layouts/platform.html"){
if ("${@shiro.hasRole('H02')}" === "true") { if ("${@shiro.hasRole('H02')}" === "true") {
this.is_club = true this.is_club = true
} }
if ("${@shiro.hasRole('H04')}" === "true") { if ("${@shiro.hasRole('H04')}" === "true" || "${@shiro.hasRole('SportsActivityUnionAdmin')}" === "true") {
this.is_union = true this.is_union = true
} }
if ("${@shiro.hasRole('sysadmin')}" === "true") { if ("${@shiro.hasRole('sysadmin')}" === "true") {
@@ -84,7 +84,7 @@ layout("/layouts/platform.html"){
</div> </div>
<!--#if(!@shiro.hasRole('H04')){#--> <!--#if(!@shiro.hasRole('H04')&&!@shiro.hasRole('SportsActivityUnionAdmin')){#-->
<div class="search-item"> <div class="search-item">
<div class="search-item-label">报名状态</div> <div class="search-item-label">报名状态</div>
<div class="search-item-option"> <div class="search-item-option">