diff --git a/src/main/java/com/budwk/app/sys/controller/SysHomeController.java b/src/main/java/com/budwk/app/sys/controller/SysHomeController.java index 6f32f097..adccf473 100644 --- a/src/main/java/com/budwk/app/sys/controller/SysHomeController.java +++ b/src/main/java/com/budwk/app/sys/controller/SysHomeController.java @@ -150,8 +150,10 @@ public class SysHomeController { ); List menus = sysUserService.getMenus(SecurityUtil.getUserId()); List allMenuIds = menus.stream().map(Sys_menu::getId).toList(); - //List sysMenus = list.stream().filter(m -> allMenuIds.contains(m.getId())).sorted(Comparator.comparingInt(Sys_menu::getLocation)).toList(); - List sysMenus = list.stream().sorted(Comparator.comparingInt(Sys_menu::getLocation)).toList(); + List sysMenus = list.stream() + .sorted(Comparator.comparing(Sys_menu::getLocation, Comparator.nullsLast(Integer::compareTo)) + .thenComparing(Sys_menu::getId)) + .toList(); return Result.success(sysMenus); } diff --git a/src/main/java/com/budwk/app/sys/controller/SysMenuController.java b/src/main/java/com/budwk/app/sys/controller/SysMenuController.java index 811d9ca0..8c669d2a 100644 --- a/src/main/java/com/budwk/app/sys/controller/SysMenuController.java +++ b/src/main/java/com/budwk/app/sys/controller/SysMenuController.java @@ -411,6 +411,24 @@ public class SysMenuController { } } + @At + @Ok("json") + @SaCheckPermission("sys.manager.menu.edit") + public Object updateLocation(String id, Integer location) { + try { + if (StrUtil.isBlank(id) || location == null || location < 0) { + return Result.error("排序编码必须是非负整数"); + } + sysMenuService.update(Chain.make("location", location), Cnd.where("id", "=", id)); + sysMenuService.clearCache(); + sysUserService.clearCache(); + sysRoleService.clearCache(); + return Result.success(); + } catch (Exception e) { + return Result.error(); + } + } + @At @Ok("json") @SaCheckPermission("sys.manager.menu") diff --git a/src/main/java/com/budwk/app/sys/controller/SysUnionController.java b/src/main/java/com/budwk/app/sys/controller/SysUnionController.java index 066ea8c9..c058ff3d 100644 --- a/src/main/java/com/budwk/app/sys/controller/SysUnionController.java +++ b/src/main/java/com/budwk/app/sys/controller/SysUnionController.java @@ -257,7 +257,7 @@ public class SysUnionController { */ @At @SaCheckPermission("sys.manager.union") - public Result branchUnionUserPageData(PageForm pageForm, String unionId) { + public Result branchUnionUserPageData(PageForm pageForm, String unionId, @Param("j") String j) { List branchUnionRoles = sysDictService.getSubListByCode("BRANCH_UNION_ROLES"); if (Lang.isEmpty(branchUnionRoles)) { return Result.success(); @@ -267,12 +267,18 @@ public class SysUnionController { Sql sql = Sqls.create(""" SELECT info.*, + COALESCE(jDict.`name`, info.j, curJDict.`name`, curSession.j) AS jName, role.`name` AS roleName, ins.id AS instanceId, ins.businessNo, ins.state instanceState, ins.variable instanceVariable, ins.processDefineId instanceProcessDefineId, + CASE + WHEN info.isServing = 0 THEN '离任' + WHEN t.id IS NOT NULL THEN t.displayName + ELSE '在任' + END AS displayStatus, t.id taskId, t.taskName AS taskKey, t.displayName taskName, @@ -287,6 +293,16 @@ public class SysUnionController { FROM sys_union_cadre info LEFT JOIN sys_role role ON role.`code` = info.roleCode + LEFT JOIN sys_dict jParent ON jParent.`code` = 'TEACHER_CONGRESS_J' + LEFT JOIN sys_dict jDict ON jDict.parentId = jParent.id AND jDict.`code` = info.j + LEFT JOIN ( + SELECT j + FROM teacher_congress_session + WHERE enable = 1 + ORDER BY startDate DESC + LIMIT 1 + ) curSession ON info.j IS NULL OR info.j = '' + LEFT JOIN sys_dict curJDict ON curJDict.parentId = jParent.id AND curJDict.`code` = curSession.j LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10 LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id @@ -303,6 +319,9 @@ public class SysUnionController { case "roleName" -> cnd.where().andLike("role.`name`", pageForm.getSearchKeyword()); } } + if (StrUtil.isNotBlank(j)) { + cnd.and("COALESCE(NULLIF(info.j, ''), curSession.j)", "=", j); + } sql.setVar("constructionSql", new Static(" group by info.id order by field(role.code," + branchUnionRoleCodes.stream().map(code -> "'" + code + "'").collect(Collectors.joining(",")) + ")") ); @@ -311,11 +330,51 @@ public class SysUnionController { return Result.success(list); } + @At + @SaCheckPermission("sys.manager.union") + public Result branchUnionUserUsedJData(String unionId) { + List branchUnionRoles = sysDictService.getSubListByCode("BRANCH_UNION_ROLES"); + if (Lang.isEmpty(branchUnionRoles)) { + return Result.success(List.of()); + } + List branchUnionRoleCodes = branchUnionRoles.stream().map(Sys_dict::getCode).toList(); + + Sql sql = Sqls.create(""" + SELECT DISTINCT + COALESCE(NULLIF(info.j, ''), curSession.j) AS j, + COALESCE(jDict.location, curJDict.location, 0) AS jLocation + FROM + sys_union_cadre info + LEFT JOIN sys_role role ON role.`code` = info.roleCode + LEFT JOIN sys_dict jParent ON jParent.`code` = 'TEACHER_CONGRESS_J' + LEFT JOIN sys_dict jDict ON jDict.parentId = jParent.id AND jDict.`code` = info.j + LEFT JOIN ( + SELECT j + FROM teacher_congress_session + WHERE enable = 1 + ORDER BY startDate DESC + LIMIT 1 + ) curSession ON info.j IS NULL OR info.j = '' + LEFT JOIN sys_dict curJDict ON curJDict.parentId = jParent.id AND curJDict.`code` = curSession.j + $condition + ORDER BY jLocation DESC + """); + Cnd cnd = Cnd.where("role.`code`", "in", branchUnionRoleCodes); + cnd.and("info.unionId", "=", unionId); + sql.setCondition(cnd); + List usedJCodes = sysUserService.listMap(sql).stream() + .map(item -> item.getString("j")) + .filter(StrUtil::isNotBlank) + .distinct() + .toList(); + return Result.success(usedJCodes); + } + @At @SaCheckPermission("sys.manager.union.branchOfficer") @ApiOperation("添加分工会人员角色") @Aop(TransAop.READ_COMMITTED) - public Result insertBranchUnionUserRole(String userId, String roleCode, String unionId) { + public Result insertBranchUnionUserRole(String userId, String roleCode, String unionId, String j) { Sys_role role = sysRoleService.fetch(Cnd.where("code", "=", roleCode)); if (Lang.isEmpty(role)) { return Result.success("无法找到" + roleCode + "对应编码的角色"); @@ -353,7 +412,9 @@ public class SysUnionController { unionCadre.setLoginName(user.getLoginname()); unionCadre.setUserName(user.getUsername()); unionCadre.setRoleCode(roleCode); + unionCadre.setJ(j); unionCadre.setApplyDate(new Date()); + unionCadre.setIsServing(true); unionCadre.setIsJoin(true); dao.insert(unionCadre); @@ -382,6 +443,39 @@ public class SysUnionController { return Result.success(); } + @At + @ApiOperation("分工会干部离任") + @SaCheckPermission("sys.manager.union.branchOfficer") + @Aop(TransAop.READ_COMMITTED) + public Result leaveBranchUnionUserRole(String id, String leaveDate) { + if (StrUtil.isBlank(id)) { + return Result.error("请选择离任人员"); + } + if (StrUtil.isBlank(leaveDate)) { + return Result.error("请选择离任时间"); + } + Sys_union_cadre unionCadre = dao.fetch(Sys_union_cadre.class, id); + if (Lang.isEmpty(unionCadre)) { + return Result.error("未找到对应干部记录"); + } + Sys_role role = sysRoleService.fetch(Cnd.where("code", "=", unionCadre.getRoleCode())); + if (Lang.isEmpty(role)) { + throw new BaseException("无法找到{}对应编码的角色", unionCadre.getRoleCode()); + } + + Date parsedLeaveDate = cn.hutool.core.date.DateUtil.parseDate(leaveDate); + dao.update(Sys_union_cadre.class, + Chain.make("isServing", false).add("leaveDate", parsedLeaveDate), + Cnd.where("id", "=", id)); + + sysRoleService.clear("sys_user_role", Cnd.where("roleId", "=", role.getId()) + .and("userId", "=", unionCadre.getUserId()) + .and("unionId", "=", unionCadre.getUnionId())); + sysRoleService.clearCache(); + sysUserService.clearCache(); + return Result.success(); + } + @At @ApiOperation("删除分工会人员角色") @SaCheckPermission("sys.manager.union.branchOfficer") diff --git a/src/main/java/com/budwk/app/sys/controller/v4/SysV4AppsController.java b/src/main/java/com/budwk/app/sys/controller/v4/SysV4AppsController.java index ea744372..aa84bd3d 100644 --- a/src/main/java/com/budwk/app/sys/controller/v4/SysV4AppsController.java +++ b/src/main/java/com/budwk/app/sys/controller/v4/SysV4AppsController.java @@ -72,6 +72,7 @@ public class SysV4AppsController { m.href, m.icon, m.picIcon, + m.location, sm.`name` AS moduleName, CASE WHEN f.userId IS NOT NULL THEN @@ -91,6 +92,7 @@ public class SysV4AppsController { cnd.and("m.id","in", menus.stream().map(Sys_menu::getId).toArray()); cnd.andEX("m.moduleId", "=", categoryId); cnd.asc("m.location"); + cnd.asc("m.id"); if (StrUtil.isNotBlank(keyword)) { cnd.where().andLike("m.name", keyword); } @@ -145,6 +147,7 @@ public class SysV4AppsController { m.href, m.icon, m.picIcon, + m.location, sm.`name` AS moduleName, 1 AS isFavorite FROM @@ -159,7 +162,8 @@ public class SysV4AppsController { AND m.platform = @platform AND m.disabled = 0 ORDER BY - m.location ASC; + m.location ASC, + m.id ASC; """); sql.setParam("userId", SecurityUtil.getUserId()); sql.setParam("platform", platform); diff --git a/src/main/java/com/budwk/app/sys/controller/v4/SysV4ServController.java b/src/main/java/com/budwk/app/sys/controller/v4/SysV4ServController.java index 2483fb79..7f3e3933 100644 --- a/src/main/java/com/budwk/app/sys/controller/v4/SysV4ServController.java +++ b/src/main/java/com/budwk/app/sys/controller/v4/SysV4ServController.java @@ -46,13 +46,14 @@ public class SysV4ServController { @ApiOperation("获取应用列表") public Result list(@Param("categoryId") String categoryId, @Param("letter") String letter, @Param("keyword") String keyword, HttpServletRequest req) { Sql sql = Sqls.create(""" - SELECT t.*,(select picIcon from wf_process_design where name = t.name) as picIcon + SELECT t.*, d.picIcon, d.sortNo FROM wf_process_define t INNER JOIN ( SELECT name, MAX(id) AS max_id FROM wf_process_define GROUP BY name ) sub ON t.name = sub.name AND t.id = sub.max_id + LEFT JOIN wf_process_design d ON d.name = t.name $condition """); Cnd cnd = Cnd.NEW(); @@ -61,6 +62,8 @@ public class SysV4ServController { } cnd.andEX("t.category", "=", categoryId); cnd.andEX("t.pinyinName", "=", letter); + cnd.asc("d.sortNo"); + cnd.asc("t.id"); sql.setCondition(cnd); List list = sysMenuService.listMap(sql); return Result.success(list); diff --git a/src/main/java/com/budwk/app/sys/models/Sys_union_cadre.java b/src/main/java/com/budwk/app/sys/models/Sys_union_cadre.java index 63c18feb..63a9a059 100644 --- a/src/main/java/com/budwk/app/sys/models/Sys_union_cadre.java +++ b/src/main/java/com/budwk/app/sys/models/Sys_union_cadre.java @@ -61,11 +61,26 @@ public class Sys_union_cadre extends BaseModel { @ColDefine(type = ColType.VARCHAR, width = 100) private String roleCode; + @Column + @Comment("届数") + @ColDefine(type = ColType.VARCHAR, width = 8) + private String j; + @Column @Comment("添加时间") @ColDefine(type = ColType.DATETIME) private Date applyDate; + @Column + @Comment("离任时间") + @ColDefine(type = ColType.DATETIME) + private Date leaveDate; + + @Column + @Comment("是否在任") + @ColDefine(type = ColType.BOOLEAN) + private Boolean isServing; + @Column @Comment("加入还是退出") @ColDefine(type = ColType.BOOLEAN)