From e430062aa55ad118074637007d99c294db9e413d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=BE=E5=AF=8C=E6=96=8C?= Date: Fri, 21 Nov 2025 00:06:16 +0800 Subject: [PATCH] =?UTF-8?q?fix=20(farm):=20=E5=A4=A7=E5=B1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 大屏模拟数据维护 --- .../DigitalCockpitController.java | 5 + .../FoundationInfoController.java | 20 ++-- .../foundationinfo/vo/DataToggleReqVO.java | 22 ++++ .../foundationinfo/vo/DataToggleRespVO.java | 23 ++++ .../foundationinfo/CockpitMockInfoDO.java | 69 +++++++++++ .../foundationinfo/CockpitMockInfoMapper.java | 17 +++ .../CockpitMockInfoService.java | 19 +++ .../CockpitMockInfoServiceImpl.java | 109 ++++++++++++++++++ .../FoundationInfoServiceImpl.java | 3 + .../ProductionPlanServiceImpl.java | 2 +- .../foundationinfo/CockpitMockInfoMapper.xml | 13 +++ .../controller/admin/auth/AuthController.java | 8 ++ .../service/auth/AdminAuthServiceImpl.java | 22 +++- .../service/user/AdminUserServiceImpl.java | 3 + 14 files changed, 320 insertions(+), 15 deletions(-) create mode 100644 yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/largescreen/foundationinfo/vo/DataToggleReqVO.java create mode 100644 yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/largescreen/foundationinfo/vo/DataToggleRespVO.java create mode 100644 yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/foundationinfo/CockpitMockInfoDO.java create mode 100644 yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/foundationinfo/CockpitMockInfoMapper.java create mode 100644 yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/foundationinfo/CockpitMockInfoService.java create mode 100644 yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/foundationinfo/CockpitMockInfoServiceImpl.java create mode 100644 yudao-module-farm/src/main/resources/mapper/foundationinfo/CockpitMockInfoMapper.xml diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/digitalcockpit/DigitalCockpitController.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/digitalcockpit/DigitalCockpitController.java index 9af2a9db..c3cffb03 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/digitalcockpit/DigitalCockpitController.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/digitalcockpit/DigitalCockpitController.java @@ -24,6 +24,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.error; @@ -137,6 +138,10 @@ public class DigitalCockpitController { public CommonResult> getYieldStatisticsInfo(@RequestParam("baseId") String baseId, @RequestParam("year") String year) { List res = productionPlanService.getCultivatingYieldInfo(baseId, year); + res = Arrays.asList( + new YieldStatisticsRespVO("红玫瑰",10000,20000), + new YieldStatisticsRespVO("褚橙",25000,50000) + ); return success(res); } diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/largescreen/foundationinfo/FoundationInfoController.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/largescreen/foundationinfo/FoundationInfoController.java index a6a50da9..de2b01ec 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/largescreen/foundationinfo/FoundationInfoController.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/largescreen/foundationinfo/FoundationInfoController.java @@ -6,10 +6,9 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; -import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.foundationinfo.vo.FoundationInfoPageReqVO; -import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.foundationinfo.vo.FoundationInfoRespVO; -import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.foundationinfo.vo.FoundationInfoSaveReqVO; +import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.foundationinfo.vo.*; import cn.iocoder.yudao.module.farm.dal.dataobject.foundationinfo.FoundationInfoDO; +import cn.iocoder.yudao.module.farm.service.foundationinfo.CockpitMockInfoService; import cn.iocoder.yudao.module.farm.service.foundationinfo.FoundationInfoService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -34,6 +33,8 @@ public class FoundationInfoController { @Resource private FoundationInfoService foundationInfoService; + @Resource + private CockpitMockInfoService cockpitMockInfoService; @PostMapping("/create") @Operation(summary = "创建基础信息") @@ -93,17 +94,16 @@ public class FoundationInfoController { @GetMapping("/data-toggle/get") @Operation(summary = "数据切换-获取") - @Parameter(name = "data", description = "数据", required = true) - public CommonResult getDataToggle(@RequestParam("data") String data) { - String res = ""; - return success(res); + @Parameter(name = "baseId", description = "数据", required = true) + public CommonResult> getDataToggle(@RequestParam("baseId") String baseId) { + return success(cockpitMockInfoService.getDataToggle(baseId)); } @PostMapping("/data-toggle/create") @Operation(summary = "数据切换-保存") - @Parameter(name = "data", description = "数据", required = true) - public CommonResult createDataToggle(@RequestParam("data") String data) { - + public CommonResult createDataToggle(@Valid @RequestBody List createReqVO) { + cockpitMockInfoService.createDataToggle(createReqVO); return success("success"); } + } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/largescreen/foundationinfo/vo/DataToggleReqVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/largescreen/foundationinfo/vo/DataToggleReqVO.java new file mode 100644 index 00000000..ab337503 --- /dev/null +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/largescreen/foundationinfo/vo/DataToggleReqVO.java @@ -0,0 +1,22 @@ +package cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.foundationinfo.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @description: TODO + * @author: binda + * @date: 2025/11/20 22:26 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class DataToggleReqVO { + + private String baseId; + private String flag; + private String type; + private Object data; + +} diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/largescreen/foundationinfo/vo/DataToggleRespVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/largescreen/foundationinfo/vo/DataToggleRespVO.java new file mode 100644 index 00000000..5663a703 --- /dev/null +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/managementcenter/largescreen/foundationinfo/vo/DataToggleRespVO.java @@ -0,0 +1,23 @@ +package cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.foundationinfo.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @description: TODO + * @author: binda + * @date: 2025/11/20 22:26 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class DataToggleRespVO { + + private String id; + private String baseId; + private String flag; + private String type; + private Object data; + +} diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/foundationinfo/CockpitMockInfoDO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/foundationinfo/CockpitMockInfoDO.java new file mode 100644 index 00000000..839b7741 --- /dev/null +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/foundationinfo/CockpitMockInfoDO.java @@ -0,0 +1,69 @@ +package cn.iocoder.yudao.module.farm.dal.dataobject.foundationinfo; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import lombok.*; + +/** + * @description: 驾驶舱模拟数据 + * @author: binda + * @date: 2025/11/20 22:50 + */ +@TableName("farm_cockpit_mock_info") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class CockpitMockInfoDO extends BaseDO { + + /** + * 基础id + */ + private String id; + + /** + * 数据维护开关 (1: 开; 0: 关;) + */ + private String flag; + + /** + * 数据类型 + */ + private String type; + + /** + * mock数据 + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private String jsonData; + + /** + * 基地id + */ + private String baseId; + + /** + * 基地 + */ + private String baseName; + + /** + * 地块ID + */ + private String plotId; + + /** + * 地块 + */ + private String plotName; + + /** + * 租户id + */ + private String tenantId; + +} diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/foundationinfo/CockpitMockInfoMapper.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/foundationinfo/CockpitMockInfoMapper.java new file mode 100644 index 00000000..1d2815e5 --- /dev/null +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/mysql/foundationinfo/CockpitMockInfoMapper.java @@ -0,0 +1,17 @@ +package cn.iocoder.yudao.module.farm.dal.mysql.foundationinfo; + +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.farm.dal.dataobject.foundationinfo.CockpitMockInfoDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * @description: + * @author: binda + * @date: 2025/11/20 22:53 + */ +@Mapper +public interface CockpitMockInfoMapper extends BaseMapperX { + + + +} diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/foundationinfo/CockpitMockInfoService.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/foundationinfo/CockpitMockInfoService.java new file mode 100644 index 00000000..da0491c7 --- /dev/null +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/foundationinfo/CockpitMockInfoService.java @@ -0,0 +1,19 @@ +package cn.iocoder.yudao.module.farm.service.foundationinfo; + +import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.foundationinfo.vo.DataToggleReqVO; +import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.foundationinfo.vo.DataToggleRespVO; + +import java.util.List; + +/** + * @description: + * @author: binda + * @date: 2025/11/20 22:56 + */ +public interface CockpitMockInfoService { + + + void createDataToggle(List createReqVO); + + List getDataToggle(String baseId); +} diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/foundationinfo/CockpitMockInfoServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/foundationinfo/CockpitMockInfoServiceImpl.java new file mode 100644 index 00000000..dce7c4ee --- /dev/null +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/foundationinfo/CockpitMockInfoServiceImpl.java @@ -0,0 +1,109 @@ +package cn.iocoder.yudao.module.farm.service.foundationinfo; + +import cn.hutool.core.util.IdUtil; +import cn.hutool.json.JSONUtil; +import cn.idev.excel.util.StringUtils; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.foundationinfo.vo.DataToggleReqVO; +import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.foundationinfo.vo.DataToggleRespVO; +import cn.iocoder.yudao.module.farm.dal.dataobject.foundationinfo.CockpitMockInfoDO; +import cn.iocoder.yudao.module.farm.dal.mysql.foundationinfo.CockpitMockInfoMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * @description: TODO + * @author: binda + * @date: 2025/11/20 22:57 + */ +@Service +public class CockpitMockInfoServiceImpl implements CockpitMockInfoService { + + @Resource + private CockpitMockInfoMapper cockpitMockInfoMapper; + + @Override + @Transactional(rollbackFor = Exception.class) + public void createDataToggle(List createReqVO) { + if (CollectionUtils.isEmpty(createReqVO)) { + return; + } + + // 1. 处理 baseId 为 null 的情况,设置为 "0" + for (DataToggleReqVO vo : createReqVO) { + if (vo.getBaseId() == null) { + vo.setBaseId("0"); + } + } + + // 2. 获取所有需要处理的 baseId(包括全局数据 baseId=0) + Set baseIds = createReqVO.stream() + .map(DataToggleReqVO::getBaseId) + .collect(Collectors.toSet()); + + // 3. 删除这些 baseId 对应的所有现有数据 + if (!baseIds.isEmpty()) { + cockpitMockInfoMapper.delete(new LambdaQueryWrapper() + .in(CockpitMockInfoDO::getBaseId, baseIds)); + } + + // 4. 保存新的数据 + List saveList = new ArrayList<>(); + for (DataToggleReqVO vo : createReqVO) { + CockpitMockInfoDO entity = new CockpitMockInfoDO(); + entity.setId(IdUtil.fastUUID()); + entity.setBaseId(vo.getBaseId()); + entity.setFlag(vo.getFlag()); + entity.setType(vo.getType()); + + // 将 data 对象转换为 JSON 字符串 + if (vo.getData() != null) { + entity.setJsonData(JSONUtil.toJsonStr(vo.getData())); + } + + saveList.add(entity); + } + + // 5. 批量插入新数据 + if (!saveList.isEmpty()) { + cockpitMockInfoMapper.insertBatch(saveList); + } + } + + @Override + public List getDataToggle(String baseId) { + // 查询数据库记录 + List entityList = cockpitMockInfoMapper.selectList( + new LambdaQueryWrapper() + .eq(CockpitMockInfoDO::getBaseId, baseId) + ); + + // 转换为响应VO + List result = new ArrayList<>(); + for (CockpitMockInfoDO entity : entityList) { + DataToggleRespVO vo = BeanUtils.toBean(entity, DataToggleRespVO.class); + + // 特殊处理 jsonData 到 data 的转换 + if (StringUtils.isNotBlank(entity.getJsonData())) { + try { + Object data = JSONUtil.parse(entity.getJsonData()); + vo.setData(data); + } catch (Exception e) { + vo.setData(entity.getJsonData()); + } + } + + result.add(vo); + } + + return result; + } +} diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/foundationinfo/FoundationInfoServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/foundationinfo/FoundationInfoServiceImpl.java index b6f492b8..bfdb62ad 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/foundationinfo/FoundationInfoServiceImpl.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/foundationinfo/FoundationInfoServiceImpl.java @@ -7,6 +7,7 @@ import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.foundationinfo.vo.FoundationInfoPageReqVO; import cn.iocoder.yudao.module.farm.controller.admin.managementcenter.largescreen.foundationinfo.vo.FoundationInfoSaveReqVO; import cn.iocoder.yudao.module.farm.dal.dataobject.foundationinfo.FoundationInfoDO; +import cn.iocoder.yudao.module.farm.dal.mysql.foundationinfo.CockpitMockInfoMapper; import cn.iocoder.yudao.module.farm.dal.mysql.foundationinfo.FoundationInfoMapper; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; @@ -29,6 +30,8 @@ public class FoundationInfoServiceImpl implements FoundationInfoService { @Resource private FoundationInfoMapper foundationInfoMapper; + @Resource + private CockpitMockInfoMapper cockpitMockMapper; @Override public String createFoundationInfo(FoundationInfoSaveReqVO createReqVO) { diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/productionplan/ProductionPlanServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/productionplan/ProductionPlanServiceImpl.java index 7c4f5dd1..ff3d63d9 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/productionplan/ProductionPlanServiceImpl.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/productionplan/ProductionPlanServiceImpl.java @@ -475,7 +475,7 @@ public class ProductionPlanServiceImpl implements ProductionPlanService { @Override public List getCultivatingYieldInfo(String baseId, String year) { - return null; + return Collections.EMPTY_LIST; } @Override diff --git a/yudao-module-farm/src/main/resources/mapper/foundationinfo/CockpitMockInfoMapper.xml b/yudao-module-farm/src/main/resources/mapper/foundationinfo/CockpitMockInfoMapper.xml new file mode 100644 index 00000000..990310fb --- /dev/null +++ b/yudao-module-farm/src/main/resources/mapper/foundationinfo/CockpitMockInfoMapper.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java index cf8dc452..a265fe55 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java @@ -8,6 +8,7 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.security.config.SecurityProperties; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore; +import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.*; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.diy.LoginForTenantReqVO; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.diy.TenantRespVO; @@ -42,6 +43,7 @@ import java.util.Set; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.error; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUser; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; @Tag(name = "管理后台 - 认证") @@ -86,11 +88,13 @@ public class AuthController { @PermitAll @Operation(summary = "登出系统") public CommonResult logout(HttpServletRequest request) { + log.info("logout 之前: tenantId ==> {}", TenantContextHolder.getTenantId() ); String token = SecurityFrameworkUtils.obtainAuthorization(request, securityProperties.getTokenHeader(), securityProperties.getTokenParameter()); if (StrUtil.isNotBlank(token)) { authService.logout(token, LoginLogTypeEnum.LOGOUT_SELF.getType()); } + log.info("logout 之后: tenantId ==> {}", TenantContextHolder.getTenantId() ); return success(true); } @@ -166,8 +170,12 @@ public class AuthController { @PostMapping("/login-by-tenant") @Operation(summary = "登录 (切换租户之后调用)") public CommonResult getPhoneNumber4Login(@RequestBody @Valid TenantTokenReqVO reqVO) { + // 强行清楚 本地线程 中的租户ID , 请设置为当前将要登录的租户ID + TenantContextHolder.clear(); + TenantContextHolder.setTenantId(Long.valueOf(reqVO.getTenantId())); AuthLoginRespVO login = authService.getPhoneNumber4Login(reqVO); if (login != null) { +// log.info("tenantId ===> {}", getLoginUser().getTenantId()); return success(login); } else { return error(405, "该手机号不是平台用户"); diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java index 4cee7db4..a395dcb6 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java @@ -251,8 +251,9 @@ public class AdminAuthServiceImpl implements AdminAuthService { createLoginLog(userId, username, logType, LoginResultEnum.SUCCESS); // 确保租户上下文中有正确的租户ID - ensureTenantContext(userId); - +// ensureTenantContext(userId); + ensureTenantContextPlus(userId); + // 创建访问令牌 OAuth2AccessTokenDO accessTokenDO = oauth2TokenService.createAccessToken(userId, getUserType().getValue(), OAuth2ClientConstants.CLIENT_ID_DEFAULT, null); @@ -274,7 +275,7 @@ public class AdminAuthServiceImpl implements AdminAuthService { } catch (Exception e) { log.debug("[ensureTenantContext][无法获取当前请求,跳过从请求头提取租户ID]"); } - + // 如果还是为空,从用户信息中获取 if (currentTenantId == null) { AdminUserDO user = userService.getUser(userId); @@ -283,7 +284,7 @@ public class AdminAuthServiceImpl implements AdminAuthService { log.info("[ensureTenantContext][从用户({})信息中获取租户ID: {}]", userId, currentTenantId); } } - + // 设置到租户上下文中 if (currentTenantId != null) { TenantContextHolder.setTenantId(currentTenantId); @@ -294,6 +295,19 @@ public class AdminAuthServiceImpl implements AdminAuthService { } } + private void ensureTenantContextPlus(Long userId) { + // 如果TenantContextHolder中没有租户ID,尝试从用户信息中获取并设置 + Long currentTenantId = TenantContextHolder.getTenantId(); + + // 设置到租户上下文中 + if (currentTenantId != null) { + TenantContextHolder.setTenantId(currentTenantId); + log.info("[ensureTenantContext][设置租户上下文: {}]", currentTenantId); + } else { + log.warn("[ensureTenantContext][用户({}) 无法获取租户ID,可能导致登录后无法获取租户信息]", userId); + } + } + @Override public AuthLoginRespVO refreshToken(String refreshToken) { OAuth2AccessTokenDO accessTokenDO = oauth2TokenService.refreshAccessToken(refreshToken, OAuth2ClientConstants.CLIENT_ID_DEFAULT); diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java index 57dae13e..3ef06298 100644 --- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java +++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java @@ -694,6 +694,9 @@ public class AdminUserServiceImpl implements AdminUserService { .collect(Collectors.toList()); Set userIds = permissionService.getUserRoleIdListByRoleId(roleIds); + if (null == userIds || userIds.size() == 0) { + return Collections.EMPTY_LIST; + } List userList = userMapper.selectByIds(userIds); return userList;