# agent-ai **Repository Path**: fzl/agent-ai ## Basic Information - **Project Name**: agent-ai - **Description**: No description available - **Primary Language**: Unknown - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-03-15 - **Last Updated**: 2025-03-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 项目 ## 项目说明 - agentai-boot3 是采用SpringBoot3.2、SpringSecurity6.2、Mybatis-Plus、Vue3、Element-plus等技术开发的低代码开发平台,旨在为开发者提供一个简洁、高效、可扩展的低代码开发平台。 - 使用门槛极低,支持国密加密、达梦数据库等,符合信创需求的低代码开发平台。 - 采用组件模式,扩展不同的业务功能,可以很方便的实现各种业务需求,且不会导致系统臃肿,若想使用某个组件,按需引入即可,反之亦然。 - 支持多种数据库,包括MySQL、PostgreSQL、达梦等,可灵活切换。 - 支持多租户模式,可实现不同业务系统之间的隔离,能同时支持字段隔离、数据源隔离方式,满足对多租户的全部需求。 ## 项目结构 ``` 项目结构 ├─agent-ai(父POM: 项目依赖、modules组织) │ ├─agent-boot3-api 接口工具,方便引入其他模块调用 │ ├─agent-boot3-core(通用模块: 工具类、config、权限、查询过滤器、注解等) │ ├─agent-boot-module 组件模式(下面各种组件,系统需要哪个的话引入即可) │ ├─agent-module-service 系统业务和启动等目录 │ │ ├─agent-boot3-system System系统管理权限等功能 ├─agent-boot3-buiness --业务模块 ├─模块名称(自己模块名字) ├─controller ├─entity ├─mapper (xml放在resources下面) ├─convert ├─esmapper 有es的话需要固定该目录 ├─service ├─impl(实现类) ├─vo(返回前端类) ├─query(前端传参类) ├─agent-boot3-server --单体启动项目 ``` ## 注意事项 - 业务系统的controller地址前缀需要加上 Constant.BUINESS_URL - websocket前端进行连接的时候需要在header中加上WebSocket-client-id ,即客户端唯一编码, 需要前端自己生成,每一个打开的新界面需要连接websocket都需要有,这个参数如果需要token验证的时候非必须,如果不需要token验证则必填 - websocket的token在header中加Sec-WebSocket-Protocol - websocket的心跳消息前端发送消息体为ping ### 接口方法重复提交使用说明 @RequestLimit @RequestLimit(maxCount = 1, second = 3) maxCount 最多访问次数,second 秒数内 ### redission分布式锁使用说明 - 使用注解方式,在需要加锁的方法体上面使用注解 keys:就是锁的名字,可以是动态的如下所示,或者是固定的 例如:keys = {"#testLock"} expire:锁的过期时间,即:加锁后多久自动解锁(单位 毫秒),默认时间30秒 acquireTimeout:加锁的超时时间,即等待多久后自动放弃直接返回加锁失败错误(单位 毫秒),默认时间3秒 //完全配置,支持spel @Lock4j(keys = {"#user.id"}, expire = 60000, acquireTimeout = 1000) public User customMethod(User user) { return user; } - 使用代码体的方式 @Autowired private LockTemplate lockTemplate; public void programmaticLock(String userId) { // 各种查询操作 不上锁 // ... // 获取锁 final LockInfo lockInfo = lockTemplate.lock(keyName, 30000L, 5000L, RedissonLockExecutor.class); if (null == lockInfo) { throw new RuntimeException("业务处理中,请稍后再试"); } // 获取锁成功,处理业务 try { System.out.println("执行简单方法1 , 当前线程:" + Thread.currentThread().getName() + " , counter:" + (counter++)); } finally { //释放锁 lockTemplate.releaseLock(lockInfo); } //结束 } - 指定时间内不释放锁(限流) autoRelease:业务方法执行完后(方法内抛异常也算执行完)自动释放锁,如果为false,锁将不会自动释放直至到达过期时间才释放 @Service public class DemoService { // 用户在5秒内只能访问1次 @Lock4j(keys = {"#user.id"}, acquireTimeout = 0, expire = 5000, autoRelease = false) public Boolean test(User user) { return "true"; } }