From ff4ed31c1b1141e9c9b25c7e8edd61d8cd8745d6 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 31 May 2026 20:59:11 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E3=80=90=E5=90=8C=E6=AD=A5=E3=80=91BOOT=20?= =?UTF-8?q?=E5=92=8C=20CLOUD=20=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/rabbitmq/IotRabbitMQMessageBus.java | 104 ++++++++++++++++++ .../alert/IotAlertConfigServiceImpl.java | 6 +- .../IotAlertTriggerSceneRuleAction.java | 6 +- .../CombinationRecordServiceImpl.java | 12 +- .../coupon/CouponTemplateServiceImpl.java | 4 +- .../brokerage/BrokerageRecordServiceImpl.java | 4 +- .../service/user/MemberUserServiceImpl.java | 10 +- .../module/system/api/permission/RoleApi.java | 20 +++- .../api/permission/dto/RoleRespDTO.java | 37 +++++++ .../system/api/permission/RoleApiImpl.java | 17 +++ 10 files changed, 198 insertions(+), 22 deletions(-) create mode 100644 yudao-module-iot/yudao-module-iot-core/src/main/java/cn/iocoder/yudao/module/iot/core/messagebus/core/rabbitmq/IotRabbitMQMessageBus.java create mode 100644 yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/permission/dto/RoleRespDTO.java diff --git a/yudao-module-iot/yudao-module-iot-core/src/main/java/cn/iocoder/yudao/module/iot/core/messagebus/core/rabbitmq/IotRabbitMQMessageBus.java b/yudao-module-iot/yudao-module-iot-core/src/main/java/cn/iocoder/yudao/module/iot/core/messagebus/core/rabbitmq/IotRabbitMQMessageBus.java new file mode 100644 index 000000000..9ce1dfaec --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-core/src/main/java/cn/iocoder/yudao/module/iot/core/messagebus/core/rabbitmq/IotRabbitMQMessageBus.java @@ -0,0 +1,104 @@ +package cn.iocoder.yudao.module.iot.core.messagebus.core.rabbitmq; + +import cn.hutool.core.util.TypeUtil; +import cn.iocoder.yudao.framework.common.util.json.JsonUtils; +import cn.iocoder.yudao.module.iot.core.messagebus.core.IotMessageBus; +import cn.iocoder.yudao.module.iot.core.messagebus.core.IotMessageSubscriber; +import jakarta.annotation.PreDestroy; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.core.AcknowledgeMode; +import org.springframework.amqp.core.Binding; +import org.springframework.amqp.core.BindingBuilder; +import org.springframework.amqp.core.MessageBuilder; +import org.springframework.amqp.core.Queue; +import org.springframework.amqp.core.TopicExchange; +import org.springframework.amqp.rabbit.core.RabbitAdmin; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer; +import org.springframework.amqp.rabbit.listener.api.ChannelAwareMessageListener; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; + +/** + * 基于 RabbitMQ 的 {@link IotMessageBus} 实现类 + * + * @author ywc + */ +@RequiredArgsConstructor +@Slf4j +public class IotRabbitMQMessageBus implements IotMessageBus { + + private static final String ROUTING_KEY = "#"; + + private final RabbitTemplate rabbitTemplate; + + private final RabbitAdmin rabbitAdmin; + + @Getter + private final List> subscribers = new ArrayList<>(); + + private final List containers = new ArrayList<>(); + + @Override + public void post(String topic, Object message) { + rabbitTemplate.send(topic, ROUTING_KEY, MessageBuilder.withBody(JsonUtils.toJsonByte(message)).build()); + log.info("[post][topic({}) 发送消息({})]", topic, message); + } + + @Override + @SuppressWarnings("DataFlowIssue") + public void register(IotMessageSubscriber subscriber) { + Type type = TypeUtil.getTypeArgument(subscriber.getClass(), 0); + if (type == null) { + throw new IllegalStateException(String.format("类型(%s) 需要设置消息类型", getClass().getName())); + } + + // 1.1 声明交换机、队列和绑定关系 + Queue queue = new Queue(subscriber.getGroup(), true, false, false); + rabbitAdmin.declareQueue(queue); + TopicExchange exchange = new TopicExchange(subscriber.getTopic()); + rabbitAdmin.declareExchange(exchange); + Binding binding = BindingBuilder.bind(queue).to(exchange).with(ROUTING_KEY); + rabbitAdmin.declareBinding(binding); + + // 1.2 创建消费容器 + SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(rabbitTemplate.getConnectionFactory()); + container.setQueues(queue); + container.setConcurrentConsumers(1); + container.setMaxConcurrentConsumers(10); + container.setAcknowledgeMode(AcknowledgeMode.MANUAL); + container.setMessageListener((ChannelAwareMessageListener) (message, channel) -> { + try { + subscriber.onMessage(JsonUtils.parseObject(message.getBody(), type)); + channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); + } catch (Exception ex) { + log.error("[onMessage][topic({}/{}) message({}) 消费者({}) 处理异常]", + subscriber.getTopic(), subscriber.getGroup(), message, subscriber.getClass().getName(), ex); + channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, false); + } + }); + container.start(); + + // 2. 保存消费者引用 + containers.add(container); + subscribers.add(subscriber); + } + + @PreDestroy + public void destroy() { + for (SimpleMessageListenerContainer container : containers) { + try { + container.stop(); + container.destroy(); + log.info("[destroy][关闭 RabbitMQ 消费者容器成功]"); + } catch (Exception e) { + log.error("[destroy][关闭 RabbitMQ 消费者容器异常]", e); + } + } + } + +} diff --git a/yudao-module-iot/yudao-module-iot-server/src/main/java/cn/iocoder/yudao/module/iot/service/alert/IotAlertConfigServiceImpl.java b/yudao-module-iot/yudao-module-iot-server/src/main/java/cn/iocoder/yudao/module/iot/service/alert/IotAlertConfigServiceImpl.java index bd422b71a..820cc41c1 100644 --- a/yudao-module-iot/yudao-module-iot-server/src/main/java/cn/iocoder/yudao/module/iot/service/alert/IotAlertConfigServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-server/src/main/java/cn/iocoder/yudao/module/iot/service/alert/IotAlertConfigServiceImpl.java @@ -47,7 +47,7 @@ public class IotAlertConfigServiceImpl implements IotAlertConfigService { public Long createAlertConfig(IotAlertConfigSaveReqVO createReqVO) { // 校验关联数据是否存在 sceneRuleService.validateSceneRuleList(createReqVO.getSceneRuleIds()); - adminUserApi.validateUserList(createReqVO.getReceiveUserIds()); + adminUserApi.validateUserList(createReqVO.getReceiveUserIds()).checkError(); validateReceiveTemplates(createReqVO); // 插入 @@ -62,7 +62,7 @@ public class IotAlertConfigServiceImpl implements IotAlertConfigService { validateAlertConfigExists(updateReqVO.getId()); // 校验关联数据是否存在 sceneRuleService.validateSceneRuleList(updateReqVO.getSceneRuleIds()); - adminUserApi.validateUserList(updateReqVO.getReceiveUserIds()); + adminUserApi.validateUserList(updateReqVO.getReceiveUserIds()).checkError(); validateReceiveTemplates(updateReqVO); // 更新 @@ -122,4 +122,4 @@ public class IotAlertConfigServiceImpl implements IotAlertConfigService { return alertConfigMapper.selectListBySceneRuleIdAndStatus(sceneRuleId, status); } -} \ No newline at end of file +} diff --git a/yudao-module-iot/yudao-module-iot-server/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/action/IotAlertTriggerSceneRuleAction.java b/yudao-module-iot/yudao-module-iot-server/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/action/IotAlertTriggerSceneRuleAction.java index 937b8f603..04bcc695f 100644 --- a/yudao-module-iot/yudao-module-iot-server/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/action/IotAlertTriggerSceneRuleAction.java +++ b/yudao-module-iot/yudao-module-iot-server/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/action/IotAlertTriggerSceneRuleAction.java @@ -103,15 +103,15 @@ public class IotAlertTriggerSceneRuleAction implements IotSceneRuleAction { switch (typeEnum) { case SMS: smsSendApi.sendSingleSmsToAdmin(new SmsSendSingleToUserReqDTO().setUserId(userId) - .setTemplateCode(templateCode).setTemplateParams(templateParams)); + .setTemplateCode(templateCode).setTemplateParams(templateParams)).checkError(); break; case MAIL: mailSendApi.sendSingleMailToAdmin(new MailSendSingleToUserReqDTO().setUserId(userId) - .setTemplateCode(templateCode).setTemplateParams(templateParams)); + .setTemplateCode(templateCode).setTemplateParams(templateParams)).checkError(); break; case NOTIFY: notifyMessageSendApi.sendSingleMessageToAdmin(new NotifySendSingleToUserReqDTO().setUserId(userId) - .setTemplateCode(templateCode).setTemplateParams(templateParams)); + .setTemplateCode(templateCode).setTemplateParams(templateParams)).checkError(); break; } } catch (Exception ex) { diff --git a/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationRecordServiceImpl.java b/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationRecordServiceImpl.java index ab215f603..b9e82291a 100644 --- a/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationRecordServiceImpl.java +++ b/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationRecordServiceImpl.java @@ -123,7 +123,7 @@ public class CombinationRecordServiceImpl implements CombinationRecordService { throw exception(COMBINATION_JOIN_ACTIVITY_PRODUCT_NOT_EXISTS); } // 4.2 校验 sku 是否存在 - ProductSkuRespDTO sku = productSkuApi.getSku(skuId); + ProductSkuRespDTO sku = productSkuApi.getSku(skuId).getCheckedData(); if (sku == null) { throw exception(COMBINATION_JOIN_ACTIVITY_PRODUCT_NOT_EXISTS); } @@ -170,9 +170,9 @@ public class CombinationRecordServiceImpl implements CombinationRecordService { reqDTO.getActivityId(), reqDTO.getHeadId(), reqDTO.getSkuId(), reqDTO.getCount()); // 2. 组合数据创建拼团记录 - MemberUserRespDTO user = memberUserApi.getUser(reqDTO.getUserId()); - ProductSpuRespDTO spu = productSpuApi.getSpu(reqDTO.getSpuId()); - ProductSkuRespDTO sku = productSkuApi.getSku(reqDTO.getSkuId()); + MemberUserRespDTO user = memberUserApi.getUser(reqDTO.getUserId()).getCheckedData(); + ProductSpuRespDTO spu = productSpuApi.getSpu(reqDTO.getSpuId()).getCheckedData(); + ProductSkuRespDTO sku = productSkuApi.getSku(reqDTO.getSkuId()).getCheckedData(); CombinationRecordDO record = CombinationActivityConvert.INSTANCE.convert(reqDTO, keyValue.getKey(), user, spu, sku); // 2.1. 如果是团长需要设置 headId 为 CombinationRecordDO#HEAD_ID_GROUP if (!isJoinCombination(record.getHeadId())) { @@ -238,7 +238,7 @@ public class CombinationRecordServiceImpl implements CombinationRecordService { .setTemplateTitle(COMBINATION_SUCCESS) .setPage("pages/order/detail?id=" + record.getOrderId()) // 订单详情页 .addMessage("thing1", "商品拼团活动") // 活动标题 - .addMessage("thing2", "恭喜您拼团成功!我们将尽快为您发货。")); // 温馨提示 + .addMessage("thing2", "恭喜您拼团成功!我们将尽快为您发货。")).checkError(); // 温馨提示 } @Override @@ -345,7 +345,7 @@ public class CombinationRecordServiceImpl implements CombinationRecordService { CombinationRecordStatusEnum.FAILED); // 2. 订单取消 headAndRecords.forEach(item -> tradeOrderApi.cancelPaidOrder(item.getUserId(), item.getOrderId(), - TradeOrderCancelTypeEnum.COMBINATION_CLOSE.getType())); + TradeOrderCancelTypeEnum.COMBINATION_CLOSE.getType()).checkError()); } /** diff --git a/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponTemplateServiceImpl.java b/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponTemplateServiceImpl.java index d4323c60d..b0df73054 100755 --- a/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponTemplateServiceImpl.java +++ b/yudao-module-mall/yudao-module-promotion-server/src/main/java/cn/iocoder/yudao/module/promotion/service/coupon/CouponTemplateServiceImpl.java @@ -122,9 +122,9 @@ public class CouponTemplateServiceImpl implements CouponTemplateService { private void validateProductScope(Integer productScope, List productScopeValues) { if (Objects.equals(PromotionProductScopeEnum.SPU.getScope(), productScope)) { - productSpuApi.validateSpuList(productScopeValues); + productSpuApi.validateSpuList(productScopeValues).checkError(); } else if (Objects.equals(PromotionProductScopeEnum.CATEGORY.getScope(), productScope)) { - productCategoryApi.validateCategoryList(productScopeValues); + productCategoryApi.validateCategoryList(productScopeValues).checkError(); } } diff --git a/yudao-module-mall/yudao-module-trade-server/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageRecordServiceImpl.java b/yudao-module-mall/yudao-module-trade-server/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageRecordServiceImpl.java index 845fea78c..cf3951939 100644 --- a/yudao-module-mall/yudao-module-trade-server/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageRecordServiceImpl.java +++ b/yudao-module-mall/yudao-module-trade-server/src/main/java/cn/iocoder/yudao/module/trade/service/brokerage/BrokerageRecordServiceImpl.java @@ -333,13 +333,13 @@ public class BrokerageRecordServiceImpl implements BrokerageRecordService { return respVO; } // 2.3 校验商品是否存在 - ProductSpuRespDTO spu = productSpuApi.getSpu(spuId); + ProductSpuRespDTO spu = productSpuApi.getSpu(spuId).getCheckedData(); if (spu == null) { return respVO; } // 3.1 获取商品 SKU 列表 - List skuList = productSkuApi.getSkuListBySpuId(ListUtil.of(spuId)); + List skuList = productSkuApi.getSkuListBySpuId(ListUtil.of(spuId)).getCheckedData(); if (BooleanUtil.isTrue(spu.getSubCommissionType())) { // 3.2.1 商品独立分销模式:直接取 SKU 固定佣金 // 注意:固定佣金允许为 0,表示商家主动设为零佣金;为空时,也按 0 处理 diff --git a/yudao-module-member/yudao-module-member-server/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java b/yudao-module-member/yudao-module-member-server/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java index 7cfbeb569..19a583864 100644 --- a/yudao-module-member/yudao-module-member-server/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java +++ b/yudao-module-member/yudao-module-member-server/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java @@ -164,11 +164,11 @@ public class MemberUserServiceImpl implements MemberUserService { // 补充说明:从安全性来说,老手机也校验 oldCode 验证码会更安全。但是由于 uni-app 商城界面暂时没做,所以这里不强制校验 if (StrUtil.isNotEmpty(reqVO.getOldCode())) { smsCodeApi.useSmsCode(new SmsCodeUseReqDTO().setMobile(user.getMobile()).setCode(reqVO.getOldCode()) - .setScene(SmsSceneEnum.MEMBER_UPDATE_MOBILE.getScene()).setUsedIp(getClientIP())); + .setScene(SmsSceneEnum.MEMBER_UPDATE_MOBILE.getScene()).setUsedIp(getClientIP())).checkError(); } // 2.2 使用新验证码 smsCodeApi.useSmsCode(new SmsCodeUseReqDTO().setMobile(reqVO.getMobile()).setCode(reqVO.getCode()) - .setScene(SmsSceneEnum.MEMBER_UPDATE_MOBILE.getScene()).setUsedIp(getClientIP())); + .setScene(SmsSceneEnum.MEMBER_UPDATE_MOBILE.getScene()).setUsedIp(getClientIP())).checkError(); // 3. 更新用户手机 memberUserMapper.updateById(MemberUserDO.builder().id(userId).mobile(reqVO.getMobile()).build()); @@ -178,7 +178,7 @@ public class MemberUserServiceImpl implements MemberUserService { public void updateUserMobileByWeixin(Long userId, AppMemberUserUpdateMobileByWeixinReqVO reqVO) { // 1.1 获得对应的手机号信息 SocialWxPhoneNumberInfoRespDTO phoneNumberInfo = socialClientApi.getWxMaPhoneNumberInfo( - UserTypeEnum.MEMBER.getValue(), reqVO.getCode()); + UserTypeEnum.MEMBER.getValue(), reqVO.getCode()).getCheckedData(); Assert.notNull(phoneNumberInfo, "获得手机信息失败,结果为空"); // 1.2 校验新手机是否已经被绑定 validateMobileUnique(userId, phoneNumberInfo.getPhoneNumber()); @@ -193,7 +193,7 @@ public class MemberUserServiceImpl implements MemberUserService { MemberUserDO user = validateUserExists(userId); // 校验验证码 smsCodeApi.useSmsCode(new SmsCodeUseReqDTO().setMobile(user.getMobile()).setCode(reqVO.getCode()) - .setScene(SmsSceneEnum.MEMBER_UPDATE_PASSWORD.getScene()).setUsedIp(getClientIP())); + .setScene(SmsSceneEnum.MEMBER_UPDATE_PASSWORD.getScene()).setUsedIp(getClientIP())).checkError(); // 更新用户密码 memberUserMapper.updateById(MemberUserDO.builder().id(userId) @@ -207,7 +207,7 @@ public class MemberUserServiceImpl implements MemberUserService { // 使用验证码 smsCodeApi.useSmsCode(AuthConvert.INSTANCE.convert(reqVO, SmsSceneEnum.MEMBER_RESET_PASSWORD, - getClientIP())); + getClientIP())).checkError(); // 更新密码 memberUserMapper.updateById(MemberUserDO.builder().id(user.getId()) diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/permission/RoleApi.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/permission/RoleApi.java index 33c6fa23e..13fe5420b 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/permission/RoleApi.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/permission/RoleApi.java @@ -1,6 +1,8 @@ package cn.iocoder.yudao.module.system.api.permission; import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; +import cn.iocoder.yudao.module.system.api.permission.dto.RoleRespDTO; import cn.iocoder.yudao.module.system.enums.ApiConstants; import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.Parameter; @@ -10,6 +12,8 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import java.util.Collection; +import java.util.List; +import java.util.Map; @FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory = @Tag(name = "RPC 服务 - 角色") @@ -22,4 +26,18 @@ public interface RoleApi { @Parameter(name = "ids", description = "角色编号数组", example = "1,2", required = true) CommonResult validRoleList(@RequestParam("ids") Collection ids); -} \ No newline at end of file + @GetMapping(PREFIX + "/get") + @Operation(summary = "获得角色") + @Parameter(name = "id", description = "角色编号", example = "1", required = true) + CommonResult getRole(@RequestParam("id") Long id); + + @GetMapping(PREFIX + "/list") + @Operation(summary = "获得角色列表") + @Parameter(name = "ids", description = "角色编号数组", example = "1,2", required = true) + CommonResult> getRoleList(@RequestParam("ids") Collection ids); + + default Map getRoleMap(Collection ids) { + return CollectionUtils.convertMap(getRoleList(ids).getCheckedData(), RoleRespDTO::getId); + } + +} diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/permission/dto/RoleRespDTO.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/permission/dto/RoleRespDTO.java new file mode 100644 index 000000000..e119e3f81 --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/permission/dto/RoleRespDTO.java @@ -0,0 +1,37 @@ +package cn.iocoder.yudao.module.system.api.permission.dto; + +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import lombok.Data; + +/** + * 角色 Response DTO + * + * @author 芋道源码 + */ +@Data +public class RoleRespDTO { + + /** + * 角色编号 + */ + private Long id; + /** + * 角色名称 + */ + private String name; + /** + * 角色编码 + */ + private String code; + /** + * 显示顺序 + */ + private Integer sort; + /** + * 角色状态 + * + * 枚举 {@link CommonStatusEnum} + */ + private Integer status; + +} diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/api/permission/RoleApiImpl.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/api/permission/RoleApiImpl.java index f7f5dd983..6a809ae5f 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/api/permission/RoleApiImpl.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/api/permission/RoleApiImpl.java @@ -1,12 +1,16 @@ package cn.iocoder.yudao.module.system.api.permission; import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.system.api.permission.dto.RoleRespDTO; +import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO; import cn.iocoder.yudao.module.system.service.permission.RoleService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RestController; import jakarta.annotation.Resource; import java.util.Collection; +import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -22,4 +26,17 @@ public class RoleApiImpl implements RoleApi { roleService.validateRoleList(ids); return success(true); } + + @Override + public CommonResult getRole(Long id) { + RoleDO role = roleService.getRole(id); + return success(BeanUtils.toBean(role, RoleRespDTO.class)); + } + + @Override + public CommonResult> getRoleList(Collection ids) { + List list = roleService.getRoleList(ids); + return success(BeanUtils.toBean(list, RoleRespDTO.class)); + } + } From 1bc987805aad9d39b4bc5945d391c0ac9bf3765b Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 31 May 2026 21:30:20 +0800 Subject: [PATCH 2/2] =?UTF-8?q?(=E3=80=83'=E2=96=BD'=E3=80=83)=5Fv2026=5F0?= =?UTF-8?q?4=5F=E5=8F=91=E5=B8=83=EF=BC=9A=E6=96=B0=E5=A2=9E=20WMS=20?= =?UTF-8?q?=E4=BB=93=E5=82=A8=E7=AE=A1=E7=90=86=E7=B3=BB=E7=BB=9F=EF=BC=8C?= =?UTF-8?q?=E5=AE=8C=E6=88=90=20Vben5=20IoT/MES/WMS=20=E5=8F=8C=E7=AB=AF?= =?UTF-8?q?=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- yudao-dependencies/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 84abf6468..ffcb6a9f0 100644 --- a/pom.xml +++ b/pom.xml @@ -35,7 +35,7 @@ https://github.com/YunaiV/ruoyi-vue-pro - 2026.04-SNAPSHOT + 2026.05-SNAPSHOT 17 ${java.version} diff --git a/yudao-dependencies/pom.xml b/yudao-dependencies/pom.xml index 45296500b..b24ce3fe8 100644 --- a/yudao-dependencies/pom.xml +++ b/yudao-dependencies/pom.xml @@ -14,7 +14,7 @@ https://github.com/YunaiV/ruoyi-vue-pro - 2026.04-SNAPSHOT + 2026.05-SNAPSHOT 1.7.2 3.5.14