From 30774a92c4c492eb9629752faca04a00cd946304 Mon Sep 17 00:00:00 2001
From: 刘帅 <rr.iii@qq.com>
Date: 星期三, 23 九月 2026 11:39:22 +0800
Subject: [PATCH] bug:员工角色问题

---
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/UserMgrController.java |   14 ++++++++++++++
 1 files changed, 14 insertions(+), 0 deletions(-)

diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/UserMgrController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/UserMgrController.java
index b82403a..c58c69e 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/UserMgrController.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/UserMgrController.java
@@ -491,6 +491,9 @@
         // "undefined";该值绝不能覆盖 sys_user.roleid。
         if (isValidRoleId(user.getRoleid())) {
             oldUser.setRoleid(user.getRoleid());
+            // 角色归属类型决定账号的数据范围。切换角色时同步 objectType,
+            // 但保留原 objectId,避免修改角色意外解除门店/运营商归属。
+            syncObjectTypeWithRole(oldUser, user.getRoleid());
         }
         this.userService.updateById(oldUser);
         return SUCCESS_TIP;
@@ -502,6 +505,17 @@
                 && !"null".equalsIgnoreCase(roleId);
     }
 
+    private void syncObjectTypeWithRole(User user, String roleId) {
+        try {
+            Role role = roleService.getById(Integer.valueOf(roleId));
+            if (role != null && role.getObjType() != null) {
+                user.setObjectType(role.getObjType());
+            }
+        } catch (NumberFormatException ignored) {
+            // 历史账号可能保存多角色或脏数据;无法解析为单个角色时保留原归属类型。
+        }
+    }
+
     private String maskPhone(String value) {
         if (value == null) return null;
         return value.length() <= 7 ? stars(value.length()) : value.substring(0, 3) + "****" + value.substring(7);

--
Gitblit v1.7.1