Compare commits

..
14 Commits
Author SHA1 Message Date
mazxd 0843049b5a feat: 迁移2 2025-04-08 08:24:33 +08:00
mazxd 7025c84a58 feat: 迁移1 2025-04-06 18:24:16 +08:00
mazxd 4276942ca4 ci: 删掉无用文件 2025-04-05 12:34:34 +08:00
mzaxd bdaff206f2 refactor(bps): 重构代码并添加 Qodana 配置
- 修改 FastJsonRedisSerializer 类中的 deserialize 方法
- 删除未使用的 OsConstant 类
- 更新 OtherController 中的代码
- 添加 Qodana 配置文件 qodana.yaml
- 删除未使用的 RabbitMqConstant 类
- 精简 RedisConstant 类
- 大幅精简 SystemConstant 类
- 删除未使用的 UrlConstant 类
2025-03-26 18:05:27 +08:00
mzaxd 849ddb78bd refactor(bps): 重构响应结果类并优化相关代码
- 重构 ResponseResult 类,采用构建者模式(Builder Pattern)设计- 优化了成功和失败响应的创建方法,提高了代码可读性和易用性
- 更新了相关服务和控制器中的响应结果创建方式
- 统一了错误消息的命名,提高了代码一致性
2025-03-26 17:39:00 +08:00
mzaxd 2a84b71920 build:切换配置文件并移除 RabbitMQ 配置- 将 application.yml 中的 active profile 从 prod 改为 dev
- 从 application-dev.yml 和 application-prod.yml 中移除 RabbitMQ 配置
2025-03-26 15:17:12 +08:00
mzaxd 4136dcc307 chore: 添加 .cursorignore 文件配置
- 新增 .cursorignore 文件,用于忽略索引时的目录和文件模式
- 忽略项目中的 target 目录、IDEA 配置文件等- 保留必要的 Maven wrapper 文件和源代码中的 target 目录
2025-03-26 15:15:38 +08:00
mzaxd 9f678d422e refactor(bps): 重构项目目录结构和代码
- 更新包名从 com.mzaxd.noodles 到 com.mzaxd.bps
- 删除了一些未使用的类和接口
- 调整了部分代码结构以适应新的项目需求
2025-03-26 15:15:23 +08:00
mzaxd 1e03f301aa Merge remote-tracking branch 'origin/master' 2023-07-11 14:39:46 +08:00
mzaxd e34ca42f3c ci: 常量优化 2023-07-11 14:39:30 +08:00
未勒燕然山 b1a200aad1 Update README.md 2023-05-12 09:40:18 +08:00
mzaxd 4bd84c23b8 Merge remote-tracking branch 'origin/master' 2023-05-12 07:54:10 +08:00
mzaxd b76b7769a8 修复邮件重复发送Bug 2023-05-12 07:53:49 +08:00
未勒燕然山 8946f9b98f Create README.md 2023-03-23 21:29:21 +08:00
217 changed files with 2140 additions and 10083 deletions
+13
View File
@@ -0,0 +1,13 @@
# Add directories or file patterns to ignore during indexing (e.g. foo/ or *.csv)
# Project exclude paths
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
-2
View File
@@ -1,6 +1,4 @@
# Project exclude paths
/Noodles-Detector/target/
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
+16
View File
@@ -0,0 +1,16 @@
# 百盘搜
## 这个项目是做什么的?
- 网盘聚合搜索器
1.自动搜索对应的网盘资源(多种网盘,包括百度网盘,UC网盘,迅雷云盘,夸克网盘)然后转存到我的对应网盘的账号后,将分享链接返回。
2.一个强大的搜索入口,高度扩展性,可以扩展各种网盘,返回对应网盘的分享链接,接口速度快,多级缓存。
- 常见社交平台推广下载链接
类似B站这样的平台,可以自动发现某个类型的视频,然后将所有资料整理,自动转存后形成分享链接,并且自动评论到评论区。
## 功能模块
1. 云盘管理(设计上是四种云盘,但目前只支持百度云盘)
2. 资源管理
3. 评论管理(评论时间,评论的链接要能跳转看到)
4. 日志管理(都搜索了什么,要记录下来)
View File
+19 -41
View File
@@ -9,12 +9,12 @@
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.mzaxd</groupId>
<artifactId>Noodles</artifactId>
<artifactId>BPS</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Noodles</name>
<description>Noodles</description>
<name>BPS-Server</name>
<description>BPS-Server</description>
<properties>
<java.version>1.8</java.version>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
@@ -30,10 +30,11 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- druid -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.15</version>
</dependency>
<!--lombok-->
<dependency>
@@ -55,7 +56,7 @@
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.33</version>
<version>1.2.83</version>
</dependency>
<!--jwt依赖-->
<dependency>
@@ -84,10 +85,6 @@
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
@@ -107,28 +104,11 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.lionsoul/ip2region -->
<dependency>
<groupId>org.lionsoul</groupId>
<artifactId>ip2region</artifactId>
<version>2.7.0</version>
</dependency>
<!--工具类-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.7</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.2.1</version>
<version>5.8.24</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.jcraft/jsch -->
@@ -143,17 +123,6 @@
<artifactId>ganymed-ssh2</artifactId>
<version>262</version>
</dependency>
<!--监控-->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.7.8</version>
</dependency>
<!--暴露端点-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
<build>
@@ -171,6 +140,15 @@
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<excludes>
<exclude>**/*.exe</exclude>
</excludes>
</resource>
</resources>
</build>
</project>
+31
View File
@@ -0,0 +1,31 @@
#-------------------------------------------------------------------------------#
# Qodana analysis is configured by qodana.yaml file #
# https://www.jetbrains.com/help/qodana/qodana-yaml.html #
#-------------------------------------------------------------------------------#
version: "1.0"
#Specify inspection profile for code analysis
profile:
name: qodana.starter
#Enable inspections
#include:
# - name: <SomeEnabledInspectionId>
#Disable inspections
#exclude:
# - name: <SomeDisabledInspectionId>
# paths:
# - <path/where/not/run/inspection>
projectJDK: "17" #(Applied in CI/CD pipeline)
#Execute shell command before Qodana execution (Applied in CI/CD pipeline)
#bootstrap: sh ./prepare-qodana.sh
#Install IDE plugins before Qodana execution (Applied in CI/CD pipeline)
#plugins:
# - id: <plugin.id> #(plugin id can be found at https://plugins.jetbrains.com)
#Specify Qodana linter for analysis (Applied in CI/CD pipeline)
linter: jetbrains/qodana-jvm:latest
@@ -1,9 +1,8 @@
package com.mzaxd.noodles;
package com.mzaxd.bps;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.scheduling.annotation.EnableScheduling;
/**
@@ -11,11 +10,11 @@ import org.springframework.scheduling.annotation.EnableScheduling;
*/
@SpringBootApplication
@EnableScheduling
@MapperScan("com.mzaxd.noodles.mapper")
public class NoodlesApplication {
@MapperScan("com.mzaxd.bps.mapper")
public class BPSApplication {
public static void main(String[] args) {
SpringApplication.run(NoodlesApplication.class, args);
SpringApplication.run(BPSApplication.class, args);
}
}
@@ -1,6 +1,6 @@
package com.mzaxd.noodles.annotation;
package com.mzaxd.bps.annotation;
import com.mzaxd.noodles.enums.OperationEnum;
import com.mzaxd.bps.enums.OperationEnum;
import java.lang.annotation.*;
@@ -0,0 +1,57 @@
package com.mzaxd.bps.aspect;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
/**
* @author 13439
*/
@Component
@Aspect
@Slf4j
public class SysLogAspect {
// @Resource
// private AuditLogService auditLogService;
//
// @Pointcut("@annotation(com.mzaxd.bps.annotation.SysLog)")
// public void logPointCut() {
//
// }
//
// //方法执行前后都操作
// @Around("logPointCut()")
// public Object around(ProceedingJoinPoint point) throws Throwable {
// //执行方法
// Object result = point.proceed();
// //保存日志
// saveSysLog(point);
// return result;
// }
//
// private void saveSysLog(ProceedingJoinPoint joinPoint) {
// MethodSignature signature = (MethodSignature) joinPoint.getSignature();
// Method method = signature.getMethod();
//
// AuditLog auditLog = new AuditLog();
// SysLog syslog = method.getAnnotation(SysLog.class);
// if (syslog != null) {
// //注解上的描述
// auditLog.setOperation(syslog.operation().getOperation());
// auditLog.setOperationType(syslog.operation().getOperationType());
// }
//
// //请求的参数
// Object[] args = joinPoint.getArgs();
// try {
// String params = JSON.toJSONString(args);
// auditLog.setParam(params);
// } catch (Exception e) {
// log.error(e.getMessage());
// }
//
// //保存系统日志
// auditLogService.save(auditLog);
// }
}
@@ -1,4 +1,4 @@
package com.mzaxd.noodles.config;
package com.mzaxd.bps.config;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.parser.ParserConfig;
@@ -9,6 +9,7 @@ import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
/**
* Redis使用FastJson序列化
@@ -17,9 +18,9 @@ import java.nio.charset.Charset;
*/
public class FastJsonRedisSerializer<T> implements RedisSerializer<T> {
public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
public static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;
private Class<T> clazz;
private final Class<T> clazz;
static {
ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
@@ -40,7 +41,7 @@ public class FastJsonRedisSerializer<T> implements RedisSerializer<T> {
@Override
public T deserialize(byte[] bytes) throws SerializationException {
if (bytes == null || bytes.length <= 0) {
if (bytes == null || bytes.length == 0) {
return null;
}
String str = new String(bytes, DEFAULT_CHARSET);
@@ -52,4 +53,4 @@ public class FastJsonRedisSerializer<T> implements RedisSerializer<T> {
protected JavaType getJavaType(Class<?> clazz) {
return TypeFactory.defaultInstance().constructType(clazz);
}
}
}
@@ -0,0 +1,41 @@
package com.mzaxd.bps.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/**
* 文件上传配置
*
* @author mzaxd
* @since 2024-04-06
*/
@Configuration
@ConfigurationProperties(prefix = "file")
public class FileConfig {
/**
* 上传路径
*/
private String uploadPath;
/**
* 访问路径
*/
private String accessPath;
public String getUploadPath() {
return uploadPath;
}
public void setUploadPath(String uploadPath) {
this.uploadPath = uploadPath;
}
public String getAccessPath() {
return accessPath;
}
public void setAccessPath(String accessPath) {
this.accessPath = accessPath;
}
}
@@ -1,4 +1,4 @@
package com.mzaxd.noodles.config;
package com.mzaxd.bps.config;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
@@ -23,4 +23,4 @@ public class MyBatisPlusConfig {
mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return mybatisPlusInterceptor;
}
}
}
@@ -1,4 +1,4 @@
package com.mzaxd.noodles.config;
package com.mzaxd.bps.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -28,4 +28,4 @@ public class RedisConfig {
template.afterPropertiesSet();
return template;
}
}
}
@@ -1,4 +1,4 @@
package com.mzaxd.noodles.config;
package com.mzaxd.bps.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -1,11 +1,10 @@
package com.mzaxd.noodles.config;
package com.mzaxd.bps.config;
import com.mzaxd.noodles.filter.JwtAuthenticationTokenFilter;
import com.mzaxd.bps.filter.JwtAuthenticationTokenFilter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@@ -1,4 +1,4 @@
package com.mzaxd.noodles.config;
package com.mzaxd.bps.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -23,7 +23,7 @@ public class SwaggerConfig {
.build();
}
private ApiInfo apiInfo() {
Contact contact = new Contact("一个人的团队", "http://www.my.com", "my@my.com");
Contact contact = new Contact("一个人的团队", "https://www.my.com", "my@my.com");
return new ApiInfoBuilder()
.title("文档标题")
.description("文档描述")
@@ -31,4 +31,4 @@ public class SwaggerConfig {
.version("1.0.0") // 版本
.build();
}
}
}
@@ -1,4 +1,4 @@
package com.mzaxd.noodles.config;
package com.mzaxd.bps.config;
import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;
@@ -47,8 +47,7 @@ public class WebConfig implements WebMvcConfigurer {
fastJsonConfig.setSerializeConfig(SerializeConfig.globalInstance);
fastConverter.setFastJsonConfig(fastJsonConfig);
HttpMessageConverter<?> converter = fastConverter;
return converter;
return fastConverter;
}
@Override
@@ -56,4 +55,4 @@ public class WebConfig implements WebMvcConfigurer {
converters.add(fastJsonHttpMessageConverters());
}
}
}
@@ -1,4 +1,4 @@
package com.mzaxd.noodles.config;
package com.mzaxd.bps.config;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.web.servlet.ServletContextInitializer;
@@ -1,4 +1,4 @@
package com.mzaxd.noodles.constant;
package com.mzaxd.bps.constant;
/**
* @author root
@@ -8,36 +8,21 @@ public class RedisConstant {
/**
* Redis Key
*
* @author mzaxd
* @date 2/7/23 12:59 PM
* @param null
*/
public static final String DYNAMIC_DATA = "dynamicData:";
/**
* Redis Key
*
* @author mzaxd
* @date 2/7/23 12:59 PM
* @param null
*/
public static final String NOTIFY_CONTAINER_IDS = "notify:containerIds";
/**
* Redis Key
*
* @author mzaxd
* @date 2/7/23 12:59 PM
* @param null
*/
public static final String NOTIFY_HOST_IDS = "notify:hostIds";
/**
* Redis Key
*
* @author mzaxd
* @date 2/7/23 12:59 PM
* @param null
*/
public static final String NOTIFY_VM_IDS = "notify:vmIds";
}
@@ -0,0 +1,45 @@
package com.mzaxd.bps.constant;
/**
* @author root
*/
public class SystemConstant {
/**
* 正常状态(非第一次使用) 通用常量
*/
public static final Integer NORMAL_STATE = 1;
/**
* 日志类型为用户
*/
public static final String LOG_USER = "用户";
/**
* 未处理的通知
*/
public static final Integer NOTIFICATION_NOT_AFFIRM = 0;
/**
* 已处理的通知
*/
public static final Integer NOTIFICATION_AFFIRM = 1;
/**
* 通知实例类型 物理机
*/
public static final Integer INSTANCETYPE_HOST = 1;
/**
* 通知实例类型 虚拟机
*/
public static final Integer INSTANCETYPE_VM = 2;
/**
* 通知实例类型 容器
*/
public static final Integer INSTANCETYPE_CONTAINER = 3;
}
@@ -0,0 +1,41 @@
package com.mzaxd.bps.controller;
import com.mzaxd.bps.config.FileConfig;
import com.mzaxd.bps.util.FileUtil;
import com.mzaxd.bps.util.Result;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.IOException;
/**
* 文件上传Controller
*
* @author mzaxd
* @since 2024-04-06
*/
@RestController
@RequestMapping("/file")
public class FileController {
@Resource
private FileConfig fileConfig;
/**
* 上传文件
*/
@PostMapping("/upload")
public Result<String> upload(@RequestParam("file") MultipartFile file) throws IOException {
String fileName = FileUtil.upload(file, fileConfig.getUploadPath());
return Result.success(fileConfig.getAccessPath() + fileName);
}
/**
* 删除文件
*/
@DeleteMapping("/{fileName}")
public Result<Boolean> delete(@PathVariable String fileName) {
return Result.success(FileUtil.delete(fileConfig.getUploadPath() + fileName));
}
}
@@ -0,0 +1,82 @@
package com.mzaxd.bps.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mzaxd.bps.domain.entity.SourceCategory;
import com.mzaxd.bps.service.SourceCategoryService;
import com.mzaxd.bps.util.Result;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
* 网盘分类Controller
*
* @author mzaxd
* @since 2024-04-06
*/
@RestController
@RequestMapping("/source/category")
public class SourceCategoryController {
@Resource
private SourceCategoryService sourceCategoryService;
/**
* 分页查询网盘分类
*/
@GetMapping("/page")
public Result<Page<SourceCategory>> page(
@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize,
@RequestParam(required = false) String name) {
LambdaQueryWrapper<SourceCategory> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(name != null, SourceCategory::getName, name)
.orderByAsc(SourceCategory::getSort);
return Result.success(sourceCategoryService.page(new Page<>(pageNum, pageSize), queryWrapper));
}
/**
* 获取所有网盘分类
*/
@GetMapping("/list")
public Result<List<SourceCategory>> list() {
LambdaQueryWrapper<SourceCategory> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SourceCategory::getStatus, 1)
.orderByAsc(SourceCategory::getSort);
return Result.success(sourceCategoryService.list(queryWrapper));
}
/**
* 获取网盘分类详情
*/
@GetMapping("/{id}")
public Result<SourceCategory> getById(@PathVariable Long id) {
return Result.success(sourceCategoryService.getById(id));
}
/**
* 新增网盘分类
*/
@PostMapping
public Result<Boolean> save(@RequestBody SourceCategory sourceCategory) {
return Result.success(sourceCategoryService.save(sourceCategory));
}
/**
* 修改网盘分类
*/
@PutMapping
public Result<Boolean> updateById(@RequestBody SourceCategory sourceCategory) {
return Result.success(sourceCategoryService.updateById(sourceCategory));
}
/**
* 删除网盘分类
*/
@DeleteMapping("/{id}")
public Result<Boolean> removeById(@PathVariable Long id) {
return Result.success(sourceCategoryService.removeById(id));
}
}
@@ -0,0 +1,84 @@
package com.mzaxd.bps.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mzaxd.bps.domain.entity.Source;
import com.mzaxd.bps.service.SourceService;
import com.mzaxd.bps.util.Result;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
* 网盘资源Controller
*
* @author mzaxd
* @since 2024-04-06
*/
@RestController
@RequestMapping("/source")
public class SourceController {
@Resource
private SourceService sourceService;
/**
* 搜索网盘资源
*/
@GetMapping("/search")
public Result<Page<Source>> search(
@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize,
@RequestParam(required = false) String keyword,
@RequestParam(required = false) Long categoryId) {
return Result.success(sourceService.search(pageNum, pageSize, keyword, categoryId));
}
/**
* 分页查询网盘资源
*/
@GetMapping("/page")
public Result<Page<Source>> page(
@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize,
@RequestParam(required = false) String title,
@RequestParam(required = false) Long sourceCategoryId) {
LambdaQueryWrapper<Source> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(title != null, Source::getTitle, title)
.eq(sourceCategoryId != null, Source::getSourceCategoryId, sourceCategoryId)
.orderByDesc(Source::getCreateTime);
return Result.success(sourceService.page(new Page<>(pageNum, pageSize), queryWrapper));
}
/**
* 获取网盘资源详情
*/
@GetMapping("/{id}")
public Result<Source> getById(@PathVariable Long id) {
return Result.success(sourceService.getById(id));
}
/**
* 新增网盘资源
*/
@PostMapping
public Result<Boolean> save(@RequestBody Source source) {
return Result.success(sourceService.save(source));
}
/**
* 修改网盘资源
*/
@PutMapping
public Result<Boolean> updateById(@RequestBody Source source) {
return Result.success(sourceService.updateById(source));
}
/**
* 删除网盘资源
*/
@DeleteMapping("/{id}")
public Result<Boolean> removeById(@PathVariable Long id) {
return Result.success(sourceService.removeById(id));
}
}
@@ -0,0 +1,62 @@
package com.mzaxd.bps.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mzaxd.bps.domain.entity.SourceLog;
import com.mzaxd.bps.service.SourceLogService;
import com.mzaxd.bps.util.Result;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
* 网盘日志Controller
*
* @author mzaxd
* @since 2024-04-06
*/
@RestController
@RequestMapping("/source/log")
public class SourceLogController {
@Resource
private SourceLogService sourceLogService;
/**
* 分页查询网盘日志
*/
@GetMapping("/page")
public Result<Page<SourceLog>> page(
@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize,
@RequestParam(required = false) Long sourceId) {
LambdaQueryWrapper<SourceLog> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(sourceId != null, SourceLog::getSourceId, sourceId)
.orderByDesc(SourceLog::getCreateTime);
return Result.success(sourceLogService.page(new Page<>(pageNum, pageSize), queryWrapper));
}
/**
* 获取网盘日志详情
*/
@GetMapping("/{id}")
public Result<SourceLog> getById(@PathVariable Long id) {
return Result.success(sourceLogService.getById(id));
}
/**
* 新增网盘日志
*/
@PostMapping
public Result<Boolean> save(@RequestBody SourceLog sourceLog) {
return Result.success(sourceLogService.save(sourceLog));
}
/**
* 删除网盘日志
*/
@DeleteMapping("/{id}")
public Result<Boolean> removeById(@PathVariable Long id) {
return Result.success(sourceLogService.removeById(id));
}
}
@@ -0,0 +1,20 @@
package com.mzaxd.bps.domain;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;
@Setter
@Getter
public class CloudFile {
private String id;
private String name;
private String path;
private long size;
private LocalDateTime createTime;
private LocalDateTime modifyTime;
private String md5;
private String shareLink;
}
@@ -0,0 +1,28 @@
package com.mzaxd.bps.domain;
import com.mzaxd.bps.service.impl.BaiduPcsService;
import com.mzaxd.bps.enums.CloudStorageType;
import com.mzaxd.bps.service.CloudStorageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
@Component
public class CloudStorageFactory {
private final Map<CloudStorageType, CloudStorageService> services = new HashMap<>();
@Autowired
public CloudStorageFactory(BaiduPcsService baiduPcsService) {
services.put(CloudStorageType.BAIDU, baiduPcsService);
}
public CloudStorageService getService(CloudStorageType type) {
CloudStorageService service = services.get(type);
if (service == null) {
throw new IllegalArgumentException("Unsupported cloud storage type: " + type);
}
return service;
}
}
@@ -0,0 +1,133 @@
package com.mzaxd.bps.domain;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.mzaxd.bps.enums.AppHttpCodeEnum;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
/**
* 统一响应结果类
*
* @author Mzaxd
* @param <T> 响应数据类型
*/
@Getter
@JsonInclude(JsonInclude.Include.NON_NULL)
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class ResponseResult<T> {
/**
* 状态码
*/
private Integer code;
/**
* 响应消息
*/
private String message;
/**
* 响应数据
*/
private T data;
/**
* 构建响应结果
*/
private ResponseResult(Builder<T> builder) {
this.code = builder.code;
this.message = builder.message;
this.data = builder.data;
}
/**
* 构建者类
*/
public static class Builder<T> {
private Integer code;
private String message;
private T data;
public Builder<T> code(Integer code) {
this.code = code;
return this;
}
public Builder<T> message(String message) {
this.message = message;
return this;
}
public Builder<T> data(T data) {
this.data = data;
return this;
}
public ResponseResult<T> build() {
return new ResponseResult<>(this);
}
}
/**
* 创建成功响应(无数据)
*/
public static <T> ResponseResult<T> success() {
return new Builder<T>()
.code(AppHttpCodeEnum.SUCCESS.getCode())
.message(AppHttpCodeEnum.SUCCESS.getMsg())
.build();
}
/**
* 创建成功响应(带数据)
*/
public static <T> ResponseResult<T> success(T data) {
return new Builder<T>()
.code(AppHttpCodeEnum.SUCCESS.getCode())
.message(AppHttpCodeEnum.SUCCESS.getMsg())
.data(data)
.build();
}
/**
* 创建成功响应(自定义消息和数据)
*/
public static <T> ResponseResult<T> success(String message, T data) {
return new Builder<T>()
.code(AppHttpCodeEnum.SUCCESS.getCode())
.message(message)
.data(data)
.build();
}
/**
* 创建失败响应
*/
public static <T> ResponseResult<T> failure(AppHttpCodeEnum errorEnum) {
return new Builder<T>()
.code(errorEnum.getCode())
.message(errorEnum.getMsg())
.build();
}
/**
* 创建失败响应(自定义消息)
*/
public static <T> ResponseResult<T> failure(AppHttpCodeEnum errorEnum, String message) {
return new Builder<T>()
.code(errorEnum.getCode())
.message(message)
.build();
}
/**
* 创建失败响应(完全自定义)
*/
public static <T> ResponseResult<T> failure(Integer code, String message) {
return new Builder<T>()
.code(code)
.message(message)
.build();
}
}
@@ -1,19 +1,16 @@
package com.mzaxd.noodles.domain.entity;
package com.mzaxd.bps.domain.entity;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.util.Date;
import java.util.Objects;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.util.Date;
/**
*
*
* @author 13439
* @TableName audit_log
*/
@@ -23,7 +20,7 @@ import lombok.experimental.Accessors;
@AllArgsConstructor
@Accessors(chain = true)
@EqualsAndHashCode(of = "param")
public class AuditLog implements Serializable {
public class AuditLog {
/**
* id
*/
@@ -57,7 +54,4 @@ public class AuditLog implements Serializable {
@TableField(fill = FieldFill.INSERT)
private Long createBy;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
}
@@ -1,4 +1,4 @@
package com.mzaxd.noodles.domain.entity;
package com.mzaxd.bps.domain.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
@@ -1,17 +1,15 @@
package com.mzaxd.noodles.domain.entity;
package com.mzaxd.bps.domain.entity;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.util.Date;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.util.Date;
/**
*
*
* @TableName notification
*/
@TableName(value ="notification")
@@ -19,7 +17,7 @@ import lombok.experimental.Accessors;
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class Notification implements Serializable {
public class Notification {
/**
* 主键id
*/
@@ -71,7 +69,4 @@ public class Notification implements Serializable {
* 删除标志0代表未删除1代表已删除
*/
private Integer delFlag;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
}
@@ -0,0 +1,96 @@
package com.mzaxd.bps.domain.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 网盘资源实体类
*
* @author mzaxd
* @since 2024-04-06
*/
@Data
@TableName("source")
public class Source {
/**
* 主键ID
*/
@TableId(type = IdType.AUTO)
private Long sourceId;
/**
* 分类ID
*/
private Long sourceCategoryId;
/**
* 资源标题
*/
private String title;
/**
* 资源描述
*/
private String description;
/**
* 资源URL
*/
private String url;
/**
* 资源代码
*/
private String code;
/**
* 视频内容
*/
private String vodContent;
/**
* 视频封面
*/
private String vodPic;
/**
* 资源类型
*/
private Integer isType;
/**
* 是否定时
*/
private Integer isTime;
/**
* 是否删除
*/
@TableLogic
private Integer isDelete;
/**
* 状态
*/
private Integer status;
/**
* 浏览量
*/
private Integer pageViews;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
}
@@ -0,0 +1,50 @@
package com.mzaxd.bps.domain.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 网盘分类实体类
*
* @author mzaxd
* @since 2024-04-06
*/
@Data
@TableName("source_category")
public class SourceCategory {
/**
* 主键ID
*/
@TableId(type = IdType.AUTO)
private Long sourceCategoryId;
/**
* 分类名称
*/
private String name;
/**
* 排序
*/
private Integer sort;
/**
* 状态
*/
private Integer status;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
}
@@ -0,0 +1,39 @@
package com.mzaxd.bps.domain.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 网盘日志实体类
*
* @author mzaxd
* @since 2024-04-06
*/
@Data
@TableName("source_log")
public class SourceLog {
/**
* 主键ID
*/
@TableId(type = IdType.AUTO)
private Long logId;
/**
* 资源ID
*/
private Long sourceId;
/**
* IP地址
*/
private String ip;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
}
@@ -1,24 +1,21 @@
package com.mzaxd.noodles.domain.entity;
package com.mzaxd.bps.domain.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
*
*
* @TableName system_setting
*/
@TableName(value ="system_setting")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class SystemSetting implements Serializable {
public class SystemSetting {
/**
* id
*/
@@ -80,6 +77,4 @@ public class SystemSetting implements Serializable {
*/
private String background;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
}
@@ -1,21 +1,20 @@
package com.mzaxd.noodles.domain.entity;
package com.mzaxd.bps.domain.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
*
*
* @author root
* @TableName user
*/
@TableName(value ="user")
@Data
@Accessors(chain = true)
public class User implements Serializable {
public class User {
/**
* 主键id
*/
@@ -81,6 +80,4 @@ public class User implements Serializable {
*/
private Integer delFlag;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
}
@@ -1,6 +1,6 @@
package com.mzaxd.noodles.domain.message;
package com.mzaxd.bps.domain.message;
import com.mzaxd.noodledetector.util.Arith;
import com.mzaxd.bps.util.Arith;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -1,4 +1,4 @@
package com.mzaxd.noodles.domain.message;
package com.mzaxd.bps.domain.message;
import lombok.AllArgsConstructor;
import lombok.Data;
@@ -1,11 +1,10 @@
package com.mzaxd.noodles.domain.message;
package com.mzaxd.bps.domain.message;
/**
* @author Mzaxd
* @since 2023-02-05 10:50
*/
import com.mzaxd.noodledetector.util.Arith;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -1,4 +1,4 @@
package com.mzaxd.noodles.domain.message;
package com.mzaxd.bps.domain.message;
/**
* @author Mzaxd
@@ -1,4 +1,4 @@
package com.mzaxd.noodles.domain.message;
package com.mzaxd.bps.domain.message;
import lombok.AllArgsConstructor;
import lombok.Data;
@@ -1,4 +1,4 @@
package com.mzaxd.noodles.domain.message;
package com.mzaxd.bps.domain.message;
/**
* @author Mzaxd
@@ -38,7 +38,7 @@ public class Server {
/**
* Os相关信息
*/
private com.mzaxd.noodles.domain.message.Os os = new Os();
private com.mzaxd.bps.domain.message.Os os = new Os();
/**
* CPU相关信息
@@ -58,7 +58,7 @@ public class Server {
/**
* 磁盘相关信息
*/
private List<SysFile> sysFiles = new LinkedList<SysFile>();
private List<SysFile> sysFiles = new LinkedList<>();
/**
* 网络相关信息
@@ -1,4 +1,4 @@
package com.mzaxd.noodles.domain.message;
package com.mzaxd.bps.domain.message;
/**
* @author Mzaxd
@@ -1,4 +1,4 @@
package com.mzaxd.noodles.domain.message;
package com.mzaxd.bps.domain.message;
/**
* @author Mzaxd
@@ -1,4 +1,4 @@
package com.mzaxd.noodles.domain.search;
package com.mzaxd.bps.domain.search;
import com.alibaba.fastjson.annotation.JSONType;
import lombok.Getter;
@@ -1,7 +1,6 @@
package com.mzaxd.noodles.domain.search;
package com.mzaxd.bps.domain.search;
import com.alibaba.fastjson.annotation.JSONType;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Getter;
import lombok.ToString;
@@ -1,7 +1,6 @@
package com.mzaxd.noodles.domain.search;
package com.mzaxd.bps.domain.search;
import com.alibaba.fastjson.annotation.JSONType;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Getter;
import lombok.ToString;
@@ -0,0 +1,28 @@
package com.mzaxd.bps.domain.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* 分页结果封装类
*
* @author mzaxd
* @since 2024-04-06 10:00:00
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageVo<T> {
/**
* 总记录数
*/
private Long total;
/**
* 数据列表
*/
private List<T> rows;
}
@@ -0,0 +1,48 @@
package com.mzaxd.bps.domain.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* 网盘分类返回对象
*
* @author mzaxd
* @since 2024-04-06 10:00:00
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SourceCategoryVo {
/**
* 分类ID
*/
private Long id;
/**
* 分类名称
*/
private String name;
/**
* 排序
*/
private Integer sort;
/**
* 状态
*/
private Integer status;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
}
@@ -0,0 +1,43 @@
package com.mzaxd.bps.domain.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* 网盘日志返回对象
*
* @author mzaxd
* @since 2024-04-06 10:00:00
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SourceLogVo {
/**
* 日志ID
*/
private Long id;
/**
* 资源ID
*/
private Long sourceId;
/**
* 资源标题
*/
private String sourceTitle;
/**
* IP地址
*/
private String ip;
/**
* 创建时间
*/
private Date createTime;
}
@@ -0,0 +1,93 @@
package com.mzaxd.bps.domain.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* 网盘资源返回对象
*
* @author mzaxd
* @since 2024-04-06 10:00:00
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SourceVo {
/**
* 资源ID
*/
private Long id;
/**
* 分类ID
*/
private Long sourceCategoryId;
/**
* 分类名称
*/
private String categoryName;
/**
* 资源标题
*/
private String title;
/**
* 资源描述
*/
private String description;
/**
* 资源URL
*/
private String url;
/**
* 资源代码
*/
private String code;
/**
* 视频内容
*/
private String vodContent;
/**
* 视频封面
*/
private String vodPic;
/**
* 资源类型
*/
private Integer isType;
/**
* 是否定时
*/
private Integer isTime;
/**
* 状态
*/
private Integer status;
/**
* 浏览量
*/
private Integer pageViews;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
}
@@ -1,7 +1,5 @@
package com.mzaxd.noodles.domain.vo;
package com.mzaxd.bps.domain.vo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
/**
@@ -1,9 +1,12 @@
package com.mzaxd.noodles.enums;
package com.mzaxd.bps.enums;
import lombok.Getter;
/**
* @author Mzaxd
*/
@Getter
public enum AppHttpCodeEnum {
/**
* 操作成功通用返回信息
@@ -55,11 +58,4 @@ public enum AppHttpCodeEnum {
this.msg = errorMessage;
}
public int getCode() {
return code;
}
public String getMsg() {
return msg;
}
}
@@ -0,0 +1,24 @@
package com.mzaxd.bps.enums;
import lombok.Getter;
@Getter
public enum BaiduPcsCommand {
LOGIN("login", "Login to Baidu PCS"),
SEARCH("search", "Search files"),
DOWNLOAD("download", "Download file"),
UPLOAD("upload", "Upload file"),
SHARE("share", "Create share link"),
LIST("list", "List files"),
META("meta", "Get file metadata"),
QUOTA("quota", "Get quota information");
private final String command;
private final String description;
BaiduPcsCommand(String command, String description) {
this.command = command;
this.description = description;
}
}
@@ -0,0 +1,24 @@
package com.mzaxd.bps.enums;
public enum CloudStorageType {
BAIDU("baidu", "BaiduPCS-GO"),
UC("uc", "UC Cloud"),
XUN_LEI("xunlei", "Xunlei Cloud"),
QUARK("quark", "Quark Cloud");
private final String code;
private final String name;
CloudStorageType(String code, String name) {
this.code = code;
this.name = name;
}
public String getCode() {
return code;
}
public String getName() {
return name;
}
}
@@ -1,4 +1,6 @@
package com.mzaxd.noodles.enums;
package com.mzaxd.bps.enums;
import lombok.Getter;
/**
* 操作日志-操作类型
@@ -6,6 +8,7 @@ package com.mzaxd.noodles.enums;
* @author 13439
*/
@Getter
public enum OperationEnum {
/**
@@ -111,11 +114,4 @@ public enum OperationEnum {
this.operationType = operationType;
}
public String getOperation() {
return operation;
}
public String getOperationType() {
return operationType;
}
}
@@ -1,6 +1,7 @@
package com.mzaxd.noodles.exception;
package com.mzaxd.bps.exception;
import com.mzaxd.noodles.enums.AppHttpCodeEnum;
import com.mzaxd.bps.enums.AppHttpCodeEnum;
import lombok.Getter;
/**
*
@@ -8,24 +9,17 @@ import com.mzaxd.noodles.enums.AppHttpCodeEnum;
* @date 11/27/22 3:19 AM
*/
@Getter
public class SystemException extends RuntimeException{
private final int code;
private final String msg;
public int getCode() {
return code;
}
public String getMsg() {
return msg;
}
public SystemException(AppHttpCodeEnum httpCodeEnum) {
super(httpCodeEnum.getMsg());
this.code = httpCodeEnum.getCode();
this.msg = httpCodeEnum.getMsg();
}
}
@@ -1,13 +1,14 @@
package com.mzaxd.noodles.filter;
package com.mzaxd.bps.filter;
import com.alibaba.fastjson.JSON;
import com.mzaxd.noodles.domain.ResponseResult;
import com.mzaxd.noodles.domain.entity.LoginUser;
import com.mzaxd.noodles.enums.AppHttpCodeEnum;
import com.mzaxd.noodles.util.JwtUtil;
import com.mzaxd.noodles.util.RedisCache;
import com.mzaxd.noodles.util.WebUtils;
import com.mzaxd.bps.domain.ResponseResult;
import com.mzaxd.bps.domain.entity.LoginUser;
import com.mzaxd.bps.enums.AppHttpCodeEnum;
import com.mzaxd.bps.util.JwtUtil;
import com.mzaxd.bps.util.RedisCache;
import com.mzaxd.bps.util.WebUtils;
import io.jsonwebtoken.Claims;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
@@ -26,6 +27,7 @@ import java.util.Objects;
* @author root
*/
@Component
@Slf4j
public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
@Resource
@@ -45,10 +47,10 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
try {
claims = JwtUtil.parseJWT(token);
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage());
//token超时 token非法
//响应告诉前端需要重新登录
ResponseResult result = ResponseResult.errorResult(AppHttpCodeEnum.NEED_LOGIN);
ResponseResult<?> result = ResponseResult.failure(AppHttpCodeEnum.NEED_LOGIN);
WebUtils.renderString(response, JSON.toJSONString(result));
return;
}
@@ -58,7 +60,7 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
//如果redis中没有用户信息
if (Objects.isNull(loginUser)) {
//说明登录过期 需要重新登录
ResponseResult result = ResponseResult.errorResult(AppHttpCodeEnum.NEED_LOGIN);
ResponseResult<?> result = ResponseResult.failure(AppHttpCodeEnum.NEED_LOGIN);
WebUtils.renderString(response, JSON.toJSONString(result));
return;
}
@@ -1,9 +1,10 @@
package com.mzaxd.noodles.handler;
package com.mzaxd.bps.handler;
import com.alibaba.fastjson.JSON;
import com.mzaxd.noodles.domain.ResponseResult;
import com.mzaxd.noodles.enums.AppHttpCodeEnum;
import com.mzaxd.noodles.util.WebUtils;
import com.mzaxd.bps.domain.ResponseResult;
import com.mzaxd.bps.enums.AppHttpCodeEnum;
import com.mzaxd.bps.util.WebUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.web.access.AccessDeniedHandler;
import org.springframework.stereotype.Component;
@@ -16,12 +17,13 @@ import javax.servlet.http.HttpServletResponse;
* @author root
*/
@Component
@Slf4j
public class AccessDeniedHandlerImpl implements AccessDeniedHandler {
@Override
public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws ServletException {
accessDeniedException.printStackTrace();
ResponseResult result = ResponseResult.errorResult(AppHttpCodeEnum.NO_OPERATOR_AUTH);
log.error(accessDeniedException.getMessage());
ResponseResult<?> result = ResponseResult.failure(AppHttpCodeEnum.NO_OPERATOR_AUTH);
//响应给前端
WebUtils.renderString(response, JSON.toJSONString(result));
}
}
}
@@ -1,9 +1,10 @@
package com.mzaxd.noodles.handler;
package com.mzaxd.bps.handler;
import com.alibaba.fastjson.JSON;
import com.mzaxd.noodles.domain.ResponseResult;
import com.mzaxd.noodles.enums.AppHttpCodeEnum;
import com.mzaxd.noodles.util.WebUtils;
import com.mzaxd.bps.domain.ResponseResult;
import com.mzaxd.bps.enums.AppHttpCodeEnum;
import com.mzaxd.bps.util.WebUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.InsufficientAuthenticationException;
import org.springframework.security.core.AuthenticationException;
@@ -17,20 +18,21 @@ import javax.servlet.http.HttpServletResponse;
* @author root
*/
@Component
@Slf4j
public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint {
@Override
public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) {
authException.printStackTrace();
log.error(authException.getMessage());
//InsufficientAuthenticationException
//BadCredentialsException
ResponseResult result;
ResponseResult<?> result;
if (authException instanceof BadCredentialsException) {
result = ResponseResult.errorResult(AppHttpCodeEnum.LOGIN_ERROR.getCode(), authException.getMessage());
result = ResponseResult.failure(AppHttpCodeEnum.LOGIN_ERROR.getCode(), authException.getMessage());
} else if (authException instanceof InsufficientAuthenticationException) {
result = ResponseResult.errorResult(AppHttpCodeEnum.NEED_LOGIN);
result = ResponseResult.failure(AppHttpCodeEnum.NEED_LOGIN);
} else {
result = ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR.getCode(), "认证或授权失败");
result = ResponseResult.failure(AppHttpCodeEnum.SYSTEM_ERROR.getCode(), "认证或授权失败");
}
//响应给前端
WebUtils.renderString(response, JSON.toJSONString(result));
@@ -0,0 +1,32 @@
package com.mzaxd.bps.handler;
import com.mzaxd.bps.domain.ResponseResult;
import com.mzaxd.bps.enums.AppHttpCodeEnum;
import com.mzaxd.bps.exception.SystemException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
/**
* @author root
*/
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
@ExceptionHandler(SystemException.class)
public ResponseResult<?> systemExceptionHandler(SystemException e) {
//打印异常信息
log.error("出现了异常! {}", e.getMessage());
//从异常对象中获取提示信息封装返回
return ResponseResult.failure(e.getCode(), e.getMsg());
}
@ExceptionHandler(Exception.class)
public ResponseResult<?> exceptionHandler(Exception e) {
//打印异常信息
log.error("出现了异常! {}", e.getMessage());
//从异常对象中获取提示信息封装返回
return ResponseResult.failure(AppHttpCodeEnum.SYSTEM_ERROR, e.getMessage());
}
}
@@ -1,7 +1,8 @@
package com.mzaxd.noodles.handler;
package com.mzaxd.bps.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.mzaxd.noodles.util.SecurityUtils;
import com.mzaxd.bps.util.SecurityUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
@@ -10,6 +11,7 @@ import java.util.Date;
/**
* @author root
*/
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
@@ -18,7 +20,7 @@ public class MyMetaObjectHandler implements MetaObjectHandler {
try {
userId = SecurityUtils.getUserId();
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage());
//表示是自己创建
userId = -1L;
}
@@ -40,4 +42,4 @@ public class MyMetaObjectHandler implements MetaObjectHandler {
this.setFieldValByName("updateTime", new Date(), metaObject);
this.setFieldValByName("updateBy", userId, metaObject);
}
}
}
@@ -1,13 +1,12 @@
package com.mzaxd.noodles.mapper;
package com.mzaxd.bps.mapper;
import com.mzaxd.noodles.domain.entity.AuditLog;
import com.mzaxd.bps.domain.entity.AuditLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author 13439
* @description 针对表audit_log的数据库操作Mapper
* @createDate 2023-02-13 12:19:26
* @Entity com.mzaxd.noodles.domain.entity.AuditLog
*/
public interface AuditLogMapper extends BaseMapper<AuditLog> {
@@ -1,13 +1,12 @@
package com.mzaxd.noodles.mapper;
package com.mzaxd.bps.mapper;
import com.mzaxd.noodles.domain.entity.Notification;
import com.mzaxd.bps.domain.entity.Notification;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author 13439
* @description 针对表notification的数据库操作Mapper
* @createDate 2023-02-16 16:04:53
* @Entity com.mzaxd.noodles.domain.entity.Notification
*/
public interface NotificationMapper extends BaseMapper<Notification> {
@@ -0,0 +1,15 @@
package com.mzaxd.bps.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mzaxd.bps.domain.entity.SourceCategory;
import org.apache.ibatis.annotations.Mapper;
/**
* 网盘分类Mapper接口
*
* @author mzaxd
* @since 2024-04-06
*/
@Mapper
public interface SourceCategoryMapper extends BaseMapper<SourceCategory> {
}
@@ -0,0 +1,15 @@
package com.mzaxd.bps.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mzaxd.bps.domain.entity.SourceLog;
import org.apache.ibatis.annotations.Mapper;
/**
* 网盘日志Mapper接口
*
* @author mzaxd
* @since 2024-04-06
*/
@Mapper
public interface SourceLogMapper extends BaseMapper<SourceLog> {
}
@@ -0,0 +1,15 @@
package com.mzaxd.bps.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mzaxd.bps.domain.entity.Source;
import org.apache.ibatis.annotations.Mapper;
/**
* 网盘资源Mapper接口
*
* @author mzaxd
* @since 2024-04-06
*/
@Mapper
public interface SourceMapper extends BaseMapper<Source> {
}
@@ -1,13 +1,12 @@
package com.mzaxd.noodles.mapper;
package com.mzaxd.bps.mapper;
import com.mzaxd.noodles.domain.entity.SystemSetting;
import com.mzaxd.bps.domain.entity.SystemSetting;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author 13439
* @description 针对表system_setting的数据库操作Mapper
* @createDate 2023-02-16 20:25:57
* @Entity com.mzaxd.noodles.domain.entity.SystemSetting
*/
public interface SystemSettingMapper extends BaseMapper<SystemSetting> {
@@ -1,13 +1,12 @@
package com.mzaxd.noodles.mapper;
package com.mzaxd.bps.mapper;
import com.mzaxd.noodles.domain.entity.User;
import com.mzaxd.bps.domain.entity.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author root
* @description 针对表user的数据库操作Mapper
* @createDate 2023-01-28 09:16:07
* @Entity com.mzaxd.noodles.domain.entity.User
*/
public interface UserMapper extends BaseMapper<User> {
@@ -0,0 +1,57 @@
package com.mzaxd.bps.service;
import com.mzaxd.bps.domain.CloudFile;
import com.mzaxd.bps.enums.CloudStorageType;
import java.util.List;
import java.util.Map;
public interface CloudStorageService {
/**
* Initialize the cloud storage service
*/
void initialize();
/**
* Login to the cloud storage
* @param credentials login credentials
* @return true if login successful
*/
boolean login(Map<String, String> credentials);
/**
* Search for files in the cloud storage
* @param keyword search keyword
* @return list of search results
*/
List<CloudFile> search(String keyword);
/**
* Download a file from the cloud storage
* @param fileId file identifier
* @param localPath local path to save the file
* @return true if download successful
*/
boolean download(String fileId, String localPath);
/**
* Upload a file to the cloud storage
* @param localPath local file path
* @param remotePath remote path to save the file
* @return true if upload successful
*/
boolean upload(String localPath, String remotePath);
/**
* Create a share link for a file
* @param fileId file identifier
* @return share link
*/
String createShareLink(String fileId);
/**
* Get the type of cloud storage
* @return cloud storage type
*/
CloudStorageType getType();
}
@@ -0,0 +1,47 @@
package com.mzaxd.bps.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mzaxd.bps.domain.entity.SourceCategory;
import com.mzaxd.bps.domain.vo.SourceCategoryVo;
import java.util.List;
/**
* 网盘分类表(SourceCategory)表服务接口
*
* @author mzaxd
* @since 2024-04-06 10:00:00
*/
public interface SourceCategoryService extends IService<SourceCategory> {
/**
* 获取分类列表
*
* @return 分类列表
*/
List<SourceCategoryVo> getCategoryList();
/**
* 新增分类
*
* @param category 分类信息
* @return 是否成功
*/
boolean addCategory(SourceCategory category);
/**
* 更新分类
*
* @param category 分类信息
* @return 是否成功
*/
boolean updateCategory(SourceCategory category);
/**
* 删除分类
*
* @param id 分类ID
* @return 是否成功
*/
boolean deleteCategory(Long id);
}
@@ -0,0 +1,34 @@
package com.mzaxd.bps.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mzaxd.bps.domain.entity.SourceLog;
import com.mzaxd.bps.domain.vo.PageVo;
import com.mzaxd.bps.domain.vo.SourceLogVo;
/**
* 网盘日志Service接口
*
* @author mzaxd
* @since 2024-04-06
*/
public interface SourceLogService extends IService<SourceLog> {
/**
* 获取日志列表
*
* @param pageNum 页码
* @param pageSize 每页大小
* @param sourceId 资源ID
* @return 分页结果
*/
PageVo<SourceLogVo> getLogList(Integer pageNum, Integer pageSize, Long sourceId);
/**
* 添加日志
*
* @param sourceId 资源ID
* @param ip IP地址
* @return 是否成功
*/
boolean addLog(Long sourceId, String ip);
}
@@ -0,0 +1,71 @@
package com.mzaxd.bps.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mzaxd.bps.domain.entity.Source;
import com.mzaxd.bps.domain.vo.PageVo;
import com.mzaxd.bps.domain.vo.SourceVo;
/**
* 网盘资源Service接口
*
* @author mzaxd
* @since 2024-04-06
*/
public interface SourceService extends IService<Source> {
/**
* 获取资源列表
*
* @param pageNum 页码
* @param pageSize 每页大小
* @param title 标题
* @param categoryId 分类ID
* @param isTime 是否定时
* @return 分页结果
*/
PageVo<SourceVo> getSourceList(Integer pageNum, Integer pageSize, String title, Long categoryId, Integer isTime);
/**
* 获取资源详情
*
* @param id 资源ID
* @return 资源详情
*/
SourceVo getSourceDetail(Long id);
/**
* 新增资源
*
* @param source 资源信息
* @return 是否成功
*/
boolean addSource(Source source);
/**
* 更新资源
*
* @param source 资源信息
* @return 是否成功
*/
boolean updateSource(Source source);
/**
* 删除资源
*
* @param id 资源ID
* @return 是否成功
*/
boolean deleteSource(Long id);
/**
* 搜索网盘资源
*
* @param pageNum 页码
* @param pageSize 每页大小
* @param keyword 关键词
* @param categoryId 分类ID
* @return 分页结果
*/
Page<Source> search(Integer pageNum, Integer pageSize, String keyword, Long categoryId);
}
@@ -0,0 +1,160 @@
package com.mzaxd.bps.service.impl;
import com.mzaxd.bps.enums.BaiduPcsCommand;
import com.mzaxd.bps.enums.CloudStorageType;
import com.mzaxd.bps.domain.CloudFile;
import com.mzaxd.bps.service.CloudStorageService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@Service
public class BaiduPcsService implements CloudStorageService {
private static final Logger logger = LoggerFactory.getLogger(BaiduPcsService.class);
private static final String EXECUTABLE_NAME = "baidupcs-go";
private String executablePath;
private boolean initialized = false;
@Override
public void initialize() {
if (initialized) {
return;
}
try {
String os = System.getProperty("os.name").toLowerCase();
String resourcePath = os.contains("win") ? "baidu/win/" : "baidu/linux/";
ClassPathResource resource = new ClassPathResource(resourcePath + EXECUTABLE_NAME);
File tempFile = File.createTempFile(EXECUTABLE_NAME, "");
Files.copy(resource.getInputStream(), tempFile.toPath());
tempFile.setExecutable(true);
executablePath = tempFile.getAbsolutePath();
initialized = true;
logger.info("BaiduPCS-GO initialized successfully at: {}", executablePath);
} catch (IOException e) {
logger.error("Failed to initialize BaiduPCS-GO", e);
throw new RuntimeException("Failed to initialize BaiduPCS-GO", e);
}
}
@Override
public boolean login(Map<String, String> credentials) {
String username = credentials.get("username");
String password = credentials.get("password");
if (username == null || password == null) {
throw new IllegalArgumentException("Username and password are required");
}
try {
ProcessBuilder processBuilder = new ProcessBuilder(
executablePath,
BaiduPcsCommand.LOGIN.getCommand(),
username,
password
);
Process process = processBuilder.start();
return process.waitFor(30, TimeUnit.SECONDS) && process.exitValue() == 0;
} catch (IOException | InterruptedException e) {
logger.error("Login failed", e);
return false;
}
}
@Override
public List<CloudFile> search(String keyword) {
try {
ProcessBuilder processBuilder = new ProcessBuilder(
executablePath,
BaiduPcsCommand.SEARCH.getCommand(),
keyword
);
Process process = processBuilder.start();
if (process.waitFor(30, TimeUnit.SECONDS) && process.exitValue() == 0) {
// Parse the output and convert to CloudFile objects
// This is a simplified version, you'll need to implement proper parsing
return new ArrayList<>();
}
return new ArrayList<>();
} catch (IOException | InterruptedException e) {
logger.error("Search failed", e);
return new ArrayList<>();
}
}
@Override
public boolean download(String fileId, String localPath) {
try {
ProcessBuilder processBuilder = new ProcessBuilder(
executablePath,
BaiduPcsCommand.DOWNLOAD.getCommand(),
fileId,
localPath
);
Process process = processBuilder.start();
return process.waitFor(30, TimeUnit.SECONDS) && process.exitValue() == 0;
} catch (IOException | InterruptedException e) {
logger.error("Download failed", e);
return false;
}
}
@Override
public boolean upload(String localPath, String remotePath) {
try {
ProcessBuilder processBuilder = new ProcessBuilder(
executablePath,
BaiduPcsCommand.UPLOAD.getCommand(),
localPath,
remotePath
);
Process process = processBuilder.start();
return process.waitFor(30, TimeUnit.SECONDS) && process.exitValue() == 0;
} catch (IOException | InterruptedException e) {
logger.error("Upload failed", e);
return false;
}
}
@Override
public String createShareLink(String fileId) {
try {
ProcessBuilder processBuilder = new ProcessBuilder(
executablePath,
BaiduPcsCommand.SHARE.getCommand(),
fileId
);
Process process = processBuilder.start();
if (process.waitFor(30, TimeUnit.SECONDS) && process.exitValue() == 0) {
// Parse the output to get the share link
// This is a simplified version, you'll need to implement proper parsing
return "";
}
return "";
} catch (IOException | InterruptedException e) {
logger.error("Create share link failed", e);
return "";
}
}
@Override
public CloudStorageType getType() {
return CloudStorageType.BAIDU;
}
}
@@ -0,0 +1,57 @@
package com.mzaxd.bps.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mzaxd.bps.domain.entity.SourceCategory;
import com.mzaxd.bps.domain.vo.SourceCategoryVo;
import com.mzaxd.bps.mapper.SourceCategoryMapper;
import com.mzaxd.bps.service.SourceCategoryService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
/**
* 网盘分类表(SourceCategory)表服务实现类
*
* @author mzaxd
* @since 2024-04-06 10:00:00
*/
@Service
public class SourceCategoryServiceImpl extends ServiceImpl<SourceCategoryMapper, SourceCategory> implements SourceCategoryService {
@Override
public List<SourceCategoryVo> getCategoryList() {
// 构建查询条件
LambdaQueryWrapper<SourceCategory> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SourceCategory::getStatus, 0)
.orderByDesc(SourceCategory::getSort);
// 查询分类列表
List<SourceCategory> categories = list(queryWrapper);
// 转换为VO
return categories.stream().map(category -> {
SourceCategoryVo categoryVo = new SourceCategoryVo();
BeanUtils.copyProperties(category, categoryVo);
categoryVo.setId(category.getSourceCategoryId());
return categoryVo;
}).collect(Collectors.toList());
}
@Override
public boolean addCategory(SourceCategory category) {
return save(category);
}
@Override
public boolean updateCategory(SourceCategory category) {
return updateById(category);
}
@Override
public boolean deleteCategory(Long id) {
return removeById(id);
}
}
@@ -0,0 +1,75 @@
package com.mzaxd.bps.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mzaxd.bps.domain.entity.Source;
import com.mzaxd.bps.domain.entity.SourceLog;
import com.mzaxd.bps.domain.vo.PageVo;
import com.mzaxd.bps.domain.vo.SourceLogVo;
import com.mzaxd.bps.mapper.SourceLogMapper;
import com.mzaxd.bps.mapper.SourceMapper;
import com.mzaxd.bps.service.SourceLogService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
/**
* 网盘日志表(SourceLog)表服务实现类
*
* @author mzaxd
* @since 2024-04-06 10:00:00
*/
@Service
public class SourceLogServiceImpl extends ServiceImpl<SourceLogMapper, SourceLog> implements SourceLogService {
@Autowired
private SourceMapper sourceMapper;
@Override
public PageVo<SourceLogVo> getLogList(Integer pageNum, Integer pageSize, Long sourceId) {
// 构建查询条件
LambdaQueryWrapper<SourceLog> queryWrapper = new LambdaQueryWrapper<>();
if (sourceId != null) {
queryWrapper.eq(SourceLog::getSourceId, sourceId);
}
queryWrapper.orderByDesc(SourceLog::getCreateTime);
// 分页查询
Page<SourceLog> page = new Page<>(pageNum, pageSize);
page(page, queryWrapper);
// 转换为VO
List<SourceLogVo> logVos = page.getRecords().stream().map(log -> {
SourceLogVo logVo = new SourceLogVo();
BeanUtils.copyProperties(log, logVo);
logVo.setId(log.getLogId());
// 查询资源标题
Source source = sourceMapper.selectById(log.getSourceId());
if (source != null) {
logVo.setSourceTitle(source.getTitle());
}
return logVo;
}).collect(Collectors.toList());
// 封装返回结果
PageVo<SourceLogVo> pageVo = new PageVo<>();
pageVo.setTotal(page.getTotal());
pageVo.setRows(logVos);
return pageVo;
}
@Override
public boolean addLog(Long sourceId, String ip) {
SourceLog log = new SourceLog();
log.setSourceId(sourceId);
log.setIp(ip);
return save(log);
}
}
@@ -0,0 +1,146 @@
package com.mzaxd.bps.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mzaxd.bps.domain.entity.Source;
import com.mzaxd.bps.domain.entity.SourceCategory;
import com.mzaxd.bps.domain.vo.PageVo;
import com.mzaxd.bps.domain.vo.SourceVo;
import com.mzaxd.bps.mapper.SourceMapper;
import com.mzaxd.bps.mapper.SourceCategoryMapper;
import com.mzaxd.bps.service.SourceService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.stream.Collectors;
/**
* 网盘资源表(Source)表服务实现类
*
* @author mzaxd
* @since 2024-04-06 10:00:00
*/
@Service
public class SourceServiceImpl extends ServiceImpl<SourceMapper, Source> implements SourceService {
@Autowired
private SourceCategoryMapper sourceCategoryMapper;
@Override
public PageVo<SourceVo> getSourceList(Integer pageNum, Integer pageSize, String title, Long categoryId, Integer isTime) {
// 构建查询条件
LambdaQueryWrapper<Source> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Source::getStatus, 1)
.eq(Source::getIsDelete, 0);
if (StringUtils.hasText(title)) {
queryWrapper.like(Source::getTitle, title);
}
if (categoryId != null) {
queryWrapper.eq(Source::getSourceCategoryId, categoryId);
}
if (isTime != null) {
queryWrapper.eq(Source::getIsTime, isTime);
}
// 分页查询
Page<Source> page = new Page<>(pageNum, pageSize);
page(page, queryWrapper);
// 转换为VO
List<SourceVo> sourceVos = page.getRecords().stream().map(source -> {
SourceVo sourceVo = new SourceVo();
BeanUtils.copyProperties(source, sourceVo);
sourceVo.setId(source.getSourceId());
// 查询分类名称
SourceCategory category = sourceCategoryMapper.selectById(source.getSourceCategoryId());
if (category != null) {
sourceVo.setCategoryName(category.getName());
}
return sourceVo;
}).collect(Collectors.toList());
// 封装返回结果
PageVo<SourceVo> pageVo = new PageVo<>();
pageVo.setTotal(page.getTotal());
pageVo.setRows(sourceVos);
return pageVo;
}
@Override
public SourceVo getSourceDetail(Long id) {
// 查询资源
Source source = getById(id);
if (source == null) {
return null;
}
// 转换为VO
SourceVo sourceVo = new SourceVo();
BeanUtils.copyProperties(source, sourceVo);
sourceVo.setId(source.getSourceId());
// 查询分类名称
SourceCategory category = sourceCategoryMapper.selectById(source.getSourceCategoryId());
if (category != null) {
sourceVo.setCategoryName(category.getName());
}
// 增加浏览量
source.setPageViews(source.getPageViews() + 1);
updateById(source);
return sourceVo;
}
@Override
public boolean addSource(Source source) {
return save(source);
}
@Override
public boolean updateSource(Source source) {
return updateById(source);
}
@Override
public boolean deleteSource(Long id) {
return removeById(id);
}
@Override
public Page<Source> search(Integer pageNum, Integer pageSize, String keyword, Long categoryId) {
LambdaQueryWrapper<Source> queryWrapper = new LambdaQueryWrapper<>();
// 关键词搜索(标题、描述、代码)
if (StringUtils.hasText(keyword)) {
queryWrapper.and(wrapper -> wrapper
.like(Source::getTitle, keyword)
.or()
.like(Source::getDescription, keyword)
.or()
.like(Source::getCode, keyword));
}
// 分类筛选
if (categoryId != null) {
queryWrapper.eq(Source::getSourceCategoryId, categoryId);
}
// 只查询未删除的资源
queryWrapper.eq(Source::getIsDelete, 0)
.eq(Source::getStatus, 1)
.orderByDesc(Source::getCreateTime);
return page(new Page<>(pageNum, pageSize), queryWrapper);
}
}
@@ -1,4 +1,4 @@
package com.mzaxd.noodledetector.util;
package com.mzaxd.bps.util;
/**
* @author Mzaxd
@@ -1,5 +1,6 @@
package com.mzaxd.noodles.util;
package com.mzaxd.bps.util;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import java.util.List;
@@ -9,6 +10,7 @@ import java.util.stream.Collectors;
* @author Mzaxd
* @since 2022-11-22 15:36
*/
@Slf4j
public class BeanCopyUtils {
private BeanCopyUtils() {
@@ -22,7 +24,7 @@ public class BeanCopyUtils {
//实现属性copy
BeanUtils.copyProperties(source, result);
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage());
}
//返回结果
return result;
@@ -1,4 +1,4 @@
package com.mzaxd.noodles.util;
package com.mzaxd.bps.util;
import oshi.SystemInfo;
import oshi.hardware.CentralProcessor;
@@ -0,0 +1,55 @@
package com.mzaxd.bps.util;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
/**
* 文件操作工具类
*
* @author mzaxd
* @since 2024-04-06
*/
public class FileUtil {
/**
* 上传文件
*
* @param file 文件
* @param path 保存路径
* @return 文件名
*/
public static String upload(MultipartFile file, String path) throws IOException {
// 获取文件名
String originalFilename = file.getOriginalFilename();
// 获取文件后缀
String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
// 生成新文件名
String fileName = UUID.randomUUID().toString() + suffix;
// 创建文件对象
File dest = new File(path + fileName);
// 判断路径是否存在,不存在则创建
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
// 保存文件
file.transferTo(dest);
return fileName;
}
/**
* 删除文件
*
* @param path 文件路径
* @return 是否成功
*/
public static boolean delete(String path) {
File file = new File(path);
if (file.exists() && file.isFile()) {
return file.delete();
}
return false;
}
}
@@ -1,4 +1,4 @@
package com.mzaxd.noodledetector.util;
package com.mzaxd.bps.util;
import java.math.BigInteger;
import java.util.concurrent.TimeUnit;
@@ -1,10 +1,9 @@
package com.mzaxd.noodles.util;
package com.mzaxd.bps.util;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.stereotype.Component;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
@@ -119,4 +118,4 @@ public class JwtUtil {
.parseClaimsJws(jwt)
.getBody();
}
}
}
@@ -1,4 +1,4 @@
package com.mzaxd.noodles.util;
package com.mzaxd.bps.util;
import org.springframework.data.redis.core.BoundSetOperations;
import org.springframework.data.redis.core.HashOperations;
@@ -71,7 +71,7 @@ public class RedisCache {
* @return true=设置成功false=设置失败
*/
public boolean expire(final String key, final long timeout, final TimeUnit unit) {
return redisTemplate.expire(key, timeout, unit);
return Boolean.TRUE.equals(redisTemplate.expire(key, timeout, unit));
}
/**
@@ -101,18 +101,8 @@ public class RedisCache {
*
* @param key
*/
public boolean deleteObject(final String key) {
return redisTemplate.delete(key);
}
/**
* 删除集合对象
*
* @param collection 多个对象
* @return
*/
public long deleteObject(final Collection collection) {
return redisTemplate.delete(collection);
public void deleteObject(final String key) {
redisTemplate.delete(key);
}
/**
@@ -146,9 +136,8 @@ public class RedisCache {
*/
public <T> BoundSetOperations<String, T> setCacheSet(final String key, final Set<T> dataSet) {
BoundSetOperations<String, T> setOperation = redisTemplate.boundSetOps(key);
Iterator<T> it = dataSet.iterator();
while (it.hasNext()) {
setOperation.add(it.next());
for (T t : dataSet) {
setOperation.add(t);
}
return setOperation;
}
@@ -252,4 +241,4 @@ public class RedisCache {
public void incrementCacheMapValue(String key, String hKey, long v) {
redisTemplate.boundHashOps(key).increment(hKey, v);
}
}
}
@@ -0,0 +1,63 @@
package com.mzaxd.bps.util;
import lombok.Data;
/**
* 统一响应结果
*
* @author mzaxd
* @since 2024-04-06
*/
@Data
public class Result<T> {
/**
* 状态码
*/
private Integer code;
/**
* 提示信息
*/
private String message;
/**
* 数据
*/
private T data;
/**
* 成功
*/
public static <T> Result<T> success() {
return success(null);
}
/**
* 成功
*/
public static <T> Result<T> success(T data) {
Result<T> result = new Result<>();
result.setCode(200);
result.setMessage("success");
result.setData(data);
return result;
}
/**
* 失败
*/
public static <T> Result<T> error(String message) {
return error(500, message);
}
/**
* 失败
*/
public static <T> Result<T> error(Integer code, String message) {
Result<T> result = new Result<>();
result.setCode(code);
result.setMessage(message);
return result;
}
}
@@ -1,11 +1,10 @@
package com.mzaxd.noodles.util;
package com.mzaxd.bps.util;
import com.mzaxd.noodles.domain.search.SearchCategory;
import com.mzaxd.noodles.domain.search.SearchItem;
import com.mzaxd.bps.domain.search.SearchCategory;
import com.mzaxd.bps.domain.search.SearchItem;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @author ThinkBook
@@ -1,6 +1,6 @@
package com.mzaxd.noodles.util;
package com.mzaxd.bps.util;
import com.mzaxd.noodles.domain.entity.LoginUser;
import com.mzaxd.bps.domain.entity.LoginUser;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
@@ -31,4 +31,4 @@ public class SecurityUtils {
public static Long getUserId() {
return getLoginUser().getUser().getId();
}
}
}
@@ -0,0 +1,8 @@
package com.mzaxd.bps.util;
/**
* @author 13439
*/
public class SshLinkUtil {
}
@@ -1,4 +1,4 @@
package com.mzaxd.noodles.util;
package com.mzaxd.bps.util;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
@@ -23,10 +23,10 @@ import java.util.Properties;
**/
public class SystemInfoUtils {
private static final int OSHI_WAIT_SECOND = 1000;
private static SystemInfo systemInfo = new SystemInfo();
private static HardwareAbstractionLayer hardware = systemInfo.getHardware();
private static OperatingSystem operatingSystem = systemInfo.getOperatingSystem();
private static final SystemInfo systemInfo = new SystemInfo();
private static final HardwareAbstractionLayer hardware = systemInfo.getHardware();
private static final OperatingSystem operatingSystem = systemInfo.getOperatingSystem();
public static JSONObject getCpuInfo() {
JSONObject cpuInfo = new JSONObject();
CentralProcessor processor = hardware.getProcessor();
@@ -55,7 +55,7 @@ public class SystemInfoUtils {
cpuInfo.put("idle", new DecimalFormat("#.##%").format(1.0 - (idle * 1.0 / totalCpu)));
return cpuInfo;
}
/**
* 系统jvm信息
*/
@@ -81,7 +81,7 @@ public class SystemInfoUtils {
cpuInfo.put("jdkHome", props.getProperty("java.home"));
return cpuInfo;
}
/**
* 系统内存信息
*/
@@ -102,7 +102,7 @@ public class SystemInfoUtils {
cpuInfo.put("usageRate", new DecimalFormat("#.##%").format((totalByte - acaliableByte) * 1.0 / totalByte));
return cpuInfo;
}
/**
* 系统盘符信息
*/
@@ -135,7 +135,7 @@ public class SystemInfoUtils {
}
return sysFiles;
}
/**
* 系统信息
*/
@@ -154,7 +154,7 @@ public class SystemInfoUtils {
cpuInfo.put("userDir", props.getProperty("user.dir"));
return cpuInfo;
}
/**
* 所有系统信息
*/
@@ -167,7 +167,7 @@ public class SystemInfoUtils {
info.put("sysFileInfo", getSysFileInfo());
return info;
}
/**
* 单位转换
*/
@@ -189,4 +189,4 @@ public class SystemInfoUtils {
double tbNumber = gbNumber / FORMAT;
return new DecimalFormat("#.##TB").format(tbNumber);
}
}
}
@@ -1,13 +1,17 @@
package com.mzaxd.noodles.util;
package com.mzaxd.bps.util;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
/**
* @author root
*/
@Slf4j
public class WebUtils {
/**
* 将字符串渲染到客户端
@@ -23,7 +27,7 @@ public class WebUtils {
response.setCharacterEncoding("utf-8");
response.getWriter().print(string);
} catch (IOException e) {
e.printStackTrace();
log.error(e.getMessage());
}
}
@@ -31,7 +35,7 @@ public class WebUtils {
public static void setDownLoadHeader(String filename, HttpServletResponse response) throws UnsupportedEncodingException {
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
String fname= URLEncoder.encode(filename,"UTF-8").replaceAll("\\+", "%20");
String fname= URLEncoder.encode(filename, StandardCharsets.UTF_8).replaceAll("\\+", "%20");
response.setHeader("Content-disposition","attachment; filename="+fname);
}
}
}
@@ -1,68 +0,0 @@
package com.mzaxd.noodles.aspect;
import com.alibaba.fastjson.JSON;
import com.mzaxd.noodles.annotation.SysLog;
import com.mzaxd.noodles.domain.entity.AuditLog;
import com.mzaxd.noodles.enums.OperationEnum;
import com.mzaxd.noodles.service.AuditLogService;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.lang.reflect.Method;
import java.time.LocalDateTime;
/**
* @author 13439
*/
@Component
@Aspect
public class SysLogAspect {
@Resource
private AuditLogService auditLogService;
@Pointcut("@annotation(com.mzaxd.noodles.annotation.SysLog)")
public void logPointCut() {
}
//方法执行前后都操作
@Around("logPointCut()")
public Object around(ProceedingJoinPoint point) throws Throwable {
//执行方法
Object result = point.proceed();
//保存日志
saveSysLog(point);
return result;
}
private void saveSysLog(ProceedingJoinPoint joinPoint) {
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
AuditLog log = new AuditLog();
SysLog syslog = method.getAnnotation(SysLog.class);
if (syslog != null) {
//注解上的描述
log.setOperation(syslog.operation().getOperation());
log.setOperationType(syslog.operation().getOperationType());
}
//请求的参数
Object[] args = joinPoint.getArgs();
try {
String params = JSON.toJSONString(args);
log.setParam(params);
} catch (Exception e) {
e.printStackTrace();
}
//保存系统日志
auditLogService.save(log);
}
}
@@ -1,54 +0,0 @@
package com.mzaxd.noodles.config;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mzaxd.noodles.constant.RabbitMqConstant;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author Mzaxd
* @since 2023-02-06 12:51
*/
@Configuration
public class RabbitMqConfig {
@Bean
public Queue rabbitmqDemoDirectQueue() {
/**
* 1、name: 队列名称
* 2、durable: 是否持久化
* 3、exclusive: 是否独享、排外的。如果设置为true,定义为排他队列。则只有创建者可以使用此队列。也就是private私有的。
* 4、autoDelete: 是否自动删除。也就是临时队列。当最后一个消费者断开连接后,会自动删除。
* */
return new Queue(RabbitMqConstant.DYNAMIC_DATA_TOPIC, true, false, false);
}
@Bean
public DirectExchange rabbitmqDemoDirectExchange() {
//Direct交换机
return new DirectExchange(RabbitMqConstant.DYNAMIC_DATA_EXCHANGE, true, false);
}
@Bean
public Binding bindDirect() {
//链式写法,绑定交换机和队列,并设置匹配键
return BindingBuilder
//绑定队列
.bind(rabbitmqDemoDirectQueue())
//到交换机
.to(rabbitmqDemoDirectExchange())
//并设置匹配键
.with(RabbitMqConstant.DYNAMIC_DATA_ROUTING);
}
@Bean
public MessageConverter jsonMessageConverter(ObjectMapper objectMapper) {
return new Jackson2JsonMessageConverter(objectMapper);
}
}
@@ -1,13 +0,0 @@
package com.mzaxd.noodles.constant;
/**
* @author Mzaxd
* @since 2023-02-05 11:38
*/
public class OsConstant {
/**
* 操作系统为Linux
*/
public static final String LINUX = "linux";
}
@@ -1,22 +0,0 @@
package com.mzaxd.noodles.constant;
/**
* @author root
*/
public class RabbitMqConstant {
/**
* RabbitMQ的队列主题名称
*/
public static final String DYNAMIC_DATA_TOPIC = "DynamicDataTopic";
/**
* RabbitMQ的direct交换机名称
*/
public static final String DYNAMIC_DATA_EXCHANGE = "DynamicDataExchange";
/**
* RabbitMQ的direct交换机和队列绑定的匹配键 DirectRouting
*/
public static final String DYNAMIC_DATA_ROUTING = "DynamicDataRouting";
}
@@ -1,160 +0,0 @@
package com.mzaxd.noodles.constant;
/**
* @author root
*/
public class SystemConstant {
/**
* 宿主机id等于0表示没有宿主机,即物理机
*/
public static final Integer PHYSICAL_MACHINE = 0;
/**
* 主机在线
*/
public static final Integer HOST_MACHINE_STATE_ONLINE = 0;
/**
* 主机离线
*/
public static final Integer HOST_MACHINE_STATE_OFFLINE = 1;
/**
* 主机睡眠
*/
public static final Integer HOST_MACHINE_STATE_SLEEP = 2;
/**
* 主机状态未知
*/
public static final Integer HOST_MACHINE_STATE_UNKNOWN = 3;
/**
* 物理机 host_machine_id 是 0
*/
public static final Long HOST_MACHINE_ID_HOST = 0L;
/**
* 成功id
*/
public static final Integer SUCCESS_CODE = 200;
/**
* 容器正在运行
*/
public static final Integer CONTAINER_STATE_RUNNING = 0;
/**
* 容器停止
*/
public static final Integer CONTAINER_STATE_EXITED = 1;
/**
* 容器暂停
*/
public static final Integer CONTAINER_STATE_PAUSED = 2;
/**
* 容器状态未知
*/
public static final Integer CONTAINER_STATE_UNKNOWN = 3;
/**
* 正常状态(非第一次使用) 通用常量
*/
public static final Integer NORMAL_STATE = 1;
/**
* 日志类型为用户
*/
public static final String LOG_USER = "用户";
/**
* 提醒方式-不提醒
*/
public static final Integer NOTIFY_NO = 0;
/**
* 提醒方式-浏览器
*/
public static final Integer NOTIFY_BROWSER = 1;
/**
* 提醒方式-邮件
*/
public static final Integer NOTIFY_EMAIL = 2;
/**
* 提醒方式-浏览器和邮件
*/
public static final Integer NOTIFY_BROWSER_EMAIL = 3;
/**
* 通知类型 掉线
*/
public static final Integer OFFLINE_NOTIFICATION = 0;
/**
* 通知类型 统计
*/
public static final Integer STATISTICS_NOTIFICATION = 1;
/**
* 未处理的通知
*/
public static final Integer NOTIFICATION_NOT_AFFIRM = 0;
/**
* 已处理的通知
*/
public static final Integer NOTIFICATION_AFFIRM = 1;
/**
* 前端页面通知提醒页面对应的tab
*/
public static final Integer FRONTEND_NOTIFICATION_NOT_AFFIRM = 0;
/**
* 前端页面通知提醒页面对应的tab
*/
public static final Integer FRONTEND_NOTIFICATION_AFFIRM = 1;
/**
* 前端页面通知提醒页面对应的tab
*/
public static final Integer FRONTEND_NOTIFICATION_ALL = 2;
/**
* 前端页面通知提醒页面对应的tab
*/
public static final Integer FRONTEND_NOTIFICATION_TYPE_OFFLINE = 3;
/**
* 前端页面通知提醒页面对应的tab
*/
public static final Integer FRONTEND_NOTIFICATION_TYPE_STATISTICS = 4;
/**
* 通知实例类型 无
*/
public static final Integer INSTANCETYPE_NONE = 0;
/**
* 通知实例类型 物理机
*/
public static final Integer INSTANCETYPE_HOST = 1;
/**
* 通知实例类型 虚拟机
*/
public static final Integer INSTANCETYPE_VM = 2;
/**
* 通知实例类型 容器
*/
public static final Integer INSTANCETYPE_CONTAINER = 3;
}
@@ -1,57 +0,0 @@
package com.mzaxd.noodles.constant;
/**
* @author root
*/
public class UrlConstant {
/**
* isTrueUrl判断地址是否有效的链接
*/
public static final String DETECTOR_IS_TRUE_URL = "/isTrueUrl";
/**
* 获取远程主机信息链接
*/
public static final String DETECTOR_GET_INFO = "/getInfo";
/**
* 获取远程主机信息链接
*/
public static final String DETECTOR_GET_DISK_INFO = "/getDiskInfo";
/**
* 获取远程主机信息链接
*/
public static final String DETECTOR_GET_NETWORK_IF_INFO = "/getNetworkIfInfo";
/**
* 获取探测器uuid
*/
public static final String DETECTOR_GET_DETECTOR_ID = "/getDetectorID";
/**
* 通知探测器开始发送动态数据
*/
public static final String DETECTOR_START_SEND_DYNAMIC_DATA = "/startSendDynamicDataFromMq";
/**
* 通知探测器停止发送动态数据
*/
public static final String DETECTOR_STOP_SEND_DYNAMIC_DATA = "/stopSendDynamicDataFromMq";
/**
* 协议
*/
public static final String PROTOCOL = "protocol";
/**
* ip
*/
public static final String IP = "IP";
/**
* 端口号
*/
public static final String PORT = "port";
}
@@ -1,43 +0,0 @@
package com.mzaxd.noodles.controller;
import com.mzaxd.noodles.annotation.SysLog;
import com.mzaxd.noodles.domain.ResponseResult;
import com.mzaxd.noodles.domain.entity.User;
import com.mzaxd.noodles.enums.OperationEnum;
import com.mzaxd.noodles.service.LoginService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
* @author root
*/
@RestController
@RequestMapping("/auth")
public class AuthController {
@Resource
private LoginService loginService;
@PostMapping("/login")
public ResponseResult login(@RequestBody User user) {
return loginService.login(user);
}
@SysLog(operation = OperationEnum.USER_FIRST_USE)
@PostMapping("/updateAccount")
public ResponseResult updateAccount(@RequestBody User user) {
return loginService.updateAccount(user);
}
@PostMapping("/logout")
public ResponseResult logout() {
return loginService.logout();
}
@GetMapping("/deleteAccount")
public ResponseResult deleteAccount() {
return loginService.deleteAccount();
}
}
@@ -1,79 +0,0 @@
package com.mzaxd.noodles.controller;
import com.mzaxd.noodles.annotation.SysLog;
import com.mzaxd.noodles.domain.ResponseResult;
import com.mzaxd.noodles.domain.vo.ContainerVo;
import com.mzaxd.noodles.enums.OperationEnum;
import com.mzaxd.noodles.service.ContainerService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
* @author root
*/
@RestController
@RequestMapping("/container")
public class ContainerController {
@Resource
private ContainerService containerService;
@GetMapping("/containerList/summaryStatistics")
public ResponseResult containerListSummaryStatistics() {
return containerService.containerListSummaryStatistics();
}
@GetMapping("/containerList")
public ResponseResult containerListWithCondition(
@RequestParam(value = "q", required = false) String nameLike,
@RequestParam(value = "selectedHost", required = false) List<Integer> selectedHost,
@RequestParam(value = "selectedStatus", required = false) List<Integer> selectedStatus,
@RequestParam("perPage") Integer perPage,
@RequestParam("currentPage") Integer currentPage) {
return containerService.containerListWithCondition(nameLike, selectedHost, selectedStatus, perPage, currentPage);
}
@GetMapping("/allHost")
public ResponseResult hostDrawer() {
return containerService.getAllHost();
}
@SysLog(operation = OperationEnum.CONTAINER_DELETE)
@DeleteMapping("/delete/{id}")
public ResponseResult deleteContainer(@PathVariable("id") Integer id) {
return containerService.deleteContainerById(id);
}
@SysLog(operation = OperationEnum.CONTAINER_ADD)
@PostMapping("/addContainer")
public ResponseResult addContainer(@RequestBody Map<String, ContainerVo> container) {
return containerService.addContainer(container.get("container"));
}
@GetMapping("/{id}")
public ResponseResult getContainer(@PathVariable("id") Integer id) {
return containerService.getContainer(id);
}
@SysLog(operation = OperationEnum.CONTAINER_UPDATE)
@PostMapping("/updateContainer")
public ResponseResult updateVm(@RequestBody Map<String, ContainerVo> container) {
return containerService.updateContainer(container.get("container"));
}
@GetMapping("/allContainer")
public ResponseResult allContainer() {
return containerService.getAllContainer();
}
@GetMapping("/associatedContainers")
public ResponseResult getAssociatedContainers(
@RequestParam("hostId") Integer hostId,
@RequestParam("perPage") Integer perPage,
@RequestParam("currentPage") Integer currentPage) {
return containerService.getAssociatedContainers(hostId, perPage, currentPage);
}
}
@@ -1,61 +0,0 @@
package com.mzaxd.noodles.controller;
import com.mzaxd.noodles.domain.ResponseResult;
import com.mzaxd.noodles.service.DashboardService;
import com.mzaxd.noodles.service.EveryDayDataService;
import com.mzaxd.noodles.service.HostDetectorService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @author 13439
*/
@RestController
@RequestMapping("/dashboard")
public class DashboardController {
@Resource
private HostDetectorService detectorService;
@Resource
private EveryDayDataService everyDayDataService;
@Resource
private DashboardService dashboardService;
@GetMapping("/getMemInfo")
public ResponseResult getMemInfo() {
return detectorService.getMemInfo();
}
@GetMapping("/getAuditLogCountYesterday")
public ResponseResult getAuditLogCountYesterday() {
return everyDayDataService.getAuditLogCountYesterday();
}
@GetMapping("/getInstancesHistory")
public ResponseResult getInstancesHistory() {
return everyDayDataService.getInstancesHistory();
}
@GetMapping("/getInstancesRealTimeData")
public ResponseResult getInstancesRealTimeData() {
return dashboardService.getInstancesRealTimeData();
}
@GetMapping("/getRecentConsoleList")
public ResponseResult getRecentConsoleList() {
return dashboardService.getRecentConsoleList();
}
@GetMapping("/getAffectedServirList")
public ResponseResult getAffectedServirList() {
return dashboardService.getAffectedServirList();
}
}
@@ -1,30 +0,0 @@
package com.mzaxd.noodles.controller;
import com.mzaxd.noodles.constant.UrlConstant;
import com.mzaxd.noodles.domain.ResponseResult;
import com.mzaxd.noodles.service.HostDetectorService;
import com.mzaxd.noodles.util.UrlUtil;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @author root
*/
@RestController
@RequestMapping("/detector")
public class DetectorController {
@Resource
private HostDetectorService hostDetectorService;
@GetMapping("/isValidUrl/{protocol}/{ip}/{port}")
public ResponseResult isValidUrl(@PathVariable String protocol,@PathVariable String ip, @PathVariable String port) {
return hostDetectorService.isValidUrl(protocol,ip,port);
}
}
@@ -1,140 +0,0 @@
package com.mzaxd.noodles.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.fastjson.JSON;
import com.mzaxd.noodles.annotation.SysLog;
import com.mzaxd.noodles.domain.ResponseResult;
import com.mzaxd.noodles.domain.entity.HostMachine;
import com.mzaxd.noodles.domain.vo.HostVo;
import com.mzaxd.noodles.domain.vo.VmVo;
import com.mzaxd.noodles.enums.AppHttpCodeEnum;
import com.mzaxd.noodles.enums.OperationEnum;
import com.mzaxd.noodles.service.HostMachineService;
import com.mzaxd.noodles.util.WebUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/**
* @author root
*/
@RestController
@RequestMapping("/host")
public class HostController {
@Resource
private HostMachineService hostMachineService;
@GetMapping("/drawer")
public ResponseResult hostDrawer() {
return hostMachineService.getHostDrawer();
}
@GetMapping("/vmList")
public ResponseResult vmListWithCondition(
@RequestParam(value = "q", required = false) String nameLike,
@RequestParam(value = "selectedKernel", required = false) List<Integer> selectedKernel,
@RequestParam(value = "selectedHost", required = false) List<Integer> selectedHost,
@RequestParam(value = "selectedStatus", required = false) List<Integer> selectedStatus,
@RequestParam("perPage") Integer perPage,
@RequestParam("currentPage") Integer currentPage) {
return hostMachineService.vmListWithCondition(nameLike, selectedKernel, selectedHost, selectedStatus, perPage, currentPage);
}
@GetMapping("/vmList/summaryStatistics")
public ResponseResult vmListSummaryStatistics() {
return hostMachineService.vmListSummaryStatistics();
}
@SysLog(operation = OperationEnum.VM_ADD)
@PostMapping("/addVm")
public ResponseResult addVm(@RequestBody Map<String, VmVo> vmVo) {
return hostMachineService.addVm(vmVo.get("vm"));
}
@SysLog(operation = OperationEnum.VM_UPDATE)
@PostMapping("/updateVm")
public ResponseResult updateVm(@RequestBody Map<String, VmVo> vmVo) {
return hostMachineService.updateVm(vmVo.get("vm"));
}
@SysLog(operation = OperationEnum.VM_DELETE)
@DeleteMapping("/deleteVm/{id}")
public ResponseResult deleteVm(@PathVariable("id") Integer id) {
return hostMachineService.deleteVmById(id);
}
@SysLog(operation = OperationEnum.HOST_DELETE)
@DeleteMapping("/deleteHost/{id}")
public ResponseResult deleteHost(@PathVariable("id") Integer id) {
return hostMachineService.deleteHostById(id);
}
@GetMapping("/vm/{id}")
public ResponseResult<VmVo> getVmById(@PathVariable("id") Integer id) {
return hostMachineService.getVmById(id);
}
@SysLog(operation = OperationEnum.HOST_UPDATE)
@PostMapping("/updateHost")
public ResponseResult updateHost(@RequestBody Map<String, HostVo> hostVo) {
return hostMachineService.updateHost(hostVo.get("host"));
}
@GetMapping("/host/{id}")
public ResponseResult<HostVo> getHostById(@PathVariable("id") Integer id) {
return hostMachineService.getHostById(id);
}
@GetMapping("/hostList")
public ResponseResult hostListWithCondition(
@RequestParam(value = "q", required = false) String nameLike,
@RequestParam(value = "selectedStatus", required = false) List<Integer> selectedStatus,
@RequestParam("perPage") Integer perPage,
@RequestParam("currentPage") Integer currentPage) {
return hostMachineService.hostListWithCondition(nameLike, selectedStatus, perPage, currentPage);
}
@SysLog(operation = OperationEnum.HOST_ADD)
@PostMapping("/addHost")
public ResponseResult addHost(@RequestBody Map<String, HostVo> hostVo) {
return hostMachineService.addHost(hostVo.get("host"));
}
@GetMapping("/hostDetail/{id}")
public ResponseResult getHostDetail(@PathVariable("id") Integer id) {
return hostMachineService.getHostDetail(id);
}
@GetMapping("/associatedVms")
public ResponseResult getAssociatedVms(
@RequestParam("hostId") Integer hostId,
@RequestParam("perPage") Integer perPage,
@RequestParam("currentPage") Integer currentPage) {
return hostMachineService.getAssociatedVms(hostId, perPage, currentPage);
}
@GetMapping("/associatedDisks/{id}")
public ResponseResult getAssociatedDisks(@PathVariable("id") Integer id){
return hostMachineService.getAssociatedDisks(id);
}
@GetMapping("/associatedNetworkIfs/{id}")
public ResponseResult getAssociatedNetworkIfs(@PathVariable("id") Integer id) {
return hostMachineService.getAssociatedNetworkIfs(id);
}
@GetMapping("/startSendDynamicData/{id}")
public ResponseResult startSendDynamicData(@PathVariable("id") Integer hostId) {
return hostMachineService.startSendDynamicData(hostId);
}
@GetMapping("/stopSendDynamicData/{id}")
public ResponseResult stopSendDynamicData(@PathVariable("id") Integer hostId) {
return hostMachineService.stopSendDynamicData(hostId);
}
}

Some files were not shown because too many files have changed in this diff Show More