Compare commits

...

9 Commits

Author SHA1 Message Date
HuangLei 21aca2f55d feat(system): 递归获取当前登录用户的所有子部门
- 修改了 getDeptList 方法,增加了对
2025-06-19 10:51:51 +08:00
HuangLei e15cf54d6a refactor(system): 重构角色管理查询功能
- 移除了不必要的导入和代码
- 使用 LambdaQuery
2025-06-19 09:59:51 +08:00
HuangLei f3988af15d feat(system): 增加角色页面的复杂查询功能
- 添加了对角色名称、代码、状态的模糊查询
- 实现了创建时间区间的查询
-增加了对非超级管理员的权限控制,只能查看自己的角色
- 优化了查询效率,
2025-06-18 18:23:25 +08:00
HuangLei 7633bc5d5e refactor(mq): 移除 RocketMQ 消费者和生产者示例代码
- 删除了 yudao-spring-boot-starter-mq 模块中的 Consumer 和 Product 类
- 在 yudao-server 模块中添加了 yudao-spring-boot-starter-mq 依赖
- 更新了 YudaoServerApplication 类,扫描 framework 包
- 在 pom.xml 中添加了 maven-compiler-plugin配置,支持 Java 17
2025-06-18 15:38:09 +08:00
HuangLei 120d592688 Merge remote-tracking branch 'origin/master' 2025-06-18 15:04:07 +08:00
HuangLei 19889c1f89 feat(mq): 添加 RocketMQ相关的常量接口
- 新增 GroupConstants 接口,定义了多个消费者组常量- 新增 TopicNameConstants 接口,定义了多个主题名常量
- 新增 TopicTagConstants 接口,定义了多个主题标签常量
2025-06-18 15:03:59 +08:00
HuangLei d8b10d161e feat(mq): 添加 RocketMQ相关的常量接口
- 新增 GroupConstants 接口,定义了多个消费者组常量- 新增 TopicNameConstants 接口,定义了多个主题名常量
- 新增 TopicTagConstants 接口,定义了多个主题标签常量
2025-06-18 14:55:10 +08:00
HuangLei a81da88bc4 config(redis): 更新 Redis 配置
- 修改了 Redis 服务器地址和端口
- 添加了 Redis 密码配置
-增加了连接超时时间和 SSL 配置选项
2025-06-18 14:49:11 +08:00
HuangLei 2b74e4ac50 build: 更新 RocketMQ 配置并调整依赖项
- 在 application-dev.yaml 和 application-local.yaml 文件中更新 RocketMQ 名称服务器地址为 192.168.201.58:9876
- 在 yudao-spring-boot-starter-mq/pom.xml 中取消 rocketmq-spring-boot-starter 依赖项的 optional 标记
2025-06-18 14:34:41 +08:00
11 changed files with 180 additions and 20 deletions

23
pom.xml
View File

@ -15,16 +15,16 @@
<!-- 各种 module 拓展 -->
<module>yudao-module-system</module>
<module>yudao-module-infra</module>
<!-- <module>yudao-module-member</module>-->
<!-- <module>yudao-module-bpm</module>-->
<!-- <module>yudao-module-member</module>-->
<!-- <module>yudao-module-bpm</module>-->
<module>yudao-module-report</module>
<!-- <module>yudao-module-mp</module>-->
<!-- <module>yudao-module-mp</module>-->
<module>yudao-module-pay</module>
<!-- <module>yudao-module-mall</module>-->
<!-- <module>yudao-module-crm</module>-->
<!-- <module>yudao-module-erp</module>-->
<!-- <module>yudao-module-mall</module>-->
<!-- <module>yudao-module-crm</module>-->
<!-- <module>yudao-module-erp</module>-->
<module>yudao-module-ai</module>
<!-- <module>yudao-module-iot</module>-->
<!-- <module>yudao-module-iot</module>-->
</modules>
<name>${project.artifactId}</name>
@ -134,6 +134,15 @@
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>17</source>
<target>17</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>

View File

@ -36,7 +36,7 @@
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<optional>true</optional>
<!--<optional>true</optional>-->
</dependency>
</dependencies>

View File

@ -0,0 +1,28 @@
package cn.iocoder.yudao.framework.mq.rocketmq.core;
/**
* @author bixuan
* @version 1.0
* @description: TODO
* @date 2025/5/4 10:22
*/
public interface GroupConstants {
String BIND_CARD_PACKAGE_GROUP = "bind-card-package-group";
String UNBIND_CARD_PACKAGE_GROUP = "unbind-card-package-group";
String CHANGE_CARD_PACKAGE_GROUP = "change-card-package-group";
String SYNC_BATCH_GROUP = "sync-batch-group";
String SYNC_CARD_PACKAGE_GROUP = "sync-card-package-group";
String SYNC_CARD_PACKAGE_TRAFFIC_GROUP = "sync-card-package-traffic-group";
String SYNC_CARD_POOL_TRAFFIC_GROUP = "sync-card-pool-traffic-group";
String SYNC_POOL_TRAFFIC_GROUP = "sync-pool-traffic-group";
String SYNC_STATISTICS_CARD_POOL_TRAFFIC_GROUP = "sync-statistics-card-pool-traffic-group";
String SYNC_STATISTICS_CARD_PACKAGE_TRAFFIC_GROUP = "sync-statistics-card-package-traffic-group";
String PAY_ORDER_DELAY_CLOSE_GROUP = "pay-order-delay-close-group";
String PAY_ORDER_GENERATE_BILL_GROUP = "pay-order-generate-bill-group";
String REFUND_ORDER_WRITE_OFF_BILL_GROUP = "refund-order-write-off-bill-group";
String SYNC_PACKAGE_TRAFFIC_GROUP = "sync-package-traffic-group";
String PAY_ORDER_REFUND_GROUP = "pay-order-refund-group";
String EIOT_CLUB_NOTIFY_SUBPKGLIST_GROUP = "eiot-club-notify-subPkgList-group";
String EIOT_CLUB_NOTIFY_REFUND_GROUP = "eiot-club-notify-refund-group";
}

View File

@ -0,0 +1,41 @@
package cn.iocoder.yudao.framework.mq.rocketmq.core;
/**
* @program: b2b2c-admin
* @ClassName TopicNameConstants
* @description:
* @author: HuangLei
* @create: 2025/4/28/周一 9:55
* @Version 1.0
**/
public interface TopicNameConstants {
/**
* 运营商主题,相同操作消息可以使用tag区分
*/
String IOT_OPERATOR = "iot-operator";
/**
* 事务主题,相同操作消息可以使用tag区分
*/
String IOT_TRANSACTION = "iot-transaction";
/**
* 延时主题,相同操作消息可以使用tag区分
*/
String IOT_DELAY = "iot-delay";
/**
* 退款主题,相同操作消息可以使用tag区分
*/
String PAY_REFUND_ORDER = "pay-refund-order";
/**
* eiotclub异步通知主题
*/
String EIOT_CLUB_NOTIFY_TOPIC = "eiot-club-notify";
}

View File

@ -0,0 +1,27 @@
package cn.iocoder.yudao.framework.mq.rocketmq.core;
/**
* @description: TODO
* @author bixuan
* @date 2025/5/4 10:22
* @version 1.0
*/
public interface TopicTagConstants {
String BIND_CARD_PACKAGE_TAG = "bind_card_package";
String UNBIND_CARD_PACKAGE_TAG = "unbind_card_package";
String CHANGE_CARD_PACKAGE_TAG = "change_card_package";
String SYNC_BATCH_TAG = "sync_batch";
String SYNC_CARD_PACKAGE_TAG = "sync_card_package";
String SYNC_CARD_PACKAGE_TRAFFIC_TAG = "sync_card_package_traffic";
String SYNC_CARD_POOL_TRAFFIC_TAG = "sync_card_pool_traffic";
String SYNC_POOL_TRAFFIC_TAG = "sync_pool_traffic";
String SYNC_STATISTICS_CARD_POOL_TRAFFIC_TAG = "sync_statistics_card_pool_traffic";
String SYNC_STATISTICS_CARD_PACKAGE_TRAFFIC_TAG = "sync_statistics_card_package_traffic";
String PAY_ORDER_SUCCESS_BILL_TAG = "pay_order_success_bill";
String REFUND_SUCCESS_BILL_TAG = "refund_success_bill";
String DELAY_PAY_ORDER_DELAY_CLOSE = "delay_pay_order_close";
}

View File

@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
import cn.iocoder.yudao.module.system.enums.permission.RoleCodeEnum;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.lang.Nullable;
@ -15,13 +16,17 @@ import java.util.List;
@Mapper
public interface RoleMapper extends BaseMapperX<RoleDO> {
default PageResult<RoleDO> selectPage(RolePageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<RoleDO>()
PageResult<RoleDO> roleDOPageResult = selectPage(reqVO, new LambdaQueryWrapperX<RoleDO>()
.likeIfPresent(RoleDO::getName, reqVO.getName())
.likeIfPresent(RoleDO::getCode, reqVO.getCode())
.eqIfPresent(RoleDO::getStatus, reqVO.getStatus())
.betweenIfPresent(BaseDO::getCreateTime, reqVO.getCreateTime())
.ne(RoleDO::getCode, RoleCodeEnum.SUPER_ADMIN.getCode())
.orderByAsc(RoleDO::getSort));
//过滤掉super_admin及管理员
return roleDOPageResult;
}
default RoleDO selectByName(String name) {
@ -33,7 +38,9 @@ public interface RoleMapper extends BaseMapperX<RoleDO> {
}
default List<RoleDO> selectListByStatus(@Nullable Collection<Integer> statuses) {
return selectList(RoleDO::getStatus, statuses);
return selectList(new LambdaQueryWrapperX<RoleDO>()
.eq(RoleDO::getStatus, statuses)
.ne(RoleDO::getCode, RoleCodeEnum.SUPER_ADMIN.getCode()));
}
}

View File

@ -5,6 +5,8 @@ import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission;
import cn.iocoder.yudao.framework.datapermission.core.util.DataPermissionUtils;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO;
import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
@ -18,6 +20,7 @@ import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import jakarta.annotation.Resource;
import java.util.*;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@ -164,9 +167,39 @@ public class DeptServiceImpl implements DeptService {
@Override
public List<DeptDO> getDeptList(DeptListReqVO reqVO) {
List<DeptDO> list = deptMapper.selectList(reqVO);
list.sort(Comparator.comparing(DeptDO::getSort));
return list;
List<DeptDO> list = DataPermissionUtils.executeIgnore(() -> {
return deptMapper.selectList(reqVO);
});
Long loginUserDeptId = SecurityFrameworkUtils.getLoginUserDeptId();
//从当前登录的部门开始,递归获取子部门
// 从当前登录的部门开始, 递归获取所有子部门
List<DeptDO> allSubDepts = new ArrayList<>();
if (loginUserDeptId != null) {
DeptDO currentDept = deptMapper.selectById(loginUserDeptId);
if (currentDept != null) {
allSubDepts.add(currentDept);
collectAllSubDept(allSubDepts, currentDept.getId(), list);
}
}
// 合并所有子部门到结果列表中
allSubDepts.sort(Comparator.comparing(DeptDO::getSort));
return allSubDepts;
}
/**
* 递归收集所有子部门.
*
* @param allSubDepts 收集所有子部门的列表
* @param parentId 父部门ID
* @param allDepts 所有部门的列表
*/
private void collectAllSubDept(List<DeptDO> allSubDepts, Long parentId, List<DeptDO> allDepts) {
for (DeptDO dept : allDepts) {
if (parentId.equals(dept.getParentId())) {
allSubDepts.add(dept);
collectAllSubDept(allSubDepts, dept.getId(), allDepts); // 递归收集子部门
}
}
}
@Override

View File

@ -108,6 +108,12 @@
<version>${revision}</version>
</dependency>
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-spring-boot-starter-mq</artifactId>
<version>${revision}</version>
</dependency>
<!-- IoT 物联网相关模块。默认注释,保证编译速度 -->
<!-- <dependency>-->
<!-- <groupId>cn.iocoder.boot</groupId>-->

View File

@ -9,11 +9,12 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
* 如果你碰到启动的问题请认真阅读 https://doc.iocoder.cn/quick-start/ 文章
* 如果你碰到启动的问题请认真阅读 https://doc.iocoder.cn/quick-start/ 文章
* 如果你碰到启动的问题请认真阅读 https://doc.iocoder.cn/quick-start/ 文章
*
* cn.iocoder.yudao.server
* @author 芋道源码
*/
@SuppressWarnings("SpringComponentScan") // 忽略 IDEA 无法识别 ${yudao.info.base-package}
@SpringBootApplication(scanBasePackages = {"${yudao.info.base-package}.server", "${yudao.info.base-package}.module"})
@SpringBootApplication(scanBasePackages = {"${yudao.info.base-package}.server", "${yudao.info.base-package}.module",
"${yudao.info.base-package}.framework.*"})
public class YudaoServerApplication {
public static void main(String[] args) {

View File

@ -56,10 +56,14 @@ spring:
# Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
data:
redis:
host: 400-infra.server.iocoder.cn # 地址
port: 6379 # 端口
host: 192.168.201.228 # 地址
port: 31314 # 端口
database: 1 # 数据库索引
# password: 123456 # 密码,建议生产环境开启
password: redis.123456 # 密码,建议生产环境开启
# 连接超时时间
timeout: 10s
# 是否开启ssl
ssl.enabled: false
--- #################### 定时任务相关配置 ####################
@ -96,7 +100,7 @@ spring:
# rocketmq 配置项,对应 RocketMQProperties 配置类
rocketmq:
name-server: 127.0.0.1:9876 # RocketMQ Namesrv
name-server: 192.168.201.58:9876 # RocketMQ Namesrv
spring:
# RabbitMQ 配置项,对应 RabbitProperties 配置类

View File

@ -84,6 +84,10 @@ spring:
port: 31314 # 端口
database: 2 # 数据库索引
password: redis.123456 # 密码,建议生产环境开启
# 连接超时时间
timeout: 10s
# 是否开启ssl
ssl.enabled: false
--- #################### 定时任务相关配置 ####################
@ -120,7 +124,7 @@ spring:
# rocketmq 配置项,对应 RocketMQProperties 配置类
rocketmq:
name-server: 127.0.0.1:9876 # RocketMQ Namesrv
name-server: 192.168.201.58:9876 # RocketMQ Namesrv
spring:
# RabbitMQ 配置项,对应 RabbitProperties 配置类