Compare commits
15 Commits
c700ab5a5c
...
f49b9db4d7
Author | SHA1 | Date | |
---|---|---|---|
f49b9db4d7 | |||
c273913442 | |||
13270ed1b6 | |||
6574d8a12e | |||
ccac929478 | |||
767d9f75e1 | |||
fe4dfb77e6 | |||
06bb45ba5d | |||
78da5c90c4 | |||
34c6ea1a8b | |||
7d680aeb87 | |||
d2d761deb5 | |||
f4ef0ce63b | |||
c324ce2bca | |||
b48d89f22e |
177
.github/linters/alibaba-checkstyle.xml
vendored
Normal file
177
.github/linters/alibaba-checkstyle.xml
vendored
Normal file
@ -0,0 +1,177 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE module PUBLIC
|
||||
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
|
||||
"http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
|
||||
|
||||
<module name="Checker">
|
||||
<property name="severity" value="error"/>
|
||||
|
||||
<!-- 检查文件是否以一个空行结束 -->
|
||||
<module name="NewlineAtEndOfFile"/>
|
||||
|
||||
<!-- 文件长度不超过1500行 -->
|
||||
<module name="FileLength">
|
||||
<property name="max" value="1500"/>
|
||||
</module>
|
||||
|
||||
<!-- 每行不超过140个字符 -->
|
||||
<module name="LineLength">
|
||||
<property name="max" value="120" />
|
||||
</module>
|
||||
|
||||
<!-- 每个java文件一个语法树 -->
|
||||
<module name="TreeWalker">
|
||||
<!-- import检查-->
|
||||
<!-- 检查是否从非法的包中导入了类 -->
|
||||
<module name="IllegalImport"/>
|
||||
<!-- 检查是否导入了多余的包 -->
|
||||
<module name="RedundantImport"/>
|
||||
<!-- 没用的import检查,比如:1.没有被用到2.重复的3.import java.lang的4.import 与该类在同一个package的 -->
|
||||
<module name="UnusedImports" />
|
||||
|
||||
<!-- 注释检查 -->
|
||||
<!-- 检查构造函数的javadoc -->
|
||||
<module name="JavadocType">
|
||||
<property name="allowUnknownTags" value="true"/>
|
||||
<message key="javadoc.missing" value="类注释:缺少Javadoc注释。"/>
|
||||
</module>
|
||||
|
||||
<!-- 命名检查 -->
|
||||
<!-- 局部的final变量,包括catch中的参数的检查 -->
|
||||
<module name="LocalFinalVariableName" />
|
||||
<!-- 局部的非final型的变量,包括catch中的参数的检查 -->
|
||||
<module name="LocalVariableName" />
|
||||
<!-- 包名的检查(只允许小写字母),默认^[a-z]+(\.[a-zA-Z_][a-zA-Z_0-9_]*)*$ -->
|
||||
<module name="PackageName">
|
||||
<property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$" />
|
||||
<message key="name.invalidPattern" value="包名 ''{0}'' 要符合 ''{1}''格式."/>
|
||||
</module>
|
||||
<!-- 仅仅是static型的变量(不包括static final型)的检查 -->
|
||||
<module name="StaticVariableName" />
|
||||
<!-- Class或Interface名检查,默认^[A-Z][a-zA-Z0-9]*$-->
|
||||
<module name="TypeName">
|
||||
<property name="severity" value="warning"/>
|
||||
<message key="name.invalidPattern" value="名称 ''{0}'' 要符合 ''{1}''格式."/>
|
||||
</module>
|
||||
<!-- 非static型变量的检查 -->
|
||||
<module name="MemberName" />
|
||||
<!-- 方法名的检查 -->
|
||||
<module name="MethodName" />
|
||||
<!-- 方法的参数名 -->
|
||||
<module name="ParameterName " />
|
||||
<!-- 常量名的检查(只允许大写),默认^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$ -->
|
||||
<module name="ConstantName" />
|
||||
|
||||
<!-- 定义检查 -->
|
||||
<!-- 检查数组类型定义的样式 -->
|
||||
<module name="ArrayTypeStyle"/>
|
||||
<!-- 检查long型定义是否有大写的“L” -->
|
||||
<module name="UpperEll"/>
|
||||
|
||||
<!-- 长度检查 -->
|
||||
<!-- 方法的参数个数不超过5个。 并且不对构造方法进行检查-->
|
||||
<module name="ParameterNumber">
|
||||
<property name="max" value="8" />
|
||||
<property name="ignoreOverriddenMethods" value="true"/>
|
||||
<property name="tokens" value="METHOD_DEF" />
|
||||
</module>
|
||||
|
||||
<!-- 空格检查-->
|
||||
<!-- 方法名后跟左圆括号"(" -->
|
||||
<module name="MethodParamPad" />
|
||||
<!-- 在类型转换时,不允许左圆括号右边有空格,也不允许与右圆括号左边有空格 -->
|
||||
<module name="TypecastParenPad" />
|
||||
<!-- 检查在某个特定关键字之后应保留空格 -->
|
||||
<module name="NoWhitespaceAfter"/>
|
||||
<!-- 检查在某个特定关键字之前应保留空格 -->
|
||||
<module name="NoWhitespaceBefore"/>
|
||||
<!-- 操作符换行策略检查 -->
|
||||
<module name="OperatorWrap"/>
|
||||
<!-- 圆括号空白 -->
|
||||
<module name="ParenPad"/>
|
||||
<!-- 检查分隔符是否在空白之后 -->
|
||||
<module name="WhitespaceAfter"/>
|
||||
<!-- 检查分隔符周围是否有空白 -->
|
||||
<module name="WhitespaceAround"/>
|
||||
|
||||
<!-- 修饰符检查 -->
|
||||
<!-- 检查修饰符的顺序是否遵照java语言规范,默认public、protected、private、abstract、static、final、transient、volatile、synchronized、native、strictfp -->
|
||||
<module name="ModifierOrder"/>
|
||||
<!-- 检查接口和annotation中是否有多余修饰符,如接口方法不必使用public -->
|
||||
<module name="RedundantModifier"/>
|
||||
|
||||
<!-- 代码块检查 -->
|
||||
<!-- 检查是否有嵌套代码块 -->
|
||||
<module name="AvoidNestedBlocks"/>
|
||||
<!-- 检查是否有空代码块 -->
|
||||
<module name="EmptyBlock"/>
|
||||
<!-- 检查左大括号位置 -->
|
||||
<module name="LeftCurly"/>
|
||||
<!-- 检查代码块是否缺失{} -->
|
||||
<module name="NeedBraces"/>
|
||||
<!-- 检查右大括号位置 -->
|
||||
<module name="RightCurly"/>
|
||||
|
||||
<!-- 代码检查 -->
|
||||
<!-- 检查空的代码段 -->
|
||||
<module name="EmptyStatement"/>
|
||||
<!-- 检查在重写了equals方法后是否重写了hashCode方法 -->
|
||||
<module name="EqualsHashCode"/>
|
||||
<!-- 检查局部变量或参数是否隐藏了类中的变量 -->
|
||||
<module name="HiddenField">
|
||||
<property name="tokens" value="VARIABLE_DEF"/>
|
||||
</module>
|
||||
<!-- 检查子表达式中是否有赋值操作 -->
|
||||
<module name="InnerAssignment"/>
|
||||
<!-- 检查switch语句是否有default -->
|
||||
<module name="MissingSwitchDefault"/>
|
||||
<!-- 检查是否有过度复杂的布尔表达式 -->
|
||||
<module name="SimplifyBooleanExpression"/>
|
||||
<!-- 检查是否有过于复杂的布尔返回代码段 -->
|
||||
<module name="SimplifyBooleanReturn"/>
|
||||
|
||||
<!-- 类设计检查 -->
|
||||
<!-- 检查类是否为扩展设计l -->
|
||||
<!-- 检查只有private构造函数的类是否声明为final -->
|
||||
<module name="FinalClass"/>
|
||||
<!-- 检查接口是否仅定义类型 -->
|
||||
<module name="InterfaceIsType"/>
|
||||
<!-- 检查类成员的可见度 检查类成员的可见性。只有static final 成员是public的
|
||||
除非在本检查的protectedAllowed和packagedAllowed属性中进行了设置-->
|
||||
<module name="VisibilityModifier">
|
||||
<property name="packageAllowed" value="true"/>
|
||||
<property name="protectedAllowed" value="true"/>
|
||||
</module>
|
||||
|
||||
<!-- 语法 -->
|
||||
<!-- String的比较不能用!= 和 == -->
|
||||
<module name="StringLiteralEquality"/>
|
||||
<!-- 限制for循环最多嵌套2层 -->
|
||||
<module name="NestedForDepth">
|
||||
<property name="max" value="2"/>
|
||||
</module>
|
||||
<!-- if最多嵌套3层 -->
|
||||
<module name="NestedIfDepth">
|
||||
<property name="max" value="3"/>
|
||||
</module>
|
||||
<!-- 检查未被注释的main方法,排除以Appllication结尾命名的类 -->
|
||||
<module name="UncommentedMain">
|
||||
<property name="excludedClasses" value=".*[Application,Test]$"/>
|
||||
</module>
|
||||
<!-- 禁止使用System.out.println -->
|
||||
<module name="Regexp">
|
||||
<property name="format" value="System\.out\.println"/>
|
||||
<property name="illegalPattern" value="true"/>
|
||||
</module>
|
||||
<!--try catch 异常处理数量 3-->
|
||||
<module name="NestedTryDepth ">
|
||||
<property name="max" value="3"/>
|
||||
</module>
|
||||
<!-- clone方法必须调用了super.clone() -->
|
||||
<module name="SuperClone" />
|
||||
<!-- finalize 必须调用了super.finalize() -->
|
||||
<module name="SuperFinalize" />
|
||||
|
||||
|
||||
</module>
|
||||
</module>
|
15
.github/workflows/code-check.yaml
vendored
15
.github/workflows/code-check.yaml
vendored
@ -5,12 +5,14 @@ on:
|
||||
branches:
|
||||
- master
|
||||
pull_request:
|
||||
- develop
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: 代码检查
|
||||
runs-on: linux_amd64
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
@ -21,12 +23,13 @@ jobs:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
# super-linter needs the full git history to get the
|
||||
# list of files that changed across commits
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Super-linter
|
||||
uses: super-linter/super-linter@v6.3.1
|
||||
env:
|
||||
# To report GitHub Actions status checks
|
||||
GITHUB_TOKEN: ${{ secrets.MyGitHubToken }}
|
||||
GITHUB_TOKEN: ${{ secrets.MyGitHubToken }}
|
||||
VALIDATE_ALL_CODEBASE: false
|
||||
IGNORE_GITIGNORED_FILES: true
|
||||
VALIDATE_JAVA: true
|
||||
JAVA_FILE_NAME: alibaba-checkstyle.xml
|
24
Jenkinsfile
vendored
24
Jenkinsfile
vendored
@ -1,24 +0,0 @@
|
||||
pipeline {
|
||||
environment {
|
||||
QODANA_TOKEN=credentials('qodana-token')
|
||||
}
|
||||
agent {
|
||||
docker {
|
||||
args '''
|
||||
-v "${WORKSPACE}":/data/project
|
||||
--entrypoint=""
|
||||
'''
|
||||
image 'jetbrains/qodana-jvm'
|
||||
}
|
||||
}
|
||||
stages {
|
||||
stage('Qodana') {
|
||||
when {
|
||||
branch 'feature'
|
||||
}
|
||||
steps {
|
||||
sh '''qodana'''
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
41
qodana.yaml
41
qodana.yaml
@ -1,41 +0,0 @@
|
||||
#-------------------------------------------------------------------------------#
|
||||
# Qodana analysis is configured by qodana.yaml file #
|
||||
# https://www.jetbrains.com/help/qodana/qodana-yaml.html #
|
||||
#-------------------------------------------------------------------------------#
|
||||
version: "1.0"
|
||||
#Specify inspection profile for code analysis
|
||||
profile:
|
||||
name: qodana.starter
|
||||
#Enable inspections
|
||||
#include:
|
||||
# - name: <SomeEnabledInspectionId>
|
||||
#Disable inspections
|
||||
#exclude:
|
||||
# - name: <SomeDisabledInspectionId>
|
||||
# paths:
|
||||
# - <path/where/not/run/inspection>
|
||||
projectJDK: 17 #(Applied in CI/CD pipeline)
|
||||
#Execute shell command before Qodana execution (Applied in CI/CD pipeline)
|
||||
#bootstrap: sh ./prepare-qodana.sh
|
||||
#Install IDE plugins before Qodana execution (Applied in CI/CD pipeline)
|
||||
#plugins:
|
||||
# - id: <plugin.id> #(plugin id can be found at https://plugins.jetbrains.com)
|
||||
#Specify Qodana linter for analysis (Applied in CI/CD pipeline)
|
||||
linter: jetbrains/qodana-jvm:latest
|
||||
include:
|
||||
- name: ClassLoaderInstantiation
|
||||
- name: NonThreadSafeLazyInitialization
|
||||
- name: DoubleBraceInitialization
|
||||
- name: JavaLangImport
|
||||
- name: UNUSED_IMPORT
|
||||
- name: SamePackageImport
|
||||
- name: ArgNamesErrorsInspection
|
||||
- name: ArgNamesWarningsInspection
|
||||
- name: AssertMessageNotString
|
||||
- name: EqualsCalledOnEnumConstant
|
||||
- name: ListIndexOfReplaceableByContains
|
||||
- name: ObjectsEqualsCanBeSimplified
|
||||
- name: SizeReplaceableByIsEmpty
|
||||
- name: ArrayCreationWithoutNewKeyword
|
||||
exclude:
|
||||
- name: VulnerableLibrariesLocal
|
@ -4,10 +4,22 @@ import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||
|
||||
/**
|
||||
* 主类
|
||||
*
|
||||
* @since v1.0.0-SNAPSHOT
|
||||
* @version 1.0.0-SNAPSHOT
|
||||
* @author xiao_lfeng
|
||||
*/
|
||||
@SpringBootApplication
|
||||
@EnableScheduling
|
||||
public class JslOrganizeInternalOaApplication {
|
||||
// debug
|
||||
|
||||
/**
|
||||
* 入口
|
||||
*
|
||||
* @param args 参数
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(JslOrganizeInternalOaApplication.class, args);
|
||||
}
|
||||
|
@ -3,8 +3,8 @@ package com.jsl.oa;
|
||||
import com.google.gson.Gson;
|
||||
import com.jsl.oa.common.constant.SafeConstants;
|
||||
import com.jsl.oa.mapper.InfoMapper;
|
||||
import com.jsl.oa.model.doData.ConfigDO;
|
||||
import com.jsl.oa.model.voData.business.InfoAboutSecurityKey;
|
||||
import com.jsl.oa.model.dodata.ConfigDO;
|
||||
import com.jsl.oa.model.vodata.business.InfoAboutSecurityKey;
|
||||
import com.jsl.oa.utils.Processing;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.beans.factory.SmartInitializingSingleton;
|
||||
@ -21,6 +21,7 @@ import java.sql.Timestamp;
|
||||
* @see org.springframework.boot.SpringApplication
|
||||
* @see org.springframework.boot.autoconfigure.SpringBootApplication
|
||||
* @since v1.1.0
|
||||
* @author xiaofeng
|
||||
*/
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
@ -28,6 +29,12 @@ public class JslOrganizeInternalOaRunnerApplication implements SmartInitializing
|
||||
private final Gson gson = new Gson();
|
||||
private final InfoMapper infoMapper;
|
||||
|
||||
|
||||
/**
|
||||
* <h1>获取安全密钥</h1>
|
||||
* <hr/>
|
||||
* 从数据库中获取安全密钥
|
||||
*/
|
||||
@Override
|
||||
public void afterSingletonsInstantiated() {
|
||||
// 获取数据库中的 SecurityKey
|
||||
|
@ -6,9 +6,9 @@ import com.jsl.oa.dao.PermissionDAO;
|
||||
import com.jsl.oa.dao.RoleDAO;
|
||||
import com.jsl.oa.dao.UserDAO;
|
||||
import com.jsl.oa.mapper.UserMapper;
|
||||
import com.jsl.oa.model.doData.RoleDO;
|
||||
import com.jsl.oa.model.doData.RoleUserDO;
|
||||
import com.jsl.oa.model.doData.UserDO;
|
||||
import com.jsl.oa.model.dodata.RoleDO;
|
||||
import com.jsl.oa.model.dodata.RoleUserDO;
|
||||
import com.jsl.oa.model.dodata.UserDO;
|
||||
import com.jsl.oa.utils.BaseResponse;
|
||||
import com.jsl.oa.utils.ErrorCode;
|
||||
import com.jsl.oa.utils.Processing;
|
||||
@ -61,7 +61,9 @@ public class AnnotationsAspect {
|
||||
public Object checkUserHasPermission(@NotNull ProceedingJoinPoint pjp) throws Throwable {
|
||||
log.info("用户权限检查");
|
||||
// 获取 HttpServletRequest 对象
|
||||
HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
|
||||
HttpServletRequest request =
|
||||
((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes()))
|
||||
.getRequest();
|
||||
|
||||
// 获取注解方法
|
||||
CheckUserHasPermission checkUserHasPermission = getCheckUserHasPermission(pjp);
|
||||
@ -90,17 +92,17 @@ public class AnnotationsAspect {
|
||||
} else {
|
||||
log.info("\t> 用户权限不足,检查是否是管理员");
|
||||
// 检查用户是管理员
|
||||
RoleUserDO roleUserDO = roleDAO.roleMapper.getRoleUserByUid(Processing.getAuthHeaderToUserId(request));
|
||||
if (roleUserDO != null) {
|
||||
RoleDO roleDO = roleDAO.roleMapper.getRoleByRoleName("admin");
|
||||
if (roleUserDO.getRid().equals(roleDO.getId())) {
|
||||
return pjp.proceed();
|
||||
} else {
|
||||
return ResultUtil.error(ErrorCode.NOT_PERMISSION);
|
||||
}
|
||||
} else {
|
||||
RoleUserDO roleUserDO = roleDAO.roleMapper
|
||||
.getRoleUserByUid(Processing.getAuthHeaderToUserId(request));
|
||||
if (roleUserDO == null) {
|
||||
return ResultUtil.error(ErrorCode.NOT_ADMIN);
|
||||
}
|
||||
RoleDO roleDO = roleDAO.roleMapper.getRoleByRoleName("admin");
|
||||
if (roleUserDO.getRid().equals(roleDO.getId())) {
|
||||
return pjp.proceed();
|
||||
} else {
|
||||
return ResultUtil.error(ErrorCode.NOT_PERMISSION);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return pjp.proceed();
|
||||
@ -115,7 +117,9 @@ public class AnnotationsAspect {
|
||||
public Object checkUserAbleToUse(ProceedingJoinPoint pjp) throws Throwable {
|
||||
log.info("检查用户是否有权限继续");
|
||||
// 获取 HttpServletRequest 对象
|
||||
HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
|
||||
HttpServletRequest request =
|
||||
((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes()))
|
||||
.getRequest();
|
||||
|
||||
// 获取注解方法
|
||||
CheckUserAbleToUse check = getCheckUserAbleToUse(pjp);
|
||||
|
@ -46,7 +46,9 @@ public class AuthControllerAspect {
|
||||
@Around("execution(* com.jsl.oa.controllers.*.*(..)) && !execution(* com.jsl.oa.controllers.IndexController.*(..))")
|
||||
public Object controllerAround(ProceedingJoinPoint pjp) throws Throwable {
|
||||
// 获取HttpServletRequest对象
|
||||
HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
|
||||
HttpServletRequest request =
|
||||
((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes()))
|
||||
.getRequest();
|
||||
|
||||
// 时间戳检查
|
||||
if (checkTimestamp(request)) {
|
||||
@ -66,21 +68,23 @@ public class AuthControllerAspect {
|
||||
* @return {@link Object}
|
||||
* @throws Throwable 异常
|
||||
*/
|
||||
@Around("execution(* com.jsl.oa.controllers.*.*(..)) " +
|
||||
"&& !execution(* com.jsl.oa.controllers.AuthController.authSendEmailCode(..))" +
|
||||
"&& !execution(* com.jsl.oa.controllers.AuthController.authLoginByEmail(..))" +
|
||||
"&& !execution(* com.jsl.oa.controllers.AuthController.authForgetPassword(..))" +
|
||||
"&& !execution(* com.jsl.oa.controllers.AuthController.authLogin(..))" +
|
||||
"&& !execution(* com.jsl.oa.controllers.AuthController.authRegister(..)) " +
|
||||
"&& !execution(* com.jsl.oa.controllers.IndexController.*(..)) " +
|
||||
"&& !execution(* com.jsl.oa.controllers.CustomController.*(..)) " +
|
||||
"&& !execution(* com.jsl.oa.controllers.InfoController.infoGetHeaderImage(..)) " +
|
||||
"&& !execution(* com.jsl.oa.controllers.InfoController.infoGetHeaderUser(..))" +
|
||||
"&& !execution(* com.jsl.oa.controllers.ProjectController.*(..))" +
|
||||
"&& !execution(* com.jsl.oa.controllers.TagController.*(..))")
|
||||
@Around("execution(* com.jsl.oa.controllers.*.*(..)) "
|
||||
+ "&& !execution(* com.jsl.oa.controllers.AuthController.authSendEmailCode(..))"
|
||||
+ "&& !execution(* com.jsl.oa.controllers.AuthController.authLoginByEmail(..))"
|
||||
+ "&& !execution(* com.jsl.oa.controllers.AuthController.authForgetPassword(..))"
|
||||
+ "&& !execution(* com.jsl.oa.controllers.AuthController.authLogin(..))"
|
||||
+ "&& !execution(* com.jsl.oa.controllers.AuthController.authRegister(..)) "
|
||||
+ "&& !execution(* com.jsl.oa.controllers.IndexController.*(..)) "
|
||||
+ "&& !execution(* com.jsl.oa.controllers.CustomController.*(..)) "
|
||||
+ "&& !execution(* com.jsl.oa.controllers.InfoController.infoGetHeaderImage(..)) "
|
||||
+ "&& !execution(* com.jsl.oa.controllers.InfoController.infoGetHeaderUser(..))"
|
||||
+ "&& !execution(* com.jsl.oa.controllers.ProjectController.*(..))"
|
||||
+ "&& !execution(* com.jsl.oa.controllers.TagController.*(..))")
|
||||
public Object tokenControllerAround(ProceedingJoinPoint pjp) throws Throwable {
|
||||
// 获取 HttpServletRequest 对象
|
||||
HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
|
||||
HttpServletRequest request =
|
||||
((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes()))
|
||||
.getRequest();
|
||||
|
||||
// 检查 Token 是否有效
|
||||
String token = request.getHeader("Authorization");
|
||||
@ -121,6 +125,7 @@ public class AuthControllerAspect {
|
||||
long nowTimestamp = System.currentTimeMillis();
|
||||
|
||||
// 时间误差允许前后五秒钟
|
||||
return nowTimestamp - Long.parseLong(getTimestamp) <= 10000 && nowTimestamp - Long.parseLong(getTimestamp) >= -10000;
|
||||
return nowTimestamp - Long.parseLong(getTimestamp) <= 10000
|
||||
&& nowTimestamp - Long.parseLong(getTimestamp) >= -10000;
|
||||
}
|
||||
}
|
||||
|
@ -7,9 +7,9 @@ import lombok.Getter;
|
||||
* <hr/>
|
||||
* 业务常量
|
||||
*
|
||||
* @since v1.1.0
|
||||
* @version v1.1.0
|
||||
* @author xiao_lfeng
|
||||
* @version v1.1.0
|
||||
* @since v1.1.0
|
||||
*/
|
||||
@Getter
|
||||
public enum BusinessConstants {
|
||||
@ -21,6 +21,12 @@ public enum BusinessConstants {
|
||||
private final String value;
|
||||
private final String description;
|
||||
|
||||
/**
|
||||
* 创建一个具有指定值和描述的实例 {@code BusinessConstants}。
|
||||
*
|
||||
* @param value 常量的value
|
||||
* @param description 常量的描述
|
||||
*/
|
||||
BusinessConstants(String value, String description) {
|
||||
this.value = value;
|
||||
this.description = description;
|
||||
|
@ -27,12 +27,21 @@ public class MailConfiguration {
|
||||
@Value("${spring.mail.password}")
|
||||
private String emailPassword;
|
||||
|
||||
/**
|
||||
* 配置并返回一个用于发送邮件的JavaMailSender实例。
|
||||
* <p>
|
||||
* 此方法使用SMTP协议设置邮件发送器,启用SMTP认证和STARTTLS。同时,为了便于故障排除,
|
||||
* 开启了邮件调试功能,以记录邮件发送过程。配置细节如主机、端口、用户名和密码根据应用程序的属性进行设置。
|
||||
* </p>
|
||||
*
|
||||
* @return 配置好的JavaMailSender实例,可用于发送邮件。
|
||||
*/
|
||||
@Bean
|
||||
public JavaMailSender javaMailSender() {
|
||||
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
|
||||
mailSender.setDefaultEncoding("UTF-8");
|
||||
mailSender.setHost(emailHost);
|
||||
mailSender.setPort(25); // 你的邮件服务器端口
|
||||
mailSender.setPort(25);
|
||||
mailSender.setUsername(emailUsername);
|
||||
mailSender.setPassword(emailPassword);
|
||||
|
||||
|
@ -8,19 +8,44 @@ import javax.servlet.*;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
|
||||
/**
|
||||
* <h1>CORS过滤器</h1>
|
||||
* <hr/>
|
||||
* 用于处理跨域请求
|
||||
*
|
||||
* @version v1.1.0
|
||||
* @since v1.1.0
|
||||
* @see Filter
|
||||
* @author xiao_lfeng
|
||||
* @version v1.1.0
|
||||
* @see Filter
|
||||
* @since v1.1.0
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class CorsFilter implements Filter {
|
||||
|
||||
/**
|
||||
* 设置请求头
|
||||
*
|
||||
* @param response 响应
|
||||
*/
|
||||
protected static void setHeader(@NotNull HttpServletResponse response) {
|
||||
// 允许跨域请求
|
||||
response.setHeader("Access-Control-Allow-Origin", "*");
|
||||
response.setHeader("Access-Control-Allow-Credentials", "true");
|
||||
//允许请求方式
|
||||
response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
|
||||
response.setHeader("Access-Control-Max-Age", "3600");
|
||||
//需要放行header头部字段 如需鉴权字段,自行添加,如Authorization
|
||||
response.setHeader("Access-Control-Allow-Headers", "*");
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于处理跨域请求
|
||||
*
|
||||
* @param req servlet请求
|
||||
* @param res servlet响应
|
||||
* @param chain 过滤器链
|
||||
*/
|
||||
@Override
|
||||
public void doFilter(@NotNull ServletRequest req, ServletResponse res, FilterChain chain) {
|
||||
// 请求头处理
|
||||
@ -36,24 +61,21 @@ public class CorsFilter implements Filter {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化
|
||||
*
|
||||
* @param filterConfig 过滤器配置
|
||||
*/
|
||||
@Override
|
||||
public void init(FilterConfig filterConfig) {
|
||||
}
|
||||
|
||||
/**
|
||||
* 销毁
|
||||
*/
|
||||
@Override
|
||||
public void destroy() {
|
||||
Filter.super.destroy();
|
||||
}
|
||||
|
||||
protected static void setHeader(@NotNull HttpServletResponse response) {
|
||||
// 允许跨域请求
|
||||
response.setHeader("Access-Control-Allow-Origin", "*");
|
||||
response.setHeader("Access-Control-Allow-Credentials", "true");
|
||||
//允许请求方式
|
||||
response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
|
||||
response.setHeader("Access-Control-Max-Age", "3600");
|
||||
//需要放行header头部字段 如需鉴权字段,自行添加,如Authorization
|
||||
response.setHeader("Access-Control-Allow-Headers", "*");
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -63,7 +63,10 @@ public class JwtFilter extends BasicHttpAuthenticationFilter {
|
||||
* @throws Exception 异常
|
||||
*/
|
||||
@Override
|
||||
protected boolean onAccessDenied(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception {
|
||||
protected boolean onAccessDenied(
|
||||
ServletRequest request,
|
||||
ServletResponse response,
|
||||
Object mappedValue) throws Exception {
|
||||
// 添加跨域禁止
|
||||
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
|
||||
CorsFilter.setHeader(httpServletResponse);
|
||||
@ -80,7 +83,6 @@ public class JwtFilter extends BasicHttpAuthenticationFilter {
|
||||
} else {
|
||||
// 解析Bearer后面的令牌
|
||||
token = token.replace("Bearer ", "");
|
||||
System.out.println(token);
|
||||
if (JwtUtil.verify(token)) {
|
||||
// Token验证通过
|
||||
return true;
|
||||
|
@ -29,6 +29,11 @@ public class RedisConfiguration {
|
||||
@Value("${spring.redis.password}")
|
||||
private String password;
|
||||
|
||||
/**
|
||||
* <h2>JedisConnectionFactory</h2>
|
||||
* <hr/>
|
||||
* 用于连接Redis
|
||||
*/
|
||||
@Bean
|
||||
public JedisConnectionFactory jedisConnectionFactory() {
|
||||
RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(host, port);
|
||||
@ -36,6 +41,11 @@ public class RedisConfiguration {
|
||||
return new JedisConnectionFactory(config);
|
||||
}
|
||||
|
||||
/**
|
||||
* <h2>RedisTemplate</h2>
|
||||
* <hr/>
|
||||
* 用于配置RedisTemplate
|
||||
*/
|
||||
@Bean
|
||||
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
|
||||
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
|
||||
|
@ -89,4 +89,4 @@ public abstract class RedisOperating<R> {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,35 +1,53 @@
|
||||
package com.jsl.oa.config.shiro;
|
||||
|
||||
import org.apache.shiro.authc.AuthenticationException;
|
||||
import org.apache.shiro.authc.AuthenticationInfo;
|
||||
import org.apache.shiro.authc.AuthenticationToken;
|
||||
import org.apache.shiro.authz.AuthorizationInfo;
|
||||
import org.apache.shiro.realm.AuthorizingRealm;
|
||||
import org.apache.shiro.subject.PrincipalCollection;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
||||
/**
|
||||
* 这是一个Shiro的Realm,它负责身份验证和授权。
|
||||
* 它扩展了AuthorizingRealm类,该类提供了默认的授权和身份验证实现。
|
||||
* <p>
|
||||
* doGetAuthenticationInfo()方法负责验证用户,
|
||||
* doGetAuthorizationInfo()方法负责检索用户的授权信息。
|
||||
*
|
||||
* @author jsl
|
||||
*/
|
||||
public class MyRealm extends AuthorizingRealm {
|
||||
|
||||
/**
|
||||
* 授权
|
||||
* 这将负责验证用户。
|
||||
* 它接受一个AuthenticationToken作为参数,该参数表示用户的<EFBFBD><EFBFBD>据,
|
||||
* 并返回一个AuthenticationInfo对象,该对象包含用户的身份验证详细信息。
|
||||
* <p>
|
||||
* 在这种实现中,该方法总是返回null,表示身份验证不受支持。
|
||||
* 这可以在子类中被重写以支持身份验证。
|
||||
*
|
||||
* @return 授权信息
|
||||
*/
|
||||
@Override
|
||||
protected AuthorizationInfo doGetAuthorizationInfo(@NotNull PrincipalCollection principals) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 认证
|
||||
*
|
||||
* @param authenticationToken 令牌
|
||||
* @return 认证信息
|
||||
* @throws AuthenticationException 认证异常
|
||||
* @param authenticationToken 用户的<EFBFBD><EFBFBD>据
|
||||
* @return null,表示身份验证不受支持
|
||||
*/
|
||||
@Override
|
||||
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 这将负责检索用户的授权信息。
|
||||
* 它接受一个PrincipalCollection作为参数,该参数表示用户的主体,
|
||||
* 并返回一个AuthorizationInfo对象,该对象包含用户的授权详细信息。
|
||||
* <p>
|
||||
* 在这种实现中,该方法总是返回null,表示授权不受支持。
|
||||
* 这可以在子类中被重写以支持授权。
|
||||
*
|
||||
* @param principals 用户的主体
|
||||
* @return null,表示授权不受支持
|
||||
*/
|
||||
@Override
|
||||
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -2,7 +2,6 @@ package com.jsl.oa.config.shiro;
|
||||
|
||||
import com.jsl.oa.config.filter.CorsFilter;
|
||||
import com.jsl.oa.config.filter.JwtFilter;
|
||||
import com.jsl.oa.services.UserService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
|
||||
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
|
||||
@ -14,12 +13,25 @@ import javax.servlet.Filter;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 这是一个Shiro的Realm,它负责身份验证和授权。
|
||||
* 它扩展了AuthorizingRealm类,该类提供了默认的授权和身份验证实现。
|
||||
*
|
||||
* @since v1.0.0-SNAPSHOT
|
||||
* @version v1.0.0-SNAPSHOT
|
||||
* @author xiao_lfeng
|
||||
*/
|
||||
@Configuration
|
||||
@RequiredArgsConstructor
|
||||
public class ShiroConfiguration {
|
||||
|
||||
private final UserService userService;
|
||||
|
||||
/**
|
||||
* 配置Shiro过滤器工厂Bean,设置安全管理器、过滤器规则以及自定义过滤器。
|
||||
* 此方法用于配置Shiro的安全管理器,定义URL模式的过滤器链,并添加自定义的JWT和CORS过滤器来处理认证和跨域请求。
|
||||
*
|
||||
* @param securityManager 安全管理器,由Shiro过滤器工厂Bean使用。
|
||||
* @return 配置好的ShiroFilterFactoryBean实例。
|
||||
*/
|
||||
@Bean
|
||||
public ShiroFilterFactoryBean shiroFilterFactoryBean(DefaultWebSecurityManager securityManager) {
|
||||
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
|
||||
@ -27,10 +39,9 @@ public class ShiroConfiguration {
|
||||
|
||||
// 配置过滤器规则
|
||||
Map<String, String> filterChainDefinitionMap = setFilterChain();
|
||||
|
||||
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
|
||||
|
||||
// 设置未登陆响应接口
|
||||
// 设置未登录响应接口
|
||||
shiroFilterFactoryBean.setUnauthorizedUrl("/unauthorized");
|
||||
|
||||
// 添加JWT过滤器
|
||||
@ -41,6 +52,13 @@ public class ShiroConfiguration {
|
||||
return shiroFilterFactoryBean;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建并配置安全管理器,使用自定义领域。
|
||||
* 此方法设置安全管理器使用自定义领域进行认证和授权。
|
||||
*
|
||||
* @param realm 自定义领域,由安全管理器使用。
|
||||
* @return 配置好的DefaultWebSecurityManager实例。
|
||||
*/
|
||||
@Bean
|
||||
public DefaultWebSecurityManager securityManager(MyRealm realm) {
|
||||
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
|
||||
@ -48,28 +66,39 @@ public class ShiroConfiguration {
|
||||
return securityManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建用于认证和授权的自定义领域实例。
|
||||
* 此方法为应用提供一个包含用户认证和授权逻辑的自定义领域。
|
||||
*
|
||||
* @return MyRealm的一个实例。
|
||||
*/
|
||||
@Bean
|
||||
public MyRealm myRealm() {
|
||||
return new MyRealm();
|
||||
}
|
||||
|
||||
/**
|
||||
* 定义URL模式和相应过滤器的过滤器链。
|
||||
* 此静态方法将URL模式映射到过滤器名称,指定哪些URL可以匿名访问,哪些需要认证。它允许对应用程序不同部分的访问进行细粒度控制。
|
||||
*
|
||||
* @return URL模式到过滤器名称的映射。
|
||||
*/
|
||||
@NotNull
|
||||
private static Map<String, String> setFilterChain() {
|
||||
Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
|
||||
filterChainDefinitionMap.put("/auth/**/**", "anon"); // 登录接口允许匿名访问
|
||||
filterChainDefinitionMap.put("/unauthorized", "anon"); // 未授权接口允许匿名访问
|
||||
filterChainDefinitionMap.put("/", "anon"); // 首页允许匿名访问
|
||||
filterChainDefinitionMap.put("/info/header-image/get", "anon"); // 信息接口允许匿名访问
|
||||
filterChainDefinitionMap.put("/info/header-user/get", "anon"); // 信息接口允许匿名访问
|
||||
filterChainDefinitionMap.put("/project/header/get", "anon"); // 信息接口允许匿名访问
|
||||
filterChainDefinitionMap.put("/project/get", "anon"); // 信息接口允许匿名访问
|
||||
filterChainDefinitionMap.put("/project/get/custom", "anon"); // 游客获取项目允许匿名访问
|
||||
filterChainDefinitionMap.put("/project/add", "anon"); // 信息接口允许匿名访问
|
||||
filterChainDefinitionMap.put("/project/work/add", "anon"); // 信息接口允许匿名访问
|
||||
filterChainDefinitionMap.put("/tags/project/list", "anon"); // 信息接口允许匿名访问
|
||||
filterChainDefinitionMap.put("/module/add", "anon"); // 信息接口允许匿名访问
|
||||
filterChainDefinitionMap.put("/**/**", "authc"); // 其他接口一律拦截(需要Token)
|
||||
|
||||
filterChainDefinitionMap.put("/auth/**/**", "anon");
|
||||
filterChainDefinitionMap.put("/unauthorized", "anon");
|
||||
filterChainDefinitionMap.put("/", "anon");
|
||||
filterChainDefinitionMap.put("/info/header-image/get", "anon");
|
||||
filterChainDefinitionMap.put("/info/header-user/get", "anon");
|
||||
filterChainDefinitionMap.put("/project/header/get", "anon");
|
||||
filterChainDefinitionMap.put("/project/get", "anon");
|
||||
filterChainDefinitionMap.put("/project/get/custom", "anon");
|
||||
filterChainDefinitionMap.put("/project/add", "anon");
|
||||
filterChainDefinitionMap.put("/project/work/add", "anon");
|
||||
filterChainDefinitionMap.put("/tags/project/list", "anon");
|
||||
filterChainDefinitionMap.put("/module/add", "anon");
|
||||
filterChainDefinitionMap.put("/**/**", "authc");
|
||||
|
||||
return filterChainDefinitionMap;
|
||||
}
|
||||
|
@ -1,9 +1,9 @@
|
||||
package com.jsl.oa.controllers;
|
||||
|
||||
import com.jsl.oa.model.voData.UserChangePasswordVO;
|
||||
import com.jsl.oa.model.voData.UserForgetPasswordVO;
|
||||
import com.jsl.oa.model.voData.UserLoginVO;
|
||||
import com.jsl.oa.model.voData.UserRegisterVO;
|
||||
import com.jsl.oa.model.vodata.UserChangePasswordVO;
|
||||
import com.jsl.oa.model.vodata.UserForgetPasswordVO;
|
||||
import com.jsl.oa.model.vodata.UserLoginVO;
|
||||
import com.jsl.oa.model.vodata.UserRegisterVO;
|
||||
import com.jsl.oa.services.AuthService;
|
||||
import com.jsl.oa.utils.BaseResponse;
|
||||
import com.jsl.oa.utils.ErrorCode;
|
||||
@ -24,6 +24,7 @@ import java.util.regex.Pattern;
|
||||
* <hr/>
|
||||
* 用户认证控制器,包含用户注册、用户登录、用户登出接口
|
||||
*
|
||||
* @author 筱锋xiao_lfeng|176yunxuan
|
||||
* @version v1.1.0
|
||||
* @see AuthService
|
||||
* @see UserRegisterVO
|
||||
@ -33,7 +34,6 @@ import java.util.regex.Pattern;
|
||||
* @see Processing
|
||||
* @see ResultUtil
|
||||
* @since v1.0.0
|
||||
* @author 筱锋xiao_lfeng|176yunxuan
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@ -51,7 +51,10 @@ public class AuthController {
|
||||
* @since v1.0.0
|
||||
*/
|
||||
@PostMapping("/auth/register")
|
||||
public BaseResponse authRegister(@RequestBody @Validated UserRegisterVO userRegisterVO, @NotNull BindingResult bindingResult) {
|
||||
public BaseResponse authRegister(
|
||||
@RequestBody @Validated UserRegisterVO userRegisterVO,
|
||||
@NotNull BindingResult bindingResult
|
||||
) {
|
||||
log.info("请求接口[POST]: /auth/register");
|
||||
// 判断是否有参数错误
|
||||
if (bindingResult.hasErrors()) {
|
||||
@ -72,7 +75,10 @@ public class AuthController {
|
||||
* @since v1.0.0
|
||||
*/
|
||||
@PostMapping("/auth/login")
|
||||
public BaseResponse authLogin(@RequestBody @Validated UserLoginVO userLoginVO, @NotNull BindingResult bindingResult) {
|
||||
public BaseResponse authLogin(
|
||||
@RequestBody @Validated UserLoginVO userLoginVO,
|
||||
@NotNull BindingResult bindingResult
|
||||
) {
|
||||
log.info("请求接口[POST]: /auth/login");
|
||||
|
||||
// 判断是否有参数错误
|
||||
@ -106,11 +112,21 @@ public class AuthController {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* <h1>通过电子邮件和验证码处理用户登录。</h1>
|
||||
* <hr/>
|
||||
* 此方法首先验证电子邮件格式,并检查提供的验证码是否为有效整数。
|
||||
* 如果验证通过,它尝试使用提供的电子邮件和验证码登录用户。
|
||||
*
|
||||
* @param email 用户尝试登录的电子邮件地址。
|
||||
* @param code 发送到用户电子邮件的验证码,用于身份验证。
|
||||
* @return {@link BaseResponse} 包含登录尝试的结果。这可以是带有登录详细信息的成功消息,
|
||||
* 或者指示出了什么问题(例如,参数无效、验证码错误)的错误消息。
|
||||
*/
|
||||
@GetMapping("/auth/login/email")
|
||||
public BaseResponse authLoginByEmail(@RequestParam String email, @RequestParam String code) {
|
||||
log.info("请求接口[GET]: /auth/login/email");
|
||||
if (email != null && code != null && !email.isEmpty() && !code.isEmpty()) {
|
||||
System.out.println("测试");
|
||||
if (Pattern.matches("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$", email)) {
|
||||
try {
|
||||
Integer integer = Integer.valueOf(code);
|
||||
@ -140,8 +156,23 @@ public class AuthController {
|
||||
return authService.authLogout(request);
|
||||
}
|
||||
|
||||
/**
|
||||
* <h2>修改密码</h2>
|
||||
* <hr/>
|
||||
* 修改密码
|
||||
*
|
||||
* @param userChangePasswordVO 用户修改密码信息
|
||||
* @param request HTTP请求
|
||||
* @param bindingResult 参数校验结果
|
||||
* @return {@link BaseResponse}
|
||||
* @since v1.1.0
|
||||
*/
|
||||
@PutMapping("/auth/password")
|
||||
public BaseResponse authChangePassword(@RequestBody @Validated UserChangePasswordVO userChangePasswordVO, HttpServletRequest request, @NotNull BindingResult bindingResult) {
|
||||
public BaseResponse authChangePassword(
|
||||
@RequestBody @Validated UserChangePasswordVO userChangePasswordVO,
|
||||
@NotNull BindingResult bindingResult,
|
||||
HttpServletRequest request
|
||||
) {
|
||||
log.info("请求接口[PUT]: /auth/password");
|
||||
// 判断是否有参数错误
|
||||
if (bindingResult.hasErrors()) {
|
||||
@ -150,8 +181,16 @@ public class AuthController {
|
||||
return authService.authChangePassword(request, userChangePasswordVO);
|
||||
}
|
||||
|
||||
/**
|
||||
* <h2>忘记密码</h2>
|
||||
* <hr/>
|
||||
* 忘记密码
|
||||
*/
|
||||
@PutMapping("auth/password/forget")
|
||||
public BaseResponse authForgetPassword(@RequestBody @Validated UserForgetPasswordVO userForgetPasswordVO, @NotNull BindingResult bindingResult) {
|
||||
public BaseResponse authForgetPassword(
|
||||
@RequestBody @Validated UserForgetPasswordVO userForgetPasswordVO,
|
||||
@NotNull BindingResult bindingResult
|
||||
) {
|
||||
log.info("请求接口[PUT]: /auth/password/forget");
|
||||
// 判断是否有参数错误
|
||||
if (bindingResult.hasErrors()) {
|
||||
|
@ -8,15 +8,30 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* @author xiaofeng
|
||||
* CustomController类实现ErrorController接口,处理错误和未授权请求。
|
||||
*
|
||||
* @author xiao_lfeng
|
||||
* @since v1.0.0-SNAPSHOT
|
||||
* @version 1.0.0-SNAPSHOT
|
||||
*/
|
||||
@RestController
|
||||
public class CustomController implements ErrorController {
|
||||
|
||||
/**
|
||||
* 处理错误请求,返回一个包含错误信息的ResponseEntity。
|
||||
*
|
||||
* @return 一个包含错误信息的ResponseEntity
|
||||
*/
|
||||
@RequestMapping("/error")
|
||||
public ResponseEntity<BaseResponse> handleError() {
|
||||
return ResultUtil.error("PageNotFound", 404, "请求资源不存在");
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理未授权请求,返回一个包含错误信息的ResponseEntity。
|
||||
*
|
||||
* @return 一个包含错误信息的ResponseEntity
|
||||
*/
|
||||
@RequestMapping("/unauthorized")
|
||||
public ResponseEntity<BaseResponse> handleUnauthorized() {
|
||||
return ResultUtil.error("Unauthorized", 401, "未授权");
|
||||
|
@ -9,15 +9,30 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
|
||||
/**
|
||||
* @author xiaofeng
|
||||
* IndexController类提供了JSL-OA系统的主入口,处理根路径"/"的GET请求。
|
||||
*
|
||||
* @author xiao_lfeng
|
||||
* @version v1.0.0-SNAPSHOT
|
||||
* @since v1.0.0-SNAPSHOT
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
public class IndexController {
|
||||
|
||||
/**
|
||||
* 使用@Value注解,Spring会自动注入Maven构建时间。
|
||||
*/
|
||||
@Value("${maven.timestamp}")
|
||||
private String timestamp;
|
||||
|
||||
/**
|
||||
* 处理根路径"/"的GET请求,返回一个包含欢迎信息和服务器状态的成功响应。
|
||||
* 在处理请求时,会记录一个info级别的日志信息。
|
||||
*
|
||||
* @return 一个包含欢迎信息和服务器状态的成功响应
|
||||
*/
|
||||
@RequestMapping("/")
|
||||
public BaseResponse index() {
|
||||
log.info("请求接口[GET]: /");
|
||||
@ -25,6 +40,4 @@ public class IndexController {
|
||||
newMap.put("timestamp", "构建时间:" + timestamp);
|
||||
return ResultUtil.success("欢迎使用JSL-OA系统,服务器处于正常状态", newMap);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.jsl.oa.controllers;
|
||||
|
||||
import com.jsl.oa.model.voData.business.info.CarouselVO;
|
||||
import com.jsl.oa.model.vodata.business.info.CarouselVO;
|
||||
import com.jsl.oa.services.InfoService;
|
||||
import com.jsl.oa.utils.BaseResponse;
|
||||
import com.jsl.oa.utils.ErrorCode;
|
||||
@ -20,7 +20,7 @@ import javax.servlet.http.HttpServletRequest;
|
||||
* <hr/>
|
||||
* 信息控制器,包含信息获取接口
|
||||
*
|
||||
* @author 筱锋xiao_lfeng
|
||||
* @author xiao_lfeng
|
||||
* @version v1.1.0
|
||||
* @since v1.1.0
|
||||
*/
|
||||
@ -28,16 +28,38 @@ import javax.servlet.http.HttpServletRequest;
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
public class InfoController {
|
||||
|
||||
/**
|
||||
* 信息服务
|
||||
*/
|
||||
private final InfoService infoService;
|
||||
|
||||
/**
|
||||
* 获取头部图片信息
|
||||
*
|
||||
* @param id 图片id
|
||||
* @return 图片信息
|
||||
*/
|
||||
@GetMapping("/info/header-image/get")
|
||||
public BaseResponse infoGetHeaderImage(@RequestParam(required = false) Integer id) {
|
||||
log.info("请求接口[GET]: /info/header-image/get");
|
||||
return infoService.getHeaderImage(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑头部图片信息
|
||||
*
|
||||
* @param carouselVO 图片信息
|
||||
* @param request 请求对象
|
||||
* @param bindingResult 数据校验结果
|
||||
* @return 编辑结果
|
||||
*/
|
||||
@PutMapping("/info/header-image/edit")
|
||||
public BaseResponse infoEditHeaderImage(@RequestBody @Validated CarouselVO carouselVO, HttpServletRequest request, @NotNull BindingResult bindingResult) {
|
||||
public BaseResponse infoEditHeaderImage(
|
||||
@RequestBody @Validated CarouselVO carouselVO,
|
||||
HttpServletRequest request,
|
||||
@NotNull BindingResult bindingResult
|
||||
) {
|
||||
log.info("请求接口[PUT]: /info/header-image/edit");
|
||||
// 参数校验
|
||||
if (bindingResult.hasErrors()) {
|
||||
@ -51,14 +73,33 @@ public class InfoController {
|
||||
return infoService.editHeaderImage(request, carouselVO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除头部图片信息
|
||||
*
|
||||
* @param id 图片id
|
||||
* @param request 请求对象
|
||||
* @return 删除结果
|
||||
*/
|
||||
@DeleteMapping("/info/header-image/del")
|
||||
public BaseResponse infoDelHeaderImage(@RequestParam Integer id, HttpServletRequest request) {
|
||||
log.info("请求接口[DELETE]: /info/header-image/del");
|
||||
return infoService.delHeaderImage(request, id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加头部图片信息
|
||||
*
|
||||
* @param carouselVO 图片信息
|
||||
* @param request 请求对象
|
||||
* @param bindingResult 数据校验结果
|
||||
* @return 添加结果
|
||||
*/
|
||||
@PostMapping("/info/header-image/add")
|
||||
public BaseResponse infoAddHeaderImage(@RequestBody @Validated CarouselVO carouselVO, HttpServletRequest request, @NotNull BindingResult bindingResult) {
|
||||
public BaseResponse infoAddHeaderImage(
|
||||
@RequestBody @Validated CarouselVO carouselVO,
|
||||
HttpServletRequest request,
|
||||
@NotNull BindingResult bindingResult
|
||||
) {
|
||||
log.info("请求接口[POST]: /info/header-image/add");
|
||||
// 参数校验
|
||||
if (bindingResult.hasErrors()) {
|
||||
@ -68,15 +109,34 @@ public class InfoController {
|
||||
return infoService.addHeaderImage(request, carouselVO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑头部图片设置
|
||||
*
|
||||
* @param showType 是否显示
|
||||
* @param request 请求对象
|
||||
* @return 编辑结果
|
||||
*/
|
||||
@PutMapping("/info/header-image/edit-setting")
|
||||
public BaseResponse infoEditSettingHeaderImage(@RequestParam Boolean showType, HttpServletRequest request) {
|
||||
log.info("请求接口[PUT]: /info/header-image/edit-setting");
|
||||
return infoService.editSettingHeaderImage(request, showType);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取头部用户信息
|
||||
*
|
||||
* @param order 排序方式
|
||||
* @param orderBy 排序字段
|
||||
* @param request 请求对象
|
||||
* @return 用户信息
|
||||
*/
|
||||
@GetMapping("info/header-user/get")
|
||||
public BaseResponse infoGetHeaderUser(@RequestParam String order,@RequestParam String orderBy,HttpServletRequest request){
|
||||
public BaseResponse infoGetHeaderUser(
|
||||
@RequestParam String order,
|
||||
@RequestParam String orderBy,
|
||||
HttpServletRequest request
|
||||
) {
|
||||
log.info("请求接口[GET]: /info/header-user/get");
|
||||
return infoService.getHeaderUser(request,order,orderBy);
|
||||
return infoService.getHeaderUser(request, order, orderBy);
|
||||
}
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ import java.time.LocalDate;
|
||||
* <hr/>
|
||||
* 消息控制器,包含信息获取接口
|
||||
*
|
||||
* @author 张睿相
|
||||
* @author xiangZr-hhh
|
||||
* @version v1.1.0
|
||||
* @since v1.1.0
|
||||
*/
|
||||
@ -32,13 +32,32 @@ public class MessageController {
|
||||
|
||||
private final MessageService messageService;
|
||||
|
||||
/**
|
||||
* 删除消息
|
||||
*
|
||||
* @param id 消息id
|
||||
* @param request 请求对象
|
||||
* @return 删除结果
|
||||
*/
|
||||
@DeleteMapping("/message/delete")
|
||||
public BaseResponse messageDelete(@RequestParam Long id, HttpServletRequest request) {
|
||||
if (id == null) {
|
||||
return ResultUtil.error(ErrorCode.PARAMETER_ERROR);
|
||||
} else return messageService.messageDelete(id, request);
|
||||
} else {
|
||||
return messageService.messageDelete(id, request);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取消息列表
|
||||
*
|
||||
* @param page 页码
|
||||
* @param pageSize 每页条数
|
||||
* @param request 请求对象
|
||||
* @param begin 开始日期
|
||||
* @param end 结束日期
|
||||
* @return 消息列表
|
||||
*/
|
||||
@GetMapping("/message/get")
|
||||
public BaseResponse messageGet(@RequestParam(defaultValue = "1") Long page,
|
||||
@RequestParam(defaultValue = "10") Long pageSize,
|
||||
@ -50,9 +69,22 @@ public class MessageController {
|
||||
Long uid = JwtUtil.getUserId(token);
|
||||
if (uid == null) {
|
||||
return ResultUtil.error(ErrorCode.USER_NOT_EXIST);
|
||||
} else return messageService.messageGet(begin, end, page, pageSize, uid);
|
||||
} else {
|
||||
return messageService.messageGet(begin, end, page, pageSize, uid);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有消息列表
|
||||
*
|
||||
* @param page 页码
|
||||
* @param pageSize 每页条数
|
||||
* @param request 请求对象
|
||||
* @param begin 开始日期
|
||||
* @param end 结束日期
|
||||
* @param uid 用户id
|
||||
* @return 消息列表
|
||||
*/
|
||||
@GetMapping("/message/get/all")
|
||||
public BaseResponse messageGetAll(@RequestParam(defaultValue = "1") Long page,
|
||||
@RequestParam(defaultValue = "10") Long pageSize,
|
||||
@ -62,12 +94,13 @@ public class MessageController {
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end) {
|
||||
log.info("请求接口[GET]:/message/get/all");
|
||||
String token = request.getHeader("Authorization").replace("Bearer ", "");
|
||||
Long LoginId = JwtUtil.getUserId(token);
|
||||
if (LoginId == null) {
|
||||
Long loginId = JwtUtil.getUserId(token);
|
||||
if (loginId == null) {
|
||||
return ResultUtil.error(ErrorCode.USER_NOT_EXIST);
|
||||
} else return messageService.messageGetAll(request, begin, end, page, pageSize, LoginId, uid);
|
||||
} else {
|
||||
return messageService.messageGetAll(request, begin, end, page, pageSize, loginId, uid);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,53 +0,0 @@
|
||||
package com.jsl.oa.controllers;
|
||||
|
||||
import com.jsl.oa.services.ModuleService;
|
||||
import com.jsl.oa.utils.BaseResponse;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
public class ModuleContorller {
|
||||
private final ModuleService moduleService;
|
||||
|
||||
/**
|
||||
* 获取子系统
|
||||
* @param projectId
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
@GetMapping("/module/get")
|
||||
public BaseResponse moudleGetByProjectId(@RequestParam Integer projectId, HttpServletRequest request){
|
||||
|
||||
log.info("ProjectIdcontroller");
|
||||
return moduleService.getByProjectId(projectId,request);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取子模块
|
||||
* @param sysId
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
@GetMapping("/module/get/min")
|
||||
public BaseResponse moudleGetBySysId(@RequestParam Integer sysId, HttpServletRequest request){
|
||||
|
||||
log.info("SysIdcontorller");
|
||||
return moduleService.getBySysId(sysId,request);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@DeleteMapping("/module/delete/{id}")
|
||||
public BaseResponse moudleDeleteById( @PathVariable("id") Long id, HttpServletRequest request){
|
||||
log.info("请求接口[DELETE]: /module/delete/{id}");
|
||||
return moduleService.deleteById(request,id);
|
||||
}
|
||||
|
||||
}
|
68
src/main/java/com/jsl/oa/controllers/ModuleController.java
Normal file
68
src/main/java/com/jsl/oa/controllers/ModuleController.java
Normal file
@ -0,0 +1,68 @@
|
||||
package com.jsl.oa.controllers;
|
||||
|
||||
import com.jsl.oa.services.ModuleService;
|
||||
import com.jsl.oa.utils.BaseResponse;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
|
||||
/**
|
||||
* <h1>模块控制器</h1>
|
||||
* <hr/>
|
||||
* 模块控制器,包含模块获取接口
|
||||
*
|
||||
* @since v1.1.0
|
||||
* @version v1.1.0
|
||||
* @author xiangZr-hhh | xiao_lfeng | 176yunxuan
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
public class ModuleController {
|
||||
private final ModuleService moduleService;
|
||||
|
||||
/**
|
||||
* 获取子系统
|
||||
*
|
||||
* @param projectId 项目ID
|
||||
* @param request 请求对象
|
||||
* @return 子系统列表
|
||||
*/
|
||||
@GetMapping("/module/get")
|
||||
public BaseResponse moduleGetByProjectId(@RequestParam Integer projectId, HttpServletRequest request) {
|
||||
|
||||
log.info("[Controller] 执行 moduleGetByProjectId 接口");
|
||||
return moduleService.getByProjectId(projectId, request);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取子模块
|
||||
*
|
||||
* @param sysId 系统ID
|
||||
* @param request 请求对象
|
||||
* @return 子模块列表
|
||||
*/
|
||||
@GetMapping("/module/get/min")
|
||||
public BaseResponse moduleGetBySysId(@RequestParam Integer sysId, HttpServletRequest request) {
|
||||
|
||||
log.info("[Controller] 执行 moduleGetBySysId 接口");
|
||||
return moduleService.getBySysId(sysId, request);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除模块
|
||||
*
|
||||
* @param id 模块ID
|
||||
* @param request 请求对象
|
||||
* @return 删除结果
|
||||
*/
|
||||
@DeleteMapping("/module/delete/{id}")
|
||||
public BaseResponse moduleDeleteById(@PathVariable("id") Long id, HttpServletRequest request) {
|
||||
log.info("[Controller] 执行 moduleDeleteById 接口");
|
||||
return moduleService.deleteById(request, id);
|
||||
}
|
||||
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
package com.jsl.oa.controllers;
|
||||
|
||||
|
||||
import com.jsl.oa.model.voData.NewsAddVO;
|
||||
import com.jsl.oa.model.vodata.NewsAddVO;
|
||||
import com.jsl.oa.services.NewsService;
|
||||
import com.jsl.oa.utils.BaseResponse;
|
||||
import com.jsl.oa.utils.ErrorCode;
|
||||
@ -20,13 +20,13 @@ import javax.servlet.http.HttpServletRequest;
|
||||
/**
|
||||
* <h1>新闻控制器</h1>
|
||||
* <hr/>
|
||||
* 角色控制器,包含角色获取接口
|
||||
* 新闻控制器,包含新闻添加接口
|
||||
*
|
||||
* @author xiangZr-hhh | xiao_lfeng | 176yunxuan
|
||||
* @version v1.1.0
|
||||
* @see NewsService
|
||||
* @since v1.1.0
|
||||
*/
|
||||
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
@ -34,20 +34,31 @@ public class NewsController {
|
||||
|
||||
private final NewsService newsService;
|
||||
|
||||
/**
|
||||
* <h2>新闻添加接口</h2>
|
||||
* <hr/>
|
||||
* 新闻添加接口,接收新闻添加VO对象,并调用NewsService的newsAdd方法进行新闻添加操作。
|
||||
*
|
||||
* @param newsAddVO 新闻添加VO对象,包含新闻信息
|
||||
* @param bindingResult 数据校验结果,用于检查请求参数是否有错误
|
||||
* @param request 请求对象,包含请求信息
|
||||
* @return BaseResponse 返回结果,包含操作结果和错误信息
|
||||
* @see NewsService#newsAdd(NewsAddVO, HttpServletRequest)
|
||||
* @since v1.1.0
|
||||
*/
|
||||
@PostMapping("/news/add")
|
||||
public BaseResponse newsAdd(@RequestBody @Validated NewsAddVO newsAddVO, BindingResult bindingResult, HttpServletRequest request) {
|
||||
public BaseResponse newsAdd(
|
||||
@RequestBody @Validated NewsAddVO newsAddVO,
|
||||
BindingResult bindingResult,
|
||||
HttpServletRequest request
|
||||
) {
|
||||
log.info("请求接口[POST]: /news/add");
|
||||
// 判断是否有参数错误
|
||||
if (bindingResult.hasErrors()) {
|
||||
return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult));
|
||||
}
|
||||
|
||||
return newsService.newsAdd(newsAddVO, request);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.jsl.oa.controllers;
|
||||
|
||||
import com.jsl.oa.model.voData.PermissionEditVO;
|
||||
import com.jsl.oa.model.vodata.PermissionEditVO;
|
||||
import com.jsl.oa.services.PermissionService;
|
||||
import com.jsl.oa.utils.BaseResponse;
|
||||
import com.jsl.oa.utils.ErrorCode;
|
||||
@ -14,58 +14,104 @@ import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
/**
|
||||
* 权限控制器类,处理权限相关的API请求。
|
||||
* 它使用 {@link PermissionService} 来执行权限相关的操作。
|
||||
*
|
||||
* @author xiao_lfeng | xiangZr-hhh | 176yunxuan
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
public class PermissionController {
|
||||
|
||||
/**
|
||||
* 权限服务实例,用于执行权限相关的操作。
|
||||
*/
|
||||
private final PermissionService permissionService;
|
||||
|
||||
/**
|
||||
* 添加新的权限。
|
||||
*
|
||||
* @param request HTTP请求对象。
|
||||
* @param rid 角色ID。
|
||||
* @param pid 权限ID。
|
||||
* @return {@link BaseResponse} 对象,包含操作结果。
|
||||
*/
|
||||
@PostMapping("/permission/add")
|
||||
public BaseResponse permissionAdd(HttpServletRequest request, @RequestParam Long rid,@RequestParam Long pid) {
|
||||
public BaseResponse permissionAdd(HttpServletRequest request, @RequestParam Long rid, @RequestParam Long pid) {
|
||||
log.info("请求接口[POST]: /permission/add");
|
||||
// 判断是否有参数错误
|
||||
if (rid == null || pid == null) {
|
||||
return ResultUtil.error(ErrorCode.PARAMETER_ERROR);
|
||||
} else {
|
||||
return permissionService.permissionAdd(request,rid,pid);
|
||||
return permissionService.permissionAdd(request, rid, pid);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前用户的权限信息。
|
||||
*
|
||||
* @param request HTTP请求对象。
|
||||
* @param uid 用户ID。
|
||||
* @return {@link BaseResponse} 对象,包含操作结果。
|
||||
*/
|
||||
@GetMapping("/permission/current")
|
||||
public BaseResponse permissionUser(HttpServletRequest request, @RequestParam Long uid) {
|
||||
log.info("请求接口[GET]: /permission/current");
|
||||
// 判断是否有参数错误
|
||||
if (uid == null ) {
|
||||
if (uid == null) {
|
||||
return ResultUtil.error(ErrorCode.PARAMETER_ERROR);
|
||||
} else {
|
||||
return permissionService.permissionUser(request,uid);
|
||||
return permissionService.permissionUser(request, uid);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有权限信息。
|
||||
*
|
||||
* @param request HTTP请求对象。
|
||||
* @return {@link BaseResponse} 对象,包含操作结果。
|
||||
*/
|
||||
@GetMapping("/permission/get")
|
||||
public BaseResponse permissionGet(HttpServletRequest request){
|
||||
public BaseResponse permissionGet(HttpServletRequest request) {
|
||||
log.info("请求接口[GET]: /permission/get");
|
||||
return permissionService.permissionGet(request);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 编辑权限信息。
|
||||
*
|
||||
* @param permissionEditVo {@link PermissionEditVO} 对象,包含更新后的权限信息。
|
||||
* @param bindingResult Binding结果对象,包含任何验证错误。
|
||||
* @param request HTTP请求对象。
|
||||
* @return {@link BaseResponse} 对象,包含操作结果。
|
||||
*/
|
||||
@PutMapping("/permission/edit")
|
||||
public BaseResponse permissionEdit(@RequestBody @Validated PermissionEditVO permissionEditVo, BindingResult bindingResult, HttpServletRequest request){
|
||||
public BaseResponse permissionEdit(@RequestBody @Validated PermissionEditVO permissionEditVo, BindingResult bindingResult, HttpServletRequest request) {
|
||||
log.info("请求接口[PUT]: /permission/edit");
|
||||
// 判断是否有参数错误
|
||||
if (bindingResult.hasErrors()) {
|
||||
return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult));
|
||||
}
|
||||
return permissionService.permissionEdit(permissionEditVo,request);
|
||||
return permissionService.permissionEdit(permissionEditVo, request);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除权限。
|
||||
*
|
||||
* @param pid 权限ID。
|
||||
* @param request HTTP请求对象。
|
||||
* @return {@link BaseResponse} 对象,包含操作结果。
|
||||
*/
|
||||
@DeleteMapping("/permission/delete")
|
||||
public BaseResponse permissionDelete(@RequestParam Long pid,HttpServletRequest request){
|
||||
public BaseResponse permissionDelete(@RequestParam Long pid, HttpServletRequest request) {
|
||||
log.info("请求接口[Delete]: /permission/delete");
|
||||
// 判断是否有参数错误
|
||||
if (pid == null) {
|
||||
return ResultUtil.error(ErrorCode.PARAMETER_ERROR);
|
||||
} else return permissionService.permissionDelete(request,pid);
|
||||
} else {
|
||||
return permissionService.permissionDelete(request, pid);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,10 @@
|
||||
package com.jsl.oa.controllers;
|
||||
|
||||
import com.jsl.oa.model.voData.*;
|
||||
import com.jsl.oa.model.voData.business.info.ProjectShowVO;
|
||||
import com.jsl.oa.model.vodata.ProjectCuttingAddVO;
|
||||
import com.jsl.oa.model.vodata.ProjectCuttingEditVO;
|
||||
import com.jsl.oa.model.vodata.ProjectEditVO;
|
||||
import com.jsl.oa.model.vodata.ProjectWorkVO;
|
||||
import com.jsl.oa.model.vodata.business.info.ProjectShowVO;
|
||||
import com.jsl.oa.services.ProjectService;
|
||||
import com.jsl.oa.utils.BaseResponse;
|
||||
import com.jsl.oa.utils.ErrorCode;
|
||||
@ -17,101 +20,109 @@ import org.springframework.web.bind.annotation.*;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* 项目控制器
|
||||
*
|
||||
* @author xiao_lfeng | xiangZr-hhh | 176yunxuan
|
||||
* @version 1.1.0
|
||||
* @since 1.1.0
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
public class ProjectController {
|
||||
|
||||
/**
|
||||
* 项目服务
|
||||
*/
|
||||
private final ProjectService projectService;
|
||||
|
||||
/**
|
||||
* 项目展示获取
|
||||
* 项目轮播图
|
||||
*
|
||||
* @param id
|
||||
* @return
|
||||
* @param id 获取项目 id
|
||||
* @return {@link BaseResponse}
|
||||
*/
|
||||
@GetMapping("/project/header/get")
|
||||
public BaseResponse projectGetHeader(@RequestParam(required = false) Integer id) {
|
||||
public BaseResponse projectGetHeader(@RequestParam(required = false) final Integer id) {
|
||||
log.info("请求接口[GET]: /project/header/get");
|
||||
return projectService.getHeader(id);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param id
|
||||
* @return
|
||||
* @param id 获取项目 id
|
||||
* @return {@link BaseResponse}
|
||||
*/
|
||||
@GetMapping("/project/get/id")
|
||||
public BaseResponse projectGetById(@RequestParam Integer id){
|
||||
public BaseResponse projectGetById(@RequestParam Integer id) {
|
||||
return projectService.getById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param id
|
||||
* @return
|
||||
* @param id 获取项目 id
|
||||
* @return {@link BaseResponse}
|
||||
*/
|
||||
@GetMapping("/project/getwork/id")
|
||||
public BaseResponse projectWorkGetById(@RequestParam Integer id){
|
||||
public BaseResponse projectWorkGetById(@RequestParam Integer id) {
|
||||
return projectService.getWorkById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 游客获取项目
|
||||
*
|
||||
* @return
|
||||
* @return {@link BaseResponse}
|
||||
*/
|
||||
@GetMapping("/project/get/custom")
|
||||
public BaseResponse projectGetCustom(@RequestParam(required = false) Integer id,
|
||||
@RequestParam(required = false) List<String> tags,
|
||||
@RequestParam(required = false) List<Integer> isFinish,
|
||||
@RequestParam(required = false,defaultValue = "1") Integer page,
|
||||
@RequestParam(required = false,defaultValue = "10") Integer pageSize) {
|
||||
@RequestParam(required = false, defaultValue = "1") Integer page,
|
||||
@RequestParam(required = false, defaultValue = "10") Integer pageSize) {
|
||||
log.info("请求接口[GET]: /project/all/get");
|
||||
return projectService.tget(id, tags, isFinish,page,pageSize);
|
||||
return projectService.tget(id, tags, isFinish, page, pageSize);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 我负责的界面的获取项目
|
||||
*
|
||||
* @return
|
||||
* @return {@link BaseResponse}
|
||||
*/
|
||||
@GetMapping("/project/get")
|
||||
public BaseResponse projectGet(@RequestParam(required = false) Integer listAll,
|
||||
@RequestParam(required = false) List<String> tags,
|
||||
@RequestParam(required = false) List<Integer> isFinish,
|
||||
@RequestParam(required = false,defaultValue = "1") Integer page,
|
||||
@RequestParam(required = false,defaultValue = "10") Integer pageSize,
|
||||
@RequestParam(required = false, defaultValue = "1") Integer page,
|
||||
@RequestParam(required = false, defaultValue = "10") Integer pageSize,
|
||||
HttpServletRequest request) {
|
||||
log.info("请求接口[GET]: /project/get");
|
||||
return projectService.get(listAll, request, tags, isFinish,page,pageSize);
|
||||
return projectService.get(listAll, request, tags, isFinish, page, pageSize);
|
||||
}
|
||||
|
||||
/**
|
||||
* 我管理的查询
|
||||
*
|
||||
* @return
|
||||
* @return {@link BaseResponse}
|
||||
*/
|
||||
@GetMapping("/project/work/get")
|
||||
public BaseResponse projectWorkGet(@RequestParam(required = false) Integer listAll,
|
||||
@RequestParam(required = false) List<String> tags,
|
||||
@RequestParam(required = false) List<Integer> isFinish,
|
||||
@RequestParam(required = false) Integer is,
|
||||
@RequestParam(required = false,defaultValue = "1") Integer page,
|
||||
@RequestParam(required = false,defaultValue = "10") Integer pageSize,
|
||||
@RequestParam(required = false, defaultValue = "1") Integer page,
|
||||
@RequestParam(required = false, defaultValue = "10") Integer pageSize,
|
||||
HttpServletRequest request) {
|
||||
log.info("请求接口[GET]: /project/work/get");
|
||||
return projectService.workget(listAll, request, tags, isFinish, is,page,pageSize);
|
||||
return projectService.workget(listAll, request, tags, isFinish, is, page, pageSize);
|
||||
}
|
||||
|
||||
/**
|
||||
* 单个项目的详细
|
||||
* 项目轮播图
|
||||
*
|
||||
* @param name
|
||||
* @return
|
||||
* @param name 获取项目名称
|
||||
* @return {@link BaseResponse}
|
||||
*/
|
||||
@GetMapping("/project/header")
|
||||
public BaseResponse projectGetByName(@RequestParam String name) {
|
||||
@ -123,17 +134,16 @@ public class ProjectController {
|
||||
* 增加项目展示
|
||||
* 项目轮播图
|
||||
*
|
||||
* @param projectShowVO
|
||||
* @param request
|
||||
* @param bindingResult
|
||||
* @return
|
||||
* @param projectShowVO 项目展示信息
|
||||
* @param request 请求
|
||||
* @param bindingResult 参数校验
|
||||
* @return {@link BaseResponse}
|
||||
*/
|
||||
@PostMapping("/project/header/add")
|
||||
public BaseResponse projectAddHeader(@RequestBody @Validated ProjectShowVO projectShowVO, HttpServletRequest request, @NotNull BindingResult bindingResult) {
|
||||
log.info("请求接口[POST]: /project/header/add");
|
||||
// 参数校验
|
||||
// 判断是否有参数错误
|
||||
if (bindingResult.hasErrors()) {
|
||||
log.warn("参数校验失败: {}", Processing.getValidatedErrorList(bindingResult));
|
||||
return ResultUtil.error(ErrorCode.PARAMETER_ERROR, Processing.getValidatedErrorList(bindingResult));
|
||||
}
|
||||
return projectService.addHeader(request, projectShowVO);
|
||||
@ -143,109 +153,54 @@ public class ProjectController {
|
||||
* 编辑展示的项目
|
||||
* 项目轮播图
|
||||
*
|
||||
* @param projectShowVO
|
||||
* @param id
|
||||
* @param request
|
||||
* @param bindingResult
|
||||
* @return
|
||||
* @param projectId 项目 id
|
||||
* @param request 请求
|
||||
* @param projectEdit 项目信息
|
||||
* @param bindingResult 参数校验
|
||||
* @return {@link BaseResponse}
|
||||
*/
|
||||
@PutMapping("/project/header/edit")
|
||||
public BaseResponse projectEditHeader(@RequestBody @Validated ProjectShowVO projectShowVO, @RequestParam Integer id, HttpServletRequest request, @NotNull BindingResult bindingResult) {
|
||||
log.info("请求接口[PUT]: /project/header/edit");
|
||||
// 参数校验
|
||||
@PutMapping("/project/header/edit/{projectId}")
|
||||
public BaseResponse projectEditById(@RequestParam Long projectId, HttpServletRequest request, @RequestBody @Validated ProjectEditVO projectEdit, @NotNull BindingResult bindingResult) {
|
||||
log.info("请求接口[PUT]: /project/header/edit/{projectId}");
|
||||
// 判断是否有参数错误
|
||||
if (bindingResult.hasErrors()) {
|
||||
log.warn("参数校验失败: {}", Processing.getValidatedErrorList(bindingResult));
|
||||
return ResultUtil.error(ErrorCode.PARAMETER_ERROR, Processing.getValidatedErrorList(bindingResult));
|
||||
}
|
||||
if (id == null) {
|
||||
log.warn("参数校验失败: {}", "id不能为空");
|
||||
return ResultUtil.error(ErrorCode.PARAMETER_ERROR, "id不能为空");
|
||||
}
|
||||
return projectService.editHeader(request, projectShowVO, id);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 删除项目展示
|
||||
* 项目轮播图
|
||||
*
|
||||
* @param id
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
@DeleteMapping("/project/header/del")
|
||||
public BaseResponse projectDelHeader(@RequestParam Integer id, HttpServletRequest request) {
|
||||
log.info("请求接口[Delete]: /project/header/del");
|
||||
return projectService.delHeader(id, request);
|
||||
}
|
||||
|
||||
/**
|
||||
* 项目表进行,项目增加
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/project/add")
|
||||
public BaseResponse projectAdd(HttpServletRequest request, @RequestBody @Validated ProjectInfoVO projectAdd, @NotNull BindingResult bindingResult) {
|
||||
log.info("请求接口[POST]: /project/add");
|
||||
// 判断是否有参数错误
|
||||
if (bindingResult.hasErrors()) {
|
||||
return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult));
|
||||
}
|
||||
return projectService.projectAdd(request, projectAdd);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @Description: 项目的修改
|
||||
* @Date: 2024/3/10
|
||||
* @Param request:
|
||||
* @Param projectEdit:
|
||||
* @Param bindingResult:
|
||||
* @Param projectId:
|
||||
**/
|
||||
@PutMapping("/project/edit/{projectId}")
|
||||
public BaseResponse projectEditById(HttpServletRequest request, @RequestBody @Validated ProjectEditVO projectEdit,
|
||||
@NotNull BindingResult bindingResult, @PathVariable("projectId") Long projectId) {
|
||||
log.info("请求接口[PUT]: /project/edit/{projectId}");
|
||||
// 判断是否有参数错误
|
||||
if (bindingResult.hasErrors()) {
|
||||
return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult));
|
||||
}
|
||||
return projectService.projectEdit(request, projectEdit, projectId);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 子系统子模块的增加
|
||||
*
|
||||
* @param request
|
||||
* @param bindingResult
|
||||
* @return
|
||||
* @param request 请求
|
||||
* @param bindingResult 参数校验
|
||||
* @return {@link BaseResponse}
|
||||
*/
|
||||
@PostMapping("/project/work/add")
|
||||
public BaseResponse projectWorkAdd(HttpServletRequest request, @RequestBody @Validated ProjectWorkVO projectWorkVO, @NotNull BindingResult bindingResult) {
|
||||
log.info("请求接口[POST]: /project/work/add");
|
||||
// 判断是否有参数错误
|
||||
if (bindingResult.hasErrors()) {
|
||||
return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult));
|
||||
return ResultUtil.error(ErrorCode.PARAMETER_ERROR, Processing.getValidatedErrorList(bindingResult));
|
||||
}
|
||||
return projectService.projecWorktAdd(request, projectWorkVO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取负责人id
|
||||
* @return
|
||||
*
|
||||
* @return {@link BaseResponse}
|
||||
*/
|
||||
@GetMapping("/project/pri")
|
||||
public BaseResponse projectPrincipalGet(){
|
||||
public BaseResponse projectPrincipalGet() {
|
||||
return projectService.projectPrincipalGet();
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户获取所分到的项目模块
|
||||
*
|
||||
* @param uid
|
||||
* @return
|
||||
* @param uid 用户 id
|
||||
* @return {@link BaseResponse}
|
||||
*/
|
||||
@GetMapping("/project/cut/user")
|
||||
public BaseResponse projectGetUserInCutting(@RequestParam Long uid) {
|
||||
@ -260,13 +215,13 @@ public class ProjectController {
|
||||
/**
|
||||
* 给某用户分配项目模块
|
||||
*
|
||||
* @param uid
|
||||
* @param pid
|
||||
* @return
|
||||
* @param uid 用户 id
|
||||
* @param pid 项目 id
|
||||
* @return {@link BaseResponse}
|
||||
*/
|
||||
@PostMapping("/project/cut/user/add")
|
||||
public BaseResponse projectAddUserForCutting(HttpServletRequest request, @RequestParam Long uid, @RequestParam Long pid) {
|
||||
log.info("请求接口[POST]: /project/cut/user/add");
|
||||
log.info("请求接口[Post]: /project/cut/user/add");
|
||||
// 判断是否有参数错误
|
||||
if (uid == null || pid == null) {
|
||||
return ResultUtil.error(ErrorCode.PARAMETER_ERROR);
|
||||
@ -277,8 +232,8 @@ public class ProjectController {
|
||||
/**
|
||||
* 删除某项目记录
|
||||
*
|
||||
* @param id
|
||||
* @return
|
||||
* @param id 用户 id
|
||||
* @return {@link BaseResponse}
|
||||
*/
|
||||
@DeleteMapping("/project/delete")
|
||||
public BaseResponse projectDelete(HttpServletRequest request, @RequestParam List<Long> id) {
|
||||
@ -290,12 +245,13 @@ public class ProjectController {
|
||||
}
|
||||
|
||||
/**
|
||||
* @Description: 添加项目模块
|
||||
* @Date: 2024/1/21
|
||||
* @Param request
|
||||
* @Param projectCuttingAddVO
|
||||
* @Param bindingResult
|
||||
**/
|
||||
* 项目轮播图
|
||||
*
|
||||
* @param request 请求
|
||||
* @param projectCuttingAddVO 项目轮播图信息
|
||||
* @param bindingResult 参数校验
|
||||
* @return {@link BaseResponse}
|
||||
*/
|
||||
@PostMapping("/project/cut/add")
|
||||
public BaseResponse projectCuttingAdd(HttpServletRequest request, @RequestBody @Validated ProjectCuttingAddVO projectCuttingAddVO, @NotNull BindingResult bindingResult) {
|
||||
log.info("请求接口[Post]: /project/cut/add");
|
||||
|
@ -1,8 +1,8 @@
|
||||
package com.jsl.oa.controllers;
|
||||
|
||||
import com.jsl.oa.exception.ClassCopyException;
|
||||
import com.jsl.oa.model.voData.RoleAddVo;
|
||||
import com.jsl.oa.model.voData.RoleEditVO;
|
||||
import com.jsl.oa.model.vodata.RoleAddVo;
|
||||
import com.jsl.oa.model.vodata.RoleEditVO;
|
||||
import com.jsl.oa.services.RoleService;
|
||||
import com.jsl.oa.utils.BaseResponse;
|
||||
import com.jsl.oa.utils.ErrorCode;
|
||||
@ -22,10 +22,10 @@ import javax.servlet.http.HttpServletRequest;
|
||||
* <hr/>
|
||||
* 角色控制器,包含角色获取接口
|
||||
*
|
||||
* @author xiao_lfeng | 176yunxuan | xiangZr-hhh
|
||||
* @version v1.1.0
|
||||
* @see RoleService
|
||||
* @since v1.1.0
|
||||
* @author xiao_lfeng | 176yunxuan | xiangZr-hhh
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@ -52,8 +52,8 @@ public class RoleController {
|
||||
* <hr/>
|
||||
* 角色编辑接口
|
||||
*
|
||||
* @param request 请求
|
||||
* @param roleEditVO 角色编辑VO
|
||||
* @param request 请求
|
||||
* @param roleEditVO 角色编辑VO
|
||||
* @param bindingResult 参数校验结果
|
||||
* @return {@link BaseResponse}
|
||||
*/
|
||||
@ -73,7 +73,7 @@ public class RoleController {
|
||||
* 角色删除接口
|
||||
*
|
||||
* @param request 请求
|
||||
* @param id 角色id
|
||||
* @param id 角色id
|
||||
* @return {@link BaseResponse}
|
||||
*/
|
||||
@DeleteMapping("/role/delete")
|
||||
@ -124,7 +124,7 @@ public class RoleController {
|
||||
* @Param uid:
|
||||
**/
|
||||
@PostMapping("role/add")
|
||||
public BaseResponse addRole(HttpServletRequest request, @RequestBody @Validated RoleAddVo roleAddVO, @NotNull BindingResult bindingResult ) throws ClassCopyException {
|
||||
public BaseResponse addRole(HttpServletRequest request, @RequestBody @Validated RoleAddVo roleAddVO, @NotNull BindingResult bindingResult) throws ClassCopyException {
|
||||
log.info("请求接口[POST]: /role/add");
|
||||
// 判断是否有参数错误
|
||||
if (bindingResult.hasErrors()) {
|
||||
@ -135,7 +135,7 @@ public class RoleController {
|
||||
|
||||
|
||||
/**
|
||||
* @Description: 改变用户角色权限信息
|
||||
* @Description: 改变用户角色权限信息
|
||||
* @Date: 2024/1/20
|
||||
* @Param request:
|
||||
* @Param uid: 用户id
|
||||
@ -152,8 +152,4 @@ public class RoleController {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -1,9 +1,9 @@
|
||||
package com.jsl.oa.controllers;
|
||||
|
||||
import com.jsl.oa.model.voData.UserAddVO;
|
||||
import com.jsl.oa.model.voData.UserAllCurrentVO;
|
||||
import com.jsl.oa.model.voData.UserEditProfileVO;
|
||||
import com.jsl.oa.model.voData.UserEditVO;
|
||||
import com.jsl.oa.model.vodata.UserAddVO;
|
||||
import com.jsl.oa.model.vodata.UserAllCurrentVO;
|
||||
import com.jsl.oa.model.vodata.UserEditProfileVO;
|
||||
import com.jsl.oa.model.vodata.UserEditVO;
|
||||
import com.jsl.oa.services.UserService;
|
||||
import com.jsl.oa.utils.BaseResponse;
|
||||
import com.jsl.oa.utils.ErrorCode;
|
||||
|
@ -2,7 +2,7 @@ package com.jsl.oa.dao;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.jsl.oa.mapper.InfoMapper;
|
||||
import com.jsl.oa.model.doData.info.CarouselDO;
|
||||
import com.jsl.oa.model.dodata.info.CarouselDO;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.dao.DuplicateKeyException;
|
||||
@ -64,12 +64,13 @@ public class InfoDAO {
|
||||
private void sortCarousel(CarouselDO getCarousel) {
|
||||
for (int i = 0; i < getCarousel.getData().size(); i++) {
|
||||
for (int j = 0; j < getCarousel.getData().size(); j++) {
|
||||
CarouselDO.DataDO dataDO = getCarousel.getData().get(i);
|
||||
if ("desc".equals(getCarousel.getOrder())) {
|
||||
if (getCarousel.getData().get(i).getDisplayOrder() > getCarousel.getData().get(j).getDisplayOrder()) {
|
||||
if (dataDO.getDisplayOrder() > dataDO.getDisplayOrder()) {
|
||||
Collections.swap(getCarousel.getData(), i, j);
|
||||
}
|
||||
} else {
|
||||
if (getCarousel.getData().get(i).getDisplayOrder() < getCarousel.getData().get(j).getDisplayOrder()) {
|
||||
if (dataDO.getDisplayOrder() < dataDO.getDisplayOrder()) {
|
||||
Collections.swap(getCarousel.getData(), i, j);
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
package com.jsl.oa.dao;
|
||||
|
||||
import com.jsl.oa.mapper.NewsMapper;
|
||||
import com.jsl.oa.model.doData.NewsDO;
|
||||
import com.jsl.oa.model.dodata.NewsDO;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
@ -4,7 +4,7 @@ import com.google.gson.Gson;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import com.jsl.oa.common.constant.BusinessConstants;
|
||||
import com.jsl.oa.mapper.PermissionMapper;
|
||||
import com.jsl.oa.model.doData.PermissionDO;
|
||||
import com.jsl.oa.model.dodata.PermissionDO;
|
||||
import com.jsl.oa.utils.redis.RoleRedisUtil;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
@ -2,14 +2,14 @@ package com.jsl.oa.dao;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.jsl.oa.mapper.ProjectMapper;
|
||||
import com.jsl.oa.model.doData.ProjectCuttingDO;
|
||||
import com.jsl.oa.model.doData.ProjectDO;
|
||||
import com.jsl.oa.model.doData.ProjectUserDO;
|
||||
import com.jsl.oa.model.doData.ProjectWorkDO;
|
||||
import com.jsl.oa.model.doData.info.ProjectShowDO;
|
||||
import com.jsl.oa.model.voData.ProjectEditVO;
|
||||
import com.jsl.oa.model.voData.ProjectInfoVO;
|
||||
import com.jsl.oa.model.voData.ProjectWorkVO;
|
||||
import com.jsl.oa.model.dodata.ProjectCuttingDO;
|
||||
import com.jsl.oa.model.dodata.ProjectDO;
|
||||
import com.jsl.oa.model.dodata.ProjectUserDO;
|
||||
import com.jsl.oa.model.dodata.ProjectWorkDO;
|
||||
import com.jsl.oa.model.dodata.info.ProjectShowDO;
|
||||
import com.jsl.oa.model.vodata.ProjectEditVO;
|
||||
import com.jsl.oa.model.vodata.ProjectInfoVO;
|
||||
import com.jsl.oa.model.vodata.ProjectWorkVO;
|
||||
import com.jsl.oa.utils.Processing;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -48,7 +48,7 @@ public class ProjectDAO {
|
||||
log.info("\t> 执行 DAO 层 ProjectDAO.projectEdit 方法");
|
||||
log.info("\t\t> 从 MySQL 更新数据");
|
||||
ProjectDO projectDO = new ProjectDO();
|
||||
Processing.copyProperties(projectEdit,projectDO);
|
||||
Processing.copyProperties(projectEdit, projectDO);
|
||||
projectDO.setId(projectId);
|
||||
projectMapper.projectEdit(projectDO);
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
@ -123,28 +123,28 @@ public class ProjectDAO {
|
||||
}
|
||||
|
||||
|
||||
public ProjectDO getProjectById(Long id){
|
||||
public ProjectDO getProjectById(Long id) {
|
||||
log.info("\t> 执行 DAO 层 ProjectDAO.getProjectById 方法");
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
return projectMapper.getProjectById(id);
|
||||
}
|
||||
|
||||
public List<ProjectDO> get(Long userId,Integer listAll,List<String> tags,List<Integer> isFinish) {
|
||||
public List<ProjectDO> get(Long userId, Integer listAll, List<String> tags, List<Integer> isFinish) {
|
||||
log.info("\t> 执行 DAO 层 ProjectDAO.get 方法");
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
if(tags != null && !tags.isEmpty()){
|
||||
if (tags != null && !tags.isEmpty()) {
|
||||
log.info("tags");
|
||||
return projectMapper.getByTags(userId,tags,isFinish);
|
||||
return projectMapper.getByTags(userId, tags, isFinish);
|
||||
}
|
||||
|
||||
if(isFinish != null && !isFinish.isEmpty()){
|
||||
if (isFinish != null && !isFinish.isEmpty()) {
|
||||
log.info("finish");
|
||||
return projectMapper.getByIsfinish(userId,isFinish);
|
||||
return projectMapper.getByIsfinish(userId, isFinish);
|
||||
}
|
||||
|
||||
if(listAll == 0) {
|
||||
if (listAll == 0) {
|
||||
return projectMapper.get(userId);
|
||||
}else {
|
||||
} else {
|
||||
return projectMapper.get1(userId);
|
||||
}
|
||||
}
|
||||
@ -152,18 +152,18 @@ public class ProjectDAO {
|
||||
public List<ProjectDO> workget(Long userId, Integer listAll, List<String> tags, List<Integer> isFinish, Integer is) {
|
||||
log.info("\t> 执行 DAO 层 ProjectDAO.workget 方法");
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
if(tags != null && !tags.isEmpty()){
|
||||
return projectMapper.workgetByTags(userId,tags,is,isFinish);
|
||||
if (tags != null && !tags.isEmpty()) {
|
||||
return projectMapper.workgetByTags(userId, tags, is, isFinish);
|
||||
}
|
||||
|
||||
if(isFinish != null && !isFinish.isEmpty()){
|
||||
return projectMapper.workgetByIsfinish(userId,isFinish,is);
|
||||
if (isFinish != null && !isFinish.isEmpty()) {
|
||||
return projectMapper.workgetByIsfinish(userId, isFinish, is);
|
||||
}
|
||||
|
||||
if(listAll == 0) {
|
||||
return projectMapper.workget(userId,is);
|
||||
}else {
|
||||
return projectMapper.workget1(userId,is);
|
||||
if (listAll == 0) {
|
||||
return projectMapper.workget(userId, is);
|
||||
} else {
|
||||
return projectMapper.workget1(userId, is);
|
||||
}
|
||||
}
|
||||
|
||||
@ -173,54 +173,54 @@ public class ProjectDAO {
|
||||
return projectMapper.getByName(name);
|
||||
}
|
||||
|
||||
public boolean projectDelete(Long id){
|
||||
public boolean projectDelete(Long id) {
|
||||
log.info("\t> 执行 DAO 层 ProjectDAO.projectDelete 方法");
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
return projectMapper.deleteProject(id);
|
||||
}
|
||||
|
||||
public void projectCuttingAdd(ProjectCuttingDO projectCuttingDO){
|
||||
public void projectCuttingAdd(ProjectCuttingDO projectCuttingDO) {
|
||||
log.info("\t> 执行 DAO 层 ProjectDAO.projectCuttingAdd 方法");
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
projectMapper.projectCuttingAdd(projectCuttingDO);
|
||||
}
|
||||
|
||||
public boolean isExistProjectById(Long id){
|
||||
public boolean isExistProjectById(Long id) {
|
||||
log.info("\t> 执行 DAO 层 ProjectDAO.isExistProjectById 方法");
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
return projectMapper.getProjectById(id) != null;
|
||||
}
|
||||
|
||||
public boolean updateProjectCutting(ProjectCuttingDO projectCuttingDO){
|
||||
public boolean updateProjectCutting(ProjectCuttingDO projectCuttingDO) {
|
||||
log.info("\t> 执行 DAO 层 ProjectDAO.updateProjectCutting 方法");
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
return projectMapper.projectCuttingUpdate(projectCuttingDO);
|
||||
}
|
||||
|
||||
public boolean isExistProjectCutting(Long id){
|
||||
public boolean isExistProjectCutting(Long id) {
|
||||
log.info("\t> 执行 DAO 层 ProjectDAO.isExistProjectCutting 方法");
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
return projectMapper.getProjectCuttingById(id) != null;
|
||||
}
|
||||
|
||||
public boolean isExistProjectUser(Long pid,Long uid){
|
||||
public boolean isExistProjectUser(Long pid, Long uid) {
|
||||
log.info("\t> 执行 DAO 层 ProjectDAO.isExistProjectUse 方法");
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
return projectMapper.getProjectUserByPidAndUid(pid, uid) != null;
|
||||
}
|
||||
|
||||
public boolean updateUserForProjectUserByPidAndUid(Long pid,Long oldUid,Long newUid){
|
||||
public boolean updateUserForProjectUserByPidAndUid(Long pid, Long oldUid, Long newUid) {
|
||||
log.info("\t> 执行 DAO 层 ProjectDAO.updateUserForProjectUserByPidAndUid 方法");
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
ProjectUserDO projectUserDO = projectMapper.getProjectUserByPidAndUid(pid,oldUid);
|
||||
if(projectUserDO == null){
|
||||
ProjectUserDO projectUserDO = projectMapper.getProjectUserByPidAndUid(pid, oldUid);
|
||||
if (projectUserDO == null) {
|
||||
return false;
|
||||
}
|
||||
log.info("\t\t> 从 MySQL 更新数据");
|
||||
return projectMapper.updateUserForProjectUser(newUid,projectUserDO.getId());
|
||||
return projectMapper.updateUserForProjectUser(newUid, projectUserDO.getId());
|
||||
}
|
||||
|
||||
public boolean isPrincipalUser(Long uid, Long projectId){
|
||||
public boolean isPrincipalUser(Long uid, Long projectId) {
|
||||
log.info("\t> 执行 DAO 层 ProjectDAO.isPrincipalUser 方法");
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
ProjectDO projectDO = projectMapper.getProjectById(projectId);
|
||||
@ -228,21 +228,21 @@ public class ProjectDAO {
|
||||
}
|
||||
|
||||
|
||||
public List<ProjectDO> tget(Integer id,List<Integer> isFinish,List<String> tags) {
|
||||
public List<ProjectDO> tget(Integer id, List<Integer> isFinish, List<String> tags) {
|
||||
log.info("DAO层tget");
|
||||
|
||||
if(tags != null && !tags.isEmpty()){
|
||||
return projectMapper.tgetBytags(tags,isFinish);
|
||||
if (tags != null && !tags.isEmpty()) {
|
||||
return projectMapper.tgetBytags(tags, isFinish);
|
||||
}
|
||||
|
||||
if(isFinish != null && !isFinish.isEmpty()){
|
||||
if (isFinish != null && !isFinish.isEmpty()) {
|
||||
return projectMapper.tgetByIsfinish(isFinish);
|
||||
}
|
||||
|
||||
return projectMapper.tget(id);
|
||||
}
|
||||
|
||||
public ProjectWorkDO getProjectWorkerById(Long id){
|
||||
public ProjectWorkDO getProjectWorkerById(Long id) {
|
||||
return projectMapper.getProjectWorkById(id);
|
||||
}
|
||||
|
||||
|
@ -4,8 +4,8 @@ import com.google.gson.Gson;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import com.jsl.oa.common.constant.BusinessConstants;
|
||||
import com.jsl.oa.mapper.RoleMapper;
|
||||
import com.jsl.oa.model.doData.RoleDO;
|
||||
import com.jsl.oa.model.doData.RoleUserDO;
|
||||
import com.jsl.oa.model.dodata.RoleDO;
|
||||
import com.jsl.oa.model.dodata.RoleUserDO;
|
||||
import com.jsl.oa.utils.redis.RoleRedisUtil;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -44,7 +44,8 @@ public class RoleDAO {
|
||||
return roleMapper.getRoleById(id);
|
||||
} else {
|
||||
log.info("\t\t> 从 Redis 获取数据");
|
||||
List<RoleDO> roleList = gson.fromJson(getRedisData, new TypeToken<List<RoleDO>>() {}.getType());
|
||||
List<RoleDO> roleList = gson.fromJson(getRedisData, new TypeToken<List<RoleDO>>() {
|
||||
}.getType());
|
||||
for (RoleDO roleDO : roleList) {
|
||||
if (roleDO.getId().equals(id)) {
|
||||
return roleDO;
|
||||
@ -64,7 +65,8 @@ public class RoleDAO {
|
||||
return roleList;
|
||||
} else {
|
||||
log.info("\t\t> 从 Redis 获取数据");
|
||||
return gson.fromJson(getRedisData, new TypeToken<List<RoleDO>>() {}.getType());
|
||||
return gson.fromJson(getRedisData, new TypeToken<List<RoleDO>>() {
|
||||
}.getType());
|
||||
}
|
||||
}
|
||||
|
||||
@ -77,7 +79,7 @@ public class RoleDAO {
|
||||
|
||||
}
|
||||
|
||||
public RoleDO getRoleNameByUid(Long uid){
|
||||
public RoleDO getRoleNameByUid(Long uid) {
|
||||
log.info("\t> 执行 DAO 层 RoleDAO.getRoleNameByUid 方法");
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
RoleDO roleDO = roleMapper.getRoleById(getRoleUserByUid(uid).getRid());
|
||||
|
@ -1,7 +1,7 @@
|
||||
package com.jsl.oa.dao;
|
||||
|
||||
import com.jsl.oa.mapper.TagMapper;
|
||||
import com.jsl.oa.model.doData.TagProjectDO;
|
||||
import com.jsl.oa.model.dodata.TagProjectDO;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
@ -3,12 +3,12 @@ package com.jsl.oa.dao;
|
||||
import com.google.gson.Gson;
|
||||
import com.jsl.oa.common.constant.BusinessConstants;
|
||||
import com.jsl.oa.mapper.UserMapper;
|
||||
import com.jsl.oa.model.doData.RoleDO;
|
||||
import com.jsl.oa.model.doData.RoleUserDO;
|
||||
import com.jsl.oa.model.doData.UserDO;
|
||||
import com.jsl.oa.model.voData.UserAllCurrentVO;
|
||||
import com.jsl.oa.model.voData.UserCurrentBackVO;
|
||||
import com.jsl.oa.model.voData.UserEditProfileVO;
|
||||
import com.jsl.oa.model.dodata.RoleDO;
|
||||
import com.jsl.oa.model.dodata.RoleUserDO;
|
||||
import com.jsl.oa.model.dodata.UserDO;
|
||||
import com.jsl.oa.model.vodata.UserAllCurrentVO;
|
||||
import com.jsl.oa.model.vodata.UserCurrentBackVO;
|
||||
import com.jsl.oa.model.vodata.UserEditProfileVO;
|
||||
import com.jsl.oa.utils.Processing;
|
||||
import com.jsl.oa.utils.redis.UserRedisUtil;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
@ -19,8 +19,8 @@ import org.springframework.web.method.annotation.MethodArgumentTypeMismatchExcep
|
||||
* <hr/>
|
||||
* 用于处理异常
|
||||
*
|
||||
* @author xiao_lfeng
|
||||
* @version v1.1.0
|
||||
* @since v1.1.0
|
||||
* @see HttpRequestMethodNotSupportedException
|
||||
* @see DuplicateKeyException
|
||||
* @see HttpMessageNotReadableException
|
||||
@ -28,7 +28,7 @@ import org.springframework.web.method.annotation.MethodArgumentTypeMismatchExcep
|
||||
* @see Exception
|
||||
* @see ClassCopyException
|
||||
* @see MethodArgumentTypeMismatchException
|
||||
* @author xiao_lfeng
|
||||
* @since v1.1.0
|
||||
*/
|
||||
@Slf4j
|
||||
@RestControllerAdvice
|
||||
@ -51,6 +51,7 @@ public class ProcessException {
|
||||
log.warn(e.getMessage(), e);
|
||||
return ResultUtil.error("HttpMessageNotReadable", 400, "请求参数错误");
|
||||
}
|
||||
|
||||
@ExceptionHandler(value = MissingServletRequestParameterException.class)
|
||||
public ResponseEntity<BaseResponse> businessMissingServletRequestParameterException(MissingServletRequestParameterException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.jsl.oa.mapper;
|
||||
|
||||
import com.jsl.oa.model.doData.ConfigDO;
|
||||
import com.jsl.oa.model.dodata.ConfigDO;
|
||||
import org.apache.ibatis.annotations.Insert;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
@ -13,7 +13,7 @@ import org.apache.ibatis.annotations.Update;
|
||||
*
|
||||
* @since v1.1.0
|
||||
* @version v1.1.0
|
||||
* @see com.jsl.oa.model.doData.ConfigDO
|
||||
* @see com.jsl.oa.model.dodata.ConfigDO
|
||||
*/
|
||||
@Mapper
|
||||
public interface InfoMapper {
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.jsl.oa.mapper;
|
||||
|
||||
import com.jsl.oa.model.doData.MessageDO;
|
||||
import com.jsl.oa.model.dodata.MessageDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
import org.apache.ibatis.annotations.Update;
|
||||
@ -12,9 +12,9 @@ import java.util.List;
|
||||
@Mapper
|
||||
public interface MessageMapper {
|
||||
|
||||
@Update("UPDATE organize_oa.oa_message " +
|
||||
"SET `read` = 1, deleted_at = CURRENT_TIMESTAMP " +
|
||||
"WHERE id = #{mid}")
|
||||
@Update("UPDATE organize_oa.oa_message "
|
||||
+ "SET `read` = 1, deleted_at = CURRENT_TIMESTAMP "
|
||||
+ "WHERE id = #{mid}")
|
||||
boolean deleteMessage(Long mid);
|
||||
|
||||
@Select("SELECT * FROM organize_oa.oa_message where id = #{mid}")
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.jsl.oa.mapper;
|
||||
|
||||
import com.jsl.oa.model.doData.ProjectWorkDO;
|
||||
import com.jsl.oa.model.dodata.ProjectWorkDO;
|
||||
import org.apache.ibatis.annotations.Delete;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
@ -12,10 +12,8 @@ public interface ModuleMapper {
|
||||
|
||||
|
||||
|
||||
//@Select("select * from organize_oa.oa_project_work where project_id=#{projectId} and principal_id=#{userId} and type=0")
|
||||
List<ProjectWorkDO> getByProjectId(Integer projectId, Long userId,int is);
|
||||
|
||||
//@Select("select * from organize_oa.oa_project_work where pid=#{sysId} and type=1")
|
||||
List<ProjectWorkDO> getBySysId(Integer sysId, Long userId,int is);
|
||||
|
||||
@Select("select principal_id from organize_oa.oa_project where id=#{projectId}")
|
||||
@ -30,7 +28,7 @@ public interface ModuleMapper {
|
||||
@Select("select * from organize_oa.oa_project_work where pid=#{id} and is_delete=0 and type=1 ")
|
||||
List<ProjectWorkDO> getAllMoudleByPid(Long id);
|
||||
|
||||
@Select("select principal_id from organize_oa.oa_project where id=(select project_id " +
|
||||
"from organize_oa.oa_project_work where oa_project_work.id = #{sysId})")
|
||||
@Select("select principal_id from organize_oa.oa_project where id=(select project_id "
|
||||
+ "from organize_oa.oa_project_work where oa_project_work.id = #{sysId})")
|
||||
Long getPridBySysyid(Integer sysId);
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
package com.jsl.oa.mapper;
|
||||
|
||||
|
||||
import com.jsl.oa.model.doData.NewsDO;
|
||||
import com.jsl.oa.model.dodata.NewsDO;
|
||||
import org.apache.ibatis.annotations.*;
|
||||
|
||||
import java.util.List;
|
||||
@ -10,26 +10,26 @@ import java.util.List;
|
||||
public interface NewsMapper {
|
||||
|
||||
@Select("SELECT * FROM organize_oa.oa_news WHERE id = #{id}")
|
||||
NewsDO selectNewsById( Long id);
|
||||
NewsDO selectNewsById(Long id);
|
||||
|
||||
@Select("SELECT * FROM organize_oa.oa_news WHERE status = #{status}")
|
||||
List<NewsDO> selectNewsByStatus( Integer status);
|
||||
List<NewsDO> selectNewsByStatus(Integer status);
|
||||
|
||||
@Insert("INSERT INTO organize_oa.oa_news(title, content, tags, status) " +
|
||||
"VALUES(#{title}, #{content}, #{tags}, #{status})")
|
||||
@Insert("INSERT INTO organize_oa.oa_news(title, content, tags, status) "
|
||||
+ "VALUES(#{title}, #{content}, #{tags}, #{status})")
|
||||
@Options(useGeneratedKeys = true, keyProperty = "id")
|
||||
void addNews(NewsDO news);
|
||||
|
||||
@Update("UPDATE organize_oa.oa_news SET title = #{title}, content = #{content}, tags = #{tags}, " +
|
||||
"likes = #{likes}, comments = #{comments}, status = #{status}, update_at = CURRENT_TIMESTAMP " +
|
||||
"WHERE id = #{id}")
|
||||
@Update("UPDATE organize_oa.oa_news SET title = #{title}, content = #{content}, tags = #{tags}, "
|
||||
+ "likes = #{likes}, comments = #{comments}, status = #{status}, update_at = CURRENT_TIMESTAMP "
|
||||
+ "WHERE id = #{id}")
|
||||
void updateNews(NewsDO news);
|
||||
|
||||
@Delete("DELETE FROM organize_oa.oa_news WHERE id = #{id}")
|
||||
void deleteNewsById( Long id);
|
||||
void deleteNewsById(Long id);
|
||||
|
||||
@Insert("INSERT INTO organize_oa.oa_news_user(uid,nid)"+
|
||||
"VALUES(#{uid}, #{nid})")
|
||||
void addNewsUser(Long uid,Long nid);
|
||||
@Insert("INSERT INTO organize_oa.oa_news_user(uid,nid)"
|
||||
+ "VALUES(#{uid}, #{nid})")
|
||||
void addNewsUser(Long uid, Long nid);
|
||||
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
package com.jsl.oa.mapper;
|
||||
|
||||
import com.jsl.oa.model.doData.PermissionDO;
|
||||
import com.jsl.oa.model.doData.RolePermissionDO;
|
||||
import com.jsl.oa.model.dodata.PermissionDO;
|
||||
import com.jsl.oa.model.dodata.RolePermissionDO;
|
||||
import org.apache.ibatis.annotations.*;
|
||||
|
||||
import java.util.List;
|
||||
@ -14,7 +14,7 @@ public interface PermissionMapper {
|
||||
|
||||
@Select("SELECT * FROM organize_oa.oa_permissions WHERE id IN " +
|
||||
"(SELECT pid FROM organize_oa.oa_role_permissions WHERE rid IN " +
|
||||
"(SELECT rid FROM organize_oa.oa_role_user WHERE uid = #{uid}))")
|
||||
"(SELECT rid FROM organize_oa.oa_role_user WHERE uid = #{uid}))")
|
||||
List<PermissionDO> permissionUserPid(Long uid);
|
||||
|
||||
@Select("SELECT * FROM organize_oa.oa_permissions where id=#{id}")
|
||||
|
@ -1,13 +1,16 @@
|
||||
package com.jsl.oa.mapper;
|
||||
|
||||
import com.jsl.oa.model.doData.ProjectCuttingDO;
|
||||
import com.jsl.oa.model.doData.ProjectDO;
|
||||
import com.jsl.oa.model.doData.ProjectUserDO;
|
||||
import com.jsl.oa.model.doData.ProjectWorkDO;
|
||||
import com.jsl.oa.model.voData.ProjectInfoVO;
|
||||
import com.jsl.oa.model.voData.ProjectWorkSimpleVO;
|
||||
import com.jsl.oa.model.voData.ProjectWorkVO;
|
||||
import org.apache.ibatis.annotations.*;
|
||||
import com.jsl.oa.model.dodata.ProjectCuttingDO;
|
||||
import com.jsl.oa.model.dodata.ProjectDO;
|
||||
import com.jsl.oa.model.dodata.ProjectUserDO;
|
||||
import com.jsl.oa.model.dodata.ProjectWorkDO;
|
||||
import com.jsl.oa.model.vodata.ProjectInfoVO;
|
||||
import com.jsl.oa.model.vodata.ProjectWorkSimpleVO;
|
||||
import com.jsl.oa.model.vodata.ProjectWorkVO;
|
||||
import org.apache.ibatis.annotations.Insert;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
import org.apache.ibatis.annotations.Update;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -36,7 +39,7 @@ public interface ProjectMapper {
|
||||
ProjectDO tgetProjectById(Integer id);
|
||||
|
||||
@Select("select * from organize_oa.oa_project_work where principal_id=#{uid}")
|
||||
//"(select id from organize_oa.oa_project_work where id in)")
|
||||
//"(select id from organize_oa.oa_project_work where id in)")
|
||||
List<ProjectCuttingDO> projectGetUserInCutting(Long uid);
|
||||
|
||||
@Insert("update organize_oa.oa_project_work set principal_id =#{uid} where id=#{pid}")
|
||||
@ -52,12 +55,12 @@ public interface ProjectMapper {
|
||||
boolean setProjectShow(String setProjectShow);
|
||||
|
||||
//@Select("select * from organize_oa.oa_project where json_extract(tags,'$.tags')" +
|
||||
//"like concat('%',#{tags},'%')")
|
||||
//"like concat('%',#{tags},'%')")
|
||||
|
||||
//@Select("select * from organize_oa.oa_project where is_finish=#{isFinish} and is_delete=false and principal_id=#{userId}")
|
||||
List<ProjectDO>getByIsfinish(Long userId,List<Integer> isFinish);
|
||||
List<ProjectDO> getByIsfinish(Long userId, List<Integer> isFinish);
|
||||
|
||||
List<ProjectDO>getByTags(Long userId,List<String> tags,List<Integer> isFinish);
|
||||
List<ProjectDO> getByTags(Long userId, List<String> tags, List<Integer> isFinish);
|
||||
|
||||
@Select("select * from organize_oa.oa_project where is_delete=false and status=1 and principal_id=#{userId}")
|
||||
List<ProjectDO> get(Long userId);
|
||||
@ -93,10 +96,10 @@ public interface ProjectMapper {
|
||||
//@Select("select * from organize_oa.oa_project_work where is_finish=#{isFinish} and is_delete=false and principal_id =#{userId}")
|
||||
List<ProjectDO> workgetByIsfinish(Long userId, List<Integer> isFinish, Integer is);
|
||||
|
||||
List<ProjectDO> workgetByTags(Long userId, List<String> tags, Integer is,List<Integer> isFinish);
|
||||
List<ProjectDO> workgetByTags(Long userId, List<String> tags, Integer is, List<Integer> isFinish);
|
||||
|
||||
//@Select("select * from organize_oa.oa_project where id in(select project_id from " +
|
||||
//"organize_oa.oa_project_work where is_delete=false and status =1 and principal_id=#{userId} and type=0)")
|
||||
//"organize_oa.oa_project_work where is_delete=false and status =1 and principal_id=#{userId} and type=0)")
|
||||
List<ProjectDO> workget(Long userId, Integer is);
|
||||
|
||||
//@Select("select * from organize_oa.oa_project_work where status=1 and principal_id=#{userId}")
|
||||
@ -107,12 +110,12 @@ public interface ProjectMapper {
|
||||
|
||||
List<ProjectDO> tgetByIsfinish(List<Integer> isFinish);
|
||||
|
||||
List<ProjectDO> tgetBytags(List<String> tags,List<Integer> isFinish);
|
||||
List<ProjectDO> tgetBytags(List<String> tags, List<Integer> isFinish);
|
||||
|
||||
@Select("select * from organize_oa.oa_project_work where id=#{id}")
|
||||
ProjectWorkSimpleVO getWorkById(Integer id);
|
||||
@Select("select * from organize_oa.oa_project_work where id=#{id}")
|
||||
ProjectWorkSimpleVO getWorkById(Integer id);
|
||||
|
||||
@Select("select principal_id from organize_oa.oa_project_work where id=#{pid}")
|
||||
@Select("select principal_id from organize_oa.oa_project_work where id=#{pid}")
|
||||
Long getPirIdbyWorkid(Long pid);
|
||||
|
||||
@Select("select principal_id from organize_oa.oa_project_work where id=#{id}")
|
||||
|
@ -1,7 +1,7 @@
|
||||
package com.jsl.oa.mapper;
|
||||
|
||||
import com.jsl.oa.model.doData.RoleDO;
|
||||
import com.jsl.oa.model.doData.RoleUserDO;
|
||||
import com.jsl.oa.model.dodata.RoleDO;
|
||||
import com.jsl.oa.model.dodata.RoleUserDO;
|
||||
import org.apache.ibatis.annotations.*;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.jsl.oa.mapper;
|
||||
|
||||
import com.jsl.oa.model.doData.TagProjectDO;
|
||||
import com.jsl.oa.model.dodata.TagProjectDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
|
||||
|
@ -1,11 +1,11 @@
|
||||
package com.jsl.oa.mapper;
|
||||
|
||||
import com.jsl.oa.model.doData.RoleDO;
|
||||
import com.jsl.oa.model.doData.RoleUserDO;
|
||||
import com.jsl.oa.model.doData.UserDO;
|
||||
import com.jsl.oa.model.voData.PrincipalSelectVO;
|
||||
import com.jsl.oa.model.voData.UserAllCurrentVO;
|
||||
import com.jsl.oa.model.voData.UserEditProfileVO;
|
||||
import com.jsl.oa.model.dodata.RoleDO;
|
||||
import com.jsl.oa.model.dodata.RoleUserDO;
|
||||
import com.jsl.oa.model.dodata.UserDO;
|
||||
import com.jsl.oa.model.vodata.PrincipalSelectVO;
|
||||
import com.jsl.oa.model.vodata.UserAllCurrentVO;
|
||||
import com.jsl.oa.model.vodata.UserEditProfileVO;
|
||||
import org.apache.ibatis.annotations.Insert;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.doData;
|
||||
package com.jsl.oa.model.dodata;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Data;
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.doData;
|
||||
package com.jsl.oa.model.dodata;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Data;
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.doData;
|
||||
package com.jsl.oa.model.dodata;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Data;
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.doData;
|
||||
package com.jsl.oa.model.dodata;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.doData;
|
||||
package com.jsl.oa.model.dodata;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Data;
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.doData;
|
||||
package com.jsl.oa.model.dodata;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Data;
|
||||
@ -12,8 +12,8 @@ import java.sql.Timestamp;
|
||||
* 映射 oa_project_cutting 数据表内容进入自定义实体类
|
||||
*
|
||||
* @author 筱锋xiao_lfeng
|
||||
* @since v1.1.0
|
||||
* @version v1.1.0
|
||||
* @since v1.1.0
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.doData;
|
||||
package com.jsl.oa.model.dodata;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.doData;
|
||||
package com.jsl.oa.model.dodata;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Data;
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.doData;
|
||||
package com.jsl.oa.model.dodata;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Data;
|
@ -1,5 +1,4 @@
|
||||
|
||||
package com.jsl.oa.model.doData;
|
||||
package com.jsl.oa.model.dodata;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Data;
|
||||
@ -25,4 +24,4 @@ public class ProjectWorkDO {
|
||||
private boolean status;
|
||||
private Timestamp beginTime;
|
||||
private Timestamp completeTime;
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.doData;
|
||||
package com.jsl.oa.model.dodata;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.doData;
|
||||
package com.jsl.oa.model.dodata;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Data;
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.doData;
|
||||
package com.jsl.oa.model.dodata;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.doData;
|
||||
package com.jsl.oa.model.dodata;
|
||||
|
||||
import lombok.Data;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.doData;
|
||||
package com.jsl.oa.model.dodata;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Data;
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.doData.info;
|
||||
package com.jsl.oa.model.dodata.info;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.doData.info;
|
||||
package com.jsl.oa.model.dodata.info;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
@ -8,7 +8,7 @@ import java.util.List;
|
||||
@Data
|
||||
public class ProjectShowDO {
|
||||
private String order;
|
||||
private List<com.jsl.oa.model.doData.info.ProjectShowDO.DataDO> data;
|
||||
private List<com.jsl.oa.model.dodata.info.ProjectShowDO.DataDO> data;
|
||||
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@ -22,4 +22,4 @@ public class ProjectShowDO {
|
||||
private String updatedAt;
|
||||
private String author;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.voData;
|
||||
package com.jsl.oa.model.vodata;
|
||||
|
||||
|
||||
import lombok.Getter;
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.voData;
|
||||
package com.jsl.oa.model.vodata;
|
||||
|
||||
import lombok.Data;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.voData;
|
||||
package com.jsl.oa.model.vodata;
|
||||
|
||||
import lombok.Data;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.voData;
|
||||
package com.jsl.oa.model.vodata;
|
||||
|
||||
import lombok.Data;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.voData;
|
||||
package com.jsl.oa.model.vodata;
|
||||
|
||||
import lombok.Data;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.voData;
|
||||
package com.jsl.oa.model.vodata;
|
||||
|
||||
|
||||
import lombok.Data;
|
@ -1,12 +1,7 @@
|
||||
package com.jsl.oa.model.voData;
|
||||
package com.jsl.oa.model.vodata;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.sql.Timestamp;
|
||||
|
||||
@Data
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.voData;
|
||||
package com.jsl.oa.model.vodata;
|
||||
|
||||
import lombok.Data;
|
||||
|
@ -1,6 +1,5 @@
|
||||
package com.jsl.oa.model.voData;
|
||||
package com.jsl.oa.model.vodata;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.voData;
|
||||
package com.jsl.oa.model.vodata;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Data;
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.voData;
|
||||
package com.jsl.oa.model.vodata;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.voData;
|
||||
package com.jsl.oa.model.vodata;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Data;
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.voData;
|
||||
package com.jsl.oa.model.vodata;
|
||||
|
||||
import lombok.Data;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.voData;
|
||||
package com.jsl.oa.model.vodata;
|
||||
|
||||
import lombok.Getter;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.voData;
|
||||
package com.jsl.oa.model.vodata;
|
||||
|
||||
|
||||
import lombok.Data;
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.voData;
|
||||
package com.jsl.oa.model.vodata;
|
||||
|
||||
import lombok.Data;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.voData;
|
||||
package com.jsl.oa.model.vodata;
|
||||
|
||||
import lombok.Getter;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.voData;
|
||||
package com.jsl.oa.model.vodata;
|
||||
|
||||
|
||||
import lombok.Getter;
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.voData;
|
||||
package com.jsl.oa.model.vodata;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.voData;
|
||||
package com.jsl.oa.model.vodata;
|
||||
|
||||
import lombok.Data;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.voData;
|
||||
package com.jsl.oa.model.vodata;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.voData;
|
||||
package com.jsl.oa.model.vodata;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.voData;
|
||||
package com.jsl.oa.model.vodata;
|
||||
|
||||
import lombok.Data;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.voData;
|
||||
package com.jsl.oa.model.vodata;
|
||||
|
||||
import lombok.Data;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.voData;
|
||||
package com.jsl.oa.model.vodata;
|
||||
|
||||
import lombok.Data;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.voData;
|
||||
package com.jsl.oa.model.vodata;
|
||||
|
||||
import lombok.Data;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.voData;
|
||||
package com.jsl.oa.model.vodata;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.voData;
|
||||
package com.jsl.oa.model.vodata;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.voData.business;
|
||||
package com.jsl.oa.model.vodata.business;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.voData.business.info;
|
||||
package com.jsl.oa.model.vodata.business.info;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Data;
|
@ -1,4 +1,4 @@
|
||||
package com.jsl.oa.model.voData.business.info;
|
||||
package com.jsl.oa.model.vodata.business.info;
|
||||
|
||||
import lombok.Data;
|
||||
|
@ -2,8 +2,8 @@ package com.jsl.oa.schedule;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.jsl.oa.mapper.InfoMapper;
|
||||
import com.jsl.oa.model.doData.ConfigDO;
|
||||
import com.jsl.oa.model.voData.business.InfoAboutSecurityKey;
|
||||
import com.jsl.oa.model.dodata.ConfigDO;
|
||||
import com.jsl.oa.model.vodata.business.InfoAboutSecurityKey;
|
||||
import com.jsl.oa.utils.Processing;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
|
@ -1,9 +1,9 @@
|
||||
package com.jsl.oa.services;
|
||||
|
||||
import com.jsl.oa.model.voData.UserChangePasswordVO;
|
||||
import com.jsl.oa.model.voData.UserForgetPasswordVO;
|
||||
import com.jsl.oa.model.voData.UserLoginVO;
|
||||
import com.jsl.oa.model.voData.UserRegisterVO;
|
||||
import com.jsl.oa.model.vodata.UserChangePasswordVO;
|
||||
import com.jsl.oa.model.vodata.UserForgetPasswordVO;
|
||||
import com.jsl.oa.model.vodata.UserLoginVO;
|
||||
import com.jsl.oa.model.vodata.UserRegisterVO;
|
||||
import com.jsl.oa.utils.BaseResponse;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
@ -68,7 +68,7 @@ public interface AuthService {
|
||||
* @param userChangePasswordVO 用户修改密码信息
|
||||
* @return {@link BaseResponse}
|
||||
*/
|
||||
BaseResponse authChangePassword(HttpServletRequest request, UserChangePasswordVO userChangePasswordVO);
|
||||
BaseResponse authChangePassword(UserChangePasswordVO userChangePasswordVO, HttpServletRequest request);
|
||||
|
||||
/**
|
||||
* <h2>用户登出</h2>
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.jsl.oa.services;
|
||||
|
||||
import com.jsl.oa.model.voData.business.info.CarouselVO;
|
||||
import com.jsl.oa.model.vodata.business.info.CarouselVO;
|
||||
import com.jsl.oa.utils.BaseResponse;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
@ -16,9 +16,17 @@ import java.time.LocalDate;
|
||||
*/
|
||||
public interface MessageService {
|
||||
|
||||
BaseResponse messageDelete(Long mid,HttpServletRequest request);
|
||||
BaseResponse messageDelete(Long mid, HttpServletRequest request);
|
||||
|
||||
BaseResponse messageGet(LocalDate begin,LocalDate end,Long page,Long pageSize,Long uid);
|
||||
BaseResponse messageGet(LocalDate begin, LocalDate end, Long page, Long pageSize, Long uid);
|
||||
|
||||
BaseResponse messageGetAll(HttpServletRequest request,LocalDate begin, LocalDate end, Long page, Long pageSize, Long loginId, Long uid);
|
||||
BaseResponse messageGetAll(
|
||||
HttpServletRequest request,
|
||||
LocalDate begin,
|
||||
LocalDate end,
|
||||
Long page,
|
||||
Long pageSize,
|
||||
Long loginId,
|
||||
Long uid
|
||||
);
|
||||
}
|
||||
|
@ -1,8 +1,6 @@
|
||||
package com.jsl.oa.services;
|
||||
|
||||
import com.jsl.oa.utils.BaseResponse;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.jsl.oa.services;
|
||||
|
||||
import com.jsl.oa.model.voData.NewsAddVO;
|
||||
import com.jsl.oa.model.vodata.NewsAddVO;
|
||||
import com.jsl.oa.utils.BaseResponse;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.jsl.oa.services;
|
||||
|
||||
import com.jsl.oa.model.voData.PermissionEditVO;
|
||||
import com.jsl.oa.model.vodata.PermissionEditVO;
|
||||
import com.jsl.oa.utils.BaseResponse;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user