From 300b5ac239fee77ba6110fc55bf1b5fb78fff7f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Tue, 11 Aug 2026 23:11:25 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=92=E8=89=B2=E4=BF=A1=E6=81=AF=E5=88=86?= =?UTF-8?q?=E9=85=8D=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserShipperApplicationService.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperApplicationService.java b/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperApplicationService.java index 3c6fdfd18..f522300bb 100644 --- a/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperApplicationService.java +++ b/mhd-user-center/src/main/java/com/mhd/user/application/service/UserShipperApplicationService.java @@ -458,15 +458,26 @@ public class UserShipperApplicationService { } /** - * 导入时若账号没有任何角色,则补分配企业货主角色 + * 导入委托方时,确保账号绑定的是企业货主(company)角色。 + * 若账号已有 company 角色则跳过;否则先删除已绑定的其他角色(如 addUser 自动分配的 ownerCargo), + * 再重新分配当前组织下的 company 角色,避免登录报“账号未授权角色信息”。 */ private void assignCompanyRoleIfMissing(Long userId, Long organizationId) { if (userId == null || organizationId == null) { return; } + // 已绑定 company 角色则无需处理 List existingRoles = userRoleDomainService.selectRolesByUserId(userId); if (CollUtil.isNotEmpty(existingRoles)) { - return; + boolean hasCompany = existingRoles.stream() + .anyMatch(r -> RoleEnum.COMPANY.getCode().equals(r.getRoleCode())); + if (hasCompany) { + return; + } + // 没有 company 角色:删除之前绑定的错误角色(如 ownerCargo),重新分配 company + log.info("导入委托方 - 用户{}已有角色但缺少company角色,删除原角色后重新分配,原角色: {}", + userId, existingRoles.stream().map(UserRoleMenuPO::getRoleCode).collect(Collectors.toList())); + userRoleDomainService.deleteByUserId(userId); } // 按 role_code + organization_id 精确匹配角色(selectByOrganizationIdAndRoleCode 的 common_where 不含 roleCode 过滤,不适用) RolePO rolePO = roleDomainService.selectByRoleCodeAndOrganizationId(RoleEnum.COMPANY.getCode(), organizationId); @@ -568,8 +579,8 @@ public class UserShipperApplicationService { userDO.setUserSalt(salt); } userDomainService.updateUser(userDO); - // 如果该账号没有任何角色,补分配企业货主角色,避免登录报“账号未授权角色信息” - assignCompanyRoleIfMissing(userId, existingShipper.getOrganizationId()); + // 如果该账号没有企业货主(company)角色,补分配当前导入组织下的 company 角色,避免登录报“账号未授权角色信息” + assignCompanyRoleIfMissing(userId, currentOrgId); } // 3. 更新 orgCode 中当前组织的 ncCustomer