Initial commit: yunjiao server

main
王宇航 2026-11-03 13:51:02 +08:00
commit da4b2059ba
660 changed files with 40755 additions and 0 deletions

18
.gitignore vendored Normal file
View File

@ -0,0 +1,18 @@
# Build output
target/
**/target/
# Runtime and IDE files
logs/
*.log
.idea/
*.iml
.DS_Store
# Local environment overrides and secrets
.env
.env.*
application-local.yml
application-local.yaml
application-local.properties
application-dev.yml

41
DirectoryV2.xml Normal file
View File

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<trees>
<tree path="/yj-admin" title="后台模块"/>
<tree path="/yj-common" title="公共模块"/>
<tree path="/yj-front" title="前台模块"/>
<tree path="/yj-generator" title="生成器"/>
<tree path="/yj-common/src/main/java/com/yj/common/config" title="公共配置"/>
<tree path="/yj-common/src/main/java/com/yj/common/core" title="核心代码"/>
<tree path="/yj-common/src/main/java/com/yj/common/entity" title="模型实体"/>
<tree path="/yj-common/src/main/java/com/yj/common/enums" title="公共枚举"/>
<tree path="/yj-common/src/main/java/com/yj/common/exception" title="公共异常"/>
<tree path="/yj-common/src/main/java/com/yj/common/mapper" title="模型映射"/>
<tree path="/yj-common/src/main/java/com/yj/common/plugin" title="公共插件"/>
<tree path="/yj-common/src/main/java/com/yj/common/utils" title="通用工具"/>
<tree path="/yj-common/src/main/java/com/yj/common/validator" title="扩展验证"/>
<tree path="/yj-common/src/main/java/com/yj/common/validator/IDMustValidator.java" title=""
extension="java"/>
<tree path="/yj-admin/src/main/java/com/yj/admin/config" title="配置层"/>
<tree path="/yj-admin/src/main/java/com/yj/admin/controller" title="控制层"/>
<tree path="/yj-admin/src/main/java/com/yj/admin/service" title="服务层"/>
<tree path="/yj-admin/src/main/java/com/yj/admin/validate" title="验证层"/>
<tree path="/yj-admin/src/main/java/com/yj/admin/vo" title="传输层"/>
<tree path="/yj-admin/src/main/java/com/yj/admin/LikeAdminApplication.java" title="启动器" extension="java"/>
<tree path="/yj-admin/src/main/java/com/yj/admin/LikeAdminInterceptor.java" title="拦截器" extension="java"/>
<tree path="/yj-admin/src/main/java/com/yj/admin/LikeAdminThreadLocal.java" title="线程" extension="java"/>
<tree path="/yj-front/src/main/java/com/yj/front/config" title="配置层"/>
<tree path="/yj-front/src/main/java/com/yj/front/controller" title="控制层"/>
<tree path="/yj-front/src/main/java/com/yj/front/service" title="服务层"/>
<tree path="/yj-front/src/main/java/com/yj/front/validate" title="验证层"/>
<tree path="/yj-front/src/main/java/com/yj/front/vo" title="传输层"/>
<tree path="/yj-front/src/main/java/com/yj/front/LikeFrontApplication.java" title="启动器" extension="java"/>
<tree path="/yj-front/src/main/java/com/yj/front/LikeFrontInterceptor.java" title="拦截器" extension="java"/>
<tree path="/yj-front/src/main/java/com/yj/front/LikeFrontThreadLocal.java" title="线程" extension="java"/>
<tree path="/yj-admin/src/main/java/com/yj/admin/crontab" title="任务层"/>
<tree path="/yj-common/src/main/java/com/yj/common/util" title="公共工具"/>
<tree path="/yj-common/src/main/java/com/yj/common/aop" title="公共切面"/>
<tree path="/yj-front/src/main/java/com/yj/front/cache" title="缓存层"/>
<tree path="/yj-admin/src/main/java/com/yj/admin/cache" title="缓存层"/>
<tree path="/yj-admin/src/main/java/com/yj/admin/aop" title="切面层"/>
<tree path="/yj-common/src/main/java/com/yj/common/cache" title="缓存层"/>
</trees>

89
README.md Normal file
View File

@ -0,0 +1,89 @@
<a href="https://www.likeshop.cn">![likeshop全开源商城](https://server.likeshop.cn/uploads/gitad/likeshop.png)</a><br>
<a href="https://www.buildingai.cc">![BuildingAI](https://server.likeshop.cn/uploads/gitad/fastbuildAI.png)</a><br>
<h1 align="center">likeadmin通用管理后台(Java)</h1>
<h4 align="center">⚡️快速开发、🛠️ 一键生成代码、✅后台多端自适应、📱手机端、🖥️PC(电脑)端前台</h4>
<p align="center">
<a href="https://www.java.com/zh-CN/download/"><img src="https://img.shields.io/badge/JAVA-8-d74f11"> </a><a href="#"> <img src="https://img.shields.io/badge/Spring Boot-2-5ea931"> </a><a href="https://www.tslang.cn/"><img src="https://img.shields.io/badge/TypeScript-3-294e80"></a> <a href="#"><img src="https://img.shields.io/badge/Vue.js-3-4eb883"> </a><a href="#"><img src="https://img.shields.io/badge/vite-2-ffc018"> </a><a href="#"><img src="https://img.shields.io/badge/Element Plus-2-409eff"> </a><a target="_blank" href="https://www.docker.com/"><img src="https://img.shields.io/badge/Docker--139cff"></a>
</p>
<p align="center">
<a href="https://mp.weixin.qq.com/"><img src="https://img.shields.io/badge/微信-公众号-05ce66"></a>
<a href="https://mp.weixin.qq.com/"><img src="https://img.shields.io/badge/微信-小程序-05ce66"></a>
<a href="https://open.weixin.qq.com/"><img src="https://img.shields.io/badge/微信-开放平台-05ce66"></a>
<a href="https://cloud.tencent.com/"><img src="https://img.shields.io/badge/腾讯云-COS-00a3ff"></a>
<a href="https://cloud.tencent.com/"><img src="https://img.shields.io/badge/腾讯云-短信-00a3ff"></a>
<a href="https://www.aliyun.com/"><img src="https://img.shields.io/badge/阿里云-OSS-ff6a00"></a>
<a href="https://www.aliyun.com/"><img src="https://img.shields.io/badge/阿里云-短信-ff6a00"></a>
<a href="https://www.qiniu.com/"><img src="https://img.shields.io/badge/七牛云-OSS-07beff"></a>
</p>
<div align="center">
<img width="80%" src="https://md.likeshop.cn/server/index.php?s=/api/attachment/visitFile&sign=9cf02b831e49d6a411bafbc4d79f51d4" /><br>
</div>
<br>
## 🚀🚀🚀docker本地一句命令快速部署体验
### 快速部署
1.安装启动 [docker](https://www.docker.com/) 之后,在终端运行以下命令,等待程序启动完毕即可体验。<br>
```shell
docker run -it --name likeadmin_java -p 20222:20222 -p 20223:20223 likeshop/likeadmin_java:1.5.0
```
<br>
### 本地访问
命令运行完毕以后,请等待程序启动完毕再访问。由于谷歌浏览器对本地部署不友好原因,访问的链接下面尾部有/就带上/。PC端管理后台帐号为admin,密码为123456 。<br>
PC端管理后台:http://127.0.0.1:20222/
<br>PC端前台:http://127.0.0.1:20223/pc/
<br>手机端前台:http://127.0.0.1:20223/mobile/
### ⚠️注意
docker快速部署只适合本地部署体验,不熟悉docker请勿用于生产环境,可能造成数据丢失等问题。
<br>
## 👀体验
### 管理后台
地址:https://java-admin.likeadmin.cn <br>
账号:admin 密码:123456
### 手机端uniapp前台
<img width="40%" src="https://md.likeshop.cn/server/index.php?s=/api/attachment/visitFile&sign=260c0869d9ba7e692b2db1e216078241" /><br>
### 手机端网页前台
https://java-front.likeadmin.cn/mobile
### PC(电脑)端网页前台
https://java-front.likeadmin.cn/pc/
### 开发文档
地址:[https://www.likeadmin.cn](https://www.likeadmin.cn "https://www.likeadmin.cn")
## 👨‍💻‍简介
我们希望能够为开源社区做出更多的贡献,推出永久免费开源的likeadmin通用前后端分离管理后台系统。遵循MIT开源许可协议,您可以免费使用,甚至允许把你基于likeadmin开发的软件应用开源、发布、销售。
<br>
## 🧐进一步了解
### 🧰场景介绍
1.likeadmin已经搭建好前后端分离的底层,包含程序安装、登录、登出、工作台、菜单权限控制、角色、管理员、部门管理、岗位管理、素材管理、网站设置、图库管理等基础功能,无需重复造轮子。更有开发者工具功能,一键生成代码,大大节省开发时间。<br>
2.可视化系统程序安装界面,可自定义安装数据,开发者可快速扩展发行自己的软件产品。<br>
3.likeadmin定位为通用的软件系统管理后台,方便开发者快速开发软件系统,文档清晰、代码易懂、简单易用。<br>
4.手机端uniapp前台,含导导航配置、微信登录、个人登录等等基础功能,方便根据业务开发含手机前台的项目。
### 🐙 后端架构方面
1.服务端使用Java8开发,性能有突破性的提升。<br>
2.使用Spring Boot2.7.5框架,目前国内流行的Java框架,高性能、简单易用、文档齐全、支持Mave高级项目管理工具、支持Redis等。
### 🐹 前端架构方面
#### 后台
1.使用最流性的前后端分离方案typescript、vue3、vite开发,保持了代码的简洁、一致和规范。<br>
2.后台界面使用element-plus UI框架,简单精美的后台界面,丰富的组件库,方便快速开发,满足各种后台交互。
<br>
### 前台
手机端uniapp前台,可以编译成手机H5网页、微信小程序、安卓App,苹果App等客户端。<br>
### 🛠️ 代码生成器
一键生成前后端业务代码,大大提示开发效率。<br>
## 界面预览
### 🖥️后台页面
![](https://md.likeshop.cn/server/index.php?s=/api/attachment/visitFile&sign=9cf02b831e49d6a411bafbc4d79f51d4) <br>
![](https://md.likeshop.cn/server/index.php?s=/api/attachment/visitFile&sign=eb83547d55b4f41f0d92fd6a3e01d87e) <br>
![](https://md.likeshop.cn/server/index.php?s=/api/attachment/visitFile&sign=818d843fb9cba396226e32dad1a58f3c) <br>
![](https://md.likeshop.cn/server/index.php?s=/api/attachment/visitFile&sign=194ab31919cd4dd619e6c453d7a44304) <br>
![](https://md.likeshop.cn/server/index.php?s=/api/attachment/visitFile&sign=f6770e2a8069d7b6ea3d83b91204b9d6) <br>
<br>
### 📱手机端前台界面
<div class="half">
<img width="30%" src="https://md.likeshop.cn/server/index.php?s=/api/attachment/visitFile&sign=2dbac190afadfb6650a04c8af44980e1" /> <img width="30%" src="https://md.likeshop.cn/server/index.php?s=/api/attachment/visitFile&sign=73adbdb91ff5c43ca3e694a99effae7a" /> <img width="30%" src="https://md.likeshop.cn/server/index.php?s=/api/attachment/visitFile&sign=55b51eaebd7d696f96ccbf60d4694368" />
</div><br>

284
pom.xml Normal file
View File

@ -0,0 +1,284 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!-- 模块信息 -->
<groupId>org.yj</groupId>
<artifactId>yunjiao-server</artifactId>
<packaging>pom</packaging>
<version>1.0.0</version>
<modelVersion>4.0.0</modelVersion>
<modules>
<module>yj-admin</module>
<module>yj-front</module>
<module>yj-common</module>
<module>yj-generator</module>
</modules>
<!-- 特性信息 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<like.version>1.0.0</like.version>
<java.version>1.8</java.version>
<log4j2.version>2.16.0</log4j2.version>
<mysql-connector.version>5.1.49</mysql-connector.version>
<mybatis-plus.version>3.5.2</mybatis-plus.version>
<mybatis-plus-join.version>1.2.4</mybatis-plus-join.version>
<pagehelper.version>1.4.5</pagehelper.version>
<lombok.version>1.18.24</lombok.version>
<fastJson2.version>2.0.16</fastJson2.version>
<commons-lang3.version>3.12.0</commons-lang3.version>
<commons.io.version>2.11.0</commons.io.version>
<commons-pool2.version>2.11.1</commons-pool2.version>
<google-gson.version>2.9.0</google-gson.version>
<kaptcha.version>2.3.2</kaptcha.version>
<bitwalker.version>1.2.4</bitwalker.version>
<oshi-core.version>6.1.2</oshi-core.version>
<sa-token.version>1.32.0</sa-token.version>
<sa-token-redis.version>1.32.0</sa-token-redis.version>
<easyexcel.version>3.1.3</easyexcel.version>
<quartz-scheduler.version>2.3.2</quartz-scheduler.version>
<qiniu.version>7.17.0</qiniu.version>
<qcloud-version>5.6.54</qcloud-version>
<tencentcloudapi.version>3.1.411</tencentcloudapi.version>
<aliyun-oss.version>3.10.2</aliyun-oss.version>
<aliyun-java.version>4.5.16</aliyun-java.version>
<weixin.version>4.4.0</weixin.version>
</properties>
<!-- 依赖声明 -->
<dependencyManagement>
<dependencies>
<!-- SpringBoot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.7.5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Mysql-Connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector.version}</version>
</dependency>
<!-- MyBatis-Plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<!-- MyBatis-Plus-Join -->
<dependency>
<groupId>com.github.yulichang</groupId>
<artifactId>mybatis-plus-join</artifactId>
<version>${mybatis-plus-join.version}</version>
</dependency>
<!-- MyBatis-PageHelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pagehelper.version}</version>
</dependency>
<!-- Pool2 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>${commons-pool2.version}</version>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<!-- Fastjson2 -->
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>${fastJson2.version}</version>
</dependency>
<!-- kaptCha -->
<dependency>
<groupId>com.github.penggle</groupId>
<artifactId>kaptcha</artifactId>
<version>${kaptcha.version}</version>
</dependency>
<!-- SaToken -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId>
<version>${sa-token.version}</version>
</dependency>
<!-- SaToken-Redis -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-dao-redis-jackson</artifactId>
<version>${sa-token-redis.version}</version>
</dependency>
<!-- Quartz-Scheduler -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>${quartz-scheduler.version}</version>
</dependency>
<!-- Gson工具 -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>${google-gson.version}</version>
</dependency>
<!-- UA工具 -->
<dependency>
<groupId>nl.bitwalker</groupId>
<artifactId>UserAgentUtils</artifactId>
<version>${bitwalker.version}</version>
</dependency>
<!-- Str工具 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>
<!-- IO工具 -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>${commons.io.version}</version>
</dependency>
<!-- 七牛云OSS -->
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>${qiniu.version}</version>
</dependency>
<!-- 腾讯云COS -->
<dependency>
<groupId>com.qcloud</groupId>
<artifactId>cos_api</artifactId>
<version>${qcloud-version}</version>
</dependency>
<!-- 阿里云OSS -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>${aliyun-oss.version}</version>
</dependency>
<!-- 腾讯云短信 -->
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java</artifactId>
<version>${tencentcloudapi.version}</version>
</dependency>
<!-- 阿里云短信 -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>${aliyun-java.version}</version>
</dependency>
<!-- EasyExcel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>${easyexcel.version}</version>
</dependency>
<!-- 系统监控 -->
<dependency>
<groupId>com.github.oshi</groupId>
<artifactId>oshi-core</artifactId>
<version>${oshi-core.version}</version>
</dependency>
<!-- Swagger3 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<!-- 微信小程序 -->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-miniapp</artifactId>
<version>${weixin.version}</version>
</dependency>
<!-- 微信公众号 -->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-mp</artifactId>
<version>${weixin.version}</version>
</dependency>
<!-- 微信支付 -->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-pay</artifactId>
<version>${weixin.version}</version>
</dependency>
<!-- 全局工具 -->
<dependency>
<groupId>org.yj</groupId>
<artifactId>yj-common</artifactId>
<version>${like.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 插件管理 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.6.4</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.10.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>

1221
sql/install.sql Normal file

File diff suppressed because one or more lines are too long

76
yj-admin/pom.xml Normal file
View File

@ -0,0 +1,76 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!-- 父工程 -->
<parent>
<artifactId>yunjiao-server</artifactId>
<groupId>org.yj</groupId>
<version>1.0.0</version>
</parent>
<!-- 模块信息 -->
<modelVersion>4.0.0</modelVersion>
<artifactId>yj-admin</artifactId>
<packaging>jar</packaging>
<!-- 项目管理 -->
<dependencies>
<!-- 全局工具 -->
<dependency>
<groupId>org.yj</groupId>
<artifactId>yj-common</artifactId>
</dependency>
<!-- 代码生成 -->
<dependency>
<groupId>org.yj</groupId>
<artifactId>yj-generator</artifactId>
<version>1.0.0</version>
</dependency>
<!-- 验证码 -->
<dependency>
<groupId>com.github.penggle</groupId>
<artifactId>kaptcha</artifactId>
</dependency>
<!-- SaToken -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId>
</dependency>
<!-- SaToken-Redis -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-dao-redis-jackson</artifactId>
</dependency>
<!-- Quartz-Scheduler -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
</dependency>
</dependencies>
<!-- 插件管理 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.6.4</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,25 @@
package com.yj.admin;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
/**
* 启动器
*/
@Configuration
@ComponentScan(basePackages = {"com.yj"})
@MapperScan(basePackages = {"com.yj.*.mapper"})
@EnableTransactionManagement
@SpringBootApplication(exclude = {RedisRepositoriesAutoConfiguration.class})
public class LikeAdminApplication {
public static void main(String[] args) {
SpringApplication.run(LikeAdminApplication.class, args);
}
}

View File

@ -0,0 +1,218 @@
package com.yj.admin;
import cn.dev33.satoken.stp.StpUtil;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.yj.admin.service.admin.IAdminRoleService;
import com.yj.common.aop.NotPower;
import com.yj.common.aop.NotLogin;
import com.yj.common.core.AjaxResult;
import com.yj.common.entity.admin.Admin;
import com.yj.common.enums.ErrorEnum;
import com.yj.common.exception.LoginException;
import com.yj.common.mapper.admin.AdminMapper;
import com.yj.common.util.StringUtils;
import com.yj.common.util.YmlUtils;
import org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.List;
/**
* 拦截器
*/
@Component
public class LikeAdminInterceptor implements HandlerInterceptor {
@Resource
AdminMapper systemAuthAdminMapper;
@Resource
IAdminRoleService iAdminRoleService;
/**
* 前置处理器
*
* @param request 请求
* @param response 响应
* @param handler 处理
* @return boolean
* @throws Exception 异常
*/
@Override
public boolean preHandle(@NotNull HttpServletRequest request,
@NotNull HttpServletResponse response,
@NotNull Object handler) throws Exception {
// 请求方法类型
String reqUri = request.getRequestURI();
if (!(handler instanceof HandlerMethod) || ( !reqUri.startsWith("/api") && !reqUri.startsWith("/adminapi"))) {
return HandlerInterceptor.super.preHandle(request, response, handler);
}
// 登录权限校验
try {
response.setContentType("application/json;charset=utf-8");
Method method = this.obtainAop(handler);
this.checkLogin(method, reqUri);
} catch (LoginException e) {
AjaxResult<Object> result = AjaxResult.failed(e.getCode(), e.getMsg());
response.getWriter().print(JSON.toJSONString(result));
return false;
}
// 演示环境拦截
String env = YmlUtils.get("like.production");
if (StringUtils.isNotNull(env) && env.equals("true")) {
String prefix = "/adminapi/";
String route = request.getRequestURI().replaceFirst(prefix, "");
// String auths = route.replace("/", ":");
String auths = route;
List<String> ignoreUrl = Arrays.asList("login/account", "login/logout");
if (request.getMethod().equals("POST") && !ignoreUrl.contains(auths)) {
String message = "演示环境不支持修改数据,请下载源码本地部署体验";
AjaxResult<Object> result = AjaxResult.failed(ErrorEnum.NO_PERMISSION.getCode(), message);
response.getWriter().print(JSON.toJSONString(result));
return false;
}
}
// 验证通过继续
return HandlerInterceptor.super.preHandle(request, response, handler);
}
/**
* 后置处理器
*
* @param request 请求
* @param response 响应
* @param handler 处理
* @param ex 异常
* @throws Exception 异常
*/
@Override
public void afterCompletion(@NotNull HttpServletRequest request,
@NotNull HttpServletResponse response,
@NotNull Object handler, Exception ex) throws Exception {
LikeAdminThreadLocal.remove();
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
/**
* 提取注解
*
* @param handler 处理器
* @return Method
* @throws Exception 异常
*/
private Method obtainAop(@NotNull Object handler) throws Exception {
String[] objArr = handler.toString().split("#");
String methodStr = objArr[1].split("\\(")[0];
String classStr = objArr[0];
Class<?> clazz = Class.forName(classStr);
Method[] methods = clazz.getDeclaredMethods();
for (Method method : methods) {
if (method.getName().equals(methodStr)) {
return method;
}
}
return null;
}
/**
* 登录验证
*
* @param method 方法类
* @author fzr
*/
private void checkLogin(Method method, String reqUri) {
for (int i=0; i<=0; i++) {
// 免登校验
if (StringUtils.isNotNull(method) && method.isAnnotationPresent(NotLogin.class)) {
break;
}
// 令牌校验
String token = StpUtil.getTokenValue();
if (StringUtils.isNull(token) || StringUtils.isBlank(token)) {
Integer errCode = ErrorEnum.TOKEN_EMPTY.getCode();
String errMsg = ErrorEnum.TOKEN_EMPTY.getMsg();
throw new LoginException(errCode, errMsg);
}
// 登录校验
Object id = StpUtil.getLoginId();
if (StringUtils.isNull(id)) {
Integer errCode = ErrorEnum.TOKEN_INVALID.getCode();
String errMsg = ErrorEnum.TOKEN_INVALID.getMsg();
throw new LoginException(errCode, errMsg);
}
// 用户校验
Admin adminUser = systemAuthAdminMapper.selectOne(
new QueryWrapper<Admin>()
.select("id,name,disable")
.eq("id", Integer.parseInt(id.toString()))
.isNull("delete_time")
.last("limit 1"));
// 删除校验
if (StringUtils.isNull(adminUser)) {
Integer errCode = ErrorEnum.TOKEN_INVALID.getCode();
String errMsg = ErrorEnum.TOKEN_INVALID.getMsg();
throw new LoginException(errCode, errMsg);
}
// 禁用校验
if (adminUser.getDisable().equals(1)) {
Integer errCode = ErrorEnum.LOGIN_DISABLE_ERROR.getCode();
String errMsg = ErrorEnum.LOGIN_DISABLE_ERROR.getMsg();
throw new LoginException(errCode, errMsg);
}
// 写入线程
LikeAdminThreadLocal.put("adminId", id);
LikeAdminThreadLocal.put("username", adminUser.getName());
String roleIds = StringUtils.join(iAdminRoleService.getRoleIdAttr(Integer.parseInt(String.valueOf(id))), ",");
LikeAdminThreadLocal.put("roleIds", roleIds);
// 权限校验
if (!adminUser.getId().equals(1)) {
this.checkAuth(method, reqUri);
}
}
}
/**
* 权限验证
*
* @param method 方法类
* @param uri 请求路由
* @author fzr
*/
private void checkAuth(Method method, String uri) {
for (int i=0; i<=0; i++) {
// 免权限校验
if (StringUtils.isNotNull(method) && method.isAnnotationPresent(NotPower.class)) {
break;
}
// 路由转权限
String prefix = "/adminapi/";
String route = uri.replaceFirst(prefix, "");
// String auths = route.replace("/", ":");
String auths = route;
// 校验权限
StpUtil.checkPermission(auths);
}
}
}

View File

@ -0,0 +1,75 @@
package com.yj.admin;
import com.yj.common.util.ListUtils;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentSkipListMap;
/**
* 本地线程
*/
public class LikeAdminThreadLocal {
/**
* 构造方法
*/
public LikeAdminThreadLocal() {}
/**
* 取得本地线程对象
*/
private static final java.lang.ThreadLocal<Map<String, Object>> MY_LOCAL = new java.lang.ThreadLocal<>();
/**
* 写入本地线程
*/
public static void put(String key, Object val) {
Map<String, Object> map = MY_LOCAL.get();
if (map == null) {
synchronized (MY_LOCAL) {
map = new ConcurrentSkipListMap<>();
}
}
map.put(key, val);
MY_LOCAL.set(map);
}
/**
* 获取本地线程
*/
public static Object get(String key) {
return MY_LOCAL.get().getOrDefault(key, "");
}
/**
* 获取管理员ID
*/
public static Integer getAdminId() {
String adminId = LikeAdminThreadLocal.get("adminId").toString();
if (adminId.equals("")) {
return 0;
}
return Integer.parseInt(adminId);
}
/**
* 获取角色ID
*/
public static List<Integer> getRoleIds() {
String roleIds = LikeAdminThreadLocal.get("roleIds").toString();
if (roleIds.equals("") || roleIds.equals("0")) {
return Collections.emptyList();
}
return ListUtils.stringToListAsInt(roleIds, ",");
}
/**
* 删除本地线程
*/
public static void remove() {
MY_LOCAL.remove();
}
}

View File

@ -0,0 +1,29 @@
package com.yj.admin.aop;
import com.yj.admin.aop.aspect.RequestType;
import java.lang.annotation.*;
/**
* 日志记录类
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Log {
/**
* 模块名称
*
* @return String
*/
String title() default "";
/**
* 请求类型
*
* @return String
*/
RequestType requestType() default RequestType.Default;
}

View File

@ -0,0 +1,181 @@
package com.yj.admin.aop.aspect;
import com.alibaba.fastjson2.JSON;
import com.yj.admin.LikeAdminThreadLocal;
import com.yj.admin.aop.Log;
import com.yj.common.entity.admin.Admin;
import com.yj.common.entity.system.OperationLog;
import com.yj.common.mapper.admin.AdminMapper;
import com.yj.common.mapper.system.SystemLogOperateMapper;
import com.yj.common.util.IpUtils;
import com.yj.common.util.RequestUtils;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterThrowing;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
@Aspect
@Component
public class LogAspect {
@Resource
SystemLogOperateMapper systemLogOperateMapper;
@Resource
AdminMapper adminMapper;
private static final Logger log = LoggerFactory.getLogger(LogAspect.class);
/**
* 线程本地变量
*/
private static final ThreadLocal<Long> threadLocal = new ThreadLocal<>();
/**
* 单线程化的线程池
*/
private final ExecutorService executor = Executors.newSingleThreadExecutor();
/**
* 声明切面点拦截那些类
*/
@Pointcut("@annotation(com.yj.admin.aop.Log)")
private void pointCutMethodController() {}
/**
* 环绕通知前后增强
*/
@Around(value = "pointCutMethodController()")
public Object doAroundService(ProceedingJoinPoint joinPoint) throws Throwable {
// 开始时间
threadLocal.set(System.currentTimeMillis());
// 执行方法
Object result = joinPoint.proceed();
// 保存日志
recordLog(joinPoint, null);
// 返回结果
return result;
}
/**
* 拦截异常操作
*
* @param joinPoint 切点
* @param e 异常
*/
@AfterThrowing(value = "@annotation(controllerLog)", throwing = "e")
public void doAfterThrowing(JoinPoint joinPoint, Log controllerLog, Exception e) {
recordLog(joinPoint, e);
}
/**
* 记录日志信息
*
* @param joinPointObj joinPoint
* @param e Exception 错误异常
*/
private void recordLog(Object joinPointObj, final Exception e) {
try {
long beginTime = threadLocal.get();
long endTime = System.currentTimeMillis();
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if (requestAttributes != null) {
// 取得请求对象
HttpServletRequest request = requestAttributes.getRequest();
// 获取当前的用户
Integer adminId = LikeAdminThreadLocal.getAdminId();
// 获取日志注解
ProceedingJoinPoint joinPoint = (ProceedingJoinPoint) joinPointObj;
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
Log logAnnotation = method.getAnnotation(Log.class);
// 方法名称
String className = joinPoint.getTarget().getClass().getName();
String methodName = joinPoint.getSignature().getName();
// 获取请求参数
String queryString = request.getQueryString();
Object[] args = joinPoint.getArgs();
String params = "";
if (args.length > 0) {
if("POST".equals(request.getMethod())){
if (RequestType.File.equals(logAnnotation.requestType())){
//文件类型获取文件名称作为参数
StandardMultipartHttpServletRequest standardMultipartHttpServletRequest = (StandardMultipartHttpServletRequest) args[0];
//提取文件名
params = standardMultipartHttpServletRequest
.getMultiFileMap()
.values()
.stream()
.map(m -> m.stream()
.map(MultipartFile::getOriginalFilename)
.collect(Collectors.joining(",")))
.collect(Collectors.joining(","));
} else {
params = JSON.toJSONString(args);
}
} else if("GET".equals(request.getMethod())){
params = queryString;
}
}
// 错误信息
String error = "";
int status = 1;
if (e != null) {
error = e.getMessage();
status = 2; // 1=成功, 2=失败
}
String adminName = "";
Admin admin = adminMapper.selectById(adminId);
if (admin != null) {
adminName = admin.getName();
}
// 数据库日志
OperationLog model = new OperationLog();
model.setAdminId(adminId);
model.setAdminName(adminName);
model.setAction(logAnnotation.title());
model.setIp(IpUtils.getIpAddress());
model.setType(request.getMethod());
// model.setMethod(className + "." + methodName + "()");
model.setUrl(RequestUtils.route());
model.setParams(params);
model.setResult(error);
// model.setStatus(status);
// model.setStartTime(beginTime / 1000);
// model.setEndTime(endTime / 1000);
// model.setTaskTime(endTime - beginTime);
model.setCreateTime(System.currentTimeMillis() / 1000);
executor.submit(() -> {
systemLogOperateMapper.insert(model);
});
}
} catch (Exception ex) {
log.error("异常信息:{}", ex.getMessage());
}
}
}

View File

@ -0,0 +1,16 @@
package com.yj.admin.aop.aspect;
/**
* 请求参数类
*/
public enum RequestType {
/**
* 文件类型
*/
File,
/**
* 默认数据类型
*/
Default
}

View File

@ -0,0 +1,31 @@
package com.yj.admin.cache;
import com.yj.common.util.*;
/**
* 验证码缓存器
*/
public class CaptchaCache {
public static String get(String uuid) {
String ip = IpUtils.getIpAddress().replaceAll("\\.", "");
String captchaKey = YmlUtils.get("like.captcha.token") + ip + ":" + uuid;
Object code = RedisUtils.get(captchaKey);
if (StringUtils.isNull(code) || StringUtils.isEmpty(code.toString())) {
return "";
}
RedisUtils.del(captchaKey);
return code.toString();
}
public static void set(String code, String uuid) {
String ip = IpUtils.getIpAddress().replaceAll("\\.", "");
String verifyKey = YmlUtils.get("like.captcha.token") + ip + ":" + uuid;
long expireTime = Long.parseLong(YmlUtils.get("like.captcha.expire"));
RedisUtils.set(verifyKey, code.toLowerCase(), expireTime);
}
}

View File

@ -0,0 +1,45 @@
package com.yj.admin.config;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Properties;
import static com.google.code.kaptcha.Constants.*;
/**
* 验证码配置
*/
@Configuration
public class KaptChaConfig {
@Bean(name = "captchaProducer")
public DefaultKaptcha getKaptchaBean() {
DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
Properties properties = new Properties();
// 是否边框
properties.setProperty(KAPTCHA_BORDER, "yes");
// 字符颜色
properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_COLOR, "black");
// 图片宽度
properties.setProperty(KAPTCHA_IMAGE_WIDTH, "160");
// 图片高度
properties.setProperty(KAPTCHA_IMAGE_HEIGHT, "60");
// 字符大小
properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_SIZE, "38");
// 验证键码
properties.setProperty(KAPTCHA_SESSION_CONFIG_KEY, "kaptchaCode");
// 字符长度
properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4");
// 字体样式
properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier");
// 图片样式
properties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy");
Config config = new Config(properties);
defaultKaptcha.setConfig(config);
return defaultKaptcha;
}
}

View File

@ -0,0 +1,24 @@
package com.yj.admin.config;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* MybatisPlus配置
*/
@Configuration
public class MybatisPlusConfig {
/**
* 分页插件集成
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
}

View File

@ -0,0 +1,49 @@
package com.yj.admin.config;
import com.yj.common.config.GlobalConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
@Configuration
@EnableOpenApi
public class SwaggerConfig {
@Value("${like.swagger.enabled}")
private boolean enabled;
@Value("${like.swagger.pathMapping}")
private String pathMapping;
@Bean
public Docket createRestApi(){
return new Docket(DocumentationType.OAS_30)
.apiInfo(apiInfo())
.enable(enabled)
.select()
.apis(RequestHandlerSelectors.basePackage("com.yj.admin.controller"))
.build()
.pathMapping(pathMapping);
}
private ApiInfo apiInfo(){
String author = "FZR";
String url = "https://gitee.com/likeadmin/likeadmin_java";
String email = "tinyants@163.com";
return new ApiInfoBuilder()
.title("LikeAdmin【后台】接口文档")
.description("likeadmin是一套使用流行的技术栈的快速开发管理后台")
.version(GlobalConfig.version)
.contact(new Contact(author, url, email))
.build();
}
}

View File

@ -0,0 +1,55 @@
package com.yj.admin.config;
import com.yj.admin.LikeAdminInterceptor;
import com.yj.common.config.GlobalConfig;
import com.yj.common.util.YmlUtils;
import org.jetbrains.annotations.NotNull;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import javax.annotation.Resource;
/**
* Web配置
*/
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Resource
LikeAdminInterceptor likeAdminInterceptor;
/**
* 配置允许跨域
*/
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedHeaders("*")
.allowedMethods("GET", "POST", "DELETE", "PUT")
.maxAge(3600);
}
/**
* 登录拦截器
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(likeAdminInterceptor)
.addPathPatterns("/**");
}
/**
* 资源目录映射
*/
@Override
public void addResourceHandlers(@NotNull ResourceHandlerRegistry registry) {
String directory = YmlUtils.get("like.upload-directory");
registry.addResourceHandler("/"+ GlobalConfig.adminPublicPrefix +"/**")
.addResourceLocations("file:" + directory);
}
}

View File

@ -0,0 +1,54 @@
package com.yj.admin.config.quartz;
import org.quartz.CronExpression;
import java.text.ParseException;
import java.util.Date;
/**
* 表达式工具
*/
public class CronUtils {
/**
* 验证表达式是否有效
*
* @param cronExpression 表达式
* @return true=有效,false=无效
*/
public static boolean isValid(String cronExpression) {
return CronExpression.isValidExpression(cronExpression);
}
/**
* 验证表达式消息无效给出有效性
*
* @param cronExpression 表达式
* @return null=有效, 其它=无效时的错误描述
*/
public static String invalidMessage(String cronExpression) {
try {
new CronExpression(cronExpression);
return null;
} catch (ParseException pe) {
return pe.getMessage();
}
}
/**
* 下一个执行时间点
*
* @param cronExpression n表达式
* @return Date下次表达式执行时间
*/
public static Date nextExecution(String cronExpression)
{
try {
CronExpression cron = new CronExpression(cronExpression);
return cron.getNextValidTimeAfter(new Date(System.currentTimeMillis()));
} catch (ParseException e) {
throw new IllegalArgumentException(e.getMessage());
}
}
}

View File

@ -0,0 +1,152 @@
package com.yj.admin.config.quartz;
import com.yj.common.entity.DevCrontab;
import com.yj.common.util.SpringUtils;
import com.yj.common.util.StringUtils;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.LinkedList;
import java.util.List;
/**
* 执行工具
*/
public class InvokeUtils {
/**
* 执行方法
*
* @param crontab 系统任务
*/
public static void invokeMethod(DevCrontab crontab) throws Exception {
String invokeTarget = crontab.getCommand();
String beanName = getBeanName(invokeTarget);
String methodName = getMethodName(invokeTarget);
List<Object[]> methodParams = getMethodParams(invokeTarget);
if (!isValidClassName(beanName)) {
Object bean = SpringUtils.getBean(beanName);
invokeMethod(bean, methodName, methodParams);
} else {
Object bean = Class.forName(beanName).newInstance();
invokeMethod(bean, methodName, methodParams);
}
}
/**
* 调用任务方法
*
* @param bean 目标对象
* @param methodName 方法名称
* @param methodParams 方法参数
*/
private static void invokeMethod(Object bean, String methodName, List<Object[]> methodParams)
throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException,
InvocationTargetException {
if (StringUtils.isNotNull(methodParams) && methodParams.size() > 0) {
Method method = bean.getClass().getMethod(methodName, getMethodParamsType(methodParams));
method.invoke(bean, getMethodParamsValue(methodParams));
} else {
Method method = bean.getClass().getMethod(methodName);
method.invoke(bean);
}
}
/**
* 校验是否为为class包名
*
* @param invokeTarget 名称
* @return true是 false否
*/
public static boolean isValidClassName(String invokeTarget) {
return StringUtils.countMatches(invokeTarget, ".") > 1;
}
/**
* 获取bean名称
*
* @param invokeTarget 目标字符串
* @return bean名称
*/
public static String getBeanName(String invokeTarget) {
String beanName = StringUtils.substringBefore(invokeTarget, "(");
return StringUtils.substringBeforeLast(beanName, ".");
}
/**
* 获取bean方法
*
* @param invokeTarget 目标字符串
* @return method方法
*/
public static String getMethodName(String invokeTarget) {
String methodName = StringUtils.substringBefore(invokeTarget, "(");
return StringUtils.substringAfterLast(methodName, ".");
}
/**
* 获取method方法参数相关列表
*
* @param invokeTarget 目标字符串
* @return method方法相关参数列表
*/
public static List<Object[]> getMethodParams(String invokeTarget) {
String methodStr = StringUtils.substringBetween(invokeTarget, "(", ")");
if (StringUtils.isEmpty(methodStr)) {
return null;
}
String[] methodParams = methodStr.split(",(?=([^\"']*[\"'][^\"']*[\"'])*[^\"']*$)");
List<Object[]> clazz = new LinkedList<>();
for (String methodParam : methodParams) {
String str = StringUtils.trimToEmpty(methodParam);
if (StringUtils.startsWithAny(str, "'", "\"")) {
clazz.add(new Object[]{StringUtils.substring(str, 1, str.length() - 1), String.class});
} else if ("true".equalsIgnoreCase(str) || "false".equalsIgnoreCase(str)) {
clazz.add(new Object[]{Boolean.valueOf(str), Boolean.class});
} else if (StringUtils.endsWith(str, "L")) {
clazz.add(new Object[]{Long.valueOf(StringUtils.substring(str, 0, str.length() - 1)), Long.class});
} else if (StringUtils.endsWith(str, "D")) {
clazz.add(new Object[]{Double.valueOf(StringUtils.substring(str, 0, str.length() - 1)), Double.class});
} else {
clazz.add(new Object[]{Integer.valueOf(str), Integer.class});
}
}
return clazz;
}
/**
* 获取参数类型
*
* @param methodParams 参数相关列表
* @return 参数类型列表
*/
public static Class<?>[] getMethodParamsType(List<Object[]> methodParams) {
Class<?>[] clazz = new Class<?>[methodParams.size()];
int index = 0;
for (Object[] os : methodParams)
{
clazz[index] = (Class<?>) os[1];
index++;
}
return clazz;
}
/**
* 获取参数值
*
* @param methodParams 参数相关列表
* @return 参数值列表
*/
public static Object[] getMethodParamsValue(List<Object[]> methodParams) {
Object[] clazz = new Object[methodParams.size()];
int index = 0;
for (Object[] os : methodParams) {
clazz[index] = os[0];
index++;
}
return clazz;
}
}

View File

@ -0,0 +1,107 @@
package com.yj.admin.config.quartz;
import com.yj.admin.config.quartz.exceution.QuartzJobExecution;
import com.yj.common.entity.DevCrontab;
import com.yj.common.util.StringUtils;
import org.quartz.*;
/**
* 计划任务工具
*/
public class QuartzUtils {
/**
* 得到quartz任务类
*
* @param crontab 执行计划
* @return 具体执行任务类
*/
private static Class<? extends Job> getQuartzJobClass(DevCrontab crontab) {
// boolean isConcurrent = crontab.getConcurrent().equals(0);
// return isConcurrent ? QuartzJobExecution.class : QuartzDisExecution.class;
return QuartzJobExecution.class;
}
/**
* 构建任务对象Key
*
* @param jobId (任务ID)
* @param jobGroup (任务分组)
* @return JobKey
*/
public static JobKey getJobKey(Integer jobId, String jobGroup) {
return JobKey.jobKey(TaskConstants.TASK_CLASS_NAME + jobId, jobGroup);
}
/**
* 构建触发对象Key
*
* @param jobId (任务ID)
* @param jobGroup (任务分组)
* @return TriggerKey
*/
public static TriggerKey getTriggerKey(Integer jobId, String jobGroup) {
return TriggerKey.triggerKey(TaskConstants.TASK_PROPERTIES + jobId, jobGroup);
}
/**
* 创建定时任务
*
* @param scheduler 调度器
* @param job 任务
* @throws SchedulerException 调度异常
*/
public static void createScheduleJob(Scheduler scheduler, DevCrontab job) throws SchedulerException {
Integer jobId = job.getId();
String jobGroup = job.getType().toString();
String expression = job.getExpression();
// 构建任务
Class<? extends Job> jobClass = getQuartzJobClass(job);
JobDetail jobDetail = JobBuilder.newJob(jobClass)
.withIdentity(getJobKey(jobId, jobGroup))
.build();
// 构建时间
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(expression);
// switch (job.getStrategy()) {
// case 1: // 立即执行
// cronScheduleBuilder = cronScheduleBuilder.withMisfireHandlingInstructionIgnoreMisfires();
// break;
// case 2: // 执行一次
// cronScheduleBuilder = cronScheduleBuilder.withMisfireHandlingInstructionFireAndProceed();
// break;
// case 3: // 放弃执行
// cronScheduleBuilder = cronScheduleBuilder.withMisfireHandlingInstructionDoNothing();
// break;
// }
cronScheduleBuilder = cronScheduleBuilder.withMisfireHandlingInstructionIgnoreMisfires();
// 注入参数
jobDetail.getJobDataMap().put(TaskConstants.TASK_PROPERTIES, job);
// 构建目标
CronTrigger trigger = TriggerBuilder.newTrigger()
.withIdentity(getTriggerKey(jobId, jobGroup))
.withSchedule(cronScheduleBuilder)
.build();
// 如果存在则删除
if (scheduler.checkExists(getJobKey(jobId, jobGroup))) {
scheduler.deleteJob(getJobKey(jobId, jobGroup));
}
// 如果过期则调度
if (StringUtils.isNotNull(CronUtils.nextExecution(job.getExpression()))) {
scheduler.scheduleJob(jobDetail, trigger);
}
// 如果暂停则停止
if (!job.getStatus().equals(TaskConstants.STATUS_RUN)) {
scheduler.pauseJob(getJobKey(jobId, jobGroup));
}
}
}

View File

@ -0,0 +1,20 @@
package com.yj.admin.config.quartz;
/**
* 计划任务常量
*/
public class TaskConstants {
/** 执行任务名 */
public static final String TASK_CLASS_NAME = "TASK_CLASS_NAME";
/** 执行目标键 */
public static final String TASK_PROPERTIES = "TASK_PROPERTIES";
/** 状态: 运行 */
public static final Integer STATUS_RUN = 1;
/** 状态: 失败 */
public static final Integer STATUS_FAIL = 2;
}

View File

@ -0,0 +1,82 @@
package com.yj.admin.config.quartz.exceution;
import com.yj.admin.config.quartz.TaskConstants;
import com.yj.common.entity.DevCrontab;
import com.yj.common.mapper.DevCrontabMapper;
import com.yj.common.util.SpringUtils;
import com.yj.common.util.StringUtils;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
public abstract class AbstractQuartzJob implements Job {
private static final Logger log = LoggerFactory.getLogger(AbstractQuartzJob.class);
/**
* 线程本地变量
*/
private static final ThreadLocal<Long> threadLocal = new ThreadLocal<>();
/**
* 执行
*
* @param context 上下文
*/
@Override
public void execute(JobExecutionContext context) {
DevCrontab crontab = new DevCrontab();
BeanUtils.copyProperties(context.getMergedJobDataMap().get(TaskConstants.TASK_PROPERTIES), crontab);
try {
before();
doExecute(context, crontab);
after(crontab, null);
} catch (Exception e) {
log.error("任务执行异常:", e);
after(crontab, e);
}
}
/**
* 执行前
*/
protected void before() {
threadLocal.set(System.currentTimeMillis());
}
/**
* 执行后
*
* @param crontab 系统计划任务
*/
protected void after(DevCrontab crontab, Exception e)
{
long startTime = threadLocal.get();
long endTime = System.currentTimeMillis();
threadLocal.remove();
crontab.setError("");
// crontab.set(startTime / 1000);
crontab.setLastTime(endTime / 1000);
crontab.setMaxTime(endTime - startTime);
crontab.setTime(endTime - startTime);
if (StringUtils.isNotNull(e)) {
crontab.setError(e.getMessage());
crontab.setStatus(TaskConstants.STATUS_FAIL);
}
SpringUtils.getBean(DevCrontabMapper.class).updateById(crontab);
}
/**
* 执行方法
*
* @param context 工作执行上下文对象
* @param sysJob 系统计划任务
* @throws Exception 执行过程中的异常
*/
protected abstract void doExecute(JobExecutionContext context, DevCrontab sysJob) throws Exception;
}

View File

@ -0,0 +1,19 @@
package com.yj.admin.config.quartz.exceution;
import com.yj.admin.config.quartz.InvokeUtils;
import com.yj.common.entity.DevCrontab;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.JobExecutionContext;
/**
* 禁止并发任务
*/
@DisallowConcurrentExecution
public class QuartzDisExecution extends AbstractQuartzJob {
@Override
protected void doExecute(JobExecutionContext context, DevCrontab crontab) throws Exception {
InvokeUtils.invokeMethod(crontab);
}
}

View File

@ -0,0 +1,17 @@
package com.yj.admin.config.quartz.exceution;
import com.yj.admin.config.quartz.InvokeUtils;
import com.yj.common.entity.DevCrontab;
import org.quartz.JobExecutionContext;
/**
* 允许并发任务
*/
public class QuartzJobExecution extends AbstractQuartzJob {
@Override
protected void doExecute(JobExecutionContext context, DevCrontab crontab) throws Exception {
InvokeUtils.invokeMethod(crontab);
}
}

View File

@ -0,0 +1,42 @@
package com.yj.admin.config.stp;
import cn.dev33.satoken.exception.NotLoginException;
import cn.dev33.satoken.exception.NotPermissionException;
import com.yj.common.core.AjaxResult;
import com.yj.common.enums.ErrorEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
/**
* Sa-Token的异常拦截
*/
@Slf4j
@ControllerAdvice
public class StpInException {
/**
* 拦截登录异常
*/
@ResponseStatus(HttpStatus.OK)
@ExceptionHandler(NotLoginException.class)
@ResponseBody
public AjaxResult<Object> handleNotLoginException(NotLoginException e){
String msg = e.getMessage().startsWith("Token无效") ? "尚未登录,请先登录!" : e.getMessage();
return AjaxResult.failed(ErrorEnum.TOKEN_INVALID.getCode(), msg);
}
/**
* 拦截权限异常
*/
@ResponseStatus(HttpStatus.OK)
@ExceptionHandler(NotPermissionException.class)
@ResponseBody
public AjaxResult<Object> handleNotPermissionException(){
return AjaxResult.failed(ErrorEnum.NO_PERMISSION.getCode(), ErrorEnum.NO_PERMISSION.getMsg());
}
}

View File

@ -0,0 +1,91 @@
package com.yj.admin.config.stp;
import cn.dev33.satoken.stp.StpInterface;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.yj.admin.LikeAdminThreadLocal;
import com.yj.admin.service.admin.IAdminRoleService;
import com.yj.common.entity.system.SystemMenu;
import com.yj.common.entity.system.SystemRoleMenu;
import com.yj.common.mapper.system.SystemMenuMapper;
import com.yj.common.mapper.system.SystemRoleMenuMapper;
import com.yj.common.util.StringUtils;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.*;
/**
* Sa-Token自定义权限验证接口
*/
@Component
public class StpInterConfig implements StpInterface {
@Resource
SystemRoleMenuMapper systemRoleMenuMapper;
@Resource
SystemMenuMapper systemAuthMenuMapper;
@Resource
IAdminRoleService iAdminRoleService;
/**
* 返回一个账号所拥有的权限码集合
*
* @param loginId 登录ID
* @param loginType 登录类型
* @return List<String>
*/
@Override
public List<String> getPermissionList(Object loginId, String loginType) {
List<Integer> roleIds = LikeAdminThreadLocal.getRoleIds();
List<String> perms = new LinkedList<>();
if (roleIds.isEmpty()) {
return perms;
}
List<SystemRoleMenu> permList = systemRoleMenuMapper.selectList(
new QueryWrapper<SystemRoleMenu>()
.select("role_id,menu_id")
.in("role_id", roleIds));
if (permList.isEmpty()) {
return perms;
}
List<Integer> menuIds = new LinkedList<>();
for (SystemRoleMenu systemAuthPerm : permList) {
menuIds.add(systemAuthPerm.getMenuId());
}
List<SystemMenu> systemAuthMenus = systemAuthMenuMapper.selectList(
new QueryWrapper<SystemMenu>()
.select("id,perms")
.eq("is_disable", 0)
.in("id", menuIds)
.in("type", Arrays.asList("C", "A"))
.orderByAsc(Arrays.asList("sort", "id")));
for (SystemMenu item : systemAuthMenus) {
if (StringUtils.isNotNull(item.getPerms()) && StringUtils.isNotEmpty(item.getPerms())) {
// perms.add(item.getPerms().trim().replace("/", ":"));
perms.add(item.getPerms().trim());
}
}
return perms;
}
/**
* 返回一个账号所拥有的角色标识集合
*
* @param loginId 登录ID
* @param loginType 登录类型
* @return List<String>
*/
@Override
public List<String> getRoleList(Object loginId, String loginType) {
return null;
}
}

View File

@ -0,0 +1,86 @@
package com.yj.admin.controller;
import com.yj.admin.aop.Log;
import com.yj.common.aop.NotPower;
import com.yj.admin.service.IArtCateService;
import com.yj.admin.validate.article.ArtCateCreateValidate;
import com.yj.admin.validate.article.ArtCateUpdateValidate;
import com.yj.admin.validate.article.ArtCateSearchValidate;
import com.yj.admin.validate.commons.IdValidate;
import com.yj.admin.validate.commons.PageValidate;
import com.yj.admin.vo.article.ArticleCateVo;
import com.yj.common.core.AjaxResult;
import com.yj.common.core.PageResult;
import com.yj.common.validator.annotation.IDMust;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping({"/adminapi/article/articleCate", "/adminapi/article.articleCate"})
@Api(tags = "文章分类管理")
public class ArtCateController {
@Resource
IArtCateService iArtCateService;
@NotPower
@GetMapping("/all")
@ApiOperation(value="所有分类")
public AjaxResult<List<ArticleCateVo>> all() {
List<ArticleCateVo> list = iArtCateService.all();
return AjaxResult.success(list);
}
@GetMapping("/lists")
@ApiOperation(value="分类列表")
public AjaxResult<PageResult<ArticleCateVo>> list(@Validated PageValidate pageValidate,
@Validated ArtCateSearchValidate searchValidate) {
PageResult<ArticleCateVo> list = iArtCateService.list(pageValidate, searchValidate);
return AjaxResult.success(list);
}
@GetMapping("/detail")
@ApiOperation(value="分类详情")
public AjaxResult<ArticleCateVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
ArticleCateVo vo = iArtCateService.detail(id);
return AjaxResult.success(vo);
}
@Log(title = "文章分类新增")
@PostMapping("/add")
@ApiOperation(value="分类新增")
public AjaxResult<Object> add(@Validated @RequestBody ArtCateCreateValidate createValidate) {
iArtCateService.add(createValidate);
return AjaxResult.success();
}
@Log(title = "文章分类编辑")
@PostMapping("/edit")
@ApiOperation(value="分类编辑")
public AjaxResult<Object> edit(@Validated @RequestBody ArtCateUpdateValidate updateValidate) {
iArtCateService.edit(updateValidate);
return AjaxResult.success();
}
@Log(title = "文章分类删除")
@PostMapping("/delete")
@ApiOperation(value="分类删除")
public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) {
iArtCateService.del(idValidate.getId());
return AjaxResult.success();
}
@Log(title = "文章分类状态")
@PostMapping("/updateStatus")
@ApiOperation(value="分类状态")
public AjaxResult<Object> change(@Validated @RequestBody IdValidate idValidate) {
iArtCateService.change(idValidate.getId());
return AjaxResult.success();
}
}

View File

@ -0,0 +1,78 @@
package com.yj.admin.controller;
import com.yj.admin.aop.Log;
import com.yj.admin.service.IArticleService;
import com.yj.admin.validate.article.ArticleCreateValidate;
import com.yj.admin.validate.article.ArticleSearchValidate;
import com.yj.admin.validate.article.ArticleUpdateValidate;
import com.yj.admin.validate.commons.IdValidate;
import com.yj.admin.validate.commons.PageValidate;
import com.yj.admin.vo.article.ArticleDetailVo;
import com.yj.admin.vo.article.ArticleListedVo;
import com.yj.common.core.AjaxResult;
import com.yj.common.core.PageResult;
import com.yj.common.validator.annotation.IDMust;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping({"adminapi/article/article", "adminapi/article.article"})
@Api(tags = "文章数据管理")
public class ArticleController {
@Resource
IArticleService iArticleService;
@GetMapping("/lists")
@ApiOperation(value="文章列表")
public AjaxResult<PageResult<ArticleListedVo>> list(@Validated PageValidate pageValidate,
@Validated ArticleSearchValidate searchValidate) {
PageResult<ArticleListedVo> vos = iArticleService.list(pageValidate, searchValidate);
return AjaxResult.success(vos);
}
@GetMapping("/detail")
@ApiOperation(value="文章详情")
public AjaxResult<ArticleDetailVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
ArticleDetailVo vo = iArticleService.detail(id);
return AjaxResult.success(vo);
}
@Log(title = "文章新增")
@PostMapping("/add")
@ApiOperation(value="文章新增")
public AjaxResult<Object> add(@Validated @RequestBody ArticleCreateValidate createValidate) {
iArticleService.add(createValidate);
return AjaxResult.success();
}
@Log(title = "文章编辑")
@PostMapping("/edit")
@ApiOperation(value="文章编辑")
public AjaxResult<Object> edit(@Validated @RequestBody ArticleUpdateValidate updateValidate) {
iArticleService.edit(updateValidate);
return AjaxResult.success();
}
@Log(title = "文章删除")
@PostMapping("/delete")
@ApiOperation(value="文章删除")
public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) {
iArticleService.del(idValidate.getId());
return AjaxResult.success();
}
@Log(title = "文章状态")
@PostMapping("/updateStatus")
@ApiOperation(value="文章状态")
public AjaxResult<Object> change(@Validated @RequestBody IdValidate idValidate) {
iArticleService.change(idValidate.getId());
return AjaxResult.success();
}
}

View File

@ -0,0 +1,119 @@
package com.yj.admin.controller;
import com.yj.admin.aop.Log;
import com.yj.admin.service.ICrontabService;
import com.yj.admin.validate.crontab.CrontabCreateValidate;
import com.yj.admin.validate.crontab.CrontabUpdateValidate;
import com.yj.admin.validate.commons.IdValidate;
import com.yj.admin.validate.commons.PageValidate;
import com.yj.admin.vo.CrontabDetailVo;
import com.yj.admin.vo.CrontabListedVo;
import com.yj.common.core.AjaxResult;
import com.yj.common.core.PageResult;
import com.yj.common.exception.OperateException;
import com.yj.common.validator.annotation.IDMust;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.quartz.CronExpression;
import org.quartz.SchedulerException;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.*;
@RestController
@RequestMapping("/adminapi/crontab.crontab")
@Api(tags = "计划任务管理")
public class CrontabController {
@Resource
ICrontabService iCrontabService;
@GetMapping("/lists")
@ApiOperation(value="计划任务列表")
public AjaxResult< PageResult<CrontabListedVo>> list(@Validated PageValidate pageValidate) {
PageResult<CrontabListedVo> list = iCrontabService.list(pageValidate);
return AjaxResult.success(list);
}
@GetMapping("/detail")
@ApiOperation(value="计划任务详情")
public AjaxResult<Object> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
CrontabDetailVo vo = iCrontabService.detail(id);
return AjaxResult.success(vo);
}
@Log(title = "计划任务新增")
@PostMapping("/add")
@ApiOperation(value="计划任务新增")
public AjaxResult<Object> add(@Validated @RequestBody CrontabCreateValidate createValidate) throws SchedulerException {
iCrontabService.add(createValidate);
return AjaxResult.success();
}
@Log(title = "计划任务编辑")
@PostMapping("/edit")
@ApiOperation(value="计划任务编辑")
public AjaxResult<Object> edit(@Validated @RequestBody CrontabUpdateValidate updateValidate) throws SchedulerException {
iCrontabService.edit(updateValidate);
return AjaxResult.success();
}
@Log(title = "计划任务删除")
@PostMapping("/delete")
@ApiOperation(value="计划任务删除")
public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) throws SchedulerException {
iCrontabService.del(idValidate.getId());
return AjaxResult.success();
}
@GetMapping("/expression")
@ApiOperation(value="计划任务列表")
public AjaxResult<List<Map<String, String>>> expression(@Validated @RequestParam("expression") String expression) {
return AjaxResult.success(getExpression(expression));
}
public static List<Map<String, String>> getExpression(String cronExpression) {
try {
CronExpression cron = new CronExpression(cronExpression);
List<Date> dates = new ArrayList<>();
Date date = new Date();
for (int i = 0; i < 5; i++) {
Date nextValidTimeAfter = cron.getNextValidTimeAfter(date); // 假设从当前时间开始
if (nextValidTimeAfter != null) {
dates.add(nextValidTimeAfter);
date = nextValidTimeAfter;
} else {
break; // 如果没有更多的有效时间,则退出循环
}
}
List<Map<String, String>> lists = new ArrayList<>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
for (int i = 0; i < dates.size(); i++) {
Map<String, String> entry = new HashMap<>();
entry.put("time", String.valueOf(i + 1));
entry.put("date", sdf.format(dates.get(i)));
lists.add(entry);
}
// 添加额外的条目
Map<String, String> extraEntry = new HashMap<>();
extraEntry.put("time", "x");
extraEntry.put("date", "……");
lists.add(extraEntry);
return lists;
} catch (Exception e) {
// 注意:在Java中,通常不会直接返回异常消息作为业务逻辑的一部分
// 这里为了与PHP函数保持一致,我们返回异常消息,但在实际应用中应避免这样做
throw new OperateException(e.getMessage());
}
}
}

View File

@ -0,0 +1,94 @@
package com.yj.admin.controller;
import com.alibaba.fastjson2.JSONObject;
import com.yj.admin.aop.Log;
import com.yj.admin.service.IFileService;
import com.yj.admin.validate.file.FileCateValidate;
import com.yj.admin.validate.file.FileMoveValidate;
import com.yj.admin.validate.file.FileRenameValidate;
import com.yj.admin.validate.file.FileSearchValidate;
import com.yj.admin.validate.commons.IdValidate;
import com.yj.admin.validate.commons.IdsValidate;
import com.yj.admin.validate.commons.PageValidate;
import com.yj.admin.vo.album.FileVo;
import com.yj.common.core.AjaxResult;
import com.yj.common.core.PageResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping("/adminapi/file")
@Api(tags = "文件数据管理")
public class FileController {
@Resource
IFileService fileService;
@GetMapping("/lists")
@ApiOperation(value="文件列表")
public AjaxResult<PageResult<FileVo>> fileList(@Validated PageValidate pageValidate,
@Validated FileSearchValidate searchValidate) {
PageResult<FileVo> voPageResult = fileService.fileList(pageValidate, searchValidate);
return AjaxResult.success(voPageResult);
}
@Log(title = "文件重命名")
@PostMapping("/rename")
@ApiOperation(value="文件重命名")
public AjaxResult<Object> rename(@Validated @RequestBody FileRenameValidate renameValidate) {
fileService.fileRename(renameValidate.getId(), renameValidate.getName());
return AjaxResult.success();
}
@Log(title = "文件移动")
@PostMapping("/move")
@ApiOperation(value="相册文件移动")
public AjaxResult<Object> move(@Validated @RequestBody FileMoveValidate moveValidate) {
fileService.fileMove(moveValidate.getIds(), moveValidate.getCid());
return AjaxResult.success();
}
@Log(title = "文件删除")
@PostMapping("/delete")
@ApiOperation(value="相册文件删除")
public AjaxResult<Object> del(@Validated @RequestBody IdsValidate idsValidate) {
fileService.fileDel(idsValidate.getIds());
return AjaxResult.success();
}
@GetMapping("/listCate")
@ApiOperation(value="文件分类列表")
public AjaxResult<JSONObject> cateList(@Validated FileSearchValidate searchValidate) {
JSONObject result = fileService.cateList(searchValidate);
return AjaxResult.success(result);
}
@Log(title = "分类新增")
@PostMapping("/addCate")
@ApiOperation(value="分类新增")
public AjaxResult<Object> cateAdd(@Validated @RequestBody FileCateValidate cateValidate) {
fileService.cateAdd(cateValidate);
return AjaxResult.success();
}
@Log(title = "相册分类重命名")
@PostMapping("/editCate")
@ApiOperation(value="相册分类重命名")
public AjaxResult<Object> cateRename(@Validated @RequestBody FileRenameValidate renameValidate) {
fileService.cateRename(renameValidate.getId(), renameValidate.getName());
return AjaxResult.success();
}
@Log(title = "相册分类删除")
@PostMapping("/delCate")
@ApiOperation(value="相册分类删除")
public AjaxResult<Object> cateDel(@Validated @RequestBody IdValidate idValidate) {
fileService.cateDel(idValidate.getId());
return AjaxResult.success();
}
}

View File

@ -0,0 +1,31 @@
package com.yj.admin.controller;
import com.yj.admin.service.IIndexService;
import com.yj.common.core.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.Map;
@Slf4j
@RestController
@RequestMapping("/adminapi/workbench")
@Api(tags = "主页数据管理")
public class IndexController {
@Resource
IIndexService iIndexService;
@GetMapping("/index")
@ApiOperation(value="控制台")
public AjaxResult<Map<String, Object>> index() {
Map<String, Object> map = iIndexService.index();
return AjaxResult.success(map);
}
}

View File

@ -0,0 +1,128 @@
package com.yj.admin.controller;
import com.yj.admin.LikeAdminThreadLocal;
import com.yj.admin.aop.Log;
import com.yj.admin.aop.aspect.RequestType;
import com.yj.admin.service.IFileService;
import com.yj.common.aop.NotPower;
import com.yj.common.core.AjaxResult;
import com.yj.common.enums.AlbumEnum;
import com.yj.common.exception.OperateException;
import com.yj.common.plugin.storage.StorageDriver;
import com.yj.common.plugin.storage.UploadFilesVo;
import com.yj.common.util.StringUtils;
import io.swagger.annotations.Api;
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.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.util.LinkedHashMap;
import java.util.Map;
@RestController
@RequestMapping("/adminapi/upload")
@Api(tags = "上传文件管理")
public class UploadController {
@Resource
IFileService fileService;
@Log(title = "上传图片", requestType = RequestType.File)
@PostMapping("/image")
@NotPower
@ApiOperation(value="上传图片")
public AjaxResult image(@RequestParam("file") MultipartFile[] files, @RequestParam("cid") String requestCid) {
String cid = StringUtils.isNotEmpty(requestCid) ? requestCid : "0";
if (files == null || files.length == 0) {
throw new OperateException("请选择上传图片!");
}
for (int i = 0; i < files.length; i++) {
StorageDriver storageDriver = new StorageDriver();
UploadFilesVo vo = storageDriver.upload(files[i], "image", AlbumEnum.IMAGE.getCode());
Map<String, String> album = new LinkedHashMap<>();
album.put("aid", String.valueOf(LikeAdminThreadLocal.getAdminId()));
album.put("cid", cid);
album.put("type", String.valueOf(AlbumEnum.IMAGE.getCode()));
// album.put("size", vo.getSize().toString());
// album.put("ext", vo.getExt());
album.put("url", vo.getUrl());
album.put("name", vo.getName());
Integer id = fileService.fileAdd(album);
vo.setId(id);
}
return AjaxResult.success();
}
@Log(title = "上传图片", requestType = RequestType.File)
@PostMapping("/file")
@NotPower
@ApiOperation(value="上传文件")
public AjaxResult file(@RequestParam("file") MultipartFile[] files, @RequestParam("cid") String requestCid) {
String cid = StringUtils.isNotEmpty(requestCid) ? requestCid : "0";
if (files == null || files.length == 0) {
throw new OperateException("请选择上传文件!");
}
for (int i = 0; i < files.length; i++) {
StorageDriver storageDriver = new StorageDriver();
UploadFilesVo vo = storageDriver.upload(files[i], "image", AlbumEnum.Doc.getCode());
Map<String, String> album = new LinkedHashMap<>();
album.put("aid", String.valueOf(LikeAdminThreadLocal.getAdminId()));
album.put("cid", cid);
album.put("type", String.valueOf(AlbumEnum.Doc.getCode()));
// album.put("size", vo.getSize().toString());
// album.put("ext", vo.getExt());
album.put("url", vo.getUrl());
album.put("name", vo.getName());
Integer id = fileService.fileAdd(album);
vo.setId(id);
}
return AjaxResult.success();
}
@Log(title = "上传视频", requestType = RequestType.File)
@PostMapping("/video")
@NotPower
@ApiOperation(value="上传视频")
public AjaxResult video(@RequestParam("file") MultipartFile[] files, @RequestParam("cid") String requestCid) {
String cid = StringUtils.isNotEmpty(requestCid) ? requestCid : "0";
if (files == null || files.length == 0) {
throw new OperateException("请选择上传视频!");
}
for (int i = 0; i < files.length; i++) {
StorageDriver storageDriver = new StorageDriver();
UploadFilesVo vo = storageDriver.upload(files[i], "video", AlbumEnum.Video.getCode());
Map<String, String> album = new LinkedHashMap<>();
album.put("cid", cid);
album.put("aid", String.valueOf(LikeAdminThreadLocal.getAdminId()));
album.put("type", String.valueOf(AlbumEnum.Video.getCode()));
// album.put("ext", vo.getExt());
// album.put("size", vo.getSize().toString());
album.put("url", vo.getUrl());
album.put("name", vo.getName());
Integer id = fileService.fileAdd(album);
vo.setId(id);
}
return AjaxResult.success();
}
}

View File

@ -0,0 +1,72 @@
package com.yj.admin.controller;
import com.alibaba.fastjson2.JSONObject;
import com.yj.admin.aop.Log;
import com.yj.admin.service.IUserService;
import com.yj.admin.validate.user.UserSearchValidate;
import com.yj.admin.validate.user.UserUpdateValidate;
import com.yj.admin.validate.commons.PageValidate;
import com.yj.admin.validate.user.UserWalletValidate;
import com.yj.admin.vo.user.UserVo;
import com.yj.common.core.AjaxResult;
import com.yj.common.core.PageResult;
import com.yj.common.enums.ErrorEnum;
import com.yj.common.util.StringUtils;
import com.yj.common.validator.annotation.IDMust;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping({"adminapi/user/user", "adminapi/user.user"})
@Api(tags = "用户数据管理")
public class UserController {
@Resource
IUserService iUserService;
@GetMapping("/lists")
@ApiOperation(value="用户列表")
public AjaxResult<Object> list(@Validated PageValidate pageValidate,
@Validated UserSearchValidate searchValidate) {
if (StringUtils.isNotNull(searchValidate.getExport()) && searchValidate.getExport().equals(1)) {
JSONObject ret = iUserService.getExportData(pageValidate, searchValidate);
return AjaxResult.success(ret);
} else if (StringUtils.isNotNull(searchValidate.getExport()) && searchValidate.getExport().equals(2)) {
String path = iUserService.export(searchValidate);
return AjaxResult.success(2, new JSONObject() {{
put("url", path);
}}, ErrorEnum.SHOW_MSG.getCode());
} else {
PageResult<UserVo> list = iUserService.list(pageValidate, searchValidate);
return AjaxResult.success(list);
}
}
@GetMapping("/detail")
@ApiOperation(value="用户详情")
public AjaxResult<UserVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
UserVo vo = iUserService.detail(id);
return AjaxResult.success(vo);
}
@Log(title = "用户编辑")
@PostMapping("/edit")
@ApiOperation(value="用户编辑")
public AjaxResult<Object> edit(@Validated @RequestBody UserUpdateValidate updateValidate) {
iUserService.edit(updateValidate);
return AjaxResult.success();
}
@Log(title = "余额调整")
@PostMapping("/adjustMoney")
@ApiOperation(value="余额调整")
public AjaxResult<Object> adjustWallet(@Validated @RequestBody UserWalletValidate walletValidate) {
iUserService.adjustWallet(walletValidate);
return AjaxResult.success();
}
}

View File

@ -0,0 +1,32 @@
package com.yj.admin.controller.adminapi;
import com.yj.admin.service.IIndexService;
import com.yj.common.aop.NotLogin;
import com.yj.common.core.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.Map;
@Slf4j
@RestController
@RequestMapping("adminapi/config")
@Api(tags = "主页数据管理")
public class ConfigController {
@Resource
IIndexService iIndexService;
@NotLogin
@GetMapping("/getConfig")
@ApiOperation(value="公共配置")
public AjaxResult<Map<String, Object>> getConfig() {
Map<String, Object> map = iIndexService.config();
return AjaxResult.success(map);
}
}

View File

@ -0,0 +1,50 @@
package com.yj.admin.controller.adminapi;
import com.yj.admin.service.system.ISystemLoginService;
import com.yj.admin.validate.system.SystemAdminLoginsValidate;
import com.yj.admin.vo.system.SystemCaptchaVo;
import com.yj.admin.vo.system.SystemLoginVo;
import com.yj.common.aop.NotLogin;
import com.yj.common.aop.NotPower;
import com.yj.common.core.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
@RestController
@RequestMapping("adminapi/login")
@Api(tags = "系统登录管理")
public class LoginController {
@Resource
ISystemLoginService iSystemLoginService;
@NotLogin
@GetMapping("/captcha")
@ApiOperation(value="取验证码")
public AjaxResult<SystemCaptchaVo> captcha() {
SystemCaptchaVo vo = iSystemLoginService.captcha();
return AjaxResult.success(vo);
}
@NotLogin
@PostMapping("/account")
@ApiOperation(value="登录系统")
public AjaxResult<SystemLoginVo> account(@Validated() @RequestBody SystemAdminLoginsValidate loginsValidate) {
SystemLoginVo vo = iSystemLoginService.login(loginsValidate);
return AjaxResult.success(vo);
}
@NotPower
@PostMapping("/logout")
@ApiOperation(value="退出登录")
public AjaxResult<Object> logout(HttpServletRequest request) {
iSystemLoginService.logout(request.getHeader("token"));
return AjaxResult.success();
}
}

View File

@ -0,0 +1,53 @@
package com.yj.admin.controller.adminapi.auth;
import com.yj.admin.LikeAdminThreadLocal;
import com.yj.admin.service.admin.IAdminRoleService;
import com.yj.admin.service.admin.IAdminService;
import com.yj.admin.validate.system.SystemEditSelfValidate;
import com.yj.admin.vo.auth.AdminMySelfVo;
import com.yj.common.aop.NotPower;
import com.yj.common.core.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@Slf4j
@RestController
@RequestMapping({"adminapi/auth/admin", "adminapi/auth.admin"})
@Api(tags = "管理员详情管理")
public class AdminController {
@Resource
IAdminService iAdminService;
@Resource
IAdminRoleService iAdminRoleService;
@Resource
IAdminService iSystemAuthAdminService;
@NotPower
@GetMapping("/mySelf")
@ApiOperation(value="获取当前管理员信息")
public AjaxResult<AdminMySelfVo> mySelf() {
Integer adminId = LikeAdminThreadLocal.getAdminId();
List<Integer> roleIds = iAdminRoleService.getRoleIdAttr(adminId);
AdminMySelfVo mySelf = iAdminService.mySelf(LikeAdminThreadLocal.getAdminId(), roleIds);
return AjaxResult.success(mySelf);
}
@PostMapping("/editSelf")
@ApiOperation(value = "编辑当前管理员信息")
public AjaxResult<Object> editSelf(@Validated @RequestBody SystemEditSelfValidate upInfoValidate) {
Integer adminId = LikeAdminThreadLocal.getAdminId();
iAdminService.editSelf(upInfoValidate, adminId);
return AjaxResult.success();
}
}

View File

@ -0,0 +1,38 @@
package com.yj.admin.controller.channel;
import com.yj.admin.aop.Log;
import com.yj.admin.service.IChannelH5ConfigService;
import com.yj.admin.validate.channel.ChannelH5Validate;
import com.yj.admin.vo.channel.ChannelH5Vo;
import com.yj.common.core.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping("/adminapi/channel.web_page_setting")
@Api(tags = "移动渠道设置")
public class ChannelH5Controller {
@Resource
IChannelH5ConfigService iChannelH5ConfigService;
@GetMapping("/getConfig")
@ApiOperation(value="H5渠道设置详情")
public AjaxResult<ChannelH5Vo> getConfig() {
ChannelH5Vo vo = iChannelH5ConfigService.getConfig();
return AjaxResult.success(vo);
}
@Log(title = "H5渠道设置保存")
@PostMapping("/setConfig")
@ApiOperation(value="H5渠道设置保存")
public AjaxResult<Object> setConfig(@Validated @RequestBody ChannelH5Validate channelH5Validate) {
iChannelH5ConfigService.setConfig(channelH5Validate);
return AjaxResult.success();
}
}

View File

@ -0,0 +1,38 @@
package com.yj.admin.controller.channel;
import com.yj.admin.aop.Log;
import com.yj.admin.service.IChannelMpConfigService;
import com.yj.admin.validate.channel.ChannelMpValidate;
import com.yj.admin.vo.channel.ChannelMpVo;
import com.yj.common.core.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping("/adminapi/channel.mnp_settings")
@Api(tags = "微信程序渠道")
public class ChannelMpController {
@Resource
IChannelMpConfigService iChannelMpConfigService;
@GetMapping("/getConfig")
@ApiOperation(value="微信程序渠道设置详情")
public AjaxResult<ChannelMpVo> getConfig() {
ChannelMpVo vo = iChannelMpConfigService.getConfig();
return AjaxResult.success(vo);
}
@Log(title = "微信小程序渠道设置保存")
@PostMapping("/setConfig")
@ApiOperation(value="微信程序渠道设置保存")
public AjaxResult<Object> setConfig(@Validated @RequestBody ChannelMpValidate channelMpValidate) {
iChannelMpConfigService.setConfig(channelMpValidate);
return AjaxResult.success();
}
}

View File

@ -0,0 +1,44 @@
package com.yj.admin.controller.channel;
import com.yj.admin.service.IChannelOaCallBackService;
import com.yj.common.aop.NotLogin;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping("/adminapi/channel/oa/callback")
@Api(tags = "公众号服务器验证及消息回复")
public class ChannelOaCallBackController {
@Resource
private IChannelOaCallBackService iChannelOaCallBackService;
@NotLogin
@GetMapping(produces = "text/plain;charset=utf-8")
@ApiOperation(value="公众号服务器地址验证")
public String authGet(@RequestParam(name = "signature", required = false) String signature,
@RequestParam(name = "timestamp", required = false) String timestamp,
@RequestParam(name = "nonce", required = false) String nonce,
@RequestParam(name = "echostr", required = false) String echostr) {
return iChannelOaCallBackService.checkSignature(signature, timestamp, nonce, echostr);
}
@NotLogin
@PostMapping(produces = "application/xml; charset=UTF-8")
@ApiOperation(value="公众号消息回复")
public String post(@RequestBody String requestBody,
@RequestParam("signature") String signature,
@RequestParam("timestamp") String timestamp,
@RequestParam("nonce") String nonce,
@RequestParam(name = "encrypt_type", required = false) String encType,
@RequestParam(name = "msg_signature", required = false) String msgSignature) {
return iChannelOaCallBackService.post(requestBody, signature, timestamp, nonce, encType, msgSignature);
}
}

View File

@ -0,0 +1,38 @@
package com.yj.admin.controller.channel;
import com.yj.admin.aop.Log;
import com.yj.admin.service.IChannelOaConfigService;
import com.yj.admin.validate.channel.ChannelOaValidate;
import com.yj.admin.vo.channel.ChannelOaVo;
import com.yj.common.core.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping("/adminapi/channel.official_account_setting")
@Api(tags = "公众号渠道设置")
public class ChannelOaController {
@Resource
IChannelOaConfigService iChannelOaConfigService;
@GetMapping("/getConfig")
@ApiOperation(value="公众号渠道设置详情")
public AjaxResult<ChannelOaVo> getConfig() {
ChannelOaVo vo = iChannelOaConfigService.getConfig();
return AjaxResult.success(vo);
}
@Log(title = "公众号渠道设置保存")
@PostMapping("/setConfig")
@ApiOperation(value="公众号渠道设置保存")
public AjaxResult<Object> setConfig(@Validated @RequestBody ChannelOaValidate channelOaValidate) {
iChannelOaConfigService.setConfig(channelOaValidate);
return AjaxResult.success();
}
}

View File

@ -0,0 +1,43 @@
package com.yj.admin.controller.channel;
import com.alibaba.fastjson2.JSONArray;
import com.yj.admin.service.IChannelOaMenusService;
import com.yj.common.core.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/adminapi/channel.official_account_menu")
@Api(tags = "公众号菜单管理")
public class ChannelOaMenuController {
@Resource
IChannelOaMenusService iChannelOaMenusService;
@GetMapping("/detail")
@ApiOperation(value="菜单详情")
public AjaxResult<JSONArray> detail() {
JSONArray detail = iChannelOaMenusService.detail();
return AjaxResult.success(detail);
}
@PostMapping("/save")
@ApiOperation(value="仅是保存菜单")
public AjaxResult<Object> save(@RequestBody List<Object> params) {
iChannelOaMenusService.save(params, false);
return AjaxResult.success();
}
@PostMapping("/saveAndPublish")
@ApiOperation(value="saveAndPublish")
public AjaxResult<Object> publish(@RequestBody List<Object> params) {
iChannelOaMenusService.save(params, true);
return AjaxResult.success();
}
}

View File

@ -0,0 +1,68 @@
package com.yj.admin.controller.channel;
import com.yj.admin.service.IChannelOaReplyService;
import com.yj.admin.validate.channel.ChannelRpValidate;
import com.yj.admin.validate.commons.IdValidate;
import com.yj.admin.validate.commons.PageValidate;
import com.yj.admin.vo.channel.ChannelRpVo;
import com.yj.common.core.AjaxResult;
import com.yj.common.core.PageResult;
import com.yj.common.validator.annotation.IDMust;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping("/adminapi/channel.official_account_reply")
@Api(tags = "公众号回复")
public class ChannelOaReplyController {
@Resource
IChannelOaReplyService iChannelOaReplyService;
@GetMapping("/lists")
@ApiOperation(value="默认回复列表")
public AjaxResult<PageResult<ChannelRpVo>> list(@Validated PageValidate pageValidate, @RequestParam("reply_type") Integer replyType) {
PageResult<ChannelRpVo> list = iChannelOaReplyService.list(pageValidate, replyType);
return AjaxResult.success(list);
}
@GetMapping("/detail")
@ApiOperation(value="默认回复详情")
public AjaxResult<ChannelRpVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
ChannelRpVo vo = iChannelOaReplyService.detail(id);
return AjaxResult.success(vo);
}
@PostMapping("/add")
@ApiOperation(value="默认回复新增")
public AjaxResult<Object> add(@Validated @RequestBody ChannelRpValidate defaultValidate) {
iChannelOaReplyService.add(defaultValidate);
return AjaxResult.success();
}
@PostMapping("/edit")
@ApiOperation(value="默认回复编辑")
public AjaxResult<Object> edit(@Validated @RequestBody ChannelRpValidate defaultValidate) {
iChannelOaReplyService.edit(defaultValidate);
return AjaxResult.success();
}
@PostMapping("/delete")
@ApiOperation(value="默认回复删除")
public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) {
iChannelOaReplyService.del(idValidate.getId());
return AjaxResult.success();
}
@PostMapping("/status")
@ApiOperation(value="默认回复状态")
public AjaxResult<Object> status(@Validated @RequestBody IdValidate idValidate) {
iChannelOaReplyService.status(idValidate.getId());
return AjaxResult.success();
}
}

View File

@ -0,0 +1,36 @@
package com.yj.admin.controller.channel;
import com.yj.admin.service.IChannelOpService;
import com.yj.admin.validate.channel.ChannelOpValidate;
import com.yj.admin.vo.channel.ChannelOpVo;
import com.yj.common.core.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping("/adminapi/channel.open_setting/")
@Api(tags = "微信开放渠道")
public class ChannelOpController {
@Resource
IChannelOpService iChannelOpService;
@GetMapping("/getConfig")
@ApiOperation(value="开放平台设置详情")
public AjaxResult<Object> getConfig() {
ChannelOpVo vo = iChannelOpService.getConfig();
return AjaxResult.success(vo);
}
@PostMapping("/setConfig")
@ApiOperation(value="开放平台设置保存")
public AjaxResult<Object> save(@Validated @RequestBody ChannelOpValidate opValidate) {
iChannelOpService.setConfig(opValidate);
return AjaxResult.success();
}
}

View File

@ -0,0 +1,42 @@
package com.yj.admin.controller.decorate;
import com.alibaba.fastjson2.JSONObject;
import com.yj.common.aop.NotPower;
import com.yj.admin.service.IDecorateDataService;
import com.yj.admin.vo.decorate.DecorateDataArticleVo;
import com.yj.common.core.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
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;
import java.util.List;
@RestController
@RequestMapping("/adminapi/decorate.data")
@Api(tags = "装修数据管理")
public class DecorateDataController {
@Resource
IDecorateDataService iDecorateDataService;
@NotPower
@GetMapping("/article")
@ApiOperation(value="获取文章数据")
public AjaxResult<List<DecorateDataArticleVo>> article(@RequestParam(defaultValue = "10") Integer limit) {
List<DecorateDataArticleVo> list = iDecorateDataService.article(limit);
return AjaxResult.success(list);
}
@GetMapping("/pc")
@ApiOperation(value="获取pc装修数据")
public AjaxResult<JSONObject> pc() {
JSONObject pc = iDecorateDataService.pc();
return AjaxResult.success(pc);
}
}

View File

@ -0,0 +1,39 @@
package com.yj.admin.controller.decorate;
import com.yj.admin.aop.Log;
import com.yj.admin.service.IDecoratePageService;
import com.yj.admin.validate.decorate.DecoratePageValidate;
import com.yj.admin.vo.decorate.DecoratePageVo;
import com.yj.common.core.AjaxResult;
import com.yj.common.validator.annotation.IDMust;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping("/adminapi/decorate.page")
@Api(tags = "装修页面管理")
public class DecoratePagesController {
@Resource
IDecoratePageService iDecoratePageService;
@GetMapping("/detail")
@ApiOperation(value="页面装修详情")
public AjaxResult<DecoratePageVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
DecoratePageVo vo = iDecoratePageService.detail(id);
return AjaxResult.success(vo);
}
@Log(title = "页面装修保存")
@PostMapping("/save")
@ApiOperation(value="页面装修保存")
public AjaxResult<Object> save(@RequestBody DecoratePageValidate decoratePageValidate) {
iDecoratePageService.save(decoratePageValidate);
return AjaxResult.success();
}
}

View File

@ -0,0 +1,38 @@
package com.yj.admin.controller.decorate;
import com.yj.admin.aop.Log;
import com.yj.admin.service.IDecorateTabbarService;
import com.yj.admin.validate.decorate.DecorateTabsValidate;
import com.yj.admin.vo.decorate.DecorateTabbarVo;
import com.yj.common.core.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping("/adminapi/decorate.tabbar")
@Api(tags = "装修导航管理")
public class DecorateTabbarController {
@Resource
IDecorateTabbarService iDecorateTabbarService;
@GetMapping("/detail")
@ApiOperation(value="底部导航详情")
public AjaxResult<DecorateTabbarVo> detail() {
DecorateTabbarVo vo = iDecorateTabbarService.detail();
return AjaxResult.success(vo);
}
@Log(title = "底部导航编辑")
@PostMapping("/save")
@ApiOperation(value="底部导航编辑")
public AjaxResult<Object> save(@Validated @RequestBody DecorateTabsValidate tabsValidate) {
iDecorateTabbarService.save(tabsValidate);
return AjaxResult.success();
}
}

View File

@ -0,0 +1,67 @@
package com.yj.admin.controller.finance;
import com.alibaba.fastjson2.JSONObject;
import com.yj.admin.LikeAdminThreadLocal;
import com.yj.admin.service.IFinanceRechargerService;
import com.yj.admin.validate.commons.IdValidate;
import com.yj.admin.validate.commons.PageValidate;
import com.yj.admin.validate.finance.FinanceRechargeSearchValidate;
import com.yj.admin.validate.finance.FinanceRefundValidate;
import com.yj.admin.vo.finance.FinanceRechargeListVo;
import com.yj.common.core.AjaxResult;
import com.yj.common.core.PageResult;
import com.yj.common.enums.ErrorEnum;
import com.yj.common.util.StringUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping({"/adminapi/recharge/recharge", "/adminapi/recharge.recharge"})
@Api("充值记录管理")
public class FinanceRechargerController {
@Resource
IFinanceRechargerService iFinanceRechargerService;
@GetMapping("/lists")
@ApiOperation("充值记录")
public AjaxResult<Object> list(@Validated PageValidate pageValidate,
@Validated FinanceRechargeSearchValidate searchValidate) {
if (StringUtils.isNotNull(searchValidate.getExport()) && searchValidate.getExport().equals(1)) {
JSONObject ret = iFinanceRechargerService.getExportData(pageValidate, searchValidate);
return AjaxResult.success(ret);
} else if (StringUtils.isNotNull(searchValidate.getExport()) && searchValidate.getExport().equals(2)) {
String path = iFinanceRechargerService.export(searchValidate);
return AjaxResult.success(2, new JSONObject() {{
put("url", path);
}}, ErrorEnum.SHOW_MSG.getCode());
} else {
PageResult<FinanceRechargeListVo> list = iFinanceRechargerService.list(pageValidate, searchValidate);
return AjaxResult.success(list);
}
}
@PostMapping("/refund")
@ApiOperation("发起退款")
public AjaxResult<Object> refund(@Validated @RequestBody FinanceRefundValidate financeRefundValidate) {
Integer adminId = LikeAdminThreadLocal.getAdminId();
iFinanceRechargerService.refund(financeRefundValidate.getRecharge_id(), adminId);
return AjaxResult.success();
}
@PostMapping("/refundAgain")
@ApiModelProperty("重新退款")
public AjaxResult<Object> refundAgain(@Validated @RequestBody IdValidate idValidate) {
Integer adminId = LikeAdminThreadLocal.getAdminId();
iFinanceRechargerService.refundAgain(idValidate.getId(), adminId);
return AjaxResult.success();
}
}

View File

@ -0,0 +1,53 @@
package com.yj.admin.controller.finance;
import com.yj.admin.service.IFinanceRefundService;
import com.yj.admin.validate.commons.PageValidate;
import com.yj.admin.validate.finance.FinanceRefundSearchValidate;
import com.yj.admin.vo.finance.FinanceRefundListVo;
import com.yj.admin.vo.finance.FinanceRefundLogVo;
import com.yj.common.aop.NotPower;
import com.yj.common.core.AjaxResult;
import com.yj.common.core.PageResult;
import com.yj.common.validator.annotation.IDMust;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
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.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/adminapi/finance.refund")
@Api("退款记录管理")
public class FinanceRefundController {
@Resource
IFinanceRefundService iFinanceRefundService;
@NotPower
@GetMapping("/stat")
@ApiOperation("退还统计")
public AjaxResult<Object> stat() {
return AjaxResult.success(iFinanceRefundService.stat());
}
@GetMapping("/record")
@ApiOperation("退款记录")
public AjaxResult<Object> list(@Validated PageValidate pageValidate,
@Validated FinanceRefundSearchValidate searchValidate) {
PageResult<FinanceRefundListVo> list = iFinanceRefundService.list(pageValidate, searchValidate);
return AjaxResult.success(list);
}
@GetMapping("/log")
@ApiOperation("退款日志")
public AjaxResult<Object> log(@Validated @IDMust() @RequestParam("record_id") Integer id) {
List<FinanceRefundLogVo> list = iFinanceRefundService.log(id);
return AjaxResult.success(list);
}
}

View File

@ -0,0 +1,44 @@
package com.yj.admin.controller.finance;
import com.yj.admin.service.IFinanceWalletService;
import com.yj.admin.validate.commons.PageValidate;
import com.yj.admin.validate.finance.FinanceWalletSearchValidate;
import com.yj.admin.vo.finance.FinanceWalletListVo;
import com.yj.common.aop.NotPower;
import com.yj.common.core.AjaxResult;
import com.yj.common.core.PageResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
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.annotation.Resource;
import java.util.Map;
@RestController
@RequestMapping("/adminapi/finance.account_log")
@Api("余额明细管理")
public class FinanceWalletController {
@Resource
IFinanceWalletService iFinanceWalletService;
@GetMapping("/lists")
@ApiOperation("记录列表")
public AjaxResult<Object> list(@Validated PageValidate pageValidate,
@Validated FinanceWalletSearchValidate searchValidate) {
PageResult<FinanceWalletListVo> list = iFinanceWalletService.list(pageValidate, searchValidate);
return AjaxResult.success(list);
}
@NotPower
@GetMapping("/getUmChangeType")
@ApiOperation("记录列表")
public AjaxResult<Map<Integer, String>> getUmChangeType() {
return AjaxResult.success(iFinanceWalletService.getUmChangeType());
}
}

View File

@ -0,0 +1,36 @@
package com.yj.admin.controller.marketing;
import com.yj.admin.service.IMarketingRechargeService;
import com.yj.admin.validate.marketing.MarketingRechargeValidate;
import com.yj.admin.vo.marketing.MarketingRechargeVo;
import com.yj.common.core.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping({"adminapi/recharge/recharge", "adminapi/recharge.recharge"})
@Api("营销充值管理")
public class MarketingRechargeController {
@Resource
IMarketingRechargeService iMarketingRechargeService;
@GetMapping("/getConfig")
@ApiModelProperty(value = "充值配置详情")
public AjaxResult<MarketingRechargeVo> detail() {
MarketingRechargeVo vo = iMarketingRechargeService.detail();
return AjaxResult.success(vo);
}
@PostMapping("/setConfig")
@ApiModelProperty(value = "充值配置保存")
public AjaxResult<Object> save(@Validated @RequestBody MarketingRechargeValidate rechargeValidate) {
iMarketingRechargeService.save(rechargeValidate);
return AjaxResult.success();
}
}

View File

@ -0,0 +1,62 @@
package com.yj.admin.controller.monitor;
import com.yj.admin.aop.Log;
import com.yj.common.core.AjaxResult;
import com.yj.common.util.StringUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.data.redis.connection.RedisServerCommands;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.*;
@RestController
@RequestMapping("api/monitor")
@Api(tags = "监控缓存管理")
public class MonitorCacheController {
@Resource
private RedisTemplate<String, String> redisTemplate;
/**
* 缓存监控
*
* @author fzr
* @return AjaxResult<Object>
*/
@Log(title = "缓存监控")
@GetMapping("/cache")
@ApiOperation(value="缓存监控")
public AjaxResult<Object> info() {
Properties info = (Properties) redisTemplate.execute((RedisCallback<Object>) RedisServerCommands::info);
Properties commandStats = (Properties) redisTemplate.execute((RedisCallback<Object>) connection -> connection.info("commandstats"));
Object dbSize = redisTemplate.execute((RedisCallback<Object>) RedisServerCommands::dbSize);
if (commandStats == null) {
return AjaxResult.failed("获取异常");
}
Map<String, Object> result = new HashMap<>(3);
result.put("info", info);
result.put("dbSize", dbSize);
List<Map<String, String>> pieList = new ArrayList<>();
commandStats.stringPropertyNames().forEach(key -> {
Map<String, String> data = new HashMap<>(2);
String property = commandStats.getProperty(key);
data.put("name", StringUtils.removeStart(key, "cmdstat_"));
data.put("value", StringUtils.substringBetween(property, "calls=", ",usec"));
pieList.add(data);
});
result.put("commandStats", pieList);
return AjaxResult.success(result);
}
}

View File

@ -0,0 +1,33 @@
package com.yj.admin.controller.monitor;
import com.yj.admin.aop.Log;
import com.yj.common.core.AjaxResult;
import com.yj.common.core.ServerResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@RestController
@RequestMapping("adminapi/setting.system.system")
@Api(tags = "监控服务管理")
public class MonitorServerController {
/**
* 服务器信息
*
* @author fzr
* @return AjaxResult<Map<String, Object>>
*/
@Log(title = "服务监控")
@GetMapping("/info")
@ApiOperation(value="服务监控")
public AjaxResult<Map<String, Object>> info() {
ServerResult server = new ServerResult();
return AjaxResult.success(server.copyTo());
}
}

View File

@ -0,0 +1,82 @@
package com.yj.admin.controller.setting;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.yj.admin.aop.Log;
import com.yj.admin.validate.commons.IdArrayValidate;
import com.yj.common.aop.NotPower;
import com.yj.admin.service.ISettingDictDataService;
import com.yj.admin.validate.commons.PageValidate;
import com.yj.admin.validate.setting.DictDataCreateValidate;
import com.yj.admin.validate.setting.DictDataUpdateValidate;
import com.yj.admin.vo.setting.SettingDictDataVo;
import com.yj.common.core.AjaxResult;
import com.yj.common.core.PageResult;
import com.yj.common.util.StringUtils;
import com.yj.common.validator.annotation.IDMust;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/adminapi/setting.dict.dict_data")
@Api(tags = "配置字典数据")
public class SettingDictDataController {
@Resource
ISettingDictDataService iSettingDictDataService;
@NotPower
@GetMapping("/all")
@ApiOperation(value="字典数据所有")
public AjaxResult<List<SettingDictDataVo>> all(@RequestParam Map<String, String> params) {
Assert.isFalse(StringUtils.isEmpty(params.get("type_id")), "type_id缺失");
List<SettingDictDataVo> list = iSettingDictDataService.all(params);
return AjaxResult.success(list);
}
@GetMapping("/lists")
@ApiOperation(value="字典数据列表")
public AjaxResult<PageResult<SettingDictDataVo>> list(@Validated PageValidate pageValidate,
@RequestParam Map<String, String> params) {
Assert.isFalse(StringUtils.isEmpty(params.get("type_id")), "type_id缺失");
PageResult<SettingDictDataVo> list = iSettingDictDataService.list(pageValidate, params);
return AjaxResult.success(list);
}
@GetMapping("/detail")
@ApiOperation(value="字典数据详情")
public AjaxResult<SettingDictDataVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
SettingDictDataVo vo = iSettingDictDataService.detail(id);
return AjaxResult.success(vo);
}
@Log(title = "字典数据新增")
@PostMapping("/add")
@ApiOperation(value="字典数据新增")
public AjaxResult<Object> add(@Validated @RequestBody DictDataCreateValidate createValidate) {
iSettingDictDataService.add(createValidate);
return AjaxResult.success("操作成功");
}
@Log(title = "字典数据编辑")
@PostMapping("/edit")
@ApiOperation(value="字典数据编辑")
public AjaxResult<Object> edit(@Validated @RequestBody DictDataUpdateValidate updateValidate) {
iSettingDictDataService.edit(updateValidate);
return AjaxResult.success("操作成功");
}
@Log(title = "字典数据删除")
@PostMapping("/delete")
@ApiOperation(value="字典数据删除")
public AjaxResult<Object> del(@Validated @RequestBody IdArrayValidate idArrayValidate) {
iSettingDictDataService.del(idArrayValidate.getId());
return AjaxResult.success("操作成功");
}
}

View File

@ -0,0 +1,78 @@
package com.yj.admin.controller.setting;
import com.yj.admin.aop.Log;
import com.yj.admin.validate.commons.IdValidate;
import com.yj.common.aop.NotPower;
import com.yj.admin.service.ISettingDictTypeService;
import com.yj.admin.validate.commons.PageValidate;
import com.yj.admin.validate.setting.DictTypeCreateValidate;
import com.yj.admin.validate.setting.DictTypeUpdateValidate;
import com.yj.admin.vo.setting.SettingDictTypeVo;
import com.yj.common.core.AjaxResult;
import com.yj.common.core.PageResult;
import com.yj.common.validator.annotation.IDMust;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/adminapi/setting.dict.dict_type")
@Api(tags = "配置字典类型")
public class SettingDictTypeController {
@Resource
ISettingDictTypeService iSettingDictTypeService;
@NotPower
@GetMapping("/all")
@ApiOperation(value="字典类型所有")
public AjaxResult<List<SettingDictTypeVo>> all() {
List<SettingDictTypeVo> list = iSettingDictTypeService.all();
return AjaxResult.success(list);
}
@GetMapping("/lists")
@ApiOperation(value="字典类型列表")
public AjaxResult<PageResult<SettingDictTypeVo>> list(@Validated PageValidate pageValidate,
@RequestParam Map<String, String> params) {
PageResult<SettingDictTypeVo> list = iSettingDictTypeService.list(pageValidate, params);
return AjaxResult.success(list);
}
@GetMapping("/detail")
@ApiOperation(value="字典类型详情")
public AjaxResult<SettingDictTypeVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
SettingDictTypeVo vo = iSettingDictTypeService.detail(id);
return AjaxResult.success(vo);
}
@Log(title = "字典类型新增")
@PostMapping("/add")
@ApiOperation(value="字典类型新增")
public AjaxResult<Object> add(@Validated @RequestBody DictTypeCreateValidate createValidate) {
iSettingDictTypeService.add(createValidate);
return AjaxResult.success();
}
@Log(title = "字典类型编辑")
@PostMapping("/edit")
@ApiOperation(value="字典类型编辑")
public AjaxResult<Object> edit(@Validated @RequestBody DictTypeUpdateValidate updateValidate) {
iSettingDictTypeService.edit(updateValidate);
return AjaxResult.success();
}
@Log(title = "字典类型删除")
@PostMapping("/delete")
@ApiOperation(value="字典类型删除")
public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) {
iSettingDictTypeService.del(idValidate.getId());
return AjaxResult.success();
}
}

View File

@ -0,0 +1,38 @@
package com.yj.admin.controller.setting;
import com.yj.admin.aop.Log;
import com.yj.admin.service.ISettingLoginService;
import com.yj.admin.validate.setting.SettingLoginValidate;
import com.yj.admin.vo.setting.SettingLoginVo;
import com.yj.common.core.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping("/adminapi/setting.user.user")
@Api(tags = "配置用户登录")
public class SettingLoginController {
@Resource
ISettingLoginService iSettingLoginService;
@GetMapping("/getRegisterConfig")
@ApiOperation(value="登录设置详情")
public AjaxResult<SettingLoginVo> getRegisterConfig() {
SettingLoginVo vo = iSettingLoginService.getRegisterConfig();
return AjaxResult.success(vo);
}
@Log(title = "登录设置编辑")
@PostMapping("/setRegisterConfig")
@ApiOperation(value="登录设置编辑")
public AjaxResult<Object> setRegisterConfig(@Validated @RequestBody SettingLoginValidate loginValidate) {
iSettingLoginService.setRegisterConfig(loginValidate);
return AjaxResult.success();
}
}

View File

@ -0,0 +1,50 @@
package com.yj.admin.controller.setting;
import com.alibaba.fastjson2.JSONObject;
import com.yj.admin.aop.Log;
import com.yj.admin.service.ISettingNoticeService;
import com.yj.admin.vo.setting.SettingNoticeDetailVo;
import com.yj.admin.vo.setting.SettingNoticeListedVo;
import com.yj.common.core.AjaxResult;
import com.yj.common.validator.annotation.IDMust;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/adminapi/notice.notice")
@Api(tags = "配置消息通知")
public class SettingNoticeController {
@Resource
ISettingNoticeService iSettingNoticeService;
@GetMapping("/settingLists")
@ApiOperation(value="通知设置列表")
public AjaxResult<JSONObject> list(@RequestParam Integer recipient) {
List<SettingNoticeListedVo> list = iSettingNoticeService.list(recipient);
JSONObject result = new JSONObject();
result.put("lists", list);
return AjaxResult.success(result);
}
@GetMapping("/detail")
@ApiOperation(value="通知设置详情")
public AjaxResult<SettingNoticeDetailVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
SettingNoticeDetailVo vo = iSettingNoticeService.detail(id);
return AjaxResult.success(vo);
}
@Log(title = "通知设置编辑")
@PostMapping("/set")
@ApiOperation(value="通知设置编辑")
public AjaxResult<Object> save(@RequestBody JSONObject params) {
iSettingNoticeService.save(params);
return AjaxResult.success();
}
}

View File

@ -0,0 +1,47 @@
package com.yj.admin.controller.setting;
import com.alibaba.fastjson2.JSONObject;
import com.yj.admin.service.ISettingPaymentService;
import com.yj.admin.validate.setting.SettingPayConfigValidate;
import com.yj.common.core.AjaxResult;
import com.yj.common.entity.setting.DevPayConfig;
import com.yj.common.validator.annotation.IDMust;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping("/adminapi/setting.pay.pay_config")
@Api(tags = "配置支付参数")
public class SettingPayConfigController {
@Resource
ISettingPaymentService iSettingPaymentService;
@GetMapping("/lists")
@ApiOperation(value="支付配置列表")
public AjaxResult<JSONObject> list() {
JSONObject result = iSettingPaymentService.list();
return AjaxResult.success(result);
}
@GetMapping("/getConfig")
@ApiOperation(value="支付配置详情")
public AjaxResult<Object> getConfig(@Validated @IDMust() @RequestParam("id") Integer id) {
DevPayConfig vo = iSettingPaymentService.getConfig(id);
return AjaxResult.success(vo);
}
@PostMapping("/setConfig")
@ApiOperation(value="支付配置编辑")
public AjaxResult<Object> setConfig(@Validated @RequestBody SettingPayConfigValidate configValidate) {
iSettingPaymentService.setConfig(configValidate);
return AjaxResult.success();
}
}

View File

@ -0,0 +1,38 @@
package com.yj.admin.controller.setting;
import com.yj.admin.service.ISettingPaymentService;
import com.yj.admin.vo.setting.SettingPaymentMethodVo;
import com.yj.common.core.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
@RestController
@RequestMapping("/adminapi/setting.pay.pay_way")
@Api(tags = "配置支付参数")
public class SettingPayWayController {
@Resource
ISettingPaymentService iSettingPaymentService;
@GetMapping("/getPayWay")
@ApiOperation(value="支付方式列表")
public AjaxResult<HashMap> method() {
HashMap list = iSettingPaymentService.getPayWay();
return AjaxResult.success(list);
}
@PostMapping("/setPayWay")
@ApiOperation(value="支付方式编辑")
public AjaxResult<Object> setPayWay(@Validated @RequestBody HashMap<Integer, List<SettingPaymentMethodVo>> data) {
iSettingPaymentService.setPayWay(data);
return AjaxResult.success();
}
}

View File

@ -0,0 +1,38 @@
package com.yj.admin.controller.setting;
import com.yj.admin.aop.Log;
import com.yj.admin.service.ISettingSearchService;
import com.yj.admin.validate.setting.SettingSearchValidate;
import com.yj.admin.vo.setting.SettingSearchDetailVo;
import com.yj.common.core.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping("/adminapi/setting.hot_search")
@Api(tags = "配置热门搜索")
public class SettingSearchController {
@Resource
ISettingSearchService iSettingSearchService;
@GetMapping("/getConfig")
@ApiOperation(value="热门搜索详情")
public AjaxResult<SettingSearchDetailVo> getConfig() {
SettingSearchDetailVo vo = iSettingSearchService.getConfig();
return AjaxResult.success(vo);
}
@Log(title = "热门搜索编辑")
@PostMapping("/setConfig")
@ApiOperation(value="热门搜索编辑")
public AjaxResult<Object> setConfig(@Validated @RequestBody SettingSearchValidate searchValidate) {
iSettingSearchService.setConfig(searchValidate);
return AjaxResult.success("操作成功");
}
}

View File

@ -0,0 +1,48 @@
package com.yj.admin.controller.setting;
import com.alibaba.fastjson2.JSONObject;
import com.yj.admin.aop.Log;
import com.yj.admin.service.ISettingSmsService;
import com.yj.common.core.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
* 短信设置管理
*/
@RestController
@RequestMapping("/adminapi/notice.sms_config")
@Api(tags = "配置短信引擎")
public class SettingSmsController {
@Resource
ISettingSmsService iSettingSmsService;
@GetMapping("/getConfig")
@ApiOperation(value="短信引擎列表")
public AjaxResult<List<Map<String, Object>>> getConfig() {
List<Map<String, Object>> list = iSettingSmsService.getConfig();
return AjaxResult.success(list);
}
@GetMapping("/detail")
@ApiOperation(value="短信引擎详情")
public AjaxResult<Map<String, Object>> detail(String type) {
Map<String, Object> map = iSettingSmsService.detail(type);
return AjaxResult.success(map);
}
@Log(title = "短信引擎编辑")
@PostMapping("/setConfig")
@ApiOperation(value="短信引擎编辑")
public AjaxResult<Object> setConfig(@RequestBody JSONObject params) {
iSettingSmsService.setConfig(params);
return AjaxResult.success("操作成功");
}
}

View File

@ -0,0 +1,57 @@
package com.yj.admin.controller.setting;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.yj.admin.aop.Log;
import com.yj.admin.service.ISettingStorageService;
import com.yj.common.core.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/adminapi/setting.storage")
@Api(tags = "配置存储方式")
public class SettingStorageController {
@Resource
ISettingStorageService iSettingStorageService;
@GetMapping("/lists")
@ApiOperation(value="存储列表")
public AjaxResult<List<Map<String, Object>>> list() {
List<Map<String, Object>> list = iSettingStorageService.list();
return AjaxResult.success(list);
}
@GetMapping("/detail")
@ApiOperation(value="存储详情")
public AjaxResult<Map<String, Object>> detail(String engine) {
Map<String, Object> map = iSettingStorageService.detail(engine);
return AjaxResult.success(map);
}
@Log(title = "存储编辑")
@PostMapping("/setup")
@ApiOperation(value="存储编辑")
public AjaxResult<Object> setup(@RequestBody Map<String, String> params) {
iSettingStorageService.setup(params);
return AjaxResult.success();
}
@Log(title = "存储切换")
@PostMapping("/change")
@ApiOperation(value="存储切换")
public AjaxResult<Object> change(@RequestBody Map<String, String> params) {
Assert.notNull(params.get("alias"), "alias参数缺失");
Assert.notNull(params.get("status"), "status参数缺失");
String alias = params.get("alias");
Integer status = Integer.parseInt(params.get("status"));
iSettingStorageService.change(alias, status);
return AjaxResult.success();
}
}

View File

@ -0,0 +1,38 @@
package com.yj.admin.controller.setting;
import com.yj.admin.aop.Log;
import com.yj.admin.service.ISettingUserService;
import com.yj.admin.validate.setting.SettingUserValidate;
import com.yj.admin.vo.setting.SettingUserVo;
import com.yj.common.core.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping("/adminapi/setting.user.user")
@Api(tags = "配置用户参数")
public class SettingUserController {
@Resource
ISettingUserService iSettingUserService;
@GetMapping("/getConfig")
@ApiOperation(value="用户设置详情")
public AjaxResult<SettingUserVo> detail() {
SettingUserVo vo = iSettingUserService.getConfig();
return AjaxResult.success(vo);
}
@Log(title = "用户设置编辑")
@PostMapping("/setConfig")
@ApiOperation(value="用户设置编辑")
public AjaxResult<Object> setConfig(@Validated @RequestBody SettingUserValidate userValidate) {
iSettingUserService.setConfig(userValidate);
return AjaxResult.success();
}
}

View File

@ -0,0 +1,103 @@
package com.yj.admin.controller.setting;
import com.yj.admin.aop.Log;
import com.yj.admin.service.ISettingCopyrightService;
import com.yj.admin.service.ISettingProtocolService;
import com.yj.admin.service.ISettingWebsiteService;
import com.yj.admin.validate.setting.SettingCopyrightValidate;
import com.yj.admin.validate.setting.SettingAgreementValidate;
import com.yj.admin.validate.setting.SettingSiteStatisticsValidate;
import com.yj.admin.validate.setting.SettingWebsiteValidate;
import com.yj.admin.vo.setting.SettingCopyrightVo;
import com.yj.admin.vo.setting.SettingAgreementVo;
import com.yj.admin.vo.setting.SettingSiteStatisticsVo;
import com.yj.admin.vo.setting.SettingWebsiteVo;
import com.yj.common.core.AjaxResult;
import com.yj.common.util.ConfigUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("adminapi/setting.web.web_setting")
@Api(tags = "配置网站信息")
public class SettingWebsiteController {
@Resource
ISettingWebsiteService iSettingWebsiteService;
@Resource
ISettingCopyrightService iSettingCopyrightService;
@Resource
ISettingProtocolService iSettingProtocolService;
@GetMapping("/getWebsite")
@ApiOperation(value="网站配置信息")
public AjaxResult<SettingWebsiteVo> getWebsite() {
SettingWebsiteVo detail = iSettingWebsiteService.getWebsite();
return AjaxResult.success(detail);
}
@Log(title = "网站配置编辑")
@PostMapping("/setWebsite")
@ApiOperation(value="网站配置编辑")
public AjaxResult<Object> setWebsite(@Validated @RequestBody SettingWebsiteValidate websiteValidate) {
iSettingWebsiteService.setWebsite(websiteValidate);
return AjaxResult.success();
}
@GetMapping("/getCopyright")
@ApiOperation(value="网站版权信息")
public AjaxResult<List<SettingCopyrightVo>> getCopyright() {
List<SettingCopyrightVo> list = iSettingCopyrightService.getCopyright();
return AjaxResult.success(list);
}
@Log(title = "网站版权编辑")
@PostMapping("/setCopyright")
@ApiOperation(value="网站版权编辑")
public AjaxResult<Object> setCopyright(@Validated @RequestBody SettingCopyrightValidate copyrightValidate) {
iSettingCopyrightService.setCopyright(copyrightValidate);
return AjaxResult.success();
}
@GetMapping("/getAgreement")
@ApiOperation(value="政策协议信息")
public AjaxResult<SettingAgreementVo> getAgreement() {
SettingAgreementVo detail = iSettingProtocolService.getAgreement();
return AjaxResult.success(detail);
}
@Log(title = "政策协议编辑")
@PostMapping("/setAgreement")
@ApiOperation(value="政策协议编辑")
public AjaxResult<Object> setAgreement(@Validated @RequestBody SettingAgreementValidate protocolValidate) {
iSettingProtocolService.setAgreement(protocolValidate);
return AjaxResult.success();
}
@GetMapping("/getSiteStatistics")
@ApiOperation(value="获取站点统计配置")
public AjaxResult<SettingSiteStatisticsVo> getSiteStatistics() {
SettingSiteStatisticsVo vo = new SettingSiteStatisticsVo();
vo.setClarityCode(ConfigUtils.get("siteStatistics", "clarity_code", ""));
return AjaxResult.success(vo);
}
@Log(title = "站点统计配置")
@PostMapping("/setSiteStatistics")
@ApiOperation(value="站点统计配置")
public AjaxResult<Object> setSiteStatistics(@Validated @RequestBody SettingSiteStatisticsValidate settingSiteStatisticsValidate) {
ConfigUtils.set("siteStatistics", "clarity_code", settingSiteStatisticsValidate.getClarityCode());
return AjaxResult.success();
}
}

View File

@ -0,0 +1,71 @@
package com.yj.admin.controller.system;
import com.alibaba.fastjson2.JSONArray;
import com.yj.admin.service.system.IDeptService;
import com.yj.common.aop.NotPower;
import com.yj.admin.validate.commons.IdValidate;
import com.yj.admin.validate.system.DeptCreateValidate;
import com.yj.admin.validate.system.DeptSearchValidate;
import com.yj.admin.validate.system.DeptUpdateValidate;
import com.yj.admin.vo.system.DeptVo;
import com.yj.common.core.AjaxResult;
import com.yj.common.validator.annotation.IDMust;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping("/adminapi/dept.dept")
@Api(tags = "系统部门管理")
public class DeptController {
@Resource
IDeptService deptService;
@NotPower
@GetMapping("/all")
@ApiOperation(value="部门所有")
public AjaxResult<JSONArray> all() {
JSONArray list = deptService.all();
return AjaxResult.success(list);
}
@GetMapping("/lists")
@ApiOperation(value="部门列表")
public AjaxResult<JSONArray> list(@Validated DeptSearchValidate searchValidate) {
JSONArray list = deptService.list(searchValidate);
return AjaxResult.success(list);
}
@GetMapping("/detail")
@ApiOperation(value="部门详情")
public AjaxResult<DeptVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
DeptVo vo = deptService.detail(id);
return AjaxResult.success(vo);
}
@PostMapping("/add")
@ApiOperation(value="部门新增")
public AjaxResult<Object> add(@Validated @RequestBody DeptCreateValidate createValidate) {
deptService.add(createValidate);
return AjaxResult.success();
}
@PostMapping("/edit")
@ApiOperation(value="部门编辑")
public AjaxResult<Object> edit(@Validated @RequestBody DeptUpdateValidate updateValidate) {
deptService.edit(updateValidate);
return AjaxResult.success();
}
@PostMapping("/delete")
@ApiOperation(value="部门删除")
public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) {
deptService.del(idValidate.getId());
return AjaxResult.success();
}
}

View File

@ -0,0 +1,87 @@
package com.yj.admin.controller.system;
import com.alibaba.fastjson2.JSONObject;
import com.yj.admin.service.system.IJobsService;
import com.yj.common.aop.NotPower;
import com.yj.admin.validate.commons.IdValidate;
import com.yj.admin.validate.commons.PageValidate;
import com.yj.admin.validate.system.JobsCreateValidate;
import com.yj.admin.validate.system.JobsSearchValidate;
import com.yj.admin.validate.system.JobsUpdateValidate;
import com.yj.admin.vo.system.JobsVo;
import com.yj.common.core.AjaxResult;
import com.yj.common.core.PageResult;
import com.yj.common.enums.ErrorEnum;
import com.yj.common.util.StringUtils;
import com.yj.common.validator.annotation.IDMust;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/adminapi/dept.jobs")
@Api(tags = "系统岗位管理")
public class JobsController {
@Resource
IJobsService iJobsService;
@NotPower
@GetMapping("/all")
@ApiOperation(value="所有岗位")
public AjaxResult<List<JobsVo>> all() {
List<JobsVo> list = iJobsService.all();
return AjaxResult.success(list);
}
@GetMapping("/lists")
@ApiOperation(value="岗位列表")
public AjaxResult<Object> list(@Validated PageValidate pageValidate,
@Validated JobsSearchValidate searchValidate) {
if (StringUtils.isNotNull(searchValidate.getExport()) && searchValidate.getExport().equals(1)) {
JSONObject ret = iJobsService.getExportData(pageValidate, searchValidate);
return AjaxResult.success(ret);
} else if (StringUtils.isNotNull(searchValidate.getExport()) && searchValidate.getExport().equals(2)) {
String path = iJobsService.export(searchValidate);
return AjaxResult.success(2, new JSONObject() {{
put("url", path);
}}, ErrorEnum.SHOW_MSG.getCode());
} else {
PageResult<JobsVo> list = iJobsService.list(pageValidate, searchValidate);
return AjaxResult.success(list);
}
}
@GetMapping("/detail")
@ApiOperation(value="岗位详情")
public AjaxResult<JobsVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
JobsVo vo = iJobsService.detail(id);
return AjaxResult.success(vo);
}
@PostMapping("/add")
@ApiOperation(value="岗位新增")
public AjaxResult<Object> add(@Validated @RequestBody JobsCreateValidate createValidate) {
iJobsService.add(createValidate);
return AjaxResult.success();
}
@PostMapping("/edit")
@ApiOperation(value="岗位编辑")
public AjaxResult<Object> edit(@Validated @RequestBody JobsUpdateValidate updateValidate) {
iJobsService.edit(updateValidate);
return AjaxResult.success();
}
@PostMapping("/delete")
@ApiOperation(value="岗位删除")
public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) {
iJobsService.del(idValidate.getId());
return AjaxResult.success();
}
}

View File

@ -0,0 +1,116 @@
package com.yj.admin.controller.system;
import com.alibaba.fastjson2.JSONObject;
import com.yj.admin.LikeAdminThreadLocal;
import com.yj.admin.aop.Log;
import com.yj.common.aop.NotPower;
import com.yj.admin.service.admin.IAdminService;
import com.yj.admin.validate.commons.IdValidate;
import com.yj.admin.validate.commons.PageValidate;
import com.yj.admin.validate.system.SystemAdminCreateValidate;
import com.yj.admin.validate.system.SystemAdminSearchValidate;
import com.yj.admin.validate.system.SystemAdminUpInfoValidate;
import com.yj.admin.validate.system.SystemAdminUpdateValidate;
import com.yj.admin.vo.system.SystemAuthAdminDetailVo;
import com.yj.admin.vo.system.SystemAuthAdminListedVo;
import com.yj.admin.vo.system.SystemAuthAdminSelvesVo;
import com.yj.common.core.AjaxResult;
import com.yj.common.core.PageResult;
import com.yj.common.enums.ErrorEnum;
import com.yj.common.util.StringUtils;
import com.yj.common.validator.annotation.IDMust;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping("/adminapi/auth.admin")
@Api(tags = "系统用户管理")
public class SystemAuthAdminController {
@Resource
IAdminService iSystemAuthAdminService;
@GetMapping("/lists")
@ApiOperation(value="管理员列表")
public AjaxResult<Object> list(@Validated PageValidate pageValidate,
@Validated SystemAdminSearchValidate searchValidate) {
if (StringUtils.isNotNull(searchValidate.getExport()) && searchValidate.getExport().equals(1)) {
JSONObject ret = iSystemAuthAdminService.getExportData(pageValidate, searchValidate);
return AjaxResult.success(ret);
} else if (StringUtils.isNotNull(searchValidate.getExport()) && searchValidate.getExport().equals(2)) {
String path = iSystemAuthAdminService.export(searchValidate);
return AjaxResult.success(2, new JSONObject() {{
put("url", path);
}}, ErrorEnum.SHOW_MSG.getCode());
} else {
PageResult<SystemAuthAdminListedVo> list = iSystemAuthAdminService.list(pageValidate, searchValidate);
return AjaxResult.success(list);
}
}
@NotPower
@GetMapping("/self")
@ApiOperation(value="管理员信息")
public AjaxResult<SystemAuthAdminSelvesVo> self() {
Integer adminId = LikeAdminThreadLocal.getAdminId();
SystemAuthAdminSelvesVo vo = iSystemAuthAdminService.self(adminId);
return AjaxResult.success(vo);
}
@GetMapping("/detail")
@ApiOperation(value="管理员详情")
public AjaxResult<SystemAuthAdminDetailVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
SystemAuthAdminDetailVo vo = iSystemAuthAdminService.detail(id);
return AjaxResult.success(vo);
}
@Log(title = "管理员新增")
@PostMapping("/add")
@ApiOperation(value="管理员新增")
public AjaxResult<Object> add(@Validated @RequestBody SystemAdminCreateValidate createValidate) {
iSystemAuthAdminService.add(createValidate);
return AjaxResult.success();
}
@Log(title = "管理员编辑")
@PostMapping("/edit")
@ApiOperation(value="管理员编辑")
public AjaxResult<Object> edit(@Validated @RequestBody SystemAdminUpdateValidate updateValidate) {
Integer adminId = LikeAdminThreadLocal.getAdminId();
iSystemAuthAdminService.edit(updateValidate, adminId);
return AjaxResult.success();
}
@NotPower
@Log(title = "管理员更新")
@PostMapping("/upInfo")
@ApiOperation(value="当前管理员更新")
public AjaxResult<Object> upInfo(@Validated @RequestBody SystemAdminUpInfoValidate upInfoValidate) {
Integer adminId = LikeAdminThreadLocal.getAdminId();
iSystemAuthAdminService.upInfo(upInfoValidate, adminId);
return AjaxResult.success();
}
@Log(title = "管理员删除")
@PostMapping("/delete")
@ApiOperation(value="管理员删除")
public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) {
Integer adminId = LikeAdminThreadLocal.getAdminId();
iSystemAuthAdminService.del(idValidate.getId(), adminId);
return AjaxResult.success();
}
@Log(title = "管理员状态")
@PostMapping("/disable")
@ApiOperation(value="管理员状态切换")
public AjaxResult<Object> disable(@Validated @RequestBody IdValidate idValidate) {
Integer adminId = LikeAdminThreadLocal.getAdminId();
iSystemAuthAdminService.disable(idValidate.getId(), adminId);
return AjaxResult.success();
}
}

View File

@ -0,0 +1,97 @@
package com.yj.admin.controller.system;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.yj.admin.LikeAdminThreadLocal;
import com.yj.admin.aop.Log;
import com.yj.common.aop.NotPower;
import com.yj.admin.service.system.ISystemMenuService;
import com.yj.admin.validate.commons.IdValidate;
import com.yj.admin.validate.system.SystemMenuCreateValidate;
import com.yj.admin.validate.system.SystemMenuUpdateValidate;
import com.yj.admin.vo.system.SystemAuthMenuVo;
import com.yj.common.core.AjaxResult;
import com.yj.common.validator.annotation.IDMust;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/adminapi/auth.menu")
@Api(tags = "系统菜单管理")
public class SystemAuthMenuController {
@Resource
ISystemMenuService iSystemAuthMenuService;
@NotPower
@GetMapping("/route")
@ApiOperation(value="获取菜单路由")
public AjaxResult<JSONArray> route() {
List<Integer> roleIds = LikeAdminThreadLocal.getRoleIds();
JSONArray lists = iSystemAuthMenuService.selectMenuByRoleId(roleIds);
return AjaxResult.success(lists);
}
@NotPower
@GetMapping("/lists")
@ApiOperation(value="获取菜单列表")
public AjaxResult<JSONObject> list() {
JSONObject result = iSystemAuthMenuService.list();
return AjaxResult.success(result);
}
@NotPower
@GetMapping("/systemMenuLists")
@ApiOperation(value="获取菜单列表")
public AjaxResult<Object> systemMenuLists() {
JSONArray result = iSystemAuthMenuService.systemMenuLists();
return AjaxResult.success(result);
}
@NotPower
@GetMapping("/all")
@ApiOperation(value="获取菜单列表")
public AjaxResult<JSONArray> all() {
JSONArray result = iSystemAuthMenuService.all();
return AjaxResult.success(result);
}
@GetMapping("/detail")
@ApiOperation(value="获取菜单详情")
public AjaxResult<SystemAuthMenuVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
SystemAuthMenuVo vo = iSystemAuthMenuService.detail(id);
return AjaxResult.success(vo);
}
@Log(title = "菜单新增")
@PostMapping("/add")
@ApiOperation(value="新增菜单")
public AjaxResult<Object> add(@Validated @RequestBody SystemMenuCreateValidate createValidate) {
iSystemAuthMenuService.add(createValidate);
return AjaxResult.success();
}
@Log(title = "菜单编辑")
@PostMapping("/edit")
@ApiOperation(value="菜单编辑")
public AjaxResult<Object> edit(@Validated @RequestBody SystemMenuUpdateValidate updateValidate) {
iSystemAuthMenuService.edit(updateValidate);
return AjaxResult.success();
}
@Log(title = "菜单删除")
@PostMapping("/delete")
@ApiOperation(value="菜单删除")
public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) {
iSystemAuthMenuService.del(idValidate.getId());
return AjaxResult.success();
}
}

View File

@ -0,0 +1,78 @@
package com.yj.admin.controller.system;
import com.yj.admin.aop.Log;
import com.yj.common.aop.NotPower;
import com.yj.admin.service.system.ISystemRoleService;
import com.yj.admin.validate.commons.IdValidate;
import com.yj.admin.validate.commons.PageValidate;
import com.yj.admin.validate.system.SystemRoleCreateValidate;
import com.yj.admin.validate.system.SystemRoleUpdateValidate;
import com.yj.admin.vo.system.SystemAuthRoleVo;
import com.yj.common.core.AjaxResult;
import com.yj.common.core.PageResult;
import com.yj.common.validator.annotation.IDMust;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/adminapi/auth.role")
@Api(tags = "系统角色管理")
public class SystemAuthRoleController {
@Resource
ISystemRoleService iSystemAuthRoleService;
@NotPower
@GetMapping("/all")
@ApiOperation(value="所有角色")
public AjaxResult<List<SystemAuthRoleVo>> all() {
List<SystemAuthRoleVo> list = iSystemAuthRoleService.all();
return AjaxResult.success(list);
}
@Log(title = "角色列表")
@GetMapping("/lists")
@ApiOperation(value="角色列表")
public AjaxResult<PageResult<SystemAuthRoleVo>> list(@Validated PageValidate pageValidate) {
PageResult<SystemAuthRoleVo> list = iSystemAuthRoleService.list(pageValidate);
return AjaxResult.success(list);
}
@Log(title = "角色详情")
@GetMapping("/detail")
@ApiOperation(value="角色详情")
public AjaxResult<SystemAuthRoleVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
SystemAuthRoleVo vo = iSystemAuthRoleService.detail(id);
return AjaxResult.success(vo);
}
@Log(title = "角色新增")
@PostMapping("/add")
@ApiOperation(value="角色新增")
public AjaxResult<Object> add(@Validated @RequestBody SystemRoleCreateValidate createValidate) {
iSystemAuthRoleService.add(createValidate);
return AjaxResult.success();
}
@Log(title = "角色编辑")
@PostMapping("/edit")
@ApiOperation(value="角色编辑")
public AjaxResult<Object> edit(@Validated @RequestBody SystemRoleUpdateValidate updateValidate) {
iSystemAuthRoleService.edit(updateValidate);
return AjaxResult.success();
}
@Log(title = "角色删除")
@PostMapping("/delete")
@ApiOperation(value="角色删除")
public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) {
iSystemAuthRoleService.del(idValidate.getId());
return AjaxResult.success();
}
}

View File

@ -0,0 +1,30 @@
package com.yj.admin.controller.system;
import com.yj.admin.aop.Log;
import com.yj.admin.service.system.ISystemCacheService;
import com.yj.common.core.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@RestController
@RequestMapping("/adminapi/setting.system.cache")
@Api(tags = "系统缓存管理")
public class SystemCacheController {
@Resource
ISystemCacheService iSystemCacheService;
@Log(title = "清除系统缓存")
@PostMapping("/clear")
@ApiOperation(value = "清除系统缓存")
public AjaxResult<Object> clear() {
iSystemCacheService.clear();
return AjaxResult.success();
}
}

View File

@ -0,0 +1,44 @@
package com.yj.admin.controller.system;
import com.yj.admin.service.system.ISystemLogsServer;
import com.yj.admin.validate.commons.PageValidate;
import com.yj.admin.validate.system.SystemSearchLoginsValidate;
import com.yj.admin.validate.system.SystemSearchOperateValidate;
import com.yj.admin.vo.system.SystemLogLoginVo;
import com.yj.admin.vo.system.SystemLogOperateVo;
import com.yj.common.core.AjaxResult;
import com.yj.common.core.PageResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
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.annotation.Resource;
@RestController
@RequestMapping("/adminapi/setting.system.log")
@Api(tags = "系统日志管理")
public class SystemLogsController {
@Resource
ISystemLogsServer iSystemLogsServer;
@GetMapping("/lists")
@ApiOperation(value="系统操作日志")
public AjaxResult<PageResult<SystemLogOperateVo>> lists(@Validated PageValidate pageValidate,
@Validated SystemSearchOperateValidate searchValidate) {
PageResult<SystemLogOperateVo> list = iSystemLogsServer.operate(pageValidate, searchValidate);
return AjaxResult.success(list);
}
@GetMapping("/login")
@ApiOperation(value="系统登录日志")
public AjaxResult<PageResult<SystemLogLoginVo>> login(@Validated PageValidate pageValidate,
@Validated SystemSearchLoginsValidate searchValidate) {
PageResult<SystemLogLoginVo> list = iSystemLogsServer.login(pageValidate, searchValidate);
return AjaxResult.success(list);
}
}

View File

@ -0,0 +1,17 @@
package com.yj.admin.crontab;
import org.springframework.stereotype.Component;
/**
* 具体的定时任务
*/
@Component("myJob")
public class MyJob {
public void handle(String s) {
System.out.println("有参数定时任务执行逻辑 : " + s);
}
}

View File

@ -0,0 +1,75 @@
package com.yj.admin.service;
import com.yj.admin.validate.article.ArtCateCreateValidate;
import com.yj.admin.validate.article.ArtCateUpdateValidate;
import com.yj.admin.validate.article.ArtCateSearchValidate;
import com.yj.admin.validate.commons.PageValidate;
import com.yj.admin.vo.article.ArticleCateVo;
import com.yj.common.core.PageResult;
import java.util.List;
/**
* 文章分类服接口务类
*/
public interface IArtCateService {
/**
* 分类所有
*
* @author fzr
* @return List<CategoryVo>
*/
List<ArticleCateVo> all();
/**
* 分类列表
*
* @author fzr
* @param pageValidate 分页参数
* @param searchValidate 搜索参数
* @return PageResult<CategoryVo>
*/
PageResult<ArticleCateVo> list(PageValidate pageValidate, ArtCateSearchValidate searchValidate);
/**
* 分类详情
*
* @author fzr
* @param id 分类ID
*/
ArticleCateVo detail(Integer id);
/**
* 分类新增
*
* @author fzr
* @param createValidate 参数
*/
void add(ArtCateCreateValidate createValidate);
/**
* 分类编辑
*
* @author fzr
* @param updateValidate 参数
*/
void edit(ArtCateUpdateValidate updateValidate);
/**
* 分类删除
*
* @author fzr
* @param id 分类ID
*/
void del(Integer id);
/**
* 分类状态
*
* @author fzr
* @param id 分类ID
*/
void change(Integer id);
}

View File

@ -0,0 +1,66 @@
package com.yj.admin.service;
import com.yj.admin.validate.article.ArticleCreateValidate;
import com.yj.admin.validate.article.ArticleSearchValidate;
import com.yj.admin.validate.article.ArticleUpdateValidate;
import com.yj.admin.validate.commons.PageValidate;
import com.yj.admin.vo.article.ArticleDetailVo;
import com.yj.admin.vo.article.ArticleListedVo;
import com.yj.common.core.PageResult;
/**
* 文章服务接口类
*/
public interface IArticleService {
/**
* 文章列表
*
* @author fzr
* @param pageValidate 分页参数
* @param searchValidate 搜索参数
* @return PageResult<ArticleListVo>
*/
PageResult<ArticleListedVo> list(PageValidate pageValidate, ArticleSearchValidate searchValidate);
/**
* 文章详情
*
* @author fzr
* @param id 主键ID
*/
ArticleDetailVo detail(Integer id);
/**
* 文章新增
*
* @author fzr
* @param createValidate 参数
*/
void add(ArticleCreateValidate createValidate);
/**
* 文章编辑
*
* @author fzr
* @param updateValidate 参数
*/
void edit(ArticleUpdateValidate updateValidate);
/**
* 文章删除
*
* @author fzr
* @param id 文章主键
*/
void del(Integer id);
/**
* 文章状态
*
* @author fzr
* @param id 文章主键
*/
void change(Integer id);
}

View File

@ -0,0 +1,27 @@
package com.yj.admin.service;
import com.yj.admin.validate.channel.ChannelH5Validate;
import com.yj.admin.vo.channel.ChannelH5Vo;
/**
* H5渠道设置服务接口类
*/
public interface IChannelH5ConfigService {
/**
* H5设置详情
*
* @author fzr
* @return ChannelH5Vo
*/
ChannelH5Vo getConfig();
/**
* H5设置保存
*
* @author fzr
* @param channelH5Validate 参数
*/
void setConfig(ChannelH5Validate channelH5Validate);
}

View File

@ -0,0 +1,27 @@
package com.yj.admin.service;
import com.yj.admin.validate.channel.ChannelMpValidate;
import com.yj.admin.vo.channel.ChannelMpVo;
/**
* 微信小程序渠道服务接口类
*/
public interface IChannelMpConfigService {
/**
* 微信小程序设置详情
*
* @author fzr
* @return ChannelMpVo
*/
ChannelMpVo getConfig();
/**
* 微信小程序设置保存
*
* @author fzr
* @param channelMpValidate 参数
*/
void setConfig(ChannelMpValidate channelMpValidate);
}

View File

@ -0,0 +1,29 @@
package com.yj.admin.service;
/**
* 公众号服务器回调
*/
public interface IChannelOaCallBackService {
/**
* 服务器验证
*/
String checkSignature(String signature, String timestamp, String nonce, String echostr);
/**
* 消息回复
*
* @param requestBody
* @param signature
* @param timestamp
* @param nonce
* @param encType
* @param msgSignature
* @return
*/
String post(String requestBody, String signature, String timestamp, String nonce, String encType, String msgSignature);
}

View File

@ -0,0 +1,28 @@
package com.yj.admin.service;
import com.yj.admin.validate.channel.ChannelOaValidate;
import com.yj.admin.vo.channel.ChannelOaVo;
/**
* 公众号渠道设置服务接口类
*/
public interface IChannelOaConfigService {
/**
* 公众号设置详情
*
* @author fzr
* @return ChannelOaVo
*/
ChannelOaVo getConfig();
/**
* 公众号设置保存
*
* @author fzr
* @param channelOaValidate 参数
*/
void setConfig(ChannelOaValidate channelOaValidate);
}

View File

@ -0,0 +1,30 @@
package com.yj.admin.service;
import com.alibaba.fastjson2.JSONArray;
import java.util.List;
/**
* 公众号菜单服务接口类
*/
public interface IChannelOaMenusService {
/**
* 菜单详情
*
* @author fzr
* @return JSONArray
*/
JSONArray detail();
/**
* 菜单保存
*
* @author fzr
* @param params 参数
* @param isPublish 是否发布
*/
void save(List<Object> params, Boolean isPublish);
}

View File

@ -0,0 +1,63 @@
package com.yj.admin.service;
import com.yj.admin.validate.channel.ChannelRpValidate;
import com.yj.admin.validate.commons.PageValidate;
import com.yj.admin.vo.channel.ChannelRpVo;
import com.yj.common.core.PageResult;
/**
* 公众号默认回复服务接口类
*/
public interface IChannelOaReplyService {
/**
* 默认回复列表
*
* @author fzr
* @param pageValidate 分页参数
* @return PageResult<ChannelRpDefaultVo>
*/
PageResult<ChannelRpVo> list(PageValidate pageValidate, Integer replyType);
/**
* 默认回复详情
*
* @author fzr
* @param id 主键
* @return ChannelRpDefaultVo
*/
ChannelRpVo detail(Integer id);
/**
* 默认回复新增
*
* @author fzr
* @param defaultValidate 参数
*/
void add(ChannelRpValidate defaultValidate);
/**
* 默认回复编辑
*
* @author fzr
* @param defaultValidate 参数
*/
void edit(ChannelRpValidate defaultValidate);
/**
* 默认回复删除
*
* @author fzr
* @param id 主键
*/
void del(Integer id);
/**
* 默认回复状态
*
* @author fzr
* @param id 主键
*/
void status(Integer id);
}

View File

@ -0,0 +1,27 @@
package com.yj.admin.service;
import com.yj.admin.validate.channel.ChannelOpValidate;
import com.yj.admin.vo.channel.ChannelOpVo;
/**
* 微信开放渠道设置接口服务类
*/
public interface IChannelOpService {
/**
* 开放平台设置详情
*
* @author fzr
* @return ChannelOpVo
*/
ChannelOpVo getConfig();
/**
* 开放平台设置保存
*
* @author fzr
* @param opValidate 参数
*/
void setConfig(ChannelOpValidate opValidate);
}

View File

@ -0,0 +1,58 @@
package com.yj.admin.service;
import com.yj.admin.validate.crontab.CrontabCreateValidate;
import com.yj.admin.validate.crontab.CrontabUpdateValidate;
import com.yj.admin.validate.commons.PageValidate;
import com.yj.admin.vo.CrontabDetailVo;
import com.yj.admin.vo.CrontabListedVo;
import com.yj.common.core.PageResult;
import org.quartz.SchedulerException;
/**
* 计划任务服务接口类
*/
public interface ICrontabService {
/**
* 计划任务列表
*
* @author fzr
* @param pageValidate 分页参数
* @return PageResult<CrontabListedVo>
*/
PageResult<CrontabListedVo> list(PageValidate pageValidate);
/**
* 计划任务详情
*
* @author fzr
* @param id 主键
* @return CrontabDetailVo
*/
CrontabDetailVo detail(Integer id);
/**
* 计划任务新增
*
* @author fzr
* @param createValidate 参数
*/
void add(CrontabCreateValidate createValidate) throws SchedulerException;
/**
* 计划任务编辑
*
* @author fzr
* @param updateValidate 参数
*/
void edit(CrontabUpdateValidate updateValidate) throws SchedulerException;
/**
* 计划任务删除
*
* @author fzr
* @param id 主键
*/
void del(Integer id) throws SchedulerException;
}

View File

@ -0,0 +1,23 @@
package com.yj.admin.service;
import com.alibaba.fastjson2.JSONObject;
import com.yj.admin.vo.decorate.DecorateDataArticleVo;
import java.util.List;
/**
* 装修数据服务接口类
*/
public interface IDecorateDataService {
/**
* 获取文章数据
*
* @author fzr
* @param limit 条数
* @return List<DecorateArticleDataVo>
*/
List<DecorateDataArticleVo> article(Integer limit);
JSONObject pc();
}

View File

@ -0,0 +1,24 @@
package com.yj.admin.service;
import com.yj.admin.validate.decorate.DecoratePageValidate;
import com.yj.admin.vo.decorate.DecoratePageVo;
public interface IDecoratePageService {
/**
* 页面装修详情
*
* @author fzr
* @param id 主键
* @return DecoratePageVo
*/
DecoratePageVo detail(Integer id);
/**
* 页面装修保存
*
* @author fzr
* @param decoratePageValidate 参数
*/
void save(DecoratePageValidate decoratePageValidate);
}

View File

@ -0,0 +1,27 @@
package com.yj.admin.service;
import com.yj.admin.validate.decorate.DecorateTabsValidate;
import com.yj.admin.vo.decorate.DecorateTabbarVo;
/**
* 底部导航服务接口类
*/
public interface IDecorateTabbarService {
/**
* 底部导航详情
*
* @author fzr
* @return DecorateTabbarVo
*/
DecorateTabbarVo detail();
/**
* 底部导航保存
*
* @author fzr
* @param tabsValidate 参数
*/
void save(DecorateTabsValidate tabsValidate);
}

View File

@ -0,0 +1,95 @@
package com.yj.admin.service;
import com.alibaba.fastjson2.JSONObject;
import com.yj.admin.validate.file.FileCateValidate;
import com.yj.admin.validate.file.FileSearchValidate;
import com.yj.admin.validate.commons.PageValidate;
import com.yj.admin.vo.album.FileVo;
import com.yj.common.core.PageResult;
import java.util.List;
import java.util.Map;
/**
* 文件服务接口类
*/
public interface IFileService {
/**
* 文件列表
*
* @author fzr
* @param pageValidate 分页参数
* @param searchValidate 其他搜索参数
* @return PageResult<AlbumVo>
*/
PageResult<FileVo> fileList(PageValidate pageValidate, FileSearchValidate searchValidate);
/**
* 文件重命名
*
* @param id 文件ID
* @param name 文件名称
*/
void fileRename(Integer id, String name);
/**
* 文件移动
*
* @author fzr
* @param ids 文件ID
* @param cid 类目ID
*/
void fileMove(List<Integer> ids, Integer cid);
/**
* 文件新增
*
* @author fzr
* @param params 文件信息参数
*/
Integer fileAdd(Map<String, String> params);
/**
* 文件删除
*
* @author fzr
* @param ids 文件ID
*/
void fileDel(List<Integer> ids);
/**
* 分类列表
*
* @author fzr
* @param searchValidate 搜索参数
* @return JSONArray
*/
JSONObject cateList(FileSearchValidate searchValidate);
/**
* 分类新增
*
* @author fzr
* @param cateValidate 分类参数
*/
void cateAdd(FileCateValidate cateValidate);
/**
* 分类编辑
*
* @author fzr
* @param id 分类ID
* @param name 分类名称
*/
void cateRename(Integer id, String name);
/**
* 分类删除
*
* @author fzr
* @param id 分类ID
*/
void cateDel(Integer id);
}

View File

@ -0,0 +1,52 @@
package com.yj.admin.service;
import com.alibaba.fastjson2.JSONObject;
import com.yj.admin.validate.commons.PageValidate;
import com.yj.admin.validate.finance.FinanceRechargeSearchValidate;
import com.yj.admin.vo.finance.FinanceRechargeListVo;
import com.yj.common.core.PageResult;
/**
* 充值记录服务接口类
*/
public interface IFinanceRechargerService {
/**
* 充值记录
*
* @author fzr
* @param pageValidate 分页参数
* @param searchValidate 搜索参数
* @return PageResult<FinanceRechargeListVo>
*/
PageResult<FinanceRechargeListVo> list(PageValidate pageValidate, FinanceRechargeSearchValidate searchValidate);
/**
* 发起退款
*
* @author fzr
* @param orderId 订单ID
* @param adminId 管理员ID
*/
void refund(Integer orderId, Integer adminId);
/**
* 重新退款
*
* @author fzr
* @param recordId 记录ID
* @param adminId 管理员ID
*/
void refundAgain(Integer recordId, Integer adminId);
/**
* 返回导出格式
* @return
*/
JSONObject getExportData(PageValidate pageValidate, FinanceRechargeSearchValidate searchValidate);
/**
* 导出
*/
String export(FinanceRechargeSearchValidate searchValidate);
}

View File

@ -0,0 +1,36 @@
package com.yj.admin.service;
import com.yj.admin.validate.commons.PageValidate;
import com.yj.admin.validate.finance.FinanceRefundSearchValidate;
import com.yj.admin.vo.finance.FinanceRefundListVo;
import com.yj.admin.vo.finance.FinanceRefundLogVo;
import com.yj.common.core.PageResult;
import java.util.List;
import java.util.Map;
/**
* 退款记录服务接口类
*/
public interface IFinanceRefundService {
/**
* 退款记录列表
*
* @author fzr
* @param pageValidate 分页参数
* @param searchValidate 搜索参数
* @return PageResult<FinanceRechargeListVo>
*/
PageResult<FinanceRefundListVo> list(PageValidate pageValidate, FinanceRefundSearchValidate searchValidate);
/**
* 退款日志
*
* @param recordId 退款日志ID
* @return List<FinanceRefundLogVo>
*/
List<FinanceRefundLogVo> log(Integer recordId);
Map<String, Object> stat();
}

View File

@ -0,0 +1,26 @@
package com.yj.admin.service;
import com.yj.admin.validate.commons.PageValidate;
import com.yj.admin.validate.finance.FinanceWalletSearchValidate;
import com.yj.admin.vo.finance.FinanceWalletListVo;
import com.yj.common.core.PageResult;
import java.util.Map;
/**
* 用户余额记录服务接口类
*/
public interface IFinanceWalletService {
/**
* 余额明细列表
*
* @author fzr
* @param pageValidate 分页参数
* @param searchValidate 搜索参数
* @return PageResult<FinanceWalletListVo>
*/
PageResult<FinanceWalletListVo> list(PageValidate pageValidate, FinanceWalletSearchValidate searchValidate);
Map<Integer, String> getUmChangeType();
}

View File

@ -0,0 +1,25 @@
package com.yj.admin.service;
import java.util.Map;
/**
* 主页服务接口类
*/
public interface IIndexService {
/**
* 控制台数据
*
* @author fzr
* @return Map<String, Object>
*/
Map<String, Object> index();
/**
* 公共配置
*/
Map<String, Object> config();
}

View File

@ -0,0 +1,27 @@
package com.yj.admin.service;
import com.yj.admin.validate.marketing.MarketingRechargeValidate;
import com.yj.admin.vo.marketing.MarketingRechargeVo;
/**
* 营销充值服务接口类
*/
public interface IMarketingRechargeService {
/**
* 充值配置详情
*
* @author fzr
* @return MarketingRechargeVo
*/
MarketingRechargeVo detail();
/**
* 充值配置保存
*
* @author fzr
* @param rechargeValidate 充值参数
*/
void save(MarketingRechargeValidate rechargeValidate);
}

View File

@ -0,0 +1,29 @@
package com.yj.admin.service;
import com.yj.admin.validate.setting.SettingCopyrightValidate;
import com.yj.admin.vo.setting.SettingCopyrightVo;
import java.util.List;
/**
* 网站备案服务接口类
*/
public interface ISettingCopyrightService {
/**
* 获取网站备案信息
*
* @author fzr
* @return List<SettingCopyrightVo>
*/
List<SettingCopyrightVo> getCopyright();
/**
* 保存网站备案信息
*
* @author fzr
* @param copyrightValidate 参数
*/
void setCopyright(SettingCopyrightValidate copyrightValidate);
}

View File

@ -0,0 +1,68 @@
package com.yj.admin.service;
import com.yj.admin.validate.commons.PageValidate;
import com.yj.admin.validate.setting.DictDataCreateValidate;
import com.yj.admin.validate.setting.DictDataUpdateValidate;
import com.yj.admin.vo.setting.SettingDictDataVo;
import com.yj.common.core.PageResult;
import java.util.List;
import java.util.Map;
/**
* 字典数据服务接口类
*/
public interface ISettingDictDataService {
/**
* 字典数据所有
*
* @author fzr
* @return List<DictDataVo>
*/
List<SettingDictDataVo> all(Map<String, String> params);
/**
* 字典数据列表
*
* @author fzr
* @param pageValidate 分页参数
* @param params 搜索参数
* @return PageResult<DictDataVo>
*/
PageResult<SettingDictDataVo> list(PageValidate pageValidate, Map<String, String> params);
/**
* 字典数据详情
*
* @author fzr
* @param id 主键
* @return DictDataVo
*/
SettingDictDataVo detail(Integer id);
/**
* 字典数据新增
*
* @author fzr
* @param createValidate 参数
*/
void add(DictDataCreateValidate createValidate);
/**
* 字典数据编辑
*
* @author fzr
* @param updateValidate 参数
*/
void edit(DictDataUpdateValidate updateValidate);
/**
* 字典数据删除
*
* @author fzr
* @param ids 主键
*/
void del(List<Integer> ids);
}

View File

@ -0,0 +1,68 @@
package com.yj.admin.service;
import com.yj.admin.validate.commons.PageValidate;
import com.yj.admin.validate.setting.DictTypeCreateValidate;
import com.yj.admin.validate.setting.DictTypeUpdateValidate;
import com.yj.admin.vo.setting.SettingDictTypeVo;
import com.yj.common.core.PageResult;
import java.util.List;
import java.util.Map;
/**
* 字典类型服务接口类
*/
public interface ISettingDictTypeService {
/**
* 字典类型所有
*
* @author fzr
* @return List<DictTypeVo>
*/
List<SettingDictTypeVo> all();
/**
* 字典类型列表
*
* @author fzr
* @param pageValidate 分页参数
* @param params 搜索参数
* @return PageResult<DictDataVo>
*/
PageResult<SettingDictTypeVo> list(PageValidate pageValidate, Map<String, String> params);
/**
* 字典类型详情
*
* @author fzr
* @param id 主键
* @return DictDataVo
*/
SettingDictTypeVo detail(Integer id);
/**
* 字典类型新增
*
* @author fzr
* @param createValidate 参数
*/
void add(DictTypeCreateValidate createValidate);
/**
* 字典类型编辑
*
* @author fzr
* @param updateValidate 参数
*/
void edit(DictTypeUpdateValidate updateValidate);
/**
* 字典类型删除
*
* @author fzr
* @param ids 主键
*/
void del(Integer ids);
}

View File

@ -0,0 +1,27 @@
package com.yj.admin.service;
import com.yj.admin.validate.setting.SettingLoginValidate;
import com.yj.admin.vo.setting.SettingLoginVo;
/**
* 登录设置服务接口类
*/
public interface ISettingLoginService {
/**
* 登录设置详情
*
* @author fzr
* @return SettingLoginVo
*/
SettingLoginVo getRegisterConfig();
/**
* 登录设置保存
*
* @author fzr
* @param loginValidate 参数
*/
void setRegisterConfig(SettingLoginValidate loginValidate);
}

View File

@ -0,0 +1,40 @@
package com.yj.admin.service;
import com.alibaba.fastjson2.JSONObject;
import com.yj.admin.vo.setting.SettingNoticeDetailVo;
import com.yj.admin.vo.setting.SettingNoticeListedVo;
import java.util.List;
/**
* 通知设置服务接口类
*/
public interface ISettingNoticeService {
/**
* 通知设置列表
*
* @author fzr
* @param recipient 1=用户, 2=平台
* @return List<NoticeSettingListVo>
*/
List<SettingNoticeListedVo> list(Integer recipient);
/**
* 通知设置详情
*
* @author fzr
* @param id 主键
* @return NoticeDetailVo
*/
SettingNoticeDetailVo detail(Integer id);
/**
* 通知设置保存
*
* @author fzr
* @param params 参数
*/
void save(JSONObject params);
}

View File

@ -0,0 +1,57 @@
package com.yj.admin.service;
import com.alibaba.fastjson2.JSONObject;
import com.yj.admin.validate.setting.SettingPayConfigValidate;
import com.yj.admin.vo.setting.SettingPaymentMethodVo;
import com.yj.common.entity.setting.DevPayConfig;
import java.util.HashMap;
import java.util.List;
/**
* 支付配置服务接口类
*/
public interface ISettingPaymentService {
/**
* 支付方式
*
* @author fzr
* @return List<List<SettingPaymentMethodVo>>
*/
HashMap getPayWay();
/**
* 配置列表
*
* @author fzr
* @return List<DevPayConfig>
*/
JSONObject list();
/**
* 配置详情
*
* @author fzr
* @param id 主键
* @return SettingPaymentMethodVo
*/
DevPayConfig getConfig(Integer id);
/**
* 编辑支付配置
*
* @author fzr
* @param configValidate 参数
*/
void setConfig(SettingPayConfigValidate configValidate);
/**
* 编辑支付方式
*
* @author fzr
* @param data 参数
*/
void setPayWay(HashMap<Integer, List<SettingPaymentMethodVo>> data);
}

View File

@ -0,0 +1,27 @@
package com.yj.admin.service;
import com.yj.admin.validate.setting.SettingAgreementValidate;
import com.yj.admin.vo.setting.SettingAgreementVo;
/**
* 政策协议服务接口类
*/
public interface ISettingProtocolService {
/**
* 获取政策协议信息
*
* @author fzr
* @return SettingProtocolDetailVo
*/
SettingAgreementVo getAgreement();
/**
* 保存政策协议信息
*
* @author fzr
* @param protocolValidate 参数
*/
void setAgreement(SettingAgreementValidate protocolValidate);
}

View File

@ -0,0 +1,28 @@
package com.yj.admin.service;
import com.yj.admin.validate.setting.SettingSearchValidate;
import com.yj.admin.vo.setting.SettingSearchDetailVo;
/**
* 热门搜索服务接口类
*/
public interface ISettingSearchService {
/**
* 热门搜索详情
*
* @author fzr
* @return SettingSearchDetailVo
*/
SettingSearchDetailVo getConfig();
/**
* 热门搜索新增
*
* @author fzr
* @param searchValidate 参数
*/
void setConfig(SettingSearchValidate searchValidate);
}

View File

@ -0,0 +1,38 @@
package com.yj.admin.service;
import com.alibaba.fastjson2.JSONObject;
import java.util.List;
import java.util.Map;
/**
* 短信配置接口类
*/
public interface ISettingSmsService {
/**
* 短信引擎列表
*
* @author fzr
* @return List<Map<String, Object>>
*/
List<Map<String, Object>> getConfig();
/**
* 短信引擎详情
*
* @author fzr
* @param alias 别名
* @return Map<String, Object>
*/
Map<String, Object> detail(String type);
/**
* 短信引擎保存
*
* @author fzr
* @param params 参数
*/
void setConfig(JSONObject params);
}

View File

@ -0,0 +1,45 @@
package com.yj.admin.service;
import java.util.List;
import java.util.Map;
/**
* 存储配置服务接口类
*/
public interface ISettingStorageService {
/**
* 存储列表
*
* @author fzr
* @return List<Map<String, Object>>
*/
List<Map<String, Object>> list();
/**
* 存储详情
*
* @author fzr
* @param alias 引擎别名
* @return Map<String, Object>
*/
Map<String, Object> detail(String engine);
/**
* 存储编辑
*
* @author fzr
* @param params 参数
*/
void setup(Map<String, String> params);
/**
* 存储切换
*
* @author fzr
* @param alias 引擎别名
* @param status 状态
*/
void change(String alias, Integer status);
}

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