diff --git a/src/main/java/com/budwk/app/sys/services/SysRoleService.java b/src/main/java/com/budwk/app/sys/services/SysRoleService.java index 6daeedf..fff4920 100644 --- a/src/main/java/com/budwk/app/sys/services/SysRoleService.java +++ b/src/main/java/com/budwk/app/sys/services/SysRoleService.java @@ -136,6 +136,9 @@ public interface SysRoleService extends BaseService { */ NutMap settingMemberRole(); + /** 为指定人员中 member=1 的用户批量补齐启用的会员角色。 */ + NutMap settingMemberRole(List userIds); + /** * 清空缓存 */ diff --git a/src/main/java/com/budwk/app/sys/services/impl/SysDataUserAllUpdateServiceImpl.java b/src/main/java/com/budwk/app/sys/services/impl/SysDataUserAllUpdateServiceImpl.java index 022c220..2a79f8c 100644 --- a/src/main/java/com/budwk/app/sys/services/impl/SysDataUserAllUpdateServiceImpl.java +++ b/src/main/java/com/budwk/app/sys/services/impl/SysDataUserAllUpdateServiceImpl.java @@ -301,6 +301,13 @@ public class SysDataUserAllUpdateServiceImpl implements SysDataUserUpdateService return "更新失败: " + e.getMessage(); } + List updatedUserIds = new ArrayList<>(); + needInitUserList.forEach(user -> updatedUserIds.add(user.getId())); + needDoUpdateList.forEach(user -> updatedUserIds.add(user.getId())); + sysRoleService.settingMemberRole(updatedUserIds); + sysRoleService.clearCache(); + sysUserService.clearCache(); + /* // 4. 异步添加会员角色 - 不等待完成 if (Lang.isNotEmpty(addMemberUserIds)) { executorService.execute(() -> { diff --git a/src/main/java/com/budwk/app/sys/services/impl/SysDataUserIncrUpdateServiceImpl.java b/src/main/java/com/budwk/app/sys/services/impl/SysDataUserIncrUpdateServiceImpl.java index 1311266..c1ac96e 100644 --- a/src/main/java/com/budwk/app/sys/services/impl/SysDataUserIncrUpdateServiceImpl.java +++ b/src/main/java/com/budwk/app/sys/services/impl/SysDataUserIncrUpdateServiceImpl.java @@ -14,6 +14,7 @@ import com.budwk.app.sys.param.SysDataUserUpdateParam; import com.budwk.app.sys.services.SysDataUserUpdateService; import com.budwk.app.sys.services.SysRoleService; import com.budwk.app.sys.services.SysUnitService; +import com.budwk.app.sys.services.SysUserService; import com.budwk.app.sys.utils.DataCenterUtil; import com.budwk.app.zhgh.democratic.proposal.models.ProposalConfig; import com.budwk.app.zhgh.staffmanage.member.constant.MemberChangeOrigin; @@ -44,6 +45,8 @@ public class SysDataUserIncrUpdateServiceImpl implements SysDataUserUpdateServic private SysRoleService sysRoleService; @Inject private SysUnitService sysUnitService; + @Inject + private SysUserService sysUserService; @Override @Aop(TransAop.READ_COMMITTED) @@ -164,7 +167,9 @@ public class SysDataUserIncrUpdateServiceImpl implements SysDataUserUpdateServic return sysUserRole; }).toList(); dao.insert(sysUserRoles); + sysRoleService.settingMemberRole(sysUsers.stream().map(Sys_user::getId).toList()); sysRoleService.clearCache(); + sysUserService.clearCache(); // 6.1 更新提案的校领导角色,发送订阅 ProposalConfig config = dao.fetch(ProposalConfig.class, Cnd.where("delFlag", "=", false).desc("updatedAt")); diff --git a/src/main/java/com/budwk/app/sys/services/impl/SysRoleServiceImpl.java b/src/main/java/com/budwk/app/sys/services/impl/SysRoleServiceImpl.java index 35bdb80..6e6b221 100644 --- a/src/main/java/com/budwk/app/sys/services/impl/SysRoleServiceImpl.java +++ b/src/main/java/com/budwk/app/sys/services/impl/SysRoleServiceImpl.java @@ -294,6 +294,27 @@ public class SysRoleServiceImpl extends BaseServiceImpl implements Sys @Override @Aop(TransAop.READ_COMMITTED) public NutMap settingMemberRole() { + return settingMemberRole(Cnd.where("u.member", "=", 1)); + } + + @Override + @Aop(TransAop.READ_COMMITTED) + public NutMap settingMemberRole(List userIds) { + int addedCount = 0; + int enabledCount = 0; + if (userIds != null && !userIds.isEmpty()) { + List distinctIds = userIds.stream().distinct().toList(); + for (int start = 0; start < distinctIds.size(); start += 500) { + NutMap counts = settingMemberRole(Cnd.where("u.member", "=", 1) + .and("u.id", "in", distinctIds.subList(start, Math.min(start + 500, distinctIds.size())))); + addedCount += counts.getInt("addedCount"); + enabledCount += counts.getInt("enabledCount"); + } + } + return NutMap.NEW().addv("addedCount", addedCount).addv("enabledCount", enabledCount); + } + + private NutMap settingMemberRole(Cnd condition) { // 锁定同一会员角色,使本接口的并发请求依次执行,避免重复插入用户角色关系。 Sql roleSql = Sqls.create("SELECT * FROM sys_role WHERE code=@code FOR UPDATE"); roleSql.setParam("code", RoleConstant.MEMBER.name()); @@ -312,14 +333,16 @@ public class SysRoleServiceImpl extends BaseServiceImpl implements Sys // 历史关联可能已停用或未填写 enable;恢复关联即可,无需重新插入。 Sql enableSql = Sqls.create("UPDATE sys_user_role SET enable=1 WHERE roleId=@roleId " + "AND (enable IS NULL OR enable<>1) " - + "AND EXISTS (SELECT 1 FROM sys_user u WHERE u.id=sys_user_role.userId AND u.member=1)"); + + "AND EXISTS (SELECT 1 FROM sys_user u $condition AND u.id=sys_user_role.userId)"); + enableSql.setCondition(condition); enableSql.setParam("roleId", role.getId()); dao().execute(enableSql); // 按用户、角色判重,只为缺少会员关联的人员添加记录;不删除任何已有角色。 Sql insertSql = Sqls.create("INSERT INTO sys_user_role (userId,roleId,enable) " - + "SELECT u.id,@roleId,1 FROM sys_user u WHERE u.member=1 " + + "SELECT u.id,@roleId,1 FROM sys_user u $condition " + "AND NOT EXISTS (SELECT 1 FROM sys_user_role ur WHERE ur.userId=u.id AND ur.roleId=@roleId)"); + insertSql.setCondition(condition); insertSql.setParam("roleId", role.getId()); dao().execute(insertSql); return NutMap.NEW().addv("addedCount", insertSql.getUpdateCount()) diff --git a/src/main/resources/static/assets/staffbenefit/therapyRecuperation/img/home-route-in-card-v3.png b/src/main/resources/static/assets/staffbenefit/therapyRecuperation/img/home-route-in-card-v3.png new file mode 100644 index 0000000..3e4da4b Binary files /dev/null and b/src/main/resources/static/assets/staffbenefit/therapyRecuperation/img/home-route-in-card-v3.png differ diff --git a/src/main/resources/static/assets/staffbenefit/therapyRecuperation/img/home-route-out-card-v3.png b/src/main/resources/static/assets/staffbenefit/therapyRecuperation/img/home-route-out-card-v3.png new file mode 100644 index 0000000..7589e5e Binary files /dev/null and b/src/main/resources/static/assets/staffbenefit/therapyRecuperation/img/home-route-out-card-v3.png differ diff --git a/src/main/resources/static/components/module/therapyRecuperation/NoticePreview.vue b/src/main/resources/static/components/module/therapyRecuperation/NoticePreview.vue index 4c300f9..d573b4c 100644 --- a/src/main/resources/static/components/module/therapyRecuperation/NoticePreview.vue +++ b/src/main/resources/static/components/module/therapyRecuperation/NoticePreview.vue @@ -1,18 +1,20 @@