mirror of
https://github.com/luoye663/e5.git
synced 2024-12-26 03:38:53 +00:00
1、增加api异常捕获
2、修改调试模式 3、允许增加多个api列表 4、修改保存key逻辑 5、修改前端为Angular,与当前前端不兼容,等待程序中......
This commit is contained in:
parent
fc9b23122f
commit
3c60f7d5e0
4
pom.xml
4
pom.xml
@ -100,13 +100,13 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.baomidou</groupId>
|
<groupId>com.baomidou</groupId>
|
||||||
<artifactId>mybatis-plus-boot-starter</artifactId>
|
<artifactId>mybatis-plus-boot-starter</artifactId>
|
||||||
<version>3.2.0</version>
|
<version>3.4.1</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<!--Mybatis plus代码生成器-->
|
<!--Mybatis plus代码生成器-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.baomidou</groupId>
|
<groupId>com.baomidou</groupId>
|
||||||
<artifactId>mybatis-plus-generator</artifactId>
|
<artifactId>mybatis-plus-generator</artifactId>
|
||||||
<version>3.2.0</version>
|
<version>3.4.1</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<!--添加redis缓存依赖-->
|
<!--添加redis缓存依赖-->
|
||||||
<dependency>
|
<dependency>
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package io.qyi.e5.bean.core;
|
package io.qyi.e5.bean.core;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
|
||||||
import com.fasterxml.jackson.core.JsonGenerator;
|
import com.fasterxml.jackson.core.JsonGenerator;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import io.qyi.e5.util.ResultUtil;
|
import io.qyi.e5.util.ResultUtil;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.aspectj.lang.JoinPoint;
|
import org.aspectj.lang.JoinPoint;
|
||||||
import org.aspectj.lang.annotation.AfterThrowing;
|
import org.aspectj.lang.annotation.AfterThrowing;
|
||||||
import org.aspectj.lang.annotation.Aspect;
|
import org.aspectj.lang.annotation.Aspect;
|
||||||
@ -25,8 +25,8 @@ import java.io.PrintWriter;
|
|||||||
* @author: 落叶随风
|
* @author: 落叶随风
|
||||||
* @create: 2020-02-16 01:11
|
* @create: 2020-02-16 01:11
|
||||||
**/
|
**/
|
||||||
@Aspect
|
//@Aspect
|
||||||
@Component
|
//@Component
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class WebExceptionAspect {
|
public class WebExceptionAspect {
|
||||||
private final Logger logger = LoggerFactory.getLogger(this.getClass());
|
private final Logger logger = LoggerFactory.getLogger(this.getClass());
|
||||||
|
29
src/main/java/io/qyi/e5/config/APiCode.java
Normal file
29
src/main/java/io/qyi/e5/config/APiCode.java
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
package io.qyi.e5.config;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @program: push
|
||||||
|
* @description:
|
||||||
|
* @author: 落叶随风
|
||||||
|
* @create: 2020-09-30 10:48
|
||||||
|
**/
|
||||||
|
@Getter
|
||||||
|
public enum APiCode {
|
||||||
|
TOKEN_LENGTH_IS_INCORRECT(10000, "token长度不正确"),
|
||||||
|
TOKEN_DOES_NOT_EXIST(10000, "token不存在"),
|
||||||
|
OUTLOOK_QUANTITATIVE(10001, "此账号数量已超过5个"),
|
||||||
|
GITHUBID_NOT_NULL(10002, "github id 不能为空"),
|
||||||
|
OUTLOOK_NAME_NOT_NULL(10002, "outlook名称不能为空!"),
|
||||||
|
OUTLOOK_INSERT_ERROR(10004, "新增失败!");
|
||||||
|
|
||||||
|
|
||||||
|
private int code;
|
||||||
|
private String msg;
|
||||||
|
|
||||||
|
APiCode(int code, String msg) {
|
||||||
|
this.code = code;
|
||||||
|
this.msg = msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
27
src/main/java/io/qyi/e5/config/ResultCode.java
Normal file
27
src/main/java/io/qyi/e5/config/ResultCode.java
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
package io.qyi.e5.config;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @program: push
|
||||||
|
* @description:
|
||||||
|
* @author: 落叶随风
|
||||||
|
* @create: 2020-09-15 16:47
|
||||||
|
**/
|
||||||
|
@Getter
|
||||||
|
public enum ResultCode {
|
||||||
|
SUCCESS(0, "Success"),
|
||||||
|
FAILED(1001, "响应失败"),
|
||||||
|
API_FAILED(1001, "API 响应失败"),
|
||||||
|
VALIDATE_FAILED(1002, "参数校验失败"),
|
||||||
|
ERROR(5000, "未知错误"),
|
||||||
|
NO_PARAMETERS(1003, "缺少参数");
|
||||||
|
|
||||||
|
private int code;
|
||||||
|
private String msg;
|
||||||
|
|
||||||
|
ResultCode(int code, String msg) {
|
||||||
|
this.code = code;
|
||||||
|
this.msg = msg;
|
||||||
|
}
|
||||||
|
}
|
49
src/main/java/io/qyi/e5/config/ResultVO.java
Normal file
49
src/main/java/io/qyi/e5/config/ResultVO.java
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
package io.qyi.e5.config;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @program: push
|
||||||
|
* @description:
|
||||||
|
* @author: 落叶随风
|
||||||
|
* @create: 2020-09-15 16:43
|
||||||
|
**/
|
||||||
|
@Getter
|
||||||
|
public class ResultVO<T> {
|
||||||
|
/**
|
||||||
|
* 状态码,比如1000代表响应成功
|
||||||
|
*/
|
||||||
|
private int code;
|
||||||
|
/**
|
||||||
|
* 响应信息,用来说明响应情况
|
||||||
|
*/
|
||||||
|
private String msg;
|
||||||
|
/**
|
||||||
|
* 响应的具体数据
|
||||||
|
*/
|
||||||
|
private T data;
|
||||||
|
|
||||||
|
public ResultVO(T data) {
|
||||||
|
this(ResultCode.SUCCESS, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ResultVO() {
|
||||||
|
this(ResultCode.SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ResultVO(ResultCode resultCode) {
|
||||||
|
this.code = resultCode.getCode();
|
||||||
|
this.msg = resultCode.getMsg();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ResultVO(int code, String msg) {
|
||||||
|
this.code = code;
|
||||||
|
this.msg = msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ResultVO(ResultCode resultCode, T data) {
|
||||||
|
this.code = resultCode.getCode();
|
||||||
|
this.msg = resultCode.getMsg();
|
||||||
|
this.data = data;
|
||||||
|
}
|
||||||
|
}
|
34
src/main/java/io/qyi/e5/config/exception/APIException.java
Normal file
34
src/main/java/io/qyi/e5/config/exception/APIException.java
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
package io.qyi.e5.config.exception;
|
||||||
|
|
||||||
|
import io.qyi.e5.config.APiCode;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @program: push
|
||||||
|
* @description:
|
||||||
|
* @author: 落叶随风
|
||||||
|
* @create: 2020-09-15 16:42
|
||||||
|
**/
|
||||||
|
@Getter
|
||||||
|
public class APIException extends RuntimeException {
|
||||||
|
private int code;
|
||||||
|
private String msg;
|
||||||
|
|
||||||
|
public APIException() {
|
||||||
|
this(1001, "接口错误");
|
||||||
|
}
|
||||||
|
|
||||||
|
public APIException(String msg) {
|
||||||
|
this(1002, msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
public APIException(APiCode code) {
|
||||||
|
this(code.getCode(), code.getMsg());
|
||||||
|
}
|
||||||
|
|
||||||
|
public APIException(int code, String msg) {
|
||||||
|
super(msg);
|
||||||
|
this.code = code;
|
||||||
|
this.msg = msg;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,88 @@
|
|||||||
|
package io.qyi.e5.config.exception;
|
||||||
|
|
||||||
|
import io.qyi.e5.config.ResultCode;
|
||||||
|
import io.qyi.e5.config.ResultVO;
|
||||||
|
import org.springframework.http.converter.HttpMessageNotReadableException;
|
||||||
|
import org.springframework.validation.BindException;
|
||||||
|
import org.springframework.validation.ObjectError;
|
||||||
|
import org.springframework.web.bind.MethodArgumentNotValidException;
|
||||||
|
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||||
|
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @program: push
|
||||||
|
* @description:
|
||||||
|
* @author: 落叶随风
|
||||||
|
* @create: 2020-09-15 16:41
|
||||||
|
**/
|
||||||
|
@RestControllerAdvice
|
||||||
|
public class ExceptionControllerAdvice {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param e: 用来捕获404,400这种无法到达controller的错误
|
||||||
|
* @Author: 落叶随风
|
||||||
|
* @Date: 2020/9/17 15:17
|
||||||
|
* @Return: * @return: io.qyi.push.config.bean.ResultVO<java.lang.String>
|
||||||
|
*/
|
||||||
|
@ExceptionHandler(APIException.class)
|
||||||
|
public ResultVO<String> APIExceptionHandler(APIException e) {
|
||||||
|
return new ResultVO<>(e.getCode(), e.getMsg());
|
||||||
|
}
|
||||||
|
|
||||||
|
@ExceptionHandler(MethodArgumentNotValidException.class)
|
||||||
|
public ResultVO<String> MethodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e) {
|
||||||
|
ObjectError objectError = e.getBindingResult().getAllErrors().get(0);
|
||||||
|
return new ResultVO<>(ResultCode.VALIDATE_FAILED, objectError.getDefaultMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 参数校验
|
||||||
|
* @param e:
|
||||||
|
* @Author: 落叶随风
|
||||||
|
* @Date: 2020/9/21 11:28
|
||||||
|
* @Return: * @return: io.qyi.push.config.bean.ResultVO<java.lang.String>
|
||||||
|
*/
|
||||||
|
@ExceptionHandler(BindException.class)
|
||||||
|
public ResultVO<String> BindException(BindException e) {
|
||||||
|
ObjectError objectError = e.getBindingResult().getAllErrors().get(0);
|
||||||
|
|
||||||
|
return new ResultVO<>(ResultCode.VALIDATE_FAILED, objectError.getDefaultMessage());
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 无参数
|
||||||
|
* @param e:
|
||||||
|
* @Author: 落叶随风
|
||||||
|
* @Date: 2020/9/17 17:00
|
||||||
|
* @Return: * @return: io.qyi.push.config.bean.ResultVO<java.lang.String>
|
||||||
|
*/
|
||||||
|
@ExceptionHandler(HttpMessageNotReadableException.class)
|
||||||
|
public ResultVO<String> HttpMessageNotReadableException(HttpMessageNotReadableException e) {
|
||||||
|
return new ResultVO<>(ResultCode.NO_PARAMETERS);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*@RestControllerAdvice(basePackages = {"io.qyi.push.api.v1"}) // 注意哦,这里要加上需要扫描的包
|
||||||
|
public class ResponseControllerAdvice implements ResponseBodyAdvice<Object> {
|
||||||
|
@Override
|
||||||
|
public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> aClass) {
|
||||||
|
// 如果接口返回的类型本身就是ResultVO那就没有必要进行额外的操作,返回false
|
||||||
|
return !returnType.getGenericParameterType().equals(ResultVO.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object beforeBodyWrite(Object data, MethodParameter returnType, MediaType mediaType, Class<? extends HttpMessageConverter<?>> aClass, ServerHttpRequest request, ServerHttpResponse response) {
|
||||||
|
// String类型不能直接包装,所以要进行些特别的处理
|
||||||
|
if (returnType.getGenericParameterType().equals(String.class)) {
|
||||||
|
ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
try {
|
||||||
|
// 将数据包装在ResultVO里后,再转换为json字符串响应给前端
|
||||||
|
return objectMapper.writeValueAsString(new ResultVO<>(data));
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
throw new APIException("返回String类型错误");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 将原本的数据包装在ResultVO里
|
||||||
|
return new ResultVO<>(data);
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
}
|
@ -62,23 +62,6 @@ public class UsernamePasswordAuthenticationProvider implements AuthenticationPro
|
|||||||
logger.info("Github 认证: code:{} state:{} Token:", code, state);
|
logger.info("Github 认证: code:{} state:{} Token:", code, state);
|
||||||
Map<String, Object> userInfo_redis = new HashMap<>();
|
Map<String, Object> userInfo_redis = new HashMap<>();
|
||||||
|
|
||||||
/*是否调试模式*/
|
|
||||||
if (isDebug) {
|
|
||||||
List<String> list = new ArrayList<>();
|
|
||||||
list.add("admin");
|
|
||||||
list.add("user");
|
|
||||||
String[] l = list.toArray(new String[list.size()]);
|
|
||||||
String token = EncryptUtil.getInstance().SHA1Hex(UUID.randomUUID().toString());
|
|
||||||
UsernamePasswordAuthenticationToken authenticationToken1 = new UsernamePasswordAuthenticationToken("debugName",
|
|
||||||
"DebugAvatar", adminGithubId, token, "admin", AuthorityUtils.createAuthorityList(l));
|
|
||||||
authenticationToken1.setDetails(authenticationToken);
|
|
||||||
userInfo_redis.put("github_name", "debug");
|
|
||||||
userInfo_redis.put("github_id", adminGithubId);
|
|
||||||
userInfo_redis.put("avatar_url", "https://www.baidu.com");
|
|
||||||
userInfo_redis.put("authority", list);
|
|
||||||
redisUtil.hmset(token_ + token, userInfo_redis, tokenExpire);
|
|
||||||
return authenticationToken1;
|
|
||||||
}
|
|
||||||
if (!redisUtil.hasKey(states + state)) {
|
if (!redisUtil.hasKey(states + state)) {
|
||||||
throw new UsernameNotFoundException("status不存在");
|
throw new UsernameNotFoundException("status不存在");
|
||||||
// return ResultUtil.error(ResultEnum.STATE_HAS_EXPIRED);
|
// return ResultUtil.error(ResultEnum.STATE_HAS_EXPIRED);
|
||||||
|
@ -88,11 +88,6 @@ public class AdminController {
|
|||||||
return "ok";
|
return "ok";
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/test")
|
|
||||||
public String test() {
|
|
||||||
return "ok";
|
|
||||||
}
|
|
||||||
|
|
||||||
@RequestMapping("setAnnouncement")
|
@RequestMapping("setAnnouncement")
|
||||||
public String setAnnouncement(String text) throws IOException {
|
public String setAnnouncement(String text) throws IOException {
|
||||||
File file = ResourceUtils.getFile("classpath:announcement.txt");
|
File file = ResourceUtils.getFile("classpath:announcement.txt");
|
||||||
@ -114,12 +109,10 @@ public class AdminController {
|
|||||||
/*写token信息到redis*/
|
/*写token信息到redis*/
|
||||||
Map<String, Object> userInfo_redis = new HashMap<>();
|
Map<String, Object> userInfo_redis = new HashMap<>();
|
||||||
userInfo_redis.put("github_name", "admin");
|
userInfo_redis.put("github_name", "admin");
|
||||||
userInfo_redis.put("github_id", 0000);
|
userInfo_redis.put("github_id", 10000);
|
||||||
userInfo_redis.put("avatar_url", "https://www.baidu.com");
|
userInfo_redis.put("avatar_url", "https://www.baidu.com");
|
||||||
userInfo_redis.put("authority", list_Authority);
|
userInfo_redis.put("authority", list_Authority);
|
||||||
redisUtil.hmset(token_ + token, userInfo_redis, tokenExpire);
|
redisUtil.hmset(token_ + token, userInfo_redis, tokenExpire);
|
||||||
|
|
||||||
|
|
||||||
// 创建一个已认证的token
|
// 创建一个已认证的token
|
||||||
// UsernamePasswordAuthenticationToken authenticationToken1 = new UsernamePasswordAuthenticationToken(userInfo_redis.get("github_name").toString(),
|
// UsernamePasswordAuthenticationToken authenticationToken1 = new UsernamePasswordAuthenticationToken(userInfo_redis.get("github_name").toString(),
|
||||||
// userInfo_redis.get("github_name").toString(), (int)userInfo_redis.get("github_name"), token, "user", AuthorityUtils.createAuthorityList(Authority));
|
// userInfo_redis.get("github_name").toString(), (int)userInfo_redis.get("github_name"), token, "user", AuthorityUtils.createAuthorityList(Authority));
|
||||||
|
26
src/main/java/io/qyi/e5/outlook/bean/OutlookListVo.java
Normal file
26
src/main/java/io/qyi/e5/outlook/bean/OutlookListVo.java
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
package io.qyi.e5.outlook.bean;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @program: e5
|
||||||
|
* @description:
|
||||||
|
* @author: 落叶随风
|
||||||
|
* @create: 2020-12-10 16:54
|
||||||
|
**/
|
||||||
|
@Data
|
||||||
|
public class OutlookListVo {
|
||||||
|
private int id;
|
||||||
|
private String clientId;
|
||||||
|
private String clientSecret;
|
||||||
|
private Integer cronTimeRandomStart;
|
||||||
|
private Integer cronTimeRandomEnd;
|
||||||
|
/*名称*/
|
||||||
|
private String name;
|
||||||
|
/*描述*/
|
||||||
|
private String describes;
|
||||||
|
/*下次调用时间*/
|
||||||
|
private long nextTime;
|
||||||
|
/*运行状态*/
|
||||||
|
private int status;
|
||||||
|
}
|
@ -10,8 +10,9 @@ import lombok.Data;
|
|||||||
**/
|
**/
|
||||||
@Data
|
@Data
|
||||||
public class OutlookVo {
|
public class OutlookVo {
|
||||||
|
private int id;
|
||||||
private String clientId;
|
private String clientId;
|
||||||
private String clientSecret;
|
private String clientSecret;
|
||||||
private int cronTimeRandomStart;
|
private Integer cronTimeRandomStart;
|
||||||
private int cronTimeRandomEnd;
|
private Integer cronTimeRandomEnd;
|
||||||
}
|
}
|
||||||
|
15
src/main/java/io/qyi/e5/outlook/bean/bo/insertOneBO.java
Normal file
15
src/main/java/io/qyi/e5/outlook/bean/bo/insertOneBO.java
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
package io.qyi.e5.outlook.bean.bo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @program: e5
|
||||||
|
* @description:
|
||||||
|
* @author: 落叶随风
|
||||||
|
* @create: 2020-12-10 15:47
|
||||||
|
**/
|
||||||
|
@Data
|
||||||
|
public class insertOneBO {
|
||||||
|
private String name;
|
||||||
|
private String describe;
|
||||||
|
}
|
@ -4,8 +4,11 @@ package io.qyi.e5.outlook.controller;
|
|||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import io.qyi.e5.bean.result.Result;
|
import io.qyi.e5.bean.result.Result;
|
||||||
import io.qyi.e5.bean.result.ResultEnum;
|
import io.qyi.e5.bean.result.ResultEnum;
|
||||||
|
import io.qyi.e5.config.ResultVO;
|
||||||
import io.qyi.e5.config.security.UsernamePasswordAuthenticationToken;
|
import io.qyi.e5.config.security.UsernamePasswordAuthenticationToken;
|
||||||
|
import io.qyi.e5.outlook.bean.OutlookListVo;
|
||||||
import io.qyi.e5.outlook.bean.OutlookVo;
|
import io.qyi.e5.outlook.bean.OutlookVo;
|
||||||
|
import io.qyi.e5.outlook.bean.bo.insertOneBO;
|
||||||
import io.qyi.e5.outlook.entity.Outlook;
|
import io.qyi.e5.outlook.entity.Outlook;
|
||||||
import io.qyi.e5.outlook.service.IOutlookService;
|
import io.qyi.e5.outlook.service.IOutlookService;
|
||||||
import io.qyi.e5.util.ResultUtil;
|
import io.qyi.e5.util.ResultUtil;
|
||||||
@ -15,6 +18,10 @@ import org.springframework.security.core.Authentication;
|
|||||||
import org.springframework.security.core.context.SecurityContextHolder;
|
import org.springframework.security.core.context.SecurityContextHolder;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
* 前端控制器
|
* 前端控制器
|
||||||
@ -30,15 +37,25 @@ public class OutlookController {
|
|||||||
@Autowired
|
@Autowired
|
||||||
IOutlookService outlookService;
|
IOutlookService outlookService;
|
||||||
|
|
||||||
@PostMapping("/save")
|
@PostMapping("/insertOne")
|
||||||
public Result save(@RequestParam String client_id, @RequestParam String client_secret) {
|
public ResultVO insertOne(@RequestBody insertOneBO bo) {
|
||||||
UsernamePasswordAuthenticationToken authentication = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
|
UsernamePasswordAuthenticationToken authentication = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
|
||||||
if (outlookService.save(client_id, client_secret, authentication.getGithub_id())) {
|
Outlook outlook = outlookService.insertOne(bo.getName(), bo.getDescribe(), authentication.getGithub_id());
|
||||||
return ResultUtil.success();
|
OutlookVo vo = new OutlookVo();
|
||||||
}
|
BeanUtils.copyProperties(outlook, vo);
|
||||||
return ResultUtil.error(ResultEnum.UNKNOWN_ERROR);
|
return new ResultVO<>(vo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/save")
|
||||||
|
public ResultVO save(@RequestParam String client_id, @RequestParam String client_secret,@RequestParam int outlook_id) {
|
||||||
|
UsernamePasswordAuthenticationToken authentication = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
|
||||||
|
if (outlookService.save(client_id, client_secret, outlook_id, authentication.getGithub_id())) {
|
||||||
|
return new ResultVO<>();
|
||||||
|
}
|
||||||
|
return new ResultVO<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@PostMapping("/saveRandomTime")
|
@PostMapping("/saveRandomTime")
|
||||||
public Result saveRandomTime(@RequestParam int cronTime, @RequestParam String crondomTime) {
|
public Result saveRandomTime(@RequestParam int cronTime, @RequestParam String crondomTime) {
|
||||||
String[] split = crondomTime.split("-");
|
String[] split = crondomTime.split("-");
|
||||||
@ -86,4 +103,21 @@ public class OutlookController {
|
|||||||
}
|
}
|
||||||
return ResultUtil.success(vo);
|
return ResultUtil.success(vo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@GetMapping("/getOutlookList")
|
||||||
|
public Result getOutlookList() {
|
||||||
|
UsernamePasswordAuthenticationToken authentication = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
|
||||||
|
int github_id = authentication.getGithub_id();
|
||||||
|
List<Outlook> outlooklist = outlookService.getOutlooklist(github_id);
|
||||||
|
List<OutlookListVo> vo = new ArrayList<>();
|
||||||
|
outlooklist.forEach(outlook -> {
|
||||||
|
OutlookListVo v = new OutlookListVo();
|
||||||
|
BeanUtils.copyProperties(outlook, v);
|
||||||
|
vo.add(v);
|
||||||
|
});
|
||||||
|
return ResultUtil.success(vo);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,9 @@ package io.qyi.e5.outlook.entity;
|
|||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import lombok.experimental.Accessors;
|
import lombok.experimental.Accessors;
|
||||||
@ -58,6 +60,11 @@ public class Outlook implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private Integer cronTimeRandomEnd;
|
private Integer cronTimeRandomEnd;
|
||||||
|
|
||||||
|
/*名称*/
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/*描述*/
|
||||||
|
private String describes;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -12,5 +12,5 @@ import io.qyi.e5.outlook.entity.Outlook;
|
|||||||
* @since 2020-02-24
|
* @since 2020-02-24
|
||||||
*/
|
*/
|
||||||
public interface OutlookMapper extends BaseMapper<Outlook> {
|
public interface OutlookMapper extends BaseMapper<Outlook> {
|
||||||
|
Outlook selectOutlookOne(int id, int github_id);
|
||||||
}
|
}
|
||||||
|
@ -17,13 +17,17 @@ public interface IOutlookService extends IService<Outlook> {
|
|||||||
|
|
||||||
boolean getTokenAndSave(String code,String client_id,String client_secret,String redirect_uri,String grant_type) throws Exception;
|
boolean getTokenAndSave(String code,String client_id,String client_secret,String redirect_uri,String grant_type) throws Exception;
|
||||||
|
|
||||||
boolean save(String client_id,String client_secret,int github_id);
|
Outlook insertOne(String name, String describe, int github_id);
|
||||||
|
|
||||||
boolean saveRandomTime(int github_id,int cron_time,int cron_time_random_start,int cron_time_random_end);
|
boolean save(String client_id, String client_secret, int outlook_id, int github_id);
|
||||||
|
|
||||||
|
boolean saveRandomTime(int github_id, int cron_time, int cron_time_random_start, int cron_time_random_end);
|
||||||
|
|
||||||
int getMailList(Outlook outlook) throws Exception;
|
int getMailList(Outlook outlook) throws Exception;
|
||||||
|
|
||||||
List<Outlook> findAll();
|
List<Outlook> findAll();
|
||||||
|
|
||||||
int deleteInfo(int github_id);
|
int deleteInfo(int github_id);
|
||||||
|
|
||||||
|
List<Outlook> getOutlooklist(int github_id);
|
||||||
}
|
}
|
||||||
|
@ -8,16 +8,19 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.JsonArray;
|
import com.google.gson.JsonArray;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
|
import io.qyi.e5.config.APiCode;
|
||||||
|
import io.qyi.e5.config.exception.APIException;
|
||||||
import io.qyi.e5.outlook.entity.Outlook;
|
import io.qyi.e5.outlook.entity.Outlook;
|
||||||
import io.qyi.e5.outlook.mapper.OutlookMapper;
|
import io.qyi.e5.outlook.mapper.OutlookMapper;
|
||||||
import io.qyi.e5.outlook.service.IOutlookService;
|
import io.qyi.e5.outlook.service.IOutlookService;
|
||||||
import io.qyi.e5.util.netRequest.OkHttpClientUtil;
|
import io.qyi.e5.util.netRequest.OkHttpClientUtil;
|
||||||
import io.qyi.e5.util.netRequest.OkHttpRequestUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -75,35 +78,48 @@ public class OutlookServiceImpl extends ServiceImpl<OutlookMapper, Outlook> impl
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean save(String client_id, String client_secret, int github_id) {
|
public Outlook insertOne(String name, String describe, int github_id) {
|
||||||
|
if (StringUtils.isBlank(name)) {
|
||||||
|
throw new APIException(APiCode.OUTLOOK_NAME_NOT_NULL);
|
||||||
|
}
|
||||||
|
Outlook outlook = new Outlook();
|
||||||
|
outlook.setName(name);
|
||||||
|
outlook.setDescribes(describe);
|
||||||
|
outlook.setGithubId(github_id);
|
||||||
|
logger.info(outlook.toString());
|
||||||
|
if (baseMapper.insert(outlook) != 1) {
|
||||||
|
throw new APIException(APiCode.OUTLOOK_INSERT_ERROR);
|
||||||
|
}
|
||||||
|
return outlook;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean save(String client_id, String client_secret, int outlook_id, int github_id) {
|
||||||
if (github_id == 0) {
|
if (github_id == 0) {
|
||||||
return false;
|
throw new APIException(APiCode.OUTLOOK_NAME_NOT_NULL);
|
||||||
|
}
|
||||||
|
if (outlook_id == 0) {
|
||||||
|
throw new APIException("缺少参数!");
|
||||||
}
|
}
|
||||||
QueryWrapper<Outlook> queryWrapper = new QueryWrapper<>();
|
QueryWrapper<Outlook> queryWrapper = new QueryWrapper<>();
|
||||||
queryWrapper.eq("github_id", github_id)
|
// HashMap<String, Object> sc = new HashMap<>();
|
||||||
.or().eq("client_id", client_id);
|
// sc.put("github_id", github_id);
|
||||||
Outlook outlook1 = baseMapper.selectOne(queryWrapper);
|
// sc.put("id", outlook_id);
|
||||||
// 有数据
|
// queryWrapper.allEq(sc);
|
||||||
if (outlook1 != null) {
|
queryWrapper.eq("github_id", github_id).eq("id", outlook_id);
|
||||||
outlook1.setClientId(client_id)
|
/*2020-12-10 mybatis plus问题导致会被截断*/
|
||||||
.setClientSecret(client_secret);
|
// Outlook outlook1 = baseMapper.selectOne(queryWrapper);
|
||||||
|
|
||||||
int i = baseMapper.update(outlook1, queryWrapper);
|
Outlook outlook1 = baseMapper.selectOutlookOne(outlook_id,github_id );
|
||||||
if (i == 1) {
|
if (outlook1 == null) {
|
||||||
return true;
|
throw new APIException("未查询到此条记录!");
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Outlook outlook = new Outlook();
|
|
||||||
outlook.setClientId(client_id)
|
|
||||||
.setClientSecret(client_secret)
|
|
||||||
.setGithubId(github_id);
|
|
||||||
int i = baseMapper.insert(outlook);
|
|
||||||
if (i == 1) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
outlook1.setClientId(client_id);
|
||||||
return false;
|
outlook1.setClientSecret(client_secret);
|
||||||
|
if (baseMapper.update(outlook1, queryWrapper) != 1) {
|
||||||
|
throw new APIException("更新记录失败!");
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -154,7 +170,7 @@ public class OutlookServiceImpl extends ServiceImpl<OutlookMapper, Outlook> impl
|
|||||||
String message = json.getJSONObject("error").getString("message");
|
String message = json.getJSONObject("error").getString("message");
|
||||||
/*如果出现的错误是没有message中收集的,那么就认为是无法刷新的情况。比如 用户取消了授权、删除了key*/
|
/*如果出现的错误是没有message中收集的,那么就认为是无法刷新的情况。比如 用户取消了授权、删除了key*/
|
||||||
if (!errorCheck(message)) {
|
if (!errorCheck(message)) {
|
||||||
throw new Exception("无法刷新令牌!code:3" + message);
|
throw new Exception("无法刷新令牌!code:3" + message);
|
||||||
}
|
}
|
||||||
logger.info("令牌过期!");
|
logger.info("令牌过期!");
|
||||||
/*刷新令牌*/
|
/*刷新令牌*/
|
||||||
@ -166,7 +182,7 @@ public class OutlookServiceImpl extends ServiceImpl<OutlookMapper, Outlook> impl
|
|||||||
s = MailList(token);
|
s = MailList(token);
|
||||||
json = JSON.parseObject(s);
|
json = JSON.parseObject(s);
|
||||||
if (json.containsKey("error")) {
|
if (json.containsKey("error")) {
|
||||||
throw new Exception("无法刷新令牌!code:2,错误消息: "+ json.getJSONObject("error").getString("message"));
|
throw new Exception("无法刷新令牌!code:2,错误消息: " + json.getJSONObject("error").getString("message"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
logger.info("邮件列表请求成功!" + s);
|
logger.info("邮件列表请求成功!" + s);
|
||||||
@ -207,7 +223,7 @@ public class OutlookServiceImpl extends ServiceImpl<OutlookMapper, Outlook> impl
|
|||||||
head.put("Content-Type", "application/json");
|
head.put("Content-Type", "application/json");
|
||||||
head.put("Authorization", access_token);
|
head.put("Authorization", access_token);
|
||||||
/*不用管邮件内容*/
|
/*不用管邮件内容*/
|
||||||
OkHttpClientUtil.doGet("https://graph.microsoft.com/v1.0/me/messages/" + id, null,head, null);
|
OkHttpClientUtil.doGet("https://graph.microsoft.com/v1.0/me/messages/" + id, null, head, null);
|
||||||
}
|
}
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
@ -216,7 +232,7 @@ public class OutlookServiceImpl extends ServiceImpl<OutlookMapper, Outlook> impl
|
|||||||
Map<String, String> head = new HashMap<>();
|
Map<String, String> head = new HashMap<>();
|
||||||
head.put("Content-Type", "application/json");
|
head.put("Content-Type", "application/json");
|
||||||
head.put("Authorization", access_token);
|
head.put("Authorization", access_token);
|
||||||
String s = OkHttpClientUtil.doGet("https://graph.microsoft.com/v1.0/me/messages?$select=sender,subject",null, head, null);
|
String s = OkHttpClientUtil.doGet("https://graph.microsoft.com/v1.0/me/messages?$select=sender,subject", null, head, null);
|
||||||
logger.debug("请求邮件列表返回数据:" + s);
|
logger.debug("请求邮件列表返回数据:" + s);
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
@ -238,7 +254,7 @@ public class OutlookServiceImpl extends ServiceImpl<OutlookMapper, Outlook> impl
|
|||||||
JSONObject jsonObject = JSON.parseObject(s);
|
JSONObject jsonObject = JSON.parseObject(s);
|
||||||
if (!jsonObject.containsKey("access_token")) {
|
if (!jsonObject.containsKey("access_token")) {
|
||||||
logger.info("返回的access_token字段不存在");
|
logger.info("返回的access_token字段不存在");
|
||||||
throw new Exception("返回的access_token字段不存在,无法刷新令牌! 需要重新授权!" );
|
throw new Exception("返回的access_token字段不存在,无法刷新令牌! 需要重新授权!");
|
||||||
}
|
}
|
||||||
outlook.setRefreshToken(jsonObject.getString("refresh_token"));
|
outlook.setRefreshToken(jsonObject.getString("refresh_token"));
|
||||||
outlook.setAccessToken(jsonObject.getString("access_token"));
|
outlook.setAccessToken(jsonObject.getString("access_token"));
|
||||||
@ -271,4 +287,12 @@ public class OutlookServiceImpl extends ServiceImpl<OutlookMapper, Outlook> impl
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Outlook> getOutlooklist(int github_id) {
|
||||||
|
QueryWrapper<Outlook> qw = new QueryWrapper<Outlook>().eq("github_id", github_id);
|
||||||
|
List<Outlook> outlooks = baseMapper.selectList(qw);
|
||||||
|
return outlooks;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
<mapper namespace="io.qyi.e5.outlook.mapper.OutlookMapper">
|
<mapper namespace="io.qyi.e5.outlook.mapper.OutlookMapper">
|
||||||
|
<select id="selectOutlookOne" resultType="io.qyi.e5.outlook.entity.Outlook">
|
||||||
|
select * from outlook where id = #{id} and github_id = #{github_id}
|
||||||
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
Loading…
Reference in New Issue
Block a user