diff --git a/bi-ui/index.html b/bi-ui/index.html index de91502..eb0d613 100644 --- a/bi-ui/index.html +++ b/bi-ui/index.html @@ -1,5 +1,5 @@ - + diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DynConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DynConfig.java new file mode 100644 index 0000000..4912cec --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DynConfig.java @@ -0,0 +1,17 @@ +package com.ruoyi.common.annotation; + +import org.springframework.stereotype.Component; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 动态配置 + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +@Component +public @interface DynConfig { +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/event/DynConfigEvent.java b/ruoyi-common/src/main/java/com/ruoyi/common/event/DynConfigEvent.java new file mode 100644 index 0000000..54264db --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/event/DynConfigEvent.java @@ -0,0 +1,13 @@ +package com.ruoyi.common.event; + +import org.springframework.context.ApplicationEvent; + +/** + * 动态配置发生改变事件 + */ +public class DynConfigEvent extends ApplicationEvent { + public DynConfigEvent(Object source) { + super(source); + } + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/runner/DynConfigAspect.java b/ruoyi-common/src/main/java/com/ruoyi/common/runner/DynConfigAspect.java new file mode 100644 index 0000000..45b32e8 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/runner/DynConfigAspect.java @@ -0,0 +1,18 @@ +package com.ruoyi.common.runner; + +import com.ruoyi.common.utils.JsonUtils; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.springframework.aop.framework.Advised; +import org.springframework.context.annotation.DependsOn; +import org.springframework.stereotype.Component; + +@Aspect +@Component +@Slf4j +@DependsOn("dynConfigProcessor") +public class DynConfigAspect { + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/runner/DynConfigProcessor.java b/ruoyi-common/src/main/java/com/ruoyi/common/runner/DynConfigProcessor.java new file mode 100644 index 0000000..ec9bd34 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/runner/DynConfigProcessor.java @@ -0,0 +1,98 @@ +package com.ruoyi.common.runner; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; +import cn.hutool.core.collection.ConcurrentHashSet; +import cn.hutool.crypto.digest.MD5; +import com.ruoyi.common.annotation.DynConfig; +import com.ruoyi.common.event.DynConfigEvent; +import com.ruoyi.common.utils.JsonUtils; +import com.ruoyi.common.utils.spring.SpringUtils; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.springframework.aop.framework.Advised; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.context.annotation.Configuration; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.support.rowset.SqlRowSet; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.TransactionDefinition; +import org.springframework.transaction.TransactionStatus; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.support.DefaultTransactionDefinition; + +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; + + +@Aspect +@Configuration +@RequiredArgsConstructor +@Slf4j +public class DynConfigProcessor implements BeanPostProcessor { + + private final JdbcTemplate jdbc; + + private final PlatformTransactionManager transactionManager; + private final MD5 md5 = MD5.create(); + + private final Map dynConfigMap = new ConcurrentHashMap<>(); + + private final Map saveBeans = new ConcurrentHashMap<>(); + + + @Override + @SneakyThrows + public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { + if (bean instanceof Advised) { + Class cls = ((Advised) bean).getTargetClass(); + Object target = ((Advised) bean).getTargetSource().getTarget(); + beanName = cls.getName(); + if (cls.isAnnotationPresent(DynConfig.class)) { + log.info("动态配置类:{}-{}", beanName, cls.getName()); + SqlRowSet rs = jdbc.queryForRowSet("select * from sys_dyn_config where config_key = ?", beanName); + if (rs.next()) { + Object old = JsonUtils.parseObject(rs.getString("config_value"), bean.getClass()); + BeanUtil.copyProperties(old, target, CopyOptions.create(cls, false)); + } else { + jdbc.update("insert into sys_dyn_config (config_key,config_value) values (?,?)", beanName, JsonUtils.toJsonString(target)); + } + dynConfigMap.put(beanName, md5.digestHex(JsonUtils.toJsonString(target))); + } + } + return bean; + } + + @After("@within(com.ruoyi.common.annotation.DynConfig) && (execution(* *..set*(..)) || execution(* *..add*(..)) || execution(* *..remove*(..)) || execution(* *..put*(..)) || execution(* *..save()))") + public void afterSetter(JoinPoint jp) { + String hash = md5.digestHex(JsonUtils.toJsonString(jp.getTarget())); + String name = jp.getTarget().getClass().getName(); + if (hash.equals(dynConfigMap.get(name))) { + return; + } + dynConfigMap.put(name, hash); + saveBeans.put(name, jp.getTarget()); + if (log.isDebugEnabled()) { + log.debug("动态配置发生了变化:{} {}", name, JsonUtils.toJsonString(jp.getTarget())); + } + SpringUtils.publishEvent(new DynConfigEvent(jp.getTarget())); + } + + @Scheduled(fixedRate = 1000) + public void save() { + for (String key : saveBeans.keySet()) { + jdbc.update("update sys_dyn_config set config_value=? where config_key=?", JsonUtils.toJsonString(saveBeans.get(key)), key); + if (log.isDebugEnabled()) { + log.debug("定时保存动态配置:{} {}", key, JsonUtils.toJsonString(saveBeans.get(key))); + } + } + saveBeans.clear(); + } +} diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/DynConfigApi.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/DynConfigApi.java new file mode 100644 index 0000000..446984b --- /dev/null +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/DynConfigApi.java @@ -0,0 +1,34 @@ +package com.ruoyi.demo.controller; + + +import cn.dev33.satoken.annotation.SaIgnore; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; +import com.ruoyi.common.annotation.Dev; +import com.ruoyi.demo.dynconfig.TestDynConfig; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +@RestController +@SaIgnore +@Dev +@RequiredArgsConstructor +@RequestMapping("/demo/dynconfig") +public class DynConfigApi { + + private final TestDynConfig config; + + @GetMapping + public Object get(){ +// return config; //java中可以直接使用,但是不能JSON序列号,因为他是经过aop代理后的bean + return BeanUtil.toBean(config, TestDynConfig.class); + } + + + @PostMapping + public void set(@RequestBody TestDynConfig config){ +// this.config=config;//不能直接赋值 + BeanUtil.copyProperties(config,this.config, CopyOptions.create(TestDynConfig.class,true));//使用属性copy的方法或setter(getter)完成 + this.config.save();//主动异步保存(PS:属性的方法不会触发保存需要主动异步保存),执行set*,put*,add*,remove*方法后会自动异步保存 + } +} diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/dynconfig/TestDynConfig.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/dynconfig/TestDynConfig.java new file mode 100644 index 0000000..db7632a --- /dev/null +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/dynconfig/TestDynConfig.java @@ -0,0 +1,27 @@ +package com.ruoyi.demo.dynconfig; + +import com.ruoyi.common.annotation.DynConfig; +import lombok.Data; + +import java.util.List; + +@Data +@DynConfig +public class TestDynConfig { + + /** + * 配置项编码 + */ + private String code; + + private List list; + + /** + * 配置项值 + */ + private String value; + + public void save() { + } + +} diff --git a/ruoyi.sql b/ruoyi.sql index cea197e..df4cd98 100644 --- a/ruoyi.sql +++ b/ruoyi.sql @@ -11,7 +11,7 @@ Target Server Version : 100617 File Encoding : 65001 - Date: 24/10/2024 17:46:10 + Date: 11/02/2025 08:51:59 */ SET NAMES utf8mb4; @@ -165,6 +165,21 @@ INSERT INTO `sys_dict_type` VALUES (9, '操作类型', 'sys_oper_type', '0', 'ad INSERT INTO `sys_dict_type` VALUES (10, '系统状态', 'sys_common_status', '0', 'admin', '2023-08-16 10:35:07', '', NULL, '登录状态列表'); INSERT INTO `sys_dict_type` VALUES (11, '链接类型', 'sys_links_types', '0', 'admin', '2023-11-06 10:50:15', 'admin', '2024-03-07 10:12:12', '链接类型列表'); +-- ---------------------------- +-- Table structure for sys_dyn_config +-- ---------------------------- +DROP TABLE IF EXISTS `sys_dyn_config`; +CREATE TABLE `sys_dyn_config` ( + `config_key` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '配置关键字', + `config_value` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '配置内容', + PRIMARY KEY (`config_key`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统配置' ROW_FORMAT = Compact; + +-- ---------------------------- +-- Records of sys_dyn_config +-- ---------------------------- +INSERT INTO `sys_dyn_config` VALUES ('com.ruoyi.demo.dynconfig.TestDynConfig', '{\"code\":\"a\",\"value\":\"aaaaaaaaaaaaa1\"}'); + -- ---------------------------- -- Table structure for sys_links -- ---------------------------- @@ -217,6 +232,60 @@ INSERT INTO `sys_logininfor` VALUES (20241023000000001, 'admin', '127.0.0.1', ' INSERT INTO `sys_logininfor` VALUES (20241023000000002, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2024-10-23 15:11:46'); INSERT INTO `sys_logininfor` VALUES (20241024000000001, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2024-10-24 08:49:02'); INSERT INTO `sys_logininfor` VALUES (20241024000000002, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2024-10-24 14:27:40'); +INSERT INTO `sys_logininfor` VALUES (20241025000000001, 'admin', '192.168.3.122', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2024-10-25 15:37:21'); +INSERT INTO `sys_logininfor` VALUES (20241025000000002, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2024-10-25 15:48:07'); +INSERT INTO `sys_logininfor` VALUES (20241025000000003, 'admin', '192.168.3.122', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2024-10-25 16:34:23'); +INSERT INTO `sys_logininfor` VALUES (20241025000000004, 'admin', '192.168.3.122', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2024-10-25 19:52:53'); +INSERT INTO `sys_logininfor` VALUES (20241028000000001, 'admin', '127.0.0.1', '内网IP', 'Chrome', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2024-10-28 15:34:09'); +INSERT INTO `sys_logininfor` VALUES (20241028000000002, 'admin', '127.0.0.1', '内网IP', 'Chrome', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2024-10-28 17:37:53'); +INSERT INTO `sys_logininfor` VALUES (20241029000000001, 'admin', '192.168.3.122', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2024-10-29 16:08:00'); +INSERT INTO `sys_logininfor` VALUES (20241030000000001, 'admin', '192.168.3.122', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2024-10-30 09:07:18'); +INSERT INTO `sys_logininfor` VALUES (20241031000000001, 'admin', '192.168.3.193', '内网IP', 'Chrome', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2024-10-31 09:39:28'); +INSERT INTO `sys_logininfor` VALUES (20241101000000001, 'admin', '192.168.3.193', '内网IP', 'Chrome', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2024-11-01 09:39:09'); +INSERT INTO `sys_logininfor` VALUES (20241101000000002, 'admin', '192.168.3.193', '内网IP', 'Chrome', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2024-11-01 11:06:41'); +INSERT INTO `sys_logininfor` VALUES (20241101000000003, 'admin', '192.168.3.193', '内网IP', 'Chrome', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2024-11-01 14:05:26'); +INSERT INTO `sys_logininfor` VALUES (20241101000000004, 'admin', '192.168.3.193', '内网IP', 'Chrome', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2024-11-01 17:17:05'); +INSERT INTO `sys_logininfor` VALUES (20241101000000005, 'admin', '192.168.3.193', '内网IP', 'Chrome', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2024-11-01 17:17:09'); +INSERT INTO `sys_logininfor` VALUES (20241104000000001, 'admin', '192.168.3.193', '内网IP', 'Chrome', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2024-11-04 11:04:25'); +INSERT INTO `sys_logininfor` VALUES (20241107000000001, 'admin', '127.0.0.1', '内网IP', 'Chrome', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2024-11-07 10:49:21'); +INSERT INTO `sys_logininfor` VALUES (20241107000000002, 'admin', '127.0.0.1', '内网IP', 'Chrome', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2024-11-07 14:32:59'); +INSERT INTO `sys_logininfor` VALUES (20241108000000001, 'admin', '127.0.0.1', '内网IP', 'Chrome', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2024-11-08 09:52:45'); +INSERT INTO `sys_logininfor` VALUES (20241113000000001, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '1', '密码错误1次', '2024-11-13 15:49:44'); +INSERT INTO `sys_logininfor` VALUES (20241113000000002, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2024-11-13 15:49:50'); +INSERT INTO `sys_logininfor` VALUES (20241115000000001, 'admin', '192.168.3.147', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2024-11-15 14:59:41'); +INSERT INTO `sys_logininfor` VALUES (20241115000000002, 'admin', '192.168.3.193', '内网IP', 'Chrome', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2024-11-15 16:24:07'); +INSERT INTO `sys_logininfor` VALUES (20241115000000003, 'admin', '127.0.0.1', '内网IP', 'Chrome', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2024-11-15 16:44:39'); +INSERT INTO `sys_logininfor` VALUES (20241115000000004, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2024-11-15 17:24:56'); +INSERT INTO `sys_logininfor` VALUES (20250107000000001, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2025-01-07 10:34:45'); +INSERT INTO `sys_logininfor` VALUES (20250107000000002, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2025-01-07 13:59:47'); +INSERT INTO `sys_logininfor` VALUES (20250107000000003, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2025-01-07 14:03:18'); +INSERT INTO `sys_logininfor` VALUES (20250107000000004, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '退出成功', '2025-01-07 14:15:44'); +INSERT INTO `sys_logininfor` VALUES (20250107000000005, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2025-01-07 14:26:34'); +INSERT INTO `sys_logininfor` VALUES (20250107000000006, 'admin', '127.0.0.1', '内网IP', 'Unknown', 'Unknown', '0', '登录成功', '2025-01-07 16:14:45'); +INSERT INTO `sys_logininfor` VALUES (20250108000000001, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2025-01-08 09:08:34'); +INSERT INTO `sys_logininfor` VALUES (20250108000000002, 'admin', '127.0.0.1', '内网IP', 'Unknown', 'Unknown', '0', '登录成功', '2025-01-08 10:56:08'); +INSERT INTO `sys_logininfor` VALUES (20250109000000003, 'admin', '127.0.0.1', '内网IP', 'Unknown', 'Unknown', '0', '登录成功', '2025-01-09 09:05:20'); +INSERT INTO `sys_logininfor` VALUES (20250109000000004, 'admin', '127.0.0.1', '内网IP', 'MicroMessenger', 'iPhone', '0', '登录成功', '2025-01-09 09:31:32'); +INSERT INTO `sys_logininfor` VALUES (20250109000000005, 'admin', '127.0.0.1', '内网IP', 'MicroMessenger', 'iPhone', '0', '登录成功', '2025-01-09 09:50:29'); +INSERT INTO `sys_logininfor` VALUES (20250109000000006, 'admin', '127.0.0.1', '内网IP', 'MicroMessenger', 'iPhone', '0', '登录成功', '2025-01-09 11:36:32'); +INSERT INTO `sys_logininfor` VALUES (20250109000000007, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'iPhone', '0', '登录成功', '2025-01-09 14:45:53'); +INSERT INTO `sys_logininfor` VALUES (20250109000000008, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'iPhone', '0', '登录成功', '2025-01-09 14:52:49'); +INSERT INTO `sys_logininfor` VALUES (20250109000000009, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2025-01-09 15:59:44'); +INSERT INTO `sys_logininfor` VALUES (20250122000000010, 'admin', '127.0.0.1', '内网IP', 'Chrome', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2025-01-22 15:40:11'); +INSERT INTO `sys_logininfor` VALUES (20250123000000011, 'admin', '127.0.0.1', '内网IP', 'Chrome', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2025-01-23 09:23:36'); +INSERT INTO `sys_logininfor` VALUES (20250208000000012, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2025-02-08 14:25:03'); +INSERT INTO `sys_logininfor` VALUES (20250208000000013, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2025-02-08 14:41:24'); +INSERT INTO `sys_logininfor` VALUES (20250208000000014, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2025-02-08 14:42:14'); +INSERT INTO `sys_logininfor` VALUES (20250208000000015, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2025-02-08 14:42:30'); +INSERT INTO `sys_logininfor` VALUES (20250208000000016, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2025-02-08 15:09:30'); +INSERT INTO `sys_logininfor` VALUES (20250208000000017, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2025-02-08 15:16:20'); +INSERT INTO `sys_logininfor` VALUES (20250208000000018, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2025-02-08 15:28:43'); +INSERT INTO `sys_logininfor` VALUES (20250208000000019, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2025-02-08 15:32:53'); +INSERT INTO `sys_logininfor` VALUES (20250208000000020, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2025-02-08 15:43:16'); +INSERT INTO `sys_logininfor` VALUES (20250208000000021, 'admin', '127.0.0.1', '内网IP', 'Chrome', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2025-02-08 17:57:49'); +INSERT INTO `sys_logininfor` VALUES (20250210000000022, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2025-02-10 08:42:28'); +INSERT INTO `sys_logininfor` VALUES (20250210000000023, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2025-02-10 08:42:29'); +INSERT INTO `sys_logininfor` VALUES (20250210000000024, 'admin', '127.0.0.1', '内网IP', 'MSEdge', 'Windows 10 or Windows Server 2016', '0', '登录成功', '2025-02-10 11:31:58'); -- ---------------------------- -- Table structure for sys_menu @@ -437,6 +506,15 @@ INSERT INTO `sys_oper_log` VALUES (20241011000000018, '测试单表', 1, 'com.ru INSERT INTO `sys_oper_log` VALUES (20241011000000019, '测试单表', 2, 'com.ruoyi.demo.controller.TestDemoController.edit()', 'PUT', 1, 'admin', '', '/demo/demo', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2023-08-16 10:35:31\",\"id\":1,\"deptId\":102,\"userId\":4,\"orderNum\":1,\"testKey\":\"测试数据权限\",\"value\":\"测试\"}', '{\"code\":200,\"msg\":\"操作成功\"}', 0, '', '2024-10-11 17:50:05'); INSERT INTO `sys_oper_log` VALUES (20241014000000020, '定时任务', 1, 'com.ruoyi.cron.api.CronTaskApi.add()', 'POST', 1, 'admin', '', '/system/cron/', '127.0.0.1', '内网IP', '{\"id\":202410140000001,\"taskId\":\"5553036b32681350546531d871d5edc9\",\"groupId\":0,\"enabled\":true,\"createTime\":\"2024-10-14 09:04\",\"paramELs\":[],\"userId\":1}', '', 0, '', '2024-10-14 09:04:34'); INSERT INTO `sys_oper_log` VALUES (20241022000000021, '菜单管理', 1, 'com.ruoyi.web.controller.system.SysMenuController.add()', 'POST', 1, 'admin', '', '/system/menu', '127.0.0.1', '内网IP', '{\"createBy\":\"admin\",\"createTime\":\"2024-10-22 11:01:10\",\"updateBy\":\"admin\",\"updateTime\":\"2024-10-22 11:01:10\",\"parentId\":5,\"children\":[],\"menuId\":\"20241022000000001\",\"menuName\":\"文件图片上传\",\"orderNum\":99,\"path\":\"file\",\"component\":\"demo/file/index\",\"isFrame\":\"1\",\"isCache\":\"1\",\"menuType\":\"C\",\"visible\":\"0\",\"status\":\"0\",\"perms\":\"demo:file:index\",\"icon\":\"upload\"}', '{\"code\":200,\"msg\":\"操作成功\"}', 0, '', '2024-10-22 11:01:10'); +INSERT INTO `sys_oper_log` VALUES (20250107000000022, '定时任务', 1, 'com.ruoyi.cron.api.CronTaskApi.add()', 'POST', 1, 'admin', '', '/system/cron/', '127.0.0.1', '内网IP', '{\"id\":202501070000002,\"groupId\":0,\"enabled\":true,\"createTime\":\"2025-01-07 16:41\",\"paramELs\":[],\"userId\":1}', '', 0, '', '2025-01-07 16:41:13'); +INSERT INTO `sys_oper_log` VALUES (20250107000000023, '定时任务', 3, 'com.ruoyi.cron.api.CronTaskApi.remove()', 'DELETE', 1, 'admin', '', '/system/cron/202501070000002', '127.0.0.1', '内网IP', '{}', '', 0, '', '2025-01-07 16:41:19'); +INSERT INTO `sys_oper_log` VALUES (20250108000000024, '定时任务', 1, 'com.ruoyi.cron.api.CronTaskApi.add()', 'POST', 1, 'admin', '', '/system/cron/', '127.0.0.1', '内网IP', '{\"id\":202501080000003,\"groupId\":0,\"enabled\":true,\"createTime\":\"2025-01-08 09:12\",\"paramELs\":[],\"userId\":1}', '', 0, '', '2025-01-08 09:12:12'); +INSERT INTO `sys_oper_log` VALUES (20250108000000025, '定时任务', 3, 'com.ruoyi.cron.api.CronTaskApi.remove()', 'DELETE', 1, 'admin', '', '/system/cron/202501080000003', '127.0.0.1', '内网IP', '{}', '', 0, '', '2025-01-08 09:12:15'); +INSERT INTO `sys_oper_log` VALUES (20250108000000026, '定时任务', 1, 'com.ruoyi.cron.api.CronTaskApi.add()', 'POST', 1, 'admin', '', '/system/cron/', '127.0.0.1', '内网IP', '{\"id\":202501080000004,\"taskId\":\"031b690bda610eb6b0baf12f10c82406\",\"groupId\":0,\"enabled\":true,\"createTime\":\"2025-01-08 14:51\",\"paramELs\":[\"0\",\"null\",\"null\"],\"userId\":1}', '', 0, '', '2025-01-08 14:51:39'); +INSERT INTO `sys_oper_log` VALUES (20250108000000027, '定时任务', 1, 'com.ruoyi.cron.api.CronTaskApi.add()', 'POST', 1, 'admin', '', '/system/cron/', '127.0.0.1', '内网IP', '{\"id\":202501080000005,\"taskId\":\"031b690bda610eb6b0baf12f10c82406\",\"groupId\":0,\"enabled\":true,\"createTime\":\"2025-01-08 15:00\",\"paramELs\":[],\"userId\":1,\"cron\":\"\"}', '', 0, '', '2025-01-08 15:00:13'); +INSERT INTO `sys_oper_log` VALUES (20250108000000028, '定时任务', 3, 'com.ruoyi.cron.api.CronTaskApi.remove()', 'DELETE', 1, 'admin', '', '/system/cron/202501080000005', '127.0.0.1', '内网IP', '{}', '', 0, '', '2025-01-08 15:00:20'); +INSERT INTO `sys_oper_log` VALUES (20250108000000029, '定时任务', 3, 'com.ruoyi.cron.api.CronTaskApi.remove()', 'DELETE', 1, 'admin', '', '/system/cron/202501080000004', '127.0.0.1', '内网IP', '{}', '', 0, '', '2025-01-08 15:00:35'); +INSERT INTO `sys_oper_log` VALUES (20250108000000030, '定时任务', 1, 'com.ruoyi.cron.api.CronTaskApi.add()', 'POST', 1, 'admin', '', '/system/cron/', '127.0.0.1', '内网IP', '{\"id\":202501080000006,\"taskId\":\"031b690bda610eb6b0baf12f10c82406\",\"groupId\":0,\"enabled\":true,\"createTime\":\"2025-01-08 15:02\",\"paramELs\":[\"7\",\"null\",\"null\"],\"userId\":1}', '', 0, '', '2025-01-08 15:02:25'); -- ---------------------------- -- Table structure for sys_post @@ -631,7 +709,7 @@ CREATE TABLE `sys_user` ( -- ---------------------------- -- Records of sys_user -- ---------------------------- -INSERT INTO `sys_user` VALUES (1, 100, NULL, 'admin', '超级管理员', 'sys_user', 'admin@evolvecloud.cn', '13888888888', '1', '', '$2a$10$.ja7BDq5b8jxd6snbRvz8eAmg0loaDb05LR6SpR2F42huJb7GaOD6', '0', '0', '127.0.0.1', '2024-10-24 14:27:40', 'admin', '2024-01-03 10:35:07', 'admin', '2024-10-24 14:27:40', '管理员'); +INSERT INTO `sys_user` VALUES (1, 100, NULL, 'admin', '超级管理员', 'sys_user', 'admin@evolvecloud.cn', '13888888888', '1', '', '$2a$10$.ja7BDq5b8jxd6snbRvz8eAmg0loaDb05LR6SpR2F42huJb7GaOD6', '0', '0', '127.0.0.1', '2025-02-10 11:31:58', 'admin', '2024-01-03 10:35:07', 'admin', '2025-02-10 11:31:58', '管理员'); -- ---------------------------- -- Table structure for sys_user_post