add 新增 ruoyi-demo 演示模块 用于编写一些测试及演示案例
parent
553d82ce0e
commit
e46d286270
1
pom.xml
1
pom.xml
|
|
@ -281,6 +281,7 @@
|
||||||
<module>ruoyi-modules</module>
|
<module>ruoyi-modules</module>
|
||||||
<module>ruoyi-api</module>
|
<module>ruoyi-api</module>
|
||||||
<module>ruoyi-common</module>
|
<module>ruoyi-common</module>
|
||||||
|
<module>ruoyi-example</module>
|
||||||
</modules>
|
</modules>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<parent>
|
||||||
|
<groupId>com.ruoyi</groupId>
|
||||||
|
<artifactId>ruoyi-cloud-plus</artifactId>
|
||||||
|
<version>0.12.0</version>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<modules>
|
||||||
|
<module>ruoyi-demo</module>
|
||||||
|
</modules>
|
||||||
|
|
||||||
|
<artifactId>ruoyi-example</artifactId>
|
||||||
|
<packaging>pom</packaging>
|
||||||
|
|
||||||
|
<description>
|
||||||
|
ruoyi-example 例子模块
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<!-- 自定义负载均衡(多团队开发使用) -->
|
||||||
|
<!-- <dependency>-->
|
||||||
|
<!-- <groupId>com.ruoyi</groupId>-->
|
||||||
|
<!-- <artifactId>ruoyi-common-loadbalancer</artifactId>-->
|
||||||
|
<!-- </dependency>-->
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
# 使用说明
|
||||||
|
需要在 `ry-cloud` 数据库内执行 `test.sql` 文件 初始化测试数据
|
||||||
|
|
@ -0,0 +1,131 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<parent>
|
||||||
|
<groupId>com.ruoyi</groupId>
|
||||||
|
<artifactId>ruoyi-example</artifactId>
|
||||||
|
<version>0.12.0</version>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<artifactId>ruoyi-demo</artifactId>
|
||||||
|
|
||||||
|
<description>
|
||||||
|
ruoyi-demo 演示模块
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
|
||||||
|
<!-- SpringCloud Alibaba Nacos -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.alibaba.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- SpringCloud Alibaba Nacos Config -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.alibaba.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- SpringCloud Alibaba Sentinel -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.alibaba.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- SpringBoot Actuator -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-actuator</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Mysql Connector -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>mysql</groupId>
|
||||||
|
<artifactId>mysql-connector-java</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.ruoyi</groupId>
|
||||||
|
<artifactId>ruoyi-common-log</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- RuoYi Common Swagger -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.ruoyi</groupId>
|
||||||
|
<artifactId>ruoyi-common-swagger</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.ruoyi</groupId>
|
||||||
|
<artifactId>ruoyi-common-web</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.ruoyi</groupId>
|
||||||
|
<artifactId>ruoyi-common-mybatis</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.ruoyi</groupId>
|
||||||
|
<artifactId>ruoyi-common-seata</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.ruoyi</groupId>
|
||||||
|
<artifactId>ruoyi-common-dubbo</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.ruoyi</groupId>
|
||||||
|
<artifactId>ruoyi-common-idempotent</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.ruoyi</groupId>
|
||||||
|
<artifactId>ruoyi-common-mail</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.ruoyi</groupId>
|
||||||
|
<artifactId>ruoyi-common-sms</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- 短信 用哪个导入哪个依赖 -->
|
||||||
|
<!-- <dependency>-->
|
||||||
|
<!-- <groupId>com.aliyun</groupId>-->
|
||||||
|
<!-- <artifactId>dysmsapi20170525</artifactId>-->
|
||||||
|
<!-- </dependency>-->
|
||||||
|
|
||||||
|
<!-- <dependency>-->
|
||||||
|
<!-- <groupId>com.tencentcloudapi</groupId>-->
|
||||||
|
<!-- <artifactId>tencentcloud-sdk-java</artifactId>-->
|
||||||
|
<!-- </dependency>-->
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<finalName>${project.artifactId}</finalName>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||||
|
<version>${spring-boot.version}</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<goals>
|
||||||
|
<goal>repackage</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>com.spotify</groupId>
|
||||||
|
<artifactId>docker-maven-plugin</artifactId>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
package com.ruoyi.demo;
|
||||||
|
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 演示模块
|
||||||
|
*
|
||||||
|
* @author Lion Li
|
||||||
|
*/
|
||||||
|
@SpringBootApplication
|
||||||
|
public class RuoYiDemoApplication {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication application = new SpringApplication(RuoYiDemoApplication.class);
|
||||||
|
application.setApplicationStartup(new BufferingApplicationStartup(2048));
|
||||||
|
application.run(args);
|
||||||
|
System.out.println("(♥◠‿◠)ノ゙ 演示模块启动成功 ლ(´ڡ`ლ)゙ ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,48 @@
|
||||||
|
package com.ruoyi.demo.controller;
|
||||||
|
|
||||||
|
import com.ruoyi.common.core.domain.R;
|
||||||
|
import com.ruoyi.common.mail.utils.MailUtils;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import io.swagger.annotations.ApiParam;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 邮件发送案例
|
||||||
|
*
|
||||||
|
* @author Michelle.Chung
|
||||||
|
*/
|
||||||
|
@Validated
|
||||||
|
@Api(value = "邮件发送案例", tags = {"邮件发送案例"})
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/demo/mail")
|
||||||
|
public class MailController {
|
||||||
|
|
||||||
|
@ApiOperation("发送邮件")
|
||||||
|
@GetMapping("/sendSimpleMessage")
|
||||||
|
public R<Void> sendSimpleMessage(@ApiParam("接收人") String to,
|
||||||
|
@ApiParam("标题") String subject,
|
||||||
|
@ApiParam("内容") String text) {
|
||||||
|
MailUtils.sendText(to, subject, text);
|
||||||
|
return R.ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation("发送邮件(带附件)")
|
||||||
|
@GetMapping("/sendMessageWithAttachment")
|
||||||
|
public R<Void> sendMessageWithAttachment(@ApiParam("接收人") String to,
|
||||||
|
@ApiParam("标题") String subject,
|
||||||
|
@ApiParam("内容") String text,
|
||||||
|
@ApiParam("附件路径") String filePath) {
|
||||||
|
MailUtils.sendText(to, subject, text, new File(filePath));
|
||||||
|
return R.ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,101 @@
|
||||||
|
package com.ruoyi.demo.controller;
|
||||||
|
|
||||||
|
import com.ruoyi.common.core.domain.R;
|
||||||
|
import com.ruoyi.common.redis.utils.RedisUtils;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.cache.annotation.CacheEvict;
|
||||||
|
import org.springframework.cache.annotation.CachePut;
|
||||||
|
import org.springframework.cache.annotation.Cacheable;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import java.time.Duration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* spring-cache 演示案例
|
||||||
|
*
|
||||||
|
* @author Lion Li
|
||||||
|
*/
|
||||||
|
// 类级别 缓存统一配置
|
||||||
|
//@CacheConfig(cacheNames = "redissonCacheMap")
|
||||||
|
@Api(value = "spring-cache 演示案例", tags = {"spring-cache 演示案例"})
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/demo/cache")
|
||||||
|
public class RedisCacheController {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试 @Cacheable
|
||||||
|
* <p>
|
||||||
|
* 表示这个方法有了缓存的功能,方法的返回值会被缓存下来
|
||||||
|
* 下一次调用该方法前,会去检查是否缓存中已经有值
|
||||||
|
* 如果有就直接返回,不调用方法
|
||||||
|
* 如果没有,就调用方法,然后把结果缓存起来
|
||||||
|
* 这个注解「一般用在查询方法上」
|
||||||
|
* <p>
|
||||||
|
* 重点说明: 缓存注解严谨与其他筛选数据功能一起使用
|
||||||
|
* 例如: 数据权限注解 会造成 缓存击穿 与 数据不一致问题
|
||||||
|
* <p>
|
||||||
|
* cacheNames 为配置文件内 groupId
|
||||||
|
*/
|
||||||
|
@ApiOperation("测试 @Cacheable")
|
||||||
|
@Cacheable(cacheNames = "redissonCacheMap", key = "#key", condition = "#key != null")
|
||||||
|
@GetMapping("/test1")
|
||||||
|
public R<String> test1(String key, String value) {
|
||||||
|
return R.ok("操作成功", value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试 @CachePut
|
||||||
|
* <p>
|
||||||
|
* 加了@CachePut注解的方法,会把方法的返回值put到缓存里面缓存起来,供其它地方使用
|
||||||
|
* 它「通常用在新增方法上」
|
||||||
|
* <p>
|
||||||
|
* cacheNames 为 配置文件内 groupId
|
||||||
|
*/
|
||||||
|
@ApiOperation("测试 @CachePut")
|
||||||
|
@CachePut(cacheNames = "redissonCacheMap", key = "#key", condition = "#key != null")
|
||||||
|
@GetMapping("/test2")
|
||||||
|
public R<String> test2(String key, String value) {
|
||||||
|
return R.ok("操作成功", value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试 @CacheEvict
|
||||||
|
* <p>
|
||||||
|
* 使用了CacheEvict注解的方法,会清空指定缓存
|
||||||
|
* 「一般用在更新或者删除的方法上」
|
||||||
|
* <p>
|
||||||
|
* cacheNames 为 配置文件内 groupId
|
||||||
|
*/
|
||||||
|
@ApiOperation("测试 @CacheEvict")
|
||||||
|
@CacheEvict(cacheNames = "redissonCacheMap", key = "#key", condition = "#key != null")
|
||||||
|
@GetMapping("/test3")
|
||||||
|
public R<String> test3(String key, String value) {
|
||||||
|
return R.ok("操作成功", value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试设置过期时间
|
||||||
|
* 手动设置过期时间10秒
|
||||||
|
* 11秒后获取 判断是否相等
|
||||||
|
*/
|
||||||
|
@ApiOperation("测试设置过期时间")
|
||||||
|
@GetMapping("/test6")
|
||||||
|
public R<Boolean> test6(String key, String value) {
|
||||||
|
RedisUtils.setCacheObject(key, value);
|
||||||
|
boolean flag = RedisUtils.expire(key, Duration.ofSeconds(10));
|
||||||
|
System.out.println("***********" + flag);
|
||||||
|
try {
|
||||||
|
Thread.sleep(11 * 1000);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
Object obj = RedisUtils.getCacheObject(key);
|
||||||
|
return R.ok(value.equals(obj));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,76 @@
|
||||||
|
package com.ruoyi.demo.controller;
|
||||||
|
|
||||||
|
import com.baomidou.lock.LockInfo;
|
||||||
|
import com.baomidou.lock.LockTemplate;
|
||||||
|
import com.baomidou.lock.annotation.Lock4j;
|
||||||
|
import com.baomidou.lock.executor.RedissonLockExecutor;
|
||||||
|
import com.ruoyi.common.core.domain.R;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import java.time.LocalTime;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试分布式锁的样例
|
||||||
|
*
|
||||||
|
* @author shenxinquan
|
||||||
|
*/
|
||||||
|
@Api(value = "测试分布式锁的样例", tags = {"测试分布式锁的样例"})
|
||||||
|
@Slf4j
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/demo/redisLock")
|
||||||
|
public class RedisLockController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private LockTemplate lockTemplate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试lock4j 注解
|
||||||
|
*/
|
||||||
|
@ApiOperation("测试lock4j 注解")
|
||||||
|
@Lock4j(keys = {"#key"})
|
||||||
|
@GetMapping("/testLock4j")
|
||||||
|
public R<String> testLock4j(String key, String value) {
|
||||||
|
System.out.println("start:" + key + ",time:" + LocalTime.now().toString());
|
||||||
|
try {
|
||||||
|
Thread.sleep(10000);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
System.out.println("end :" + key + ",time:" + LocalTime.now().toString());
|
||||||
|
return R.ok("操作成功", value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试lock4j 工具
|
||||||
|
*/
|
||||||
|
@ApiOperation("测试lock4j 工具")
|
||||||
|
@GetMapping("/testLock4jLockTemplate")
|
||||||
|
public R<String> testLock4jLockTemplate(String key, String value) {
|
||||||
|
final LockInfo lockInfo = lockTemplate.lock(key, 30000L, 5000L, RedissonLockExecutor.class);
|
||||||
|
if (null == lockInfo) {
|
||||||
|
throw new RuntimeException("业务处理中,请稍后再试");
|
||||||
|
}
|
||||||
|
// 获取锁成功,处理业务
|
||||||
|
try {
|
||||||
|
try {
|
||||||
|
Thread.sleep(8000);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
System.out.println("执行简单方法1 , 当前线程:" + Thread.currentThread().getName());
|
||||||
|
} finally {
|
||||||
|
//释放锁
|
||||||
|
lockTemplate.releaseLock(lockInfo);
|
||||||
|
}
|
||||||
|
//结束
|
||||||
|
return R.ok("操作成功", value);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,42 @@
|
||||||
|
package com.ruoyi.demo.controller;
|
||||||
|
|
||||||
|
import com.ruoyi.common.core.domain.R;
|
||||||
|
import com.ruoyi.common.redis.utils.RedisUtils;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import io.swagger.annotations.ApiParam;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Redis 发布订阅 演示案例
|
||||||
|
*
|
||||||
|
* @author Lion Li
|
||||||
|
*/
|
||||||
|
@Api(value = "Redis发布订阅 演示案例", tags = {"Redis发布订阅"})
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/demo/redis/pubsub")
|
||||||
|
public class RedisPubSubController {
|
||||||
|
|
||||||
|
@ApiOperation("发布消息")
|
||||||
|
@GetMapping("/pub")
|
||||||
|
public R<Void> pub(@ApiParam("通道Key") String key, @ApiParam("发送内容") String value) {
|
||||||
|
RedisUtils.publish(key, value, consumer -> {
|
||||||
|
System.out.println("发布通道 => " + key + ", 发送值 => " + value);
|
||||||
|
});
|
||||||
|
return R.ok("操作成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation("订阅消息")
|
||||||
|
@GetMapping("/sub")
|
||||||
|
public R<Void> sub(@ApiParam("通道Key") String key) {
|
||||||
|
RedisUtils.subscribe(key, String.class, msg -> {
|
||||||
|
System.out.println("订阅通道 => " + key + ", 接收值 => " + msg);
|
||||||
|
});
|
||||||
|
return R.ok("操作成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,72 @@
|
||||||
|
package com.ruoyi.demo.controller;
|
||||||
|
|
||||||
|
import com.ruoyi.common.core.domain.R;
|
||||||
|
import com.ruoyi.common.core.utils.SpringUtils;
|
||||||
|
import com.ruoyi.common.sms.config.properties.SmsProperties;
|
||||||
|
import com.ruoyi.common.sms.core.SmsTemplate;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import io.swagger.annotations.ApiParam;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 短信演示案例
|
||||||
|
* 请先阅读文档 否则无法使用
|
||||||
|
*
|
||||||
|
* @author Lion Li
|
||||||
|
* @version 4.2.0
|
||||||
|
*/
|
||||||
|
@Validated
|
||||||
|
@Api(value = "短信演示案例", tags = {"短信演示案例"})
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/demo/sms")
|
||||||
|
public class SmsController {
|
||||||
|
|
||||||
|
private final SmsProperties smsProperties;
|
||||||
|
// private final SmsTemplate smsTemplate; // 可以使用spring注入
|
||||||
|
// private final AliyunSmsTemplate smsTemplate; // 也可以注入某个厂家的模板工具
|
||||||
|
|
||||||
|
@ApiOperation("发送短信Aliyun")
|
||||||
|
@GetMapping("/sendAliyun")
|
||||||
|
public R<Object> sendAliyun(@ApiParam("电话号") String phones,
|
||||||
|
@ApiParam("模板ID") String templateId) {
|
||||||
|
if (!smsProperties.getEnabled()) {
|
||||||
|
return R.fail("当前系统没有开启短信功能!");
|
||||||
|
}
|
||||||
|
if (!SpringUtils.containsBean("aliyunSmsTemplate")) {
|
||||||
|
return R.fail("阿里云依赖未引入!");
|
||||||
|
}
|
||||||
|
SmsTemplate smsTemplate = SpringUtils.getBean(SmsTemplate.class);
|
||||||
|
Map<String, String> map = new HashMap<>(1);
|
||||||
|
map.put("code", "1234");
|
||||||
|
Object send = smsTemplate.send(phones, templateId, map);
|
||||||
|
return R.ok(send);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation("发送短信Tencent")
|
||||||
|
@GetMapping("/sendTencent")
|
||||||
|
public R<Object> sendTencent(@ApiParam("电话号") String phones,
|
||||||
|
@ApiParam("模板ID") String templateId) {
|
||||||
|
if (!smsProperties.getEnabled()) {
|
||||||
|
return R.fail("当前系统没有开启短信功能!");
|
||||||
|
}
|
||||||
|
if (!SpringUtils.containsBean("tencentSmsTemplate")) {
|
||||||
|
return R.fail("腾讯云依赖未引入!");
|
||||||
|
}
|
||||||
|
SmsTemplate smsTemplate = SpringUtils.getBean(SmsTemplate.class);
|
||||||
|
Map<String, String> map = new HashMap<>(1);
|
||||||
|
// map.put("2", "测试测试");
|
||||||
|
map.put("1", "1234");
|
||||||
|
Object send = smsTemplate.send(phones, templateId, map);
|
||||||
|
return R.ok(send);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
package com.ruoyi.demo.controller;
|
||||||
|
|
||||||
|
import com.ruoyi.common.core.domain.R;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiImplicitParam;
|
||||||
|
import io.swagger.annotations.ApiImplicitParams;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestPart;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* swagger3 用法示例
|
||||||
|
*
|
||||||
|
* @author Lion Li
|
||||||
|
*/
|
||||||
|
@Api(value = "演示swagger3控制器", tags = {"演示swagger3接口"})
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/swagger/demo")
|
||||||
|
public class Swagger3DemoController {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 上传请求
|
||||||
|
* 必须使用 @RequestPart 注解标注为文件
|
||||||
|
*/
|
||||||
|
@ApiOperation(value = "通用上传请求")
|
||||||
|
@ApiImplicitParams({
|
||||||
|
@ApiImplicitParam(name = "file", value = "文件", paramType = "query", dataTypeClass = File.class, required = true)
|
||||||
|
})
|
||||||
|
@PostMapping(value = "/upload")
|
||||||
|
public R<String> upload(@RequestPart("file") MultipartFile file) {
|
||||||
|
return R.ok("操作成功", file.getOriginalFilename());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,95 @@
|
||||||
|
package com.ruoyi.demo.controller;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.ruoyi.common.core.domain.R;
|
||||||
|
import com.ruoyi.common.core.web.controller.BaseController;
|
||||||
|
import com.ruoyi.demo.domain.TestDemo;
|
||||||
|
import com.ruoyi.demo.mapper.TestDemoMapper;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试批量方法
|
||||||
|
*
|
||||||
|
* @author Lion Li
|
||||||
|
* @date 2021-05-30
|
||||||
|
*/
|
||||||
|
@Api(value = "测试批量方法", tags = {"测试批量方法"})
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/demo/batch")
|
||||||
|
public class TestBatchController extends BaseController {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 为了便于测试 直接引入mapper
|
||||||
|
*/
|
||||||
|
private final TestDemoMapper testDemoMapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增批量方法 可完美替代 saveBatch 秒级插入上万数据 (对mysql负荷较大)
|
||||||
|
* <p>
|
||||||
|
* 3.5.0 版本 增加 rewriteBatchedStatements=true 批处理参数 使 MP 原生批处理可以达到同样的速度
|
||||||
|
*/
|
||||||
|
@ApiOperation(value = "新增批量方法")
|
||||||
|
@PostMapping("/add")
|
||||||
|
// @DS("slave")
|
||||||
|
public R<Void> add() {
|
||||||
|
List<TestDemo> list = new ArrayList<>();
|
||||||
|
for (int i = 0; i < 1000; i++) {
|
||||||
|
TestDemo testDemo = new TestDemo();
|
||||||
|
testDemo.setOrderNum(-1);
|
||||||
|
testDemo.setTestKey("批量新增");
|
||||||
|
testDemo.setValue("测试新增");
|
||||||
|
list.add(testDemo);
|
||||||
|
}
|
||||||
|
return toAjax(testDemoMapper.insertBatch(list) ? 1 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增或更新 可完美替代 saveOrUpdateBatch 高性能
|
||||||
|
* <p>
|
||||||
|
* 3.5.0 版本 增加 rewriteBatchedStatements=true 批处理参数 使 MP 原生批处理可以达到同样的速度
|
||||||
|
*/
|
||||||
|
@ApiOperation(value = "新增或更新批量方法")
|
||||||
|
@PostMapping("/addOrUpdate")
|
||||||
|
// @DS("slave")
|
||||||
|
public R<Void> addOrUpdate() {
|
||||||
|
List<TestDemo> list = new ArrayList<>();
|
||||||
|
for (int i = 0; i < 1000; i++) {
|
||||||
|
TestDemo testDemo = new TestDemo();
|
||||||
|
testDemo.setOrderNum(-1);
|
||||||
|
testDemo.setTestKey("批量新增");
|
||||||
|
testDemo.setValue("测试新增");
|
||||||
|
list.add(testDemo); }
|
||||||
|
testDemoMapper.insertBatch(list);
|
||||||
|
for (int i = 0; i < list.size(); i++) {
|
||||||
|
TestDemo testDemo = list.get(i);
|
||||||
|
testDemo.setTestKey("批量新增或修改");
|
||||||
|
testDemo.setValue("批量新增或修改");
|
||||||
|
if (i % 2 == 0) {
|
||||||
|
testDemo.setId(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return toAjax(testDemoMapper.insertOrUpdateBatch(list) ? 1 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除批量方法
|
||||||
|
*/
|
||||||
|
@ApiOperation(value = "删除批量方法")
|
||||||
|
@DeleteMapping()
|
||||||
|
// @DS("slave")
|
||||||
|
public R<Void> remove() {
|
||||||
|
return toAjax(testDemoMapper.delete(new LambdaQueryWrapper<TestDemo>()
|
||||||
|
.eq(TestDemo::getOrderNum, -1L)));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,152 @@
|
||||||
|
package com.ruoyi.demo.controller;
|
||||||
|
|
||||||
|
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import com.ruoyi.common.core.domain.R;
|
||||||
|
import com.ruoyi.common.core.utils.ValidatorUtils;
|
||||||
|
import com.ruoyi.common.core.validate.AddGroup;
|
||||||
|
import com.ruoyi.common.core.validate.EditGroup;
|
||||||
|
import com.ruoyi.common.core.validate.QueryGroup;
|
||||||
|
import com.ruoyi.common.core.web.controller.BaseController;
|
||||||
|
import com.ruoyi.common.excel.core.ExcelResult;
|
||||||
|
import com.ruoyi.common.excel.utils.ExcelUtil;
|
||||||
|
import com.ruoyi.common.idempotent.annotation.RepeatSubmit;
|
||||||
|
import com.ruoyi.common.log.annotation.Log;
|
||||||
|
import com.ruoyi.common.log.enums.BusinessType;
|
||||||
|
import com.ruoyi.common.mybatis.core.page.PageQuery;
|
||||||
|
import com.ruoyi.common.mybatis.core.page.TableDataInfo;
|
||||||
|
import com.ruoyi.demo.domain.TestDemo;
|
||||||
|
import com.ruoyi.demo.domain.bo.TestDemoBo;
|
||||||
|
import com.ruoyi.demo.domain.bo.TestDemoImportVo;
|
||||||
|
import com.ruoyi.demo.domain.vo.TestDemoVo;
|
||||||
|
import com.ruoyi.demo.service.ITestDemoService;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import io.swagger.annotations.ApiParam;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.validation.constraints.NotEmpty;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试单表Controller
|
||||||
|
*
|
||||||
|
* @author Lion Li
|
||||||
|
* @date 2021-07-26
|
||||||
|
*/
|
||||||
|
@Validated
|
||||||
|
@Api(value = "测试单表控制器", tags = {"测试单表管理"})
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/demo/demo")
|
||||||
|
public class TestDemoController extends BaseController {
|
||||||
|
|
||||||
|
private final ITestDemoService iTestDemoService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询测试单表列表
|
||||||
|
*/
|
||||||
|
@ApiOperation("查询测试单表列表")
|
||||||
|
@SaCheckPermission("demo:demo:list")
|
||||||
|
@GetMapping("/list")
|
||||||
|
public TableDataInfo<TestDemoVo> list(@Validated(QueryGroup.class) TestDemoBo bo, PageQuery pageQuery) {
|
||||||
|
return iTestDemoService.queryPageList(bo, pageQuery);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自定义分页查询
|
||||||
|
*/
|
||||||
|
@ApiOperation("自定义分页查询")
|
||||||
|
@SaCheckPermission("demo:demo:list")
|
||||||
|
@GetMapping("/page")
|
||||||
|
public TableDataInfo<TestDemoVo> page(@Validated(QueryGroup.class) TestDemoBo bo, PageQuery pageQuery) {
|
||||||
|
return iTestDemoService.customPageList(bo, pageQuery);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation("导入测试-校验")
|
||||||
|
@Log(title = "测试单表", businessType = BusinessType.IMPORT)
|
||||||
|
@SaCheckPermission("demo:demo:import")
|
||||||
|
@PostMapping("/importData")
|
||||||
|
public R<Void> importData(@ApiParam("导入文件") @RequestPart("file") MultipartFile file) throws Exception {
|
||||||
|
ExcelResult<TestDemoImportVo> excelResult = ExcelUtil.importExcel(file.getInputStream(), TestDemoImportVo.class, true);
|
||||||
|
List<TestDemoImportVo> volist = excelResult.getList();
|
||||||
|
List<TestDemo> list = BeanUtil.copyToList(volist, TestDemo.class);
|
||||||
|
iTestDemoService.saveBatch(list);
|
||||||
|
return R.ok(excelResult.getAnalysis());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出测试单表列表
|
||||||
|
*/
|
||||||
|
@ApiOperation("导出测试单表列表")
|
||||||
|
@SaCheckPermission("demo:demo:export")
|
||||||
|
@Log(title = "测试单表", businessType = BusinessType.EXPORT)
|
||||||
|
@PostMapping("/export")
|
||||||
|
public void export(@Validated TestDemoBo bo, HttpServletResponse response) {
|
||||||
|
List<TestDemoVo> list = iTestDemoService.queryList(bo);
|
||||||
|
// 测试雪花id导出
|
||||||
|
// for (TestDemoVo vo : list) {
|
||||||
|
// vo.setId(1234567891234567893L);
|
||||||
|
// }
|
||||||
|
ExcelUtil.exportExcel(list, "测试单表", TestDemoVo.class, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取测试单表详细信息
|
||||||
|
*/
|
||||||
|
@ApiOperation("获取测试单表详细信息")
|
||||||
|
@SaCheckPermission("demo:demo:query")
|
||||||
|
@GetMapping("/{id}")
|
||||||
|
public R<TestDemoVo> getInfo(@ApiParam("测试ID")
|
||||||
|
@NotNull(message = "主键不能为空")
|
||||||
|
@PathVariable("id") Long id) {
|
||||||
|
return R.ok(iTestDemoService.queryById(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增测试单表
|
||||||
|
*/
|
||||||
|
@ApiOperation("新增测试单表")
|
||||||
|
@SaCheckPermission("demo:demo:add")
|
||||||
|
@Log(title = "测试单表", businessType = BusinessType.INSERT)
|
||||||
|
@RepeatSubmit(interval = 2, timeUnit = TimeUnit.SECONDS, message = "{repeat.submit.message}")
|
||||||
|
@PostMapping()
|
||||||
|
public R<Void> add(@RequestBody TestDemoBo bo) {
|
||||||
|
// 使用校验工具对标 @Validated(AddGroup.class) 注解
|
||||||
|
// 用于在非 Controller 的地方校验对象
|
||||||
|
ValidatorUtils.validate(bo, AddGroup.class);
|
||||||
|
return toAjax(iTestDemoService.insertByBo(bo) ? 1 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改测试单表
|
||||||
|
*/
|
||||||
|
@ApiOperation("修改测试单表")
|
||||||
|
@SaCheckPermission("demo:demo:edit")
|
||||||
|
@Log(title = "测试单表", businessType = BusinessType.UPDATE)
|
||||||
|
@RepeatSubmit
|
||||||
|
@PutMapping()
|
||||||
|
public R<Void> edit(@Validated(EditGroup.class) @RequestBody TestDemoBo bo) {
|
||||||
|
return toAjax(iTestDemoService.updateByBo(bo) ? 1 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除测试单表
|
||||||
|
*/
|
||||||
|
@ApiOperation("删除测试单表")
|
||||||
|
@SaCheckPermission("demo:demo:remove")
|
||||||
|
@Log(title = "测试单表", businessType = BusinessType.DELETE)
|
||||||
|
@DeleteMapping("/{ids}")
|
||||||
|
public R<Void> remove(@ApiParam("测试ID串")
|
||||||
|
@NotEmpty(message = "主键不能为空")
|
||||||
|
@PathVariable Long[] ids) {
|
||||||
|
return toAjax(iTestDemoService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,102 @@
|
||||||
|
package com.ruoyi.demo.controller;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import com.ruoyi.common.excel.utils.ExcelUtil;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试Excel功能
|
||||||
|
*
|
||||||
|
* @author Lion Li
|
||||||
|
*/
|
||||||
|
@Api(value = "测试Excel功能", tags = {"测试Excel功能"})
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/demo/excel")
|
||||||
|
public class TestExcelController {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 单列表多数据
|
||||||
|
*/
|
||||||
|
@ApiOperation(value = "单列表多数据")
|
||||||
|
@GetMapping("/exportTemplateOne")
|
||||||
|
public void exportTemplateOne(HttpServletResponse response) {
|
||||||
|
Map<String,String> map = new HashMap<>();
|
||||||
|
map.put("title","单列表多数据");
|
||||||
|
map.put("test1","数据测试1");
|
||||||
|
map.put("test2","数据测试2");
|
||||||
|
map.put("test3","数据测试3");
|
||||||
|
map.put("test4","数据测试4");
|
||||||
|
map.put("testTest","666");
|
||||||
|
List<TestObj> list = new ArrayList<>();
|
||||||
|
list.add(new TestObj("单列表测试1", "列表测试1", "列表测试2", "列表测试3", "列表测试4"));
|
||||||
|
list.add(new TestObj("单列表测试2", "列表测试5", "列表测试6", "列表测试7", "列表测试8"));
|
||||||
|
list.add(new TestObj("单列表测试3", "列表测试9", "列表测试10", "列表测试11", "列表测试12"));
|
||||||
|
ExcelUtil.exportTemplate(CollUtil.newArrayList(map,list),"单列表.xlsx", "excel/单列表.xlsx", response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 多列表多数据
|
||||||
|
*/
|
||||||
|
@ApiOperation(value = "多列表多数据")
|
||||||
|
@GetMapping("/exportTemplateMuliti")
|
||||||
|
public void exportTemplateMuliti(HttpServletResponse response) {
|
||||||
|
Map<String,String> map = new HashMap<>();
|
||||||
|
map.put("title1","标题1");
|
||||||
|
map.put("title2","标题2");
|
||||||
|
map.put("title3","标题3");
|
||||||
|
map.put("title4","标题4");
|
||||||
|
map.put("author","Lion Li");
|
||||||
|
List<TestObj1> list1 = new ArrayList<>();
|
||||||
|
list1.add(new TestObj1("list1测试1", "list1测试2", "list1测试3"));
|
||||||
|
list1.add(new TestObj1("list1测试4", "list1测试5", "list1测试6"));
|
||||||
|
list1.add(new TestObj1("list1测试7", "list1测试8", "list1测试9"));
|
||||||
|
List<TestObj1> list2 = new ArrayList<>();
|
||||||
|
list2.add(new TestObj1("list2测试1", "list2测试2", "list2测试3"));
|
||||||
|
list2.add(new TestObj1("list2测试4", "list2测试5", "list2测试6"));
|
||||||
|
List<TestObj1> list3 = new ArrayList<>();
|
||||||
|
list3.add(new TestObj1("list3测试1", "list3测试2", "list3测试3"));
|
||||||
|
List<TestObj1> list4 = new ArrayList<>();
|
||||||
|
list4.add(new TestObj1("list4测试1", "list4测试2", "list4测试3"));
|
||||||
|
list4.add(new TestObj1("list4测试4", "list4测试5", "list4测试6"));
|
||||||
|
list4.add(new TestObj1("list4测试7", "list4测试8", "list4测试9"));
|
||||||
|
list4.add(new TestObj1("list4测试10", "list4测试11", "list4测试12"));
|
||||||
|
Map<String,Object> multiListMap = new HashMap<>();
|
||||||
|
multiListMap.put("map",map);
|
||||||
|
multiListMap.put("data1",list1);
|
||||||
|
multiListMap.put("data2",list2);
|
||||||
|
multiListMap.put("data3",list3);
|
||||||
|
multiListMap.put("data4",list4);
|
||||||
|
ExcelUtil.exportTemplateMultiList(multiListMap, "多列表.xlsx", "excel/多列表.xlsx", response);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
static class TestObj1 {
|
||||||
|
private String test1;
|
||||||
|
private String test2;
|
||||||
|
private String test3;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
static class TestObj {
|
||||||
|
private String name;
|
||||||
|
private String list1;
|
||||||
|
private String list2;
|
||||||
|
private String list3;
|
||||||
|
private String list4;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,76 @@
|
||||||
|
package com.ruoyi.demo.controller;
|
||||||
|
|
||||||
|
import com.ruoyi.common.core.domain.R;
|
||||||
|
import com.ruoyi.common.core.utils.MessageUtils;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import io.swagger.annotations.ApiParam;
|
||||||
|
import lombok.Data;
|
||||||
|
import org.hibernate.validator.constraints.Range;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试国际化
|
||||||
|
*
|
||||||
|
* @author Lion Li
|
||||||
|
*/
|
||||||
|
@Validated
|
||||||
|
@Api(value = "测试国际化控制器", tags = {"测试国际化管理"})
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/demo/i18n")
|
||||||
|
public class TestI18nController {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过code获取国际化内容
|
||||||
|
* code为 messages.properties 中的 key
|
||||||
|
* <p>
|
||||||
|
* 测试使用 user.register.success
|
||||||
|
*/
|
||||||
|
@ApiOperation("通过code获取国际化内容")
|
||||||
|
@GetMapping()
|
||||||
|
public R<Void> get(@ApiParam("国际化code") String code) {
|
||||||
|
return R.ok(MessageUtils.message(code));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validator 校验国际化
|
||||||
|
* 不传值 分别查看异常返回
|
||||||
|
* <p>
|
||||||
|
* 测试使用 not.null
|
||||||
|
*/
|
||||||
|
@ApiOperation("Validator 校验国际化")
|
||||||
|
@GetMapping("/test1")
|
||||||
|
public R<Void> test1(@NotBlank(message = "{not.null}") String str) {
|
||||||
|
return R.ok(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bean 校验国际化
|
||||||
|
* 不传值 分别查看异常返回
|
||||||
|
* <p>
|
||||||
|
* 测试使用 not.null
|
||||||
|
*/
|
||||||
|
@ApiOperation("Bean 校验国际化")
|
||||||
|
@GetMapping("/test2")
|
||||||
|
public R<TestI18nBo> test2(@Validated TestI18nBo bo) {
|
||||||
|
return R.ok(bo);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public static class TestI18nBo {
|
||||||
|
|
||||||
|
@NotBlank(message = "{not.null}")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@NotNull(message = "{not.null}")
|
||||||
|
@Range(min = 0, max = 100, message = "{length.not.valid}")
|
||||||
|
private Integer age;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,79 @@
|
||||||
|
package com.ruoyi.demo.controller;
|
||||||
|
|
||||||
|
import com.ruoyi.common.core.annotation.Sensitive;
|
||||||
|
import com.ruoyi.common.core.domain.R;
|
||||||
|
import com.ruoyi.common.core.enums.SensitiveStrategy;
|
||||||
|
import com.ruoyi.common.core.web.controller.BaseController;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import lombok.Data;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试数据脱敏控制器
|
||||||
|
* <p>
|
||||||
|
* 默认管理员不过滤
|
||||||
|
* 需自行根据业务重写实现
|
||||||
|
*
|
||||||
|
* @author Lion Li
|
||||||
|
* @version 3.6.0
|
||||||
|
* @see com.ruoyi.common.core.service.SensitiveService
|
||||||
|
*/
|
||||||
|
@Api(value = "测试数据脱敏控制器", tags = {"测试数据脱敏管理"})
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/demo/sensitive")
|
||||||
|
public class TestSensitiveController extends BaseController {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试数据脱敏
|
||||||
|
*/
|
||||||
|
@ApiOperation("查询测试单表列表")
|
||||||
|
@GetMapping("/test")
|
||||||
|
public R<TestSensitive> test() {
|
||||||
|
TestSensitive testSensitive = new TestSensitive();
|
||||||
|
testSensitive.setIdCard("210397198608215431");
|
||||||
|
testSensitive.setPhone("17640125371");
|
||||||
|
testSensitive.setAddress("北京市朝阳区某某四合院1203室");
|
||||||
|
testSensitive.setEmail("17640125371@163.com");
|
||||||
|
testSensitive.setBankCard("6226456952351452853");
|
||||||
|
return R.ok(testSensitive);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
static class TestSensitive {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 身份证
|
||||||
|
*/
|
||||||
|
@Sensitive(strategy = SensitiveStrategy.ID_CARD)
|
||||||
|
private String idCard;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 电话
|
||||||
|
*/
|
||||||
|
@Sensitive(strategy = SensitiveStrategy.PHONE)
|
||||||
|
private String phone;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 地址
|
||||||
|
*/
|
||||||
|
@Sensitive(strategy = SensitiveStrategy.ADDRESS)
|
||||||
|
private String address;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 邮箱
|
||||||
|
*/
|
||||||
|
@Sensitive(strategy = SensitiveStrategy.EMAIL)
|
||||||
|
private String email;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 银行卡
|
||||||
|
*/
|
||||||
|
@Sensitive(strategy = SensitiveStrategy.BANK_CARD)
|
||||||
|
private String bankCard;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,115 @@
|
||||||
|
package com.ruoyi.demo.controller;
|
||||||
|
|
||||||
|
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||||
|
import com.ruoyi.common.core.domain.R;
|
||||||
|
import com.ruoyi.common.core.validate.AddGroup;
|
||||||
|
import com.ruoyi.common.core.validate.EditGroup;
|
||||||
|
import com.ruoyi.common.core.validate.QueryGroup;
|
||||||
|
import com.ruoyi.common.core.web.controller.BaseController;
|
||||||
|
import com.ruoyi.common.excel.utils.ExcelUtil;
|
||||||
|
import com.ruoyi.common.idempotent.annotation.RepeatSubmit;
|
||||||
|
import com.ruoyi.common.log.annotation.Log;
|
||||||
|
import com.ruoyi.common.log.enums.BusinessType;
|
||||||
|
import com.ruoyi.demo.domain.bo.TestTreeBo;
|
||||||
|
import com.ruoyi.demo.domain.vo.TestTreeVo;
|
||||||
|
import com.ruoyi.demo.service.ITestTreeService;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import io.swagger.annotations.ApiParam;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.validation.constraints.NotEmpty;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试树表Controller
|
||||||
|
*
|
||||||
|
* @author Lion Li
|
||||||
|
* @date 2021-07-26
|
||||||
|
*/
|
||||||
|
@Validated
|
||||||
|
@Api(value = "测试树表控制器", tags = {"测试树表管理"})
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/demo/tree")
|
||||||
|
public class TestTreeController extends BaseController {
|
||||||
|
|
||||||
|
private final ITestTreeService iTestTreeService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询测试树表列表
|
||||||
|
*/
|
||||||
|
@ApiOperation("查询测试树表列表")
|
||||||
|
@SaCheckPermission("demo:tree:list")
|
||||||
|
@GetMapping("/list")
|
||||||
|
public R<List<TestTreeVo>> list(@Validated(QueryGroup.class) TestTreeBo bo) {
|
||||||
|
List<TestTreeVo> list = iTestTreeService.queryList(bo);
|
||||||
|
return R.ok(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出测试树表列表
|
||||||
|
*/
|
||||||
|
@ApiOperation("导出测试树表列表")
|
||||||
|
@SaCheckPermission("demo:tree:export")
|
||||||
|
@Log(title = "测试树表", businessType = BusinessType.EXPORT)
|
||||||
|
@GetMapping("/export")
|
||||||
|
public void export(@Validated TestTreeBo bo, HttpServletResponse response) {
|
||||||
|
List<TestTreeVo> list = iTestTreeService.queryList(bo);
|
||||||
|
ExcelUtil.exportExcel(list, "测试树表", TestTreeVo.class, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取测试树表详细信息
|
||||||
|
*/
|
||||||
|
@ApiOperation("获取测试树表详细信息")
|
||||||
|
@SaCheckPermission("demo:tree:query")
|
||||||
|
@GetMapping("/{id}")
|
||||||
|
public R<TestTreeVo> getInfo(@ApiParam("测试树ID")
|
||||||
|
@NotNull(message = "主键不能为空")
|
||||||
|
@PathVariable("id") Long id) {
|
||||||
|
return R.ok(iTestTreeService.queryById(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增测试树表
|
||||||
|
*/
|
||||||
|
@ApiOperation("新增测试树表")
|
||||||
|
@SaCheckPermission("demo:tree:add")
|
||||||
|
@Log(title = "测试树表", businessType = BusinessType.INSERT)
|
||||||
|
@RepeatSubmit
|
||||||
|
@PostMapping()
|
||||||
|
public R<Void> add(@Validated(AddGroup.class) @RequestBody TestTreeBo bo) {
|
||||||
|
return toAjax(iTestTreeService.insertByBo(bo) ? 1 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改测试树表
|
||||||
|
*/
|
||||||
|
@ApiOperation("修改测试树表")
|
||||||
|
@SaCheckPermission("demo:tree:edit")
|
||||||
|
@Log(title = "测试树表", businessType = BusinessType.UPDATE)
|
||||||
|
@RepeatSubmit
|
||||||
|
@PutMapping()
|
||||||
|
public R<Void> edit(@Validated(EditGroup.class) @RequestBody TestTreeBo bo) {
|
||||||
|
return toAjax(iTestTreeService.updateByBo(bo) ? 1 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除测试树表
|
||||||
|
*/
|
||||||
|
@ApiOperation("删除测试树表")
|
||||||
|
@SaCheckPermission("demo:tree:remove")
|
||||||
|
@Log(title = "测试树表", businessType = BusinessType.DELETE)
|
||||||
|
@DeleteMapping("/{ids}")
|
||||||
|
public R<Void> remove(@ApiParam("测试树ID串")
|
||||||
|
@NotEmpty(message = "主键不能为空")
|
||||||
|
@PathVariable Long[] ids) {
|
||||||
|
return toAjax(iTestTreeService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
package com.ruoyi.demo.controller;
|
||||||
|
|
@ -0,0 +1,66 @@
|
||||||
|
package com.ruoyi.demo.domain;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
import com.ruoyi.common.core.web.domain.BaseEntity;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试单表对象 test_demo
|
||||||
|
*
|
||||||
|
* @author Lion Li
|
||||||
|
* @date 2021-07-26
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@TableName("test_demo")
|
||||||
|
public class TestDemo extends BaseEntity {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主键
|
||||||
|
*/
|
||||||
|
@TableId(value = "id")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 部门id
|
||||||
|
*/
|
||||||
|
private Long deptId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户id
|
||||||
|
*/
|
||||||
|
private Long userId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排序号
|
||||||
|
*/
|
||||||
|
@OrderBy(asc = false, sort = 1)
|
||||||
|
private Integer orderNum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* key键
|
||||||
|
*/
|
||||||
|
private String testKey;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 值
|
||||||
|
*/
|
||||||
|
private String value;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 版本
|
||||||
|
*/
|
||||||
|
@Version
|
||||||
|
private Long version;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除标志
|
||||||
|
*/
|
||||||
|
@TableLogic
|
||||||
|
private Long delFlag;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
package com.ruoyi.demo.domain;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import com.baomidou.mybatisplus.annotation.Version;
|
||||||
|
import com.ruoyi.common.core.web.domain.TreeEntity;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试树表对象 test_tree
|
||||||
|
*
|
||||||
|
* @author Lion Li
|
||||||
|
* @date 2021-07-26
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@TableName("test_tree")
|
||||||
|
public class TestTree extends TreeEntity<TestTree> {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主键
|
||||||
|
*/
|
||||||
|
@TableId(value = "id")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 部门id
|
||||||
|
*/
|
||||||
|
private Long deptId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户id
|
||||||
|
*/
|
||||||
|
private Long userId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 树节点名
|
||||||
|
*/
|
||||||
|
private String treeName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 版本
|
||||||
|
*/
|
||||||
|
@Version
|
||||||
|
private Long version;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除标志
|
||||||
|
*/
|
||||||
|
@TableLogic
|
||||||
|
private Long delFlag;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,68 @@
|
||||||
|
package com.ruoyi.demo.domain.bo;
|
||||||
|
|
||||||
|
import com.ruoyi.common.core.validate.AddGroup;
|
||||||
|
import com.ruoyi.common.core.validate.EditGroup;
|
||||||
|
import com.ruoyi.common.core.web.domain.BaseEntity;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试单表业务对象 test_demo
|
||||||
|
*
|
||||||
|
* @author Lion Li
|
||||||
|
* @date 2021-07-26
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ApiModel("测试单表业务对象")
|
||||||
|
public class TestDemoBo extends BaseEntity {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主键
|
||||||
|
*/
|
||||||
|
@ApiModelProperty("主键")
|
||||||
|
@NotNull(message = "主键不能为空", groups = {EditGroup.class})
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 部门id
|
||||||
|
*/
|
||||||
|
@ApiModelProperty("部门id")
|
||||||
|
@NotNull(message = "部门id不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||||
|
private Long deptId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户id
|
||||||
|
*/
|
||||||
|
@ApiModelProperty("用户id")
|
||||||
|
@NotNull(message = "用户id不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||||
|
private Long userId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排序号
|
||||||
|
*/
|
||||||
|
@ApiModelProperty("排序号")
|
||||||
|
@NotNull(message = "排序号不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||||
|
private Integer orderNum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* key键
|
||||||
|
*/
|
||||||
|
@ApiModelProperty("key键")
|
||||||
|
@NotBlank(message = "key键不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||||
|
private String testKey;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 值
|
||||||
|
*/
|
||||||
|
@ApiModelProperty("值")
|
||||||
|
@NotBlank(message = "值不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||||
|
private String value;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,61 @@
|
||||||
|
package com.ruoyi.demo.domain.bo;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试单表业务对象 test_demo
|
||||||
|
*
|
||||||
|
* @author Lion Li
|
||||||
|
* @date 2021-07-26
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel("测试单表业务对象")
|
||||||
|
public class TestDemoImportVo {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 部门id
|
||||||
|
*/
|
||||||
|
@ApiModelProperty("部门id")
|
||||||
|
@NotNull(message = "部门id不能为空")
|
||||||
|
@ExcelProperty(value = "部门id")
|
||||||
|
private Long deptId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户id
|
||||||
|
*/
|
||||||
|
@ApiModelProperty("用户id")
|
||||||
|
@NotNull(message = "用户id不能为空")
|
||||||
|
@ExcelProperty(value = "用户id")
|
||||||
|
private Long userId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排序号
|
||||||
|
*/
|
||||||
|
@ApiModelProperty("排序号")
|
||||||
|
@NotNull(message = "排序号不能为空")
|
||||||
|
@ExcelProperty(value = "排序号")
|
||||||
|
private Long orderNum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* key键
|
||||||
|
*/
|
||||||
|
@ApiModelProperty("key键")
|
||||||
|
@NotBlank(message = "key键不能为空")
|
||||||
|
@ExcelProperty(value = "key键")
|
||||||
|
private String testKey;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 值
|
||||||
|
*/
|
||||||
|
@ApiModelProperty("值")
|
||||||
|
@NotBlank(message = "值不能为空")
|
||||||
|
@ExcelProperty(value = "值")
|
||||||
|
private String value;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,54 @@
|
||||||
|
package com.ruoyi.demo.domain.bo;
|
||||||
|
|
||||||
|
import com.ruoyi.common.core.validate.AddGroup;
|
||||||
|
import com.ruoyi.common.core.validate.EditGroup;
|
||||||
|
import com.ruoyi.common.core.web.domain.TreeEntity;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试树表业务对象 test_tree
|
||||||
|
*
|
||||||
|
* @author Lion Li
|
||||||
|
* @date 2021-07-26
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ApiModel("测试树表业务对象")
|
||||||
|
public class TestTreeBo extends TreeEntity<TestTreeBo> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主键
|
||||||
|
*/
|
||||||
|
@ApiModelProperty("主键")
|
||||||
|
@NotNull(message = "主键不能为空", groups = {EditGroup.class})
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 部门id
|
||||||
|
*/
|
||||||
|
@ApiModelProperty("部门id")
|
||||||
|
@NotNull(message = "部门id不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||||
|
private Long deptId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户id
|
||||||
|
*/
|
||||||
|
@ApiModelProperty("用户id")
|
||||||
|
@NotNull(message = "用户id不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||||
|
private Long userId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 树节点名
|
||||||
|
*/
|
||||||
|
@ApiModelProperty("树节点名")
|
||||||
|
@NotBlank(message = "树节点名不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||||
|
private String treeName;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
package com.ruoyi.demo.domain;
|
||||||
|
|
@ -0,0 +1,96 @@
|
||||||
|
package com.ruoyi.demo.domain.vo;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试单表视图对象 test_demo
|
||||||
|
*
|
||||||
|
* @author Lion Li
|
||||||
|
* @date 2021-07-26
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel("测试单表视图对象")
|
||||||
|
@ExcelIgnoreUnannotated
|
||||||
|
public class TestDemoVo {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主键
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "主键")
|
||||||
|
@ApiModelProperty("主键")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 部门id
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "部门id")
|
||||||
|
@ApiModelProperty("部门id")
|
||||||
|
private Long deptId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户id
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "用户id")
|
||||||
|
@ApiModelProperty("用户id")
|
||||||
|
private Long userId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排序号
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "排序号")
|
||||||
|
@ApiModelProperty("排序号")
|
||||||
|
private Integer orderNum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* key键
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "key键")
|
||||||
|
@ApiModelProperty("key键")
|
||||||
|
private String testKey;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 值
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "值")
|
||||||
|
@ApiModelProperty("值")
|
||||||
|
private String value;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建时间
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "创建时间")
|
||||||
|
@ApiModelProperty("创建时间")
|
||||||
|
private Date createTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建人
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "创建人")
|
||||||
|
@ApiModelProperty("创建人")
|
||||||
|
private String createBy;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新时间
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "更新时间")
|
||||||
|
@ApiModelProperty("更新时间")
|
||||||
|
private Date updateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新人
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "更新人")
|
||||||
|
@ApiModelProperty("更新人")
|
||||||
|
private String updateBy;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,67 @@
|
||||||
|
package com.ruoyi.demo.domain.vo;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试树表视图对象 test_tree
|
||||||
|
*
|
||||||
|
* @author Lion Li
|
||||||
|
* @date 2021-07-26
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel("测试树表视图对象")
|
||||||
|
@ExcelIgnoreUnannotated
|
||||||
|
public class TestTreeVo {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主键
|
||||||
|
*/
|
||||||
|
@ApiModelProperty("主键")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 父id
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "父id")
|
||||||
|
@ApiModelProperty("父id")
|
||||||
|
private Long parentId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 部门id
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "部门id")
|
||||||
|
@ApiModelProperty("部门id")
|
||||||
|
private Long deptId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户id
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "用户id")
|
||||||
|
@ApiModelProperty("用户id")
|
||||||
|
private Long userId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 树节点名
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "树节点名")
|
||||||
|
@ApiModelProperty("树节点名")
|
||||||
|
private String treeName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建时间
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "创建时间")
|
||||||
|
@ApiModelProperty("创建时间")
|
||||||
|
private Date createTime;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
package com.ruoyi.demo.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Constants;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.ruoyi.common.mybatis.annotation.DataColumn;
|
||||||
|
import com.ruoyi.common.mybatis.annotation.DataPermission;
|
||||||
|
import com.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
|
||||||
|
import com.ruoyi.demo.domain.TestDemo;
|
||||||
|
import com.ruoyi.demo.domain.vo.TestDemoVo;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试单表Mapper接口
|
||||||
|
*
|
||||||
|
* @author Lion Li
|
||||||
|
* @date 2021-07-26
|
||||||
|
*/
|
||||||
|
public interface TestDemoMapper extends BaseMapperPlus<TestDemoMapper, TestDemo, TestDemoVo> {
|
||||||
|
|
||||||
|
@DataPermission({
|
||||||
|
@DataColumn(key = "deptName", value = "dept_id"),
|
||||||
|
@DataColumn(key = "userName", value = "user_id")
|
||||||
|
})
|
||||||
|
Page<TestDemoVo> customPageList(@Param("page") Page<TestDemo> page, @Param("ew") Wrapper<TestDemo> wrapper);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@DataPermission({
|
||||||
|
@DataColumn(key = "deptName", value = "dept_id"),
|
||||||
|
@DataColumn(key = "userName", value = "user_id")
|
||||||
|
})
|
||||||
|
<P extends IPage<TestDemo>> P selectPage(P page, @Param(Constants.WRAPPER) Wrapper<TestDemo> queryWrapper);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@DataPermission({
|
||||||
|
@DataColumn(key = "deptName", value = "dept_id"),
|
||||||
|
@DataColumn(key = "userName", value = "user_id")
|
||||||
|
})
|
||||||
|
List<TestDemo> selectList(@Param(Constants.WRAPPER) Wrapper<TestDemo> queryWrapper);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@DataPermission({
|
||||||
|
@DataColumn(key = "deptName", value = "dept_id"),
|
||||||
|
@DataColumn(key = "userName", value = "user_id")
|
||||||
|
})
|
||||||
|
int updateById(@Param(Constants.ENTITY) TestDemo entity);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@DataPermission({
|
||||||
|
@DataColumn(key = "deptName", value = "dept_id"),
|
||||||
|
@DataColumn(key = "userName", value = "user_id")
|
||||||
|
})
|
||||||
|
int deleteBatchIds(@Param(Constants.COLLECTION) Collection<?> idList);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
package com.ruoyi.demo.mapper;
|
||||||
|
|
||||||
|
import com.ruoyi.common.mybatis.annotation.DataColumn;
|
||||||
|
import com.ruoyi.common.mybatis.annotation.DataPermission;
|
||||||
|
import com.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
|
||||||
|
import com.ruoyi.demo.domain.TestTree;
|
||||||
|
import com.ruoyi.demo.domain.vo.TestTreeVo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试树表Mapper接口
|
||||||
|
*
|
||||||
|
* @author Lion Li
|
||||||
|
* @date 2021-07-26
|
||||||
|
*/
|
||||||
|
@DataPermission({
|
||||||
|
@DataColumn(key = "deptName", value = "dept_id"),
|
||||||
|
@DataColumn(key = "userName", value = "user_id")
|
||||||
|
})
|
||||||
|
public interface TestTreeMapper extends BaseMapperPlus<TestTreeMapper, TestTree, TestTreeVo> {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
package com.ruoyi.demo.mapper;
|
||||||
|
|
@ -0,0 +1,71 @@
|
||||||
|
package com.ruoyi.demo.service;
|
||||||
|
|
||||||
|
import com.ruoyi.common.mybatis.core.page.PageQuery;
|
||||||
|
import com.ruoyi.common.mybatis.core.page.TableDataInfo;
|
||||||
|
import com.ruoyi.demo.domain.TestDemo;
|
||||||
|
import com.ruoyi.demo.domain.bo.TestDemoBo;
|
||||||
|
import com.ruoyi.demo.domain.vo.TestDemoVo;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试单表Service接口
|
||||||
|
*
|
||||||
|
* @author Lion Li
|
||||||
|
* @date 2021-07-26
|
||||||
|
*/
|
||||||
|
public interface ITestDemoService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询单个
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
TestDemoVo queryById(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询列表
|
||||||
|
*/
|
||||||
|
TableDataInfo<TestDemoVo> queryPageList(TestDemoBo bo, PageQuery pageQuery);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自定义分页查询
|
||||||
|
*/
|
||||||
|
TableDataInfo<TestDemoVo> customPageList(TestDemoBo bo, PageQuery pageQuery);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询列表
|
||||||
|
*/
|
||||||
|
List<TestDemoVo> queryList(TestDemoBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据新增业务对象插入测试单表
|
||||||
|
*
|
||||||
|
* @param bo 测试单表新增业务对象
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Boolean insertByBo(TestDemoBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据编辑业务对象修改测试单表
|
||||||
|
*
|
||||||
|
* @param bo 测试单表编辑业务对象
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Boolean updateByBo(TestDemoBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校验并删除数据
|
||||||
|
*
|
||||||
|
* @param ids 主键集合
|
||||||
|
* @param isValid 是否校验,true-删除前校验,false-不校验
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量保存
|
||||||
|
*/
|
||||||
|
Boolean saveBatch(List<TestDemo> list);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,52 @@
|
||||||
|
package com.ruoyi.demo.service;
|
||||||
|
|
||||||
|
import com.ruoyi.demo.domain.bo.TestTreeBo;
|
||||||
|
import com.ruoyi.demo.domain.vo.TestTreeVo;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试树表Service接口
|
||||||
|
*
|
||||||
|
* @author Lion Li
|
||||||
|
* @date 2021-07-26
|
||||||
|
*/
|
||||||
|
public interface ITestTreeService {
|
||||||
|
/**
|
||||||
|
* 查询单个
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
TestTreeVo queryById(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询列表
|
||||||
|
*/
|
||||||
|
List<TestTreeVo> queryList(TestTreeBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据新增业务对象插入测试树表
|
||||||
|
*
|
||||||
|
* @param bo 测试树表新增业务对象
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Boolean insertByBo(TestTreeBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据编辑业务对象修改测试树表
|
||||||
|
*
|
||||||
|
* @param bo 测试树表编辑业务对象
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Boolean updateByBo(TestTreeBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校验并删除数据
|
||||||
|
*
|
||||||
|
* @param ids 主键集合
|
||||||
|
* @param isValid 是否校验,true-删除前校验,false-不校验
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,110 @@
|
||||||
|
package com.ruoyi.demo.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.ruoyi.common.core.utils.StringUtils;
|
||||||
|
import com.ruoyi.common.mybatis.core.page.PageQuery;
|
||||||
|
import com.ruoyi.common.mybatis.core.page.TableDataInfo;
|
||||||
|
import com.ruoyi.demo.domain.TestDemo;
|
||||||
|
import com.ruoyi.demo.domain.bo.TestDemoBo;
|
||||||
|
import com.ruoyi.demo.domain.vo.TestDemoVo;
|
||||||
|
import com.ruoyi.demo.mapper.TestDemoMapper;
|
||||||
|
import com.ruoyi.demo.service.ITestDemoService;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试单表Service业务层处理
|
||||||
|
*
|
||||||
|
* @author Lion Li
|
||||||
|
* @date 2021-07-26
|
||||||
|
*/
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@Service
|
||||||
|
public class TestDemoServiceImpl implements ITestDemoService {
|
||||||
|
|
||||||
|
private final TestDemoMapper baseMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TestDemoVo queryById(Long id) {
|
||||||
|
return baseMapper.selectVoById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TableDataInfo<TestDemoVo> queryPageList(TestDemoBo bo, PageQuery pageQuery) {
|
||||||
|
LambdaQueryWrapper<TestDemo> lqw = buildQueryWrapper(bo);
|
||||||
|
Page<TestDemoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||||
|
return TableDataInfo.build(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自定义分页查询
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public TableDataInfo<TestDemoVo> customPageList(TestDemoBo bo, PageQuery pageQuery) {
|
||||||
|
LambdaQueryWrapper<TestDemo> lqw = buildQueryWrapper(bo);
|
||||||
|
Page<TestDemoVo> result = baseMapper.customPageList(pageQuery.build(), lqw);
|
||||||
|
return TableDataInfo.build(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<TestDemoVo> queryList(TestDemoBo bo) {
|
||||||
|
return baseMapper.selectVoList(buildQueryWrapper(bo));
|
||||||
|
}
|
||||||
|
|
||||||
|
private LambdaQueryWrapper<TestDemo> buildQueryWrapper(TestDemoBo bo) {
|
||||||
|
Map<String, Object> params = bo.getParams();
|
||||||
|
LambdaQueryWrapper<TestDemo> lqw = Wrappers.lambdaQuery();
|
||||||
|
lqw.like(StringUtils.isNotBlank(bo.getTestKey()), TestDemo::getTestKey, bo.getTestKey());
|
||||||
|
lqw.eq(StringUtils.isNotBlank(bo.getValue()), TestDemo::getValue, bo.getValue());
|
||||||
|
lqw.between(params.get("beginCreateTime") != null && params.get("endCreateTime") != null,
|
||||||
|
TestDemo::getCreateTime, params.get("beginCreateTime"), params.get("endCreateTime"));
|
||||||
|
return lqw;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean insertByBo(TestDemoBo bo) {
|
||||||
|
TestDemo add = BeanUtil.toBean(bo, TestDemo.class);
|
||||||
|
validEntityBeforeSave(add);
|
||||||
|
boolean flag = baseMapper.insert(add) > 0;
|
||||||
|
if (flag) {
|
||||||
|
bo.setId(add.getId());
|
||||||
|
}
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean updateByBo(TestDemoBo bo) {
|
||||||
|
TestDemo update = BeanUtil.toBean(bo, TestDemo.class);
|
||||||
|
validEntityBeforeSave(update);
|
||||||
|
return baseMapper.updateById(update) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存前的数据校验
|
||||||
|
*
|
||||||
|
* @param entity 实体类数据
|
||||||
|
*/
|
||||||
|
private void validEntityBeforeSave(TestDemo entity) {
|
||||||
|
//TODO 做一些数据校验,如唯一约束
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||||
|
if (isValid) {
|
||||||
|
//TODO 做一些业务上的校验,判断是否需要校验
|
||||||
|
}
|
||||||
|
return baseMapper.deleteBatchIds(ids) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean saveBatch(List<TestDemo> list) {
|
||||||
|
return baseMapper.insertBatch(list);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,87 @@
|
||||||
|
package com.ruoyi.demo.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
|
import com.ruoyi.common.core.utils.StringUtils;
|
||||||
|
import com.ruoyi.demo.domain.TestTree;
|
||||||
|
import com.ruoyi.demo.domain.bo.TestTreeBo;
|
||||||
|
import com.ruoyi.demo.domain.vo.TestTreeVo;
|
||||||
|
import com.ruoyi.demo.mapper.TestTreeMapper;
|
||||||
|
import com.ruoyi.demo.service.ITestTreeService;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试树表Service业务层处理
|
||||||
|
*
|
||||||
|
* @author Lion Li
|
||||||
|
* @date 2021-07-26
|
||||||
|
*/
|
||||||
|
// @DS("slave") // 切换从库查询
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@Service
|
||||||
|
public class TestTreeServiceImpl implements ITestTreeService {
|
||||||
|
|
||||||
|
private final TestTreeMapper baseMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TestTreeVo queryById(Long id) {
|
||||||
|
return baseMapper.selectVoById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
// @DS("slave") // 切换从库查询
|
||||||
|
@Override
|
||||||
|
public List<TestTreeVo> queryList(TestTreeBo bo) {
|
||||||
|
LambdaQueryWrapper<TestTree> lqw = buildQueryWrapper(bo);
|
||||||
|
return baseMapper.selectVoList(lqw);
|
||||||
|
}
|
||||||
|
|
||||||
|
private LambdaQueryWrapper<TestTree> buildQueryWrapper(TestTreeBo bo) {
|
||||||
|
Map<String, Object> params = bo.getParams();
|
||||||
|
LambdaQueryWrapper<TestTree> lqw = Wrappers.lambdaQuery();
|
||||||
|
lqw.like(StringUtils.isNotBlank(bo.getTreeName()), TestTree::getTreeName, bo.getTreeName());
|
||||||
|
lqw.between(params.get("beginCreateTime") != null && params.get("endCreateTime") != null,
|
||||||
|
TestTree::getCreateTime, params.get("beginCreateTime"), params.get("endCreateTime"));
|
||||||
|
return lqw;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean insertByBo(TestTreeBo bo) {
|
||||||
|
TestTree add = BeanUtil.toBean(bo, TestTree.class);
|
||||||
|
validEntityBeforeSave(add);
|
||||||
|
boolean flag = baseMapper.insert(add) > 0;
|
||||||
|
if (flag) {
|
||||||
|
bo.setId(add.getId());
|
||||||
|
}
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean updateByBo(TestTreeBo bo) {
|
||||||
|
TestTree update = BeanUtil.toBean(bo, TestTree.class);
|
||||||
|
validEntityBeforeSave(update);
|
||||||
|
return baseMapper.updateById(update) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存前的数据校验
|
||||||
|
*
|
||||||
|
* @param entity 实体类数据
|
||||||
|
*/
|
||||||
|
private void validEntityBeforeSave(TestTree entity) {
|
||||||
|
//TODO 做一些数据校验,如唯一约束
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||||
|
if (isValid) {
|
||||||
|
//TODO 做一些业务上的校验,判断是否需要校验
|
||||||
|
}
|
||||||
|
return baseMapper.deleteBatchIds(ids) > 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
package com.ruoyi.demo.service.impl;
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
package com.ruoyi.demo.service;
|
||||||
|
|
@ -0,0 +1,45 @@
|
||||||
|
# Tomcat
|
||||||
|
server:
|
||||||
|
port: 9401
|
||||||
|
|
||||||
|
# Spring
|
||||||
|
spring:
|
||||||
|
application:
|
||||||
|
# 应用名称
|
||||||
|
name: ruoyi-demo
|
||||||
|
profiles:
|
||||||
|
# 环境配置
|
||||||
|
active: @profiles.active@
|
||||||
|
|
||||||
|
--- # nacos 配置
|
||||||
|
spring:
|
||||||
|
cloud:
|
||||||
|
nacos:
|
||||||
|
# nacos 服务地址
|
||||||
|
server-addr: @nacos.server@
|
||||||
|
discovery:
|
||||||
|
# 注册组
|
||||||
|
group: @nacos.discovery.group@
|
||||||
|
namespace: ${spring.profiles.active}
|
||||||
|
config:
|
||||||
|
# 配置组
|
||||||
|
group: @nacos.config.group@
|
||||||
|
namespace: ${spring.profiles.active}
|
||||||
|
config:
|
||||||
|
import:
|
||||||
|
- optional:nacos:application-common.yml
|
||||||
|
- optional:nacos:datasource.yml
|
||||||
|
|
||||||
|
--- # 数据源设置 需在 system 数据源下 执行 test.sql 文件
|
||||||
|
spring:
|
||||||
|
datasource:
|
||||||
|
dynamic:
|
||||||
|
# 设置默认的数据源或者数据源组,默认值即为 master
|
||||||
|
primary: master
|
||||||
|
datasource:
|
||||||
|
# 主库数据源
|
||||||
|
master:
|
||||||
|
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
|
url: ${datasource.system-master.url}
|
||||||
|
username: ${datasource.system-master.username}
|
||||||
|
password: ${datasource.system-master.password}
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
Spring Boot Version: ${spring-boot.version}
|
||||||
|
Spring Application Name: ${spring.application.name}
|
||||||
|
_ _
|
||||||
|
(_) | |
|
||||||
|
_ __ _ _ ___ _ _ _ ______ __| | ___ _ __ ___ ___
|
||||||
|
| '__| | | |/ _ \| | | | |______/ _` |/ _ \ '_ ` _ \ / _ \
|
||||||
|
| | | |_| | (_) | |_| | | | (_| | __/ | | | | | (_) |
|
||||||
|
|_| \__,_|\___/ \__, |_| \__,_|\___|_| |_| |_|\___/
|
||||||
|
__/ |
|
||||||
|
|___/
|
||||||
|
|
@ -0,0 +1,112 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<configuration scan="true" scanPeriod="60 seconds" debug="false">
|
||||||
|
<!-- 日志存放路径 -->
|
||||||
|
<property name="log.path" value="logs/ruoyi-demo" />
|
||||||
|
<!-- 日志输出格式 -->
|
||||||
|
<property name="console.log.pattern"
|
||||||
|
value="%red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}%n) - %msg%n"/>
|
||||||
|
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"/>
|
||||||
|
|
||||||
|
<!-- 控制台输出 -->
|
||||||
|
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>${console.log.pattern}</pattern>
|
||||||
|
<charset>utf-8</charset>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<!-- 控制台输出 -->
|
||||||
|
<appender name="file_console" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||||
|
<file>${log.path}/console.log</file>
|
||||||
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||||
|
<!-- 日志文件名格式 -->
|
||||||
|
<fileNamePattern>${log.path}/console.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||||
|
<!-- 日志最大 1天 -->
|
||||||
|
<maxHistory>1</maxHistory>
|
||||||
|
</rollingPolicy>
|
||||||
|
<encoder>
|
||||||
|
<pattern>${log.pattern}</pattern>
|
||||||
|
<charset>utf-8</charset>
|
||||||
|
</encoder>
|
||||||
|
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||||||
|
<!-- 过滤的级别 -->
|
||||||
|
<level>INFO</level>
|
||||||
|
</filter>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<!-- 系统日志输出 -->
|
||||||
|
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||||
|
<file>${log.path}/info.log</file>
|
||||||
|
<!-- 循环政策:基于时间创建日志文件 -->
|
||||||
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||||
|
<!-- 日志文件名格式 -->
|
||||||
|
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||||
|
<!-- 日志最大的历史 60天 -->
|
||||||
|
<maxHistory>60</maxHistory>
|
||||||
|
</rollingPolicy>
|
||||||
|
<encoder>
|
||||||
|
<pattern>${log.pattern}</pattern>
|
||||||
|
</encoder>
|
||||||
|
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||||
|
<!-- 过滤的级别 -->
|
||||||
|
<level>INFO</level>
|
||||||
|
<!-- 匹配时的操作:接收(记录) -->
|
||||||
|
<onMatch>ACCEPT</onMatch>
|
||||||
|
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||||
|
<onMismatch>DENY</onMismatch>
|
||||||
|
</filter>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||||
|
<file>${log.path}/error.log</file>
|
||||||
|
<!-- 循环政策:基于时间创建日志文件 -->
|
||||||
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||||
|
<!-- 日志文件名格式 -->
|
||||||
|
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||||
|
<!-- 日志最大的历史 60天 -->
|
||||||
|
<maxHistory>60</maxHistory>
|
||||||
|
</rollingPolicy>
|
||||||
|
<encoder>
|
||||||
|
<pattern>${log.pattern}</pattern>
|
||||||
|
</encoder>
|
||||||
|
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||||
|
<!-- 过滤的级别 -->
|
||||||
|
<level>ERROR</level>
|
||||||
|
<!-- 匹配时的操作:接收(记录) -->
|
||||||
|
<onMatch>ACCEPT</onMatch>
|
||||||
|
<!-- 不匹配时的操作:拒绝(不记录) -->
|
||||||
|
<onMismatch>DENY</onMismatch>
|
||||||
|
</filter>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<!-- info异步输出 -->
|
||||||
|
<appender name="async_info" class="ch.qos.logback.classic.AsyncAppender">
|
||||||
|
<!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
|
||||||
|
<discardingThreshold>0</discardingThreshold>
|
||||||
|
<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
|
||||||
|
<queueSize>512</queueSize>
|
||||||
|
<!-- 添加附加的appender,最多只能添加一个 -->
|
||||||
|
<appender-ref ref="file_info"/>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<!-- error异步输出 -->
|
||||||
|
<appender name="async_error" class="ch.qos.logback.classic.AsyncAppender">
|
||||||
|
<!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
|
||||||
|
<discardingThreshold>0</discardingThreshold>
|
||||||
|
<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
|
||||||
|
<queueSize>512</queueSize>
|
||||||
|
<!-- 添加附加的appender,最多只能添加一个 -->
|
||||||
|
<appender-ref ref="file_error"/>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="info">
|
||||||
|
<appender-ref ref="console" />
|
||||||
|
</root>
|
||||||
|
|
||||||
|
<!--系统操作日志-->
|
||||||
|
<root level="info">
|
||||||
|
<appender-ref ref="async_info"/>
|
||||||
|
<appender-ref ref="async_error"/>
|
||||||
|
<appender-ref ref="file_console" />
|
||||||
|
</root>
|
||||||
|
</configuration>
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper
|
||||||
|
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.ruoyi.demo.mapper.TestDemoMapper">
|
||||||
|
|
||||||
|
<resultMap type="com.ruoyi.demo.domain.TestDemo" id="TestDemoResult">
|
||||||
|
<result property="id" column="id"/>
|
||||||
|
<result property="deptId" column="dept_id"/>
|
||||||
|
<result property="userId" column="user_id"/>
|
||||||
|
<result property="orderNum" column="order_num"/>
|
||||||
|
<result property="testKey" column="test_key"/>
|
||||||
|
<result property="value" column="value"/>
|
||||||
|
<result property="version" column="version"/>
|
||||||
|
<result property="createTime" column="create_time"/>
|
||||||
|
<result property="createBy" column="create_by"/>
|
||||||
|
<result property="updateTime" column="update_time"/>
|
||||||
|
<result property="updateBy" column="update_by"/>
|
||||||
|
<result property="delFlag" column="del_flag"/>
|
||||||
|
</resultMap>
|
||||||
|
<select id="customPageList" resultType="com.ruoyi.demo.domain.vo.TestDemoVo">
|
||||||
|
SELECT * FROM test_demo ${ew.customSqlSegment}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
</mapper>
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper
|
||||||
|
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.ruoyi.demo.mapper.TestTreeMapper">
|
||||||
|
|
||||||
|
<resultMap type="com.ruoyi.demo.domain.TestTree" id="TestTreeResult">
|
||||||
|
<result property="id" column="id"/>
|
||||||
|
<result property="parentId" column="parent_id"/>
|
||||||
|
<result property="deptId" column="dept_id"/>
|
||||||
|
<result property="userId" column="user_id"/>
|
||||||
|
<result property="treeName" column="tree_name"/>
|
||||||
|
<result property="version" column="version"/>
|
||||||
|
<result property="createTime" column="create_time"/>
|
||||||
|
<result property="createBy" column="create_by"/>
|
||||||
|
<result property="updateTime" column="update_time"/>
|
||||||
|
<result property="updateBy" column="update_by"/>
|
||||||
|
<result property="delFlag" column="del_flag"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
|
||||||
|
</mapper>
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
java包使用 `.` 分割 resource 目录使用 `/` 分割
|
||||||
|
<br>
|
||||||
|
此文件目的 防止文件夹粘连找不到 `xml` 文件
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
# p6spy 性能分析插件配置文件
|
||||||
|
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
|
||||||
|
# 自定义日志打印
|
||||||
|
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
|
||||||
|
#日志输出到控制台
|
||||||
|
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
|
||||||
|
# 使用日志系统记录 sql
|
||||||
|
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
|
||||||
|
# 设置 p6spy driver 代理
|
||||||
|
#deregisterdrivers=true
|
||||||
|
# 取消JDBC URL前缀
|
||||||
|
useprefix=true
|
||||||
|
# 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset.
|
||||||
|
excludecategories=info,debug,result,commit,resultset
|
||||||
|
# 日期格式
|
||||||
|
dateformat=yyyy-MM-dd HH:mm:ss
|
||||||
|
# 实际驱动可多个
|
||||||
|
#driverlist=org.h2.Driver
|
||||||
|
# 是否开启慢SQL记录
|
||||||
|
outagedetection=true
|
||||||
|
# 慢SQL记录标准 2 秒
|
||||||
|
outagedetectioninterval=2
|
||||||
|
# 是否过滤 Log
|
||||||
|
filter=true
|
||||||
|
|
@ -0,0 +1,54 @@
|
||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
// 查询测试单表列表
|
||||||
|
export function listDemo(query) {
|
||||||
|
return request({
|
||||||
|
url: '/demo/demo/demo/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 自定义分页接口
|
||||||
|
export function pageDemo(query) {
|
||||||
|
return request({
|
||||||
|
url: '/demo/demo/demo/page',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询测试单表详细
|
||||||
|
export function getDemo(id) {
|
||||||
|
return request({
|
||||||
|
url: '/demo/demo/demo/' + id,
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增测试单表
|
||||||
|
export function addDemo(data) {
|
||||||
|
return request({
|
||||||
|
url: '/demo/demo/demo',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改测试单表
|
||||||
|
export function updateDemo(data) {
|
||||||
|
return request({
|
||||||
|
url: '/demo/demo/demo',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除测试单表
|
||||||
|
export function delDemo(id) {
|
||||||
|
return request({
|
||||||
|
url: '/demo/demo/demo/' + id,
|
||||||
|
method: 'delete'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,44 @@
|
||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
// 查询测试树表列表
|
||||||
|
export function listTree(query) {
|
||||||
|
return request({
|
||||||
|
url: '/demo/demo/tree/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询测试树表详细
|
||||||
|
export function getTree(id) {
|
||||||
|
return request({
|
||||||
|
url: '/demo/demo/tree/' + id,
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增测试树表
|
||||||
|
export function addTree(data) {
|
||||||
|
return request({
|
||||||
|
url: '/demo/demo/tree',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改测试树表
|
||||||
|
export function updateTree(data) {
|
||||||
|
return request({
|
||||||
|
url: '/demo/demo/tree',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除测试树表
|
||||||
|
export function delTree(id) {
|
||||||
|
return request({
|
||||||
|
url: '/demo/demo/tree/' + id,
|
||||||
|
method: 'delete'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,431 @@
|
||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
|
||||||
|
<el-form-item label="key键" prop="testKey">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.testKey"
|
||||||
|
placeholder="请输入key键"
|
||||||
|
clearable
|
||||||
|
size="small"
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="值" prop="value">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.value"
|
||||||
|
placeholder="请输入值"
|
||||||
|
clearable
|
||||||
|
size="small"
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="创建时间">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="daterangeCreateTime"
|
||||||
|
size="small"
|
||||||
|
style="width: 240px"
|
||||||
|
value-format="yyyy-MM-dd"
|
||||||
|
type="daterange"
|
||||||
|
range-separator="-"
|
||||||
|
start-placeholder="开始日期"
|
||||||
|
end-placeholder="结束日期"
|
||||||
|
></el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||||
|
<el-button type="primary" icon="el-icon-search" size="mini" @click="handlePage">搜索(自定义分页接口)</el-button>
|
||||||
|
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
plain
|
||||||
|
icon="el-icon-plus"
|
||||||
|
size="mini"
|
||||||
|
@click="handleAdd"
|
||||||
|
v-hasPermi="['demo:demo:add']"
|
||||||
|
>新增</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button
|
||||||
|
type="success"
|
||||||
|
plain
|
||||||
|
icon="el-icon-edit"
|
||||||
|
size="mini"
|
||||||
|
:disabled="single"
|
||||||
|
@click="handleUpdate"
|
||||||
|
v-hasPermi="['demo:demo:edit']"
|
||||||
|
>修改</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button
|
||||||
|
type="danger"
|
||||||
|
plain
|
||||||
|
icon="el-icon-delete"
|
||||||
|
size="mini"
|
||||||
|
:disabled="multiple"
|
||||||
|
@click="handleDelete"
|
||||||
|
v-hasPermi="['demo:demo:remove']"
|
||||||
|
>删除</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button
|
||||||
|
type="info"
|
||||||
|
plain
|
||||||
|
icon="el-icon-upload2"
|
||||||
|
size="mini"
|
||||||
|
@click="handleImport"
|
||||||
|
v-hasPermi="['demo:demo:import']"
|
||||||
|
>导入(校验)</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button
|
||||||
|
type="warning"
|
||||||
|
plain
|
||||||
|
icon="el-icon-download"
|
||||||
|
size="mini"
|
||||||
|
@click="handleExport"
|
||||||
|
v-hasPermi="['demo:demo:export']"
|
||||||
|
>导出</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-table v-loading="loading" :data="demoList" @selection-change="handleSelectionChange">
|
||||||
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
|
<el-table-column label="主键" align="center" prop="id" v-if="false"/>
|
||||||
|
<el-table-column label="部门id" align="center" prop="deptId" />
|
||||||
|
<el-table-column label="用户id" align="center" prop="userId" />
|
||||||
|
<el-table-column label="排序号" align="center" prop="orderNum" />
|
||||||
|
<el-table-column label="key键" align="center" prop="testKey" />
|
||||||
|
<el-table-column label="值" align="center" prop="value" />
|
||||||
|
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="创建人" align="center" prop="createBy" />
|
||||||
|
<el-table-column label="更新时间" align="center" prop="updateTime" width="180">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="更新人" align="center" prop="updateBy" />
|
||||||
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-button
|
||||||
|
size="mini"
|
||||||
|
type="text"
|
||||||
|
icon="el-icon-edit"
|
||||||
|
@click="handleUpdate(scope.row)"
|
||||||
|
v-hasPermi="['demo:demo:edit']"
|
||||||
|
>修改</el-button>
|
||||||
|
<el-button
|
||||||
|
size="mini"
|
||||||
|
type="text"
|
||||||
|
icon="el-icon-delete"
|
||||||
|
@click="handleDelete(scope.row)"
|
||||||
|
v-hasPermi="['demo:demo:remove']"
|
||||||
|
>删除</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination
|
||||||
|
v-show="total>0"
|
||||||
|
:total="total"
|
||||||
|
:page.sync="queryParams.pageNum"
|
||||||
|
:limit.sync="queryParams.pageSize"
|
||||||
|
@pagination="getList"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<!-- 添加或修改测试单表对话框 -->
|
||||||
|
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||||
|
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||||
|
<el-form-item label="部门id" prop="deptId">
|
||||||
|
<el-input v-model="form.deptId" placeholder="请输入部门id" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="用户id" prop="userId">
|
||||||
|
<el-input v-model="form.userId" placeholder="请输入用户id" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="排序号" prop="orderNum">
|
||||||
|
<el-input v-model="form.orderNum" placeholder="请输入排序号" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="key键" prop="testKey">
|
||||||
|
<el-input v-model="form.testKey" placeholder="请输入key键" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="值" prop="value">
|
||||||
|
<el-input v-model="form.value" placeholder="请输入值" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="创建时间" prop="createTime">
|
||||||
|
<el-date-picker clearable size="small"
|
||||||
|
v-model="form.createTime"
|
||||||
|
type="datetime"
|
||||||
|
value-format="yyyy-MM-dd HH:mm:ss"
|
||||||
|
placeholder="选择创建时间">
|
||||||
|
</el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||||
|
<el-button @click="cancel">取 消</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
<!-- 用户导入对话框 -->
|
||||||
|
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
|
||||||
|
<el-upload
|
||||||
|
ref="upload"
|
||||||
|
:limit="1"
|
||||||
|
accept=".xlsx, .xls"
|
||||||
|
:headers="upload.headers"
|
||||||
|
:action="upload.url + '?updateSupport=' + upload.updateSupport"
|
||||||
|
:disabled="upload.isUploading"
|
||||||
|
:on-progress="handleFileUploadProgress"
|
||||||
|
:on-success="handleFileSuccess"
|
||||||
|
:auto-upload="false"
|
||||||
|
drag
|
||||||
|
>
|
||||||
|
<i class="el-icon-upload"></i>
|
||||||
|
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
||||||
|
</el-upload>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button type="primary" @click="submitFileForm">确 定</el-button>
|
||||||
|
<el-button @click="upload.open = false">取 消</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { listDemo, pageDemo, getDemo, delDemo, addDemo, updateDemo } from "@/api/demo/demo";
|
||||||
|
import {getToken} from "@/utils/auth";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "Demo",
|
||||||
|
components: {
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
//按钮loading
|
||||||
|
buttonLoading: false,
|
||||||
|
// 遮罩层
|
||||||
|
loading: true,
|
||||||
|
// 选中数组
|
||||||
|
ids: [],
|
||||||
|
// 非单个禁用
|
||||||
|
single: true,
|
||||||
|
// 非多个禁用
|
||||||
|
multiple: true,
|
||||||
|
// 显示搜索条件
|
||||||
|
showSearch: true,
|
||||||
|
// 总条数
|
||||||
|
total: 0,
|
||||||
|
// 测试单表表格数据
|
||||||
|
demoList: [],
|
||||||
|
// 弹出层标题
|
||||||
|
title: "",
|
||||||
|
// 是否显示弹出层
|
||||||
|
open: false,
|
||||||
|
// 创建时间时间范围
|
||||||
|
daterangeCreateTime: [],
|
||||||
|
// 用户导入参数
|
||||||
|
upload: {
|
||||||
|
// 是否显示弹出层(用户导入)
|
||||||
|
open: false,
|
||||||
|
// 弹出层标题(用户导入)
|
||||||
|
title: "",
|
||||||
|
// 是否禁用上传
|
||||||
|
isUploading: false,
|
||||||
|
// 设置上传的请求头部
|
||||||
|
headers: { Authorization: "Bearer " + getToken() },
|
||||||
|
// 上传的地址
|
||||||
|
url: process.env.VUE_APP_BASE_API + "/demo/demo/importData"
|
||||||
|
},
|
||||||
|
// 查询参数
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
testKey: undefined,
|
||||||
|
value: undefined,
|
||||||
|
createTime: undefined,
|
||||||
|
},
|
||||||
|
// 表单参数
|
||||||
|
form: {},
|
||||||
|
// 表单校验
|
||||||
|
rules: {
|
||||||
|
testKey: [
|
||||||
|
{ required: true, message: "key键不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
value: [
|
||||||
|
{ required: true, message: "值不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
/** 查询测试单表列表 */
|
||||||
|
getList() {
|
||||||
|
this.loading = true;
|
||||||
|
this.queryParams.params = {};
|
||||||
|
if (null != this.daterangeCreateTime && '' != this.daterangeCreateTime) {
|
||||||
|
this.queryParams.params["beginCreateTime"] = this.daterangeCreateTime[0];
|
||||||
|
this.queryParams.params["endCreateTime"] = this.daterangeCreateTime[1];
|
||||||
|
}
|
||||||
|
listDemo(this.queryParams).then(response => {
|
||||||
|
this.demoList = response.rows;
|
||||||
|
this.total = response.total;
|
||||||
|
this.loading = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/** 自定义分页查询 */
|
||||||
|
getPage() {
|
||||||
|
this.loading = true;
|
||||||
|
this.queryParams.params = {};
|
||||||
|
if (null != this.daterangeCreateTime && '' != this.daterangeCreateTime) {
|
||||||
|
this.queryParams.params["beginCreateTime"] = this.daterangeCreateTime[0];
|
||||||
|
this.queryParams.params["endCreateTime"] = this.daterangeCreateTime[1];
|
||||||
|
}
|
||||||
|
pageDemo(this.queryParams).then(response => {
|
||||||
|
this.demoList = response.rows;
|
||||||
|
this.total = response.total;
|
||||||
|
this.loading = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// 取消按钮
|
||||||
|
cancel() {
|
||||||
|
this.open = false;
|
||||||
|
this.reset();
|
||||||
|
},
|
||||||
|
// 表单重置
|
||||||
|
reset() {
|
||||||
|
this.form = {
|
||||||
|
id: undefined,
|
||||||
|
deptId: undefined,
|
||||||
|
userId: undefined,
|
||||||
|
orderNum: undefined,
|
||||||
|
testKey: undefined,
|
||||||
|
value: undefined,
|
||||||
|
version: undefined,
|
||||||
|
createTime: undefined,
|
||||||
|
createBy: undefined,
|
||||||
|
updateTime: undefined,
|
||||||
|
updateBy: undefined,
|
||||||
|
delFlag: undefined
|
||||||
|
};
|
||||||
|
this.resetForm("form");
|
||||||
|
},
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
handleQuery() {
|
||||||
|
this.queryParams.pageNum = 1;
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
handlePage() {
|
||||||
|
this.queryParams.pageNum = 1;
|
||||||
|
this.getPage();
|
||||||
|
},
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
resetQuery() {
|
||||||
|
this.daterangeCreateTime = [];
|
||||||
|
this.resetForm("queryForm");
|
||||||
|
this.handleQuery();
|
||||||
|
},
|
||||||
|
// 多选框选中数据
|
||||||
|
handleSelectionChange(selection) {
|
||||||
|
this.ids = selection.map(item => item.id)
|
||||||
|
this.single = selection.length!==1
|
||||||
|
this.multiple = !selection.length
|
||||||
|
},
|
||||||
|
/** 新增按钮操作 */
|
||||||
|
handleAdd() {
|
||||||
|
this.reset();
|
||||||
|
this.open = true;
|
||||||
|
this.title = "添加测试单表";
|
||||||
|
},
|
||||||
|
/** 修改按钮操作 */
|
||||||
|
handleUpdate(row) {
|
||||||
|
this.loading = true;
|
||||||
|
this.reset();
|
||||||
|
const id = row.id || this.ids
|
||||||
|
getDemo(id).then(response => {
|
||||||
|
this.loading = false;
|
||||||
|
this.form = response.data;
|
||||||
|
this.open = true;
|
||||||
|
this.title = "修改测试单表";
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/** 提交按钮 */
|
||||||
|
submitForm() {
|
||||||
|
this.$refs["form"].validate(valid => {
|
||||||
|
if (valid) {
|
||||||
|
this.buttonLoading = true;
|
||||||
|
if (this.form.id != null) {
|
||||||
|
updateDemo(this.form).then(response => {
|
||||||
|
this.$modal.msgSuccess("修改成功");
|
||||||
|
this.open = false;
|
||||||
|
this.getList();
|
||||||
|
}).finally(() => {
|
||||||
|
this.buttonLoading = false;
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
addDemo(this.form).then(response => {
|
||||||
|
this.$modal.msgSuccess("新增成功");
|
||||||
|
this.open = false;
|
||||||
|
this.getList();
|
||||||
|
}).finally(() => {
|
||||||
|
this.buttonLoading = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
handleDelete(row) {
|
||||||
|
const ids = row.id || this.ids;
|
||||||
|
this.$modal.confirm('是否确认删除测试单表编号为"' + ids + '"的数据项?').then(() => {
|
||||||
|
this.loading = true;
|
||||||
|
return delDemo(ids);
|
||||||
|
}).then(() => {
|
||||||
|
this.loading = false;
|
||||||
|
this.getList();
|
||||||
|
this.$modal.msgSuccess("删除成功");
|
||||||
|
}).finally(() => {
|
||||||
|
this.loading = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/** 导入按钮操作 */
|
||||||
|
handleImport() {
|
||||||
|
this.upload.title = "用户导入";
|
||||||
|
this.upload.open = true;
|
||||||
|
},
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
handleExport() {
|
||||||
|
this.download('demo/demo/export', {
|
||||||
|
...this.queryParams
|
||||||
|
}, `demo_${new Date().getTime()}.xlsx`)
|
||||||
|
},
|
||||||
|
// 文件上传中处理
|
||||||
|
handleFileUploadProgress(event, file, fileList) {
|
||||||
|
this.upload.isUploading = true;
|
||||||
|
},
|
||||||
|
// 文件上传成功处理
|
||||||
|
handleFileSuccess(response, file, fileList) {
|
||||||
|
this.upload.open = false;
|
||||||
|
this.upload.isUploading = false;
|
||||||
|
this.$refs.upload.clearFiles();
|
||||||
|
this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
// 提交上传文件
|
||||||
|
submitFileForm() {
|
||||||
|
this.$refs.upload.submit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
@ -0,0 +1,313 @@
|
||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
|
||||||
|
<el-form-item label="树节点名" prop="treeName">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.treeName"
|
||||||
|
placeholder="请输入树节点名"
|
||||||
|
clearable
|
||||||
|
size="small"
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="创建时间">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="daterangeCreateTime"
|
||||||
|
size="small"
|
||||||
|
style="width: 240px"
|
||||||
|
value-format="yyyy-MM-dd"
|
||||||
|
type="daterange"
|
||||||
|
range-separator="-"
|
||||||
|
start-placeholder="开始日期"
|
||||||
|
end-placeholder="结束日期"
|
||||||
|
></el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||||
|
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
plain
|
||||||
|
icon="el-icon-plus"
|
||||||
|
size="mini"
|
||||||
|
@click="handleAdd"
|
||||||
|
v-hasPermi="['demo:tree:add']"
|
||||||
|
>新增</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button
|
||||||
|
type="info"
|
||||||
|
plain
|
||||||
|
icon="el-icon-sort"
|
||||||
|
size="mini"
|
||||||
|
@click="toggleExpandAll"
|
||||||
|
>展开/折叠</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-table
|
||||||
|
v-if="refreshTable"
|
||||||
|
v-loading="loading"
|
||||||
|
:data="treeList"
|
||||||
|
row-key="id"
|
||||||
|
:default-expand-all="isExpandAll"
|
||||||
|
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
|
||||||
|
>
|
||||||
|
<el-table-column label="父id" prop="parentId" />
|
||||||
|
<el-table-column label="部门id" align="center" prop="deptId" />
|
||||||
|
<el-table-column label="用户id" align="center" prop="userId" />
|
||||||
|
<el-table-column label="树节点名" align="center" prop="treeName" />
|
||||||
|
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button
|
||||||
|
size="mini"
|
||||||
|
type="text"
|
||||||
|
icon="el-icon-edit"
|
||||||
|
@click="handleUpdate(scope.row)"
|
||||||
|
v-hasPermi="['demo:tree:edit']"
|
||||||
|
>修改</el-button>
|
||||||
|
<el-button
|
||||||
|
size="mini"
|
||||||
|
type="text"
|
||||||
|
icon="el-icon-plus"
|
||||||
|
@click="handleAdd(scope.row)"
|
||||||
|
v-hasPermi="['demo:tree:add']"
|
||||||
|
>新增</el-button>
|
||||||
|
<el-button
|
||||||
|
size="mini"
|
||||||
|
type="text"
|
||||||
|
icon="el-icon-delete"
|
||||||
|
@click="handleDelete(scope.row)"
|
||||||
|
v-hasPermi="['demo:tree:remove']"
|
||||||
|
>删除</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<!-- 添加或修改测试树表对话框 -->
|
||||||
|
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||||
|
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||||
|
<el-form-item label="父id" prop="parentId">
|
||||||
|
<treeselect v-model="form.parentId" :options="treeOptions" :normalizer="normalizer" placeholder="请选择父id" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="部门id" prop="deptId">
|
||||||
|
<el-input v-model="form.deptId" placeholder="请输入部门id" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="用户id" prop="userId">
|
||||||
|
<el-input v-model="form.userId" placeholder="请输入用户id" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="树节点名" prop="treeName">
|
||||||
|
<el-input v-model="form.treeName" placeholder="请输入树节点名" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||||
|
<el-button @click="cancel">取 消</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { listTree, getTree, delTree, addTree, updateTree } from "@/api/demo/tree";
|
||||||
|
import Treeselect from "@riophae/vue-treeselect";
|
||||||
|
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "Tree",
|
||||||
|
components: {
|
||||||
|
Treeselect
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
//按钮loading
|
||||||
|
buttonLoading: false,
|
||||||
|
// 遮罩层
|
||||||
|
loading: true,
|
||||||
|
// 显示搜索条件
|
||||||
|
showSearch: true,
|
||||||
|
// 测试树表表格数据
|
||||||
|
treeList: [],
|
||||||
|
// 测试树表树选项
|
||||||
|
treeOptions: [],
|
||||||
|
// 弹出层标题
|
||||||
|
title: "",
|
||||||
|
// 是否显示弹出层
|
||||||
|
open: false,
|
||||||
|
// 是否展开,默认全部展开
|
||||||
|
isExpandAll: true,
|
||||||
|
// 重新渲染表格状态
|
||||||
|
refreshTable: true,
|
||||||
|
// 创建时间时间范围
|
||||||
|
daterangeCreateTime: [],
|
||||||
|
// 查询参数
|
||||||
|
queryParams: {
|
||||||
|
treeName: null,
|
||||||
|
createTime: null,
|
||||||
|
},
|
||||||
|
// 表单参数
|
||||||
|
form: {},
|
||||||
|
// 表单校验
|
||||||
|
rules: {
|
||||||
|
treeName: [
|
||||||
|
{ required: true, message: "树节点名不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
/** 查询测试树表列表 */
|
||||||
|
getList() {
|
||||||
|
this.loading = true;
|
||||||
|
this.queryParams.params = {};
|
||||||
|
if (null != this.daterangeCreateTime && '' != this.daterangeCreateTime) {
|
||||||
|
this.queryParams.params["beginCreateTime"] = this.daterangeCreateTime[0];
|
||||||
|
this.queryParams.params["endCreateTime"] = this.daterangeCreateTime[1];
|
||||||
|
}
|
||||||
|
listTree(this.queryParams).then(response => {
|
||||||
|
this.treeList = this.handleTree(response.data, "id", "parentId");
|
||||||
|
this.loading = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/** 转换测试树表数据结构 */
|
||||||
|
normalizer(node) {
|
||||||
|
if (node.children && !node.children.length) {
|
||||||
|
delete node.children;
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
id: node.id,
|
||||||
|
label: node.treeName,
|
||||||
|
children: node.children
|
||||||
|
};
|
||||||
|
},
|
||||||
|
/** 查询测试树表下拉树结构 */
|
||||||
|
getTreeselect() {
|
||||||
|
listTree().then(response => {
|
||||||
|
this.treeOptions = [];
|
||||||
|
const data = { id: 0, treeName: '顶级节点', children: [] };
|
||||||
|
data.children = this.handleTree(response.data, "id", "parentId");
|
||||||
|
this.treeOptions.push(data);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// 取消按钮
|
||||||
|
cancel() {
|
||||||
|
this.open = false;
|
||||||
|
this.reset();
|
||||||
|
},
|
||||||
|
// 表单重置
|
||||||
|
reset() {
|
||||||
|
this.form = {
|
||||||
|
id: null,
|
||||||
|
parentId: null,
|
||||||
|
deptId: null,
|
||||||
|
userId: null,
|
||||||
|
treeName: null,
|
||||||
|
version: null,
|
||||||
|
createTime: null,
|
||||||
|
createBy: null,
|
||||||
|
updateTime: null,
|
||||||
|
updateBy: null,
|
||||||
|
delFlag: null
|
||||||
|
};
|
||||||
|
this.resetForm("form");
|
||||||
|
},
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
handleQuery() {
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
resetQuery() {
|
||||||
|
this.daterangeCreateTime = [];
|
||||||
|
this.resetForm("queryForm");
|
||||||
|
this.handleQuery();
|
||||||
|
},
|
||||||
|
/** 新增按钮操作 */
|
||||||
|
handleAdd(row) {
|
||||||
|
this.reset();
|
||||||
|
this.getTreeselect();
|
||||||
|
if (row != null && row.id) {
|
||||||
|
this.form.parentId = row.id;
|
||||||
|
} else {
|
||||||
|
this.form.parentId = 0;
|
||||||
|
}
|
||||||
|
this.open = true;
|
||||||
|
this.title = "添加测试树表";
|
||||||
|
},
|
||||||
|
/** 展开/折叠操作 */
|
||||||
|
toggleExpandAll() {
|
||||||
|
this.refreshTable = false;
|
||||||
|
this.isExpandAll = !this.isExpandAll;
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.refreshTable = true;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/** 修改按钮操作 */
|
||||||
|
handleUpdate(row) {
|
||||||
|
this.loading = true;
|
||||||
|
this.reset();
|
||||||
|
this.getTreeselect();
|
||||||
|
if (row != null) {
|
||||||
|
this.form.parentId = row.id;
|
||||||
|
}
|
||||||
|
getTree(row.id).then(response => {
|
||||||
|
this.loading = false;
|
||||||
|
this.form = response.data;
|
||||||
|
this.open = true;
|
||||||
|
this.title = "修改测试树表";
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/** 提交按钮 */
|
||||||
|
submitForm() {
|
||||||
|
this.$refs["form"].validate(valid => {
|
||||||
|
if (valid) {
|
||||||
|
this.buttonLoading = true;
|
||||||
|
if (this.form.id != null) {
|
||||||
|
updateTree(this.form).then(response => {
|
||||||
|
this.$modal.msgSuccess("修改成功");
|
||||||
|
this.open = false;
|
||||||
|
this.getList();
|
||||||
|
}).finally(() => {
|
||||||
|
this.buttonLoading = false;
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
addTree(this.form).then(response => {
|
||||||
|
this.$modal.msgSuccess("新增成功");
|
||||||
|
this.open = false;
|
||||||
|
this.getList();
|
||||||
|
}).finally(() => {
|
||||||
|
this.buttonLoading = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
handleDelete(row) {
|
||||||
|
this.$modal.confirm('是否确认删除测试树表编号为"' + row.id + '"的数据项?').then(() => {
|
||||||
|
this.loading = true;
|
||||||
|
return delTree(row.id);
|
||||||
|
}).then(() => {
|
||||||
|
this.loading = false;
|
||||||
|
this.getList();
|
||||||
|
this.$modal.msgSuccess("删除成功");
|
||||||
|
}).finally(() => {
|
||||||
|
this.loading = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
@ -0,0 +1,171 @@
|
||||||
|
DROP TABLE if EXISTS test_demo;
|
||||||
|
CREATE TABLE test_demo
|
||||||
|
(
|
||||||
|
id bigint(0) NOT NULL COMMENT '主键',
|
||||||
|
dept_id bigint(0) NULL DEFAULT NULL COMMENT '部门id',
|
||||||
|
user_id bigint(0) NULL DEFAULT NULL COMMENT '用户id',
|
||||||
|
order_num int(0) NULL DEFAULT 0 COMMENT '排序号',
|
||||||
|
test_key varchar(255) NULL DEFAULT NULL COMMENT 'key键',
|
||||||
|
value varchar(255) NULL DEFAULT NULL COMMENT '值',
|
||||||
|
version int(0) NULL DEFAULT 0 COMMENT '版本',
|
||||||
|
create_time datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
|
||||||
|
create_by varchar(64) NULL DEFAULT NULL COMMENT '创建人',
|
||||||
|
update_time datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
|
||||||
|
update_by varchar(64) NULL DEFAULT NULL COMMENT '更新人',
|
||||||
|
del_flag int(0) NULL DEFAULT 0 COMMENT '删除标志',
|
||||||
|
PRIMARY KEY (id) USING BTREE
|
||||||
|
) ENGINE = InnoDB COMMENT = '测试单表';
|
||||||
|
|
||||||
|
DROP TABLE if EXISTS test_tree;
|
||||||
|
CREATE TABLE test_tree
|
||||||
|
(
|
||||||
|
id bigint(0) NOT NULL COMMENT '主键',
|
||||||
|
parent_id bigint(0) NULL DEFAULT 0 COMMENT '父id',
|
||||||
|
dept_id bigint(0) NULL DEFAULT NULL COMMENT '部门id',
|
||||||
|
user_id bigint(0) NULL DEFAULT NULL COMMENT '用户id',
|
||||||
|
tree_name varchar(255) NULL DEFAULT NULL COMMENT '值',
|
||||||
|
version int(0) NULL DEFAULT 0 COMMENT '版本',
|
||||||
|
create_time datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
|
||||||
|
create_by varchar(64) NULL DEFAULT NULL COMMENT '创建人',
|
||||||
|
update_time datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
|
||||||
|
update_by varchar(64) NULL DEFAULT NULL COMMENT '更新人',
|
||||||
|
del_flag int(0) NULL DEFAULT 0 COMMENT '删除标志',
|
||||||
|
PRIMARY KEY (id) USING BTREE
|
||||||
|
) ENGINE = InnoDB COMMENT = '测试树表';
|
||||||
|
|
||||||
|
INSERT INTO sys_user(user_id, dept_id, user_name, nick_name, user_type, email, phonenumber, sex, avatar, password, status, del_flag, login_ip, login_date, create_by, create_time, update_by, update_time, remark) VALUES (3, 108, 'test', '本部门及以下 密码666666', 'sys_user', '', '', '0', '', '$2a$10$b8yUzN0C71sbz.PhNOCgJe.Tu1yWC3RNrTyjSQ8p1W0.aaUXUJ.Ne', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), 'test', sysdate(), NULL);
|
||||||
|
INSERT INTO sys_user(user_id, dept_id, user_name, nick_name, user_type, email, phonenumber, sex, avatar, password, status, del_flag, login_ip, login_date, create_by, create_time, update_by, update_time, remark) VALUES (4, 102, 'test1', '仅本人 密码666666', 'sys_user', '', '', '0', '', '$2a$10$b8yUzN0C71sbz.PhNOCgJe.Tu1yWC3RNrTyjSQ8p1W0.aaUXUJ.Ne', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), 'test1', sysdate(), NULL);
|
||||||
|
|
||||||
|
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES (5, '测试菜单', 0, 5, 'demo', NULL, 1, 0, 'M', '0', '0', NULL, 'star', 'admin', sysdate(), NULL, NULL, '');
|
||||||
|
|
||||||
|
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES (1500, '测试单表', 5, 1, 'demo', 'demo/demo/index', 1, 0, 'C', '0', '0', 'demo:demo:list', '#', 'admin', sysdate(), '', NULL, '测试单表菜单');
|
||||||
|
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES (1501, '测试单表查询', 1500, 1, '#', '', 1, 0, 'F', '0', '0', 'demo:demo:query', '#', 'admin', sysdate(), '', NULL, '');
|
||||||
|
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES (1502, '测试单表新增', 1500, 2, '#', '', 1, 0, 'F', '0', '0', 'demo:demo:add', '#', 'admin', sysdate(), '', NULL, '');
|
||||||
|
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES (1503, '测试单表修改', 1500, 3, '#', '', 1, 0, 'F', '0', '0', 'demo:demo:edit', '#', 'admin', sysdate(), '', NULL, '');
|
||||||
|
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES (1504, '测试单表删除', 1500, 4, '#', '', 1, 0, 'F', '0', '0', 'demo:demo:remove', '#', 'admin', sysdate(), '', NULL, '');
|
||||||
|
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES (1505, '测试单表导出', 1500, 5, '#', '', 1, 0, 'F', '0', '0', 'demo:demo:export', '#', 'admin', sysdate(), '', NULL, '');
|
||||||
|
|
||||||
|
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES (1506, '测试树表', 5, 1, 'tree', 'demo/tree/index', 1, 0, 'C', '0', '0', 'demo:tree:list', '#', 'admin', sysdate(), '', NULL, '测试树表菜单');
|
||||||
|
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES (1507, '测试树表查询', 1506, 1, '#', '', 1, 0, 'F', '0', '0', 'demo:tree:query', '#', 'admin', sysdate(), '', NULL, '');
|
||||||
|
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES (1508, '测试树表新增', 1506, 2, '#', '', 1, 0, 'F', '0', '0', 'demo:tree:add', '#', 'admin', sysdate(), '', NULL, '');
|
||||||
|
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES (1509, '测试树表修改', 1506, 3, '#', '', 1, 0, 'F', '0', '0', 'demo:tree:edit', '#', 'admin', sysdate(), '', NULL, '');
|
||||||
|
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES (1510, '测试树表删除', 1506, 4, '#', '', 1, 0, 'F', '0', '0', 'demo:tree:remove', '#', 'admin', sysdate(), '', NULL, '');
|
||||||
|
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES (1511, '测试树表导出', 1506, 5, '#', '', 1, 0, 'F', '0', '0', 'demo:tree:export', '#', 'admin', sysdate(), '', NULL, '');
|
||||||
|
|
||||||
|
INSERT INTO sys_role(role_id, role_name, role_key, role_sort, data_scope, menu_check_strictly, dept_check_strictly, status, del_flag, create_by, create_time, update_by, update_time, remark) VALUES (3, '本部门及以下', 'test1', 3, '4', 1, 1, '0', '0', 'admin', sysdate(), 'admin', NULL, NULL);
|
||||||
|
INSERT INTO sys_role(role_id, role_name, role_key, role_sort, data_scope, menu_check_strictly, dept_check_strictly, status, del_flag, create_by, create_time, update_by, update_time, remark) VALUES (4, '仅本人', 'test2', 4, '5', 1, 1, '0', '0', 'admin', sysdate(), 'admin', NULL, NULL);
|
||||||
|
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 5);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 100);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 101);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 102);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 103);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 104);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 105);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 106);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 107);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 108);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 500);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 501);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1001);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1002);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1003);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1004);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1005);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1006);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1007);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1008);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1009);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1010);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1011);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1012);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1013);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1014);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1015);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1016);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1017);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1018);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1019);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1020);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1021);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1022);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1023);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1024);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1025);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1026);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1027);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1028);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1029);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1030);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1031);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1032);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1033);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1034);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1035);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1036);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1037);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1038);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1039);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1040);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1041);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1042);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1043);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1044);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1045);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1500);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1501);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1502);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1503);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1504);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1505);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1506);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1507);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1508);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1509);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1510);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (3, 1511);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (4, 5);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (4, 1500);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (4, 1501);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (4, 1502);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (4, 1503);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (4, 1504);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (4, 1505);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (4, 1506);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (4, 1507);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (4, 1508);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (4, 1509);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (4, 1510);
|
||||||
|
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (4, 1511);
|
||||||
|
|
||||||
|
INSERT INTO sys_user_role(user_id, role_id) VALUES (3, 3);
|
||||||
|
INSERT INTO sys_user_role(user_id, role_id) VALUES (4, 4);
|
||||||
|
|
||||||
|
INSERT INTO test_demo(id, dept_id, user_id, order_num, test_key, value, version, create_time, create_by, update_time, update_by, del_flag) VALUES (1, 102, 4, 1, '测试数据权限', '测试', 0, sysdate(), 'admin', NULL, NULL, 0);
|
||||||
|
INSERT INTO test_demo(id, dept_id, user_id, order_num, test_key, value, version, create_time, create_by, update_time, update_by, del_flag) VALUES (2, 102, 3, 2, '子节点1', '111', 0, sysdate(), 'admin', NULL, NULL, 0);
|
||||||
|
INSERT INTO test_demo(id, dept_id, user_id, order_num, test_key, value, version, create_time, create_by, update_time, update_by, del_flag) VALUES (3, 102, 3, 3, '子节点2', '222', 0, sysdate(), 'admin', NULL, NULL, 0);
|
||||||
|
INSERT INTO test_demo(id, dept_id, user_id, order_num, test_key, value, version, create_time, create_by, update_time, update_by, del_flag) VALUES (4, 108, 4, 4, '测试数据', 'demo', 0, sysdate(), 'admin', NULL, NULL, 0);
|
||||||
|
INSERT INTO test_demo(id, dept_id, user_id, order_num, test_key, value, version, create_time, create_by, update_time, update_by, del_flag) VALUES (5, 108, 3, 13, '子节点11', '1111', 0, sysdate(), 'admin', NULL, NULL, 0);
|
||||||
|
INSERT INTO test_demo(id, dept_id, user_id, order_num, test_key, value, version, create_time, create_by, update_time, update_by, del_flag) VALUES (6, 108, 3, 12, '子节点22', '2222', 0, sysdate(), 'admin', NULL, NULL, 0);
|
||||||
|
INSERT INTO test_demo(id, dept_id, user_id, order_num, test_key, value, version, create_time, create_by, update_time, update_by, del_flag) VALUES (7, 108, 3, 11, '子节点33', '3333', 0, sysdate(), 'admin', NULL, NULL, 0);
|
||||||
|
INSERT INTO test_demo(id, dept_id, user_id, order_num, test_key, value, version, create_time, create_by, update_time, update_by, del_flag) VALUES (8, 108, 3, 10, '子节点44', '4444', 0, sysdate(), 'admin', NULL, NULL, 0);
|
||||||
|
INSERT INTO test_demo(id, dept_id, user_id, order_num, test_key, value, version, create_time, create_by, update_time, update_by, del_flag) VALUES (9, 108, 3, 9, '子节点55', '5555', 0, sysdate(), 'admin', NULL, NULL, 0);
|
||||||
|
INSERT INTO test_demo(id, dept_id, user_id, order_num, test_key, value, version, create_time, create_by, update_time, update_by, del_flag) VALUES (10, 108, 3, 8, '子节点66', '6666', 0, sysdate(), 'admin', NULL, NULL, 0);
|
||||||
|
INSERT INTO test_demo(id, dept_id, user_id, order_num, test_key, value, version, create_time, create_by, update_time, update_by, del_flag) VALUES (11, 108, 3, 7, '子节点77', '7777', 0, sysdate(), 'admin', NULL, NULL, 0);
|
||||||
|
INSERT INTO test_demo(id, dept_id, user_id, order_num, test_key, value, version, create_time, create_by, update_time, update_by, del_flag) VALUES (12, 108, 3, 6, '子节点88', '8888', 0, sysdate(), 'admin', NULL, NULL, 0);
|
||||||
|
INSERT INTO test_demo(id, dept_id, user_id, order_num, test_key, value, version, create_time, create_by, update_time, update_by, del_flag) VALUES (13, 108, 3, 5, '子节点99', '9999', 0, sysdate(), 'admin', NULL, NULL, 0);
|
||||||
|
|
||||||
|
INSERT INTO test_tree(id, parent_id, dept_id, user_id, tree_name, version, create_time, create_by, update_time, update_by, del_flag) VALUES (1, 0, 102, 4, '测试数据权限', 0, sysdate(), 'admin', NULL, NULL, 0);
|
||||||
|
INSERT INTO test_tree(id, parent_id, dept_id, user_id, tree_name, version, create_time, create_by, update_time, update_by, del_flag) VALUES (2, 1, 102, 3, '子节点1', 0, sysdate(), 'admin', NULL, NULL, 0);
|
||||||
|
INSERT INTO test_tree(id, parent_id, dept_id, user_id, tree_name, version, create_time, create_by, update_time, update_by, del_flag) VALUES (3, 2, 102, 3, '子节点2', 0, sysdate(), 'admin', NULL, NULL, 0);
|
||||||
|
INSERT INTO test_tree(id, parent_id, dept_id, user_id, tree_name, version, create_time, create_by, update_time, update_by, del_flag) VALUES (4, 0, 108, 4, '测试树1', 0, sysdate(), 'admin', NULL, NULL, 0);
|
||||||
|
INSERT INTO test_tree(id, parent_id, dept_id, user_id, tree_name, version, create_time, create_by, update_time, update_by, del_flag) VALUES (5, 4, 108, 3, '子节点11', 0, sysdate(), 'admin', NULL, NULL, 0);
|
||||||
|
INSERT INTO test_tree(id, parent_id, dept_id, user_id, tree_name, version, create_time, create_by, update_time, update_by, del_flag) VALUES (6, 4, 108, 3, '子节点22', 0, sysdate(), 'admin', NULL, NULL, 0);
|
||||||
|
INSERT INTO test_tree(id, parent_id, dept_id, user_id, tree_name, version, create_time, create_by, update_time, update_by, del_flag) VALUES (7, 4, 108, 3, '子节点33', 0, sysdate(), 'admin', NULL, NULL, 0);
|
||||||
|
INSERT INTO test_tree(id, parent_id, dept_id, user_id, tree_name, version, create_time, create_by, update_time, update_by, del_flag) VALUES (8, 5, 108, 3, '子节点44', 0, sysdate(), 'admin', NULL, NULL, 0);
|
||||||
|
INSERT INTO test_tree(id, parent_id, dept_id, user_id, tree_name, version, create_time, create_by, update_time, update_by, del_flag) VALUES (9, 6, 108, 3, '子节点55', 0, sysdate(), 'admin', NULL, NULL, 0);
|
||||||
|
INSERT INTO test_tree(id, parent_id, dept_id, user_id, tree_name, version, create_time, create_by, update_time, update_by, del_flag) VALUES (10, 7, 108, 3, '子节点66', 0, sysdate(), 'admin', NULL, NULL, 0);
|
||||||
|
INSERT INTO test_tree(id, parent_id, dept_id, user_id, tree_name, version, create_time, create_by, update_time, update_by, del_flag) VALUES (11, 7, 108, 3, '子节点77', 0, sysdate(), 'admin', NULL, NULL, 0);
|
||||||
|
INSERT INTO test_tree(id, parent_id, dept_id, user_id, tree_name, version, create_time, create_by, update_time, update_by, del_flag) VALUES (12, 10, 108, 3, '子节点88', 0, sysdate(), 'admin', NULL, NULL, 0);
|
||||||
|
INSERT INTO test_tree(id, parent_id, dept_id, user_id, tree_name, version, create_time, create_by, update_time, update_by, del_flag) VALUES (13, 10, 108, 3, '子节点99', 0, sysdate(), 'admin', NULL, NULL, 0);
|
||||||
Loading…
Reference in New Issue