Browse Source

外网管理端后端代码同步

dev_ycq
21819 2 years ago
parent
commit
5044753d77
  1. 2
      mailbox-lan/src/main/java/com/biutag/lan/service/WorkService.java
  2. 11
      mailbox-outer-admin/pom.xml
  3. 24
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/config/LoginConfig.java
  4. 19
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/config/MyBatisPlusConfig.java
  5. 78
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/controller/HolidayController.java
  6. 49
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/controller/JwtController.java
  7. 74
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/controller/LoginController.java
  8. 149
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/controller/MailController.java
  9. 90
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/controller/UserController.java
  10. 10
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/dto/HolidayDTO.java
  11. 10
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/dto/HolidayRefresh.java
  12. 8
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/dto/HolidayYear.java
  13. 9
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/dto/LoginFormData.java
  14. 16
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/dto/MailFormData.java
  15. 10
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/dto/MailFormPage.java
  16. 8
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/dto/MailID.java
  17. 12
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/dto/MailPageInfo.java
  18. 10
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/dto/PageSet.java
  19. 14
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/dto/TokenDTO.java
  20. 13
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/dto/UserFormData.java
  21. 9
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/dto/UserFormPage.java
  22. 13
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/dto/UserPageInfo.java
  23. 11
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/entity/Holiday.java
  24. 72
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/entity/Mail.java
  25. 22
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/entity/User.java
  26. 14
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/exception/GlobalExceptionHandler.java
  27. 14
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/exception/TokenException.java
  28. 68
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/interceptor/UserLoginInterceptor.java
  29. 10
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/mapper/HolidayMapper.java
  30. 9
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/mapper/MailMapper.java
  31. 9
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/mapper/UserMapper.java
  32. 10
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/service/HolidayService.java
  33. 10
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/service/MailService.java
  34. 10
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/service/UserService.java
  35. 27
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/util/DesensitizedUtil.java
  36. 76
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/util/ExcelUtil.java
  37. 161
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/util/HolidayUtil.java
  38. 107
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/util/JwtUtil.java
  39. 22
      mailbox-outer-admin/src/main/java/com/biutag/outeradmin/util/PhoneEncryptUtil.java
  40. BIN
      mailbox-outer-admin/src/main/resources/excelmodel.xlsx

2
mailbox-lan/src/main/java/com/biutag/lan/service/WorkService.java

@ -51,6 +51,7 @@ public class WorkService extends ServiceImpl<WorkMapper, Work> {
.eq("w.sign_role_id", roleId) .eq("w.sign_role_id", roleId)
// 如果不是市局专班,则需要查询签收部门ID // 如果不是市局专班,则需要查询签收部门ID
.eq(!RoleEnum.MUNICIPAL_DEPT_CLASSES.getRoleId().equals(roleId), "w.sign_dept_id", deptId)); .eq(!RoleEnum.MUNICIPAL_DEPT_CLASSES.getRoleId().equals(roleId), "w.sign_dept_id", deptId));
// .eq("w.sign_dept_id", deptId));
}) })
.ge(StrUtil.isNotBlank(todoQuery.getMailTimeStart()), "TO_CHAR(m.mail_time, 'YYYY-MM-DD')", todoQuery.getMailTimeStart()) .ge(StrUtil.isNotBlank(todoQuery.getMailTimeStart()), "TO_CHAR(m.mail_time, 'YYYY-MM-DD')", todoQuery.getMailTimeStart())
.le(StrUtil.isNotBlank(todoQuery.getMailTimeStartEnd()), "TO_CHAR(m.mail_time, 'YYYY-MM-DD')", todoQuery.getMailTimeStartEnd()) .le(StrUtil.isNotBlank(todoQuery.getMailTimeStartEnd()), "TO_CHAR(m.mail_time, 'YYYY-MM-DD')", todoQuery.getMailTimeStartEnd())
@ -87,6 +88,7 @@ public class WorkService extends ServiceImpl<WorkMapper, Work> {
/** /**
* 查询未签收的信件 * 查询未签收的信件
*
* @param mailId * @param mailId
* @return * @return
*/ */

11
mailbox-outer-admin/pom.xml

@ -64,6 +64,17 @@
<artifactId>mailbox-common</artifactId> <artifactId>mailbox-common</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.12.3</version>
</dependency>
</dependencies> </dependencies>
</project> </project>

24
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/config/LoginConfig.java

@ -0,0 +1,24 @@
package com.biutag.outeradmin.config;
import com.biutag.outeradmin.interceptor.UserLoginInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class LoginConfig implements WebMvcConfigurer {
@Autowired
private UserLoginInterceptor userLoginInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
InterceptorRegistration interceptorRegistration = registry.addInterceptor(userLoginInterceptor);
interceptorRegistration.addPathPatterns("/**");
interceptorRegistration.excludePathPatterns(
"/login",
"/captcha",
"/refresh-token"
);
}
}

19
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/config/MyBatisPlusConfig.java

@ -0,0 +1,19 @@
package com.biutag.outeradmin.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@MapperScan("com.biutag.outeradmin.mapper")
public class MyBatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.POSTGRE_SQL));
return interceptor;
}
}

78
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/controller/HolidayController.java

@ -0,0 +1,78 @@
package com.biutag.outeradmin.controller;
import com.alibaba.fastjson2.JSON;
import com.biutag.outeradmin.dto.HolidayDTO;
import com.biutag.outeradmin.dto.HolidayRefresh;
import com.biutag.outeradmin.dto.HolidayYear;
import com.biutag.outeradmin.entity.Holiday;
import com.biutag.outeradmin.mapper.HolidayMapper;
import com.biutag.outeradmin.service.HolidayService;
import com.biutag.outeradmin.util.HolidayUtil;
import com.biutag.util.StringUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@RequiredArgsConstructor
@RestController
@Api(tags = "节假日接口")
@RequestMapping("/outer/holiday")
public class HolidayController {
private final HolidayService holidayService;
private final HolidayMapper holidayMapper;
@PostMapping("/refresh-holiday")
@ApiOperation("同步节假日信息")
public HolidayRefresh setlist(@RequestBody String year) throws Exception {
HolidayYear getYear = JSON.parseObject(year, HolidayYear.class);
HolidayRefresh holidayRefresh = new HolidayRefresh();
LocalDateTime currentDate = LocalDateTime.now();
String currentYear = Integer.toString(currentDate.getYear());
// String currentYear = "2025";
if (getYear.getYear().equals(currentYear)) {
holidayRefresh.setMessage("success");
} else {
holidayMapper.delete(null);
List<Holiday> holidays = HolidayUtil.getAllHolidayByYear(getYear.getYear());
holidayService.saveBatch(holidays);
holidayRefresh.setMessage("success");
}
holidayRefresh.setHolidayList(getlist());
return holidayRefresh;
}
@RequestMapping("/show-holiday")
@ApiOperation("进入页面显示节假日")
public List<HolidayDTO> getlist() {
List<Holiday> holidayList = holidayService.list();
List<HolidayDTO> result = new ArrayList<>();
for (Holiday holiday : holidayList) {
if (holiday.getHolidayFlag().equals("Y")) {
HolidayDTO holidayDTO = new HolidayDTO();
holidayDTO.setHolidayFlag(holiday.getHolidayFlag());
holidayDTO.setDetail(holiday.getDetail());
holidayDTO.setDate(holiday.getDate());
result.add(holidayDTO);
} else if (holiday.getHolidayFlag().equals("N") && StringUtils.isNotEmpty(holiday.getDetail())) {
HolidayDTO holidayDTO = new HolidayDTO();
holidayDTO.setHolidayFlag(holiday.getHolidayFlag());
holidayDTO.setDetail(holiday.getDetail());
holidayDTO.setDate(holiday.getDate());
result.add(holidayDTO);
}
}
return result;
}
}

49
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/controller/JwtController.java

@ -0,0 +1,49 @@
package com.biutag.outeradmin.controller;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.biutag.outeradmin.dto.TokenDTO;
import com.biutag.outeradmin.entity.User;
import com.biutag.outeradmin.service.UserService;
import com.biutag.outeradmin.util.JwtUtil;
import io.jsonwebtoken.Claims;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
@RequiredArgsConstructor
public class JwtController {
private final UserService userService;
@RequestMapping("/refresh-token")
public TokenDTO refreshToken(@RequestBody String reToken) {
TokenDTO tokenDTOReceived = JSON.parseObject(reToken, TokenDTO.class);
String token = tokenDTOReceived.getRefreshToken();
log.info("refresh_token:{}", token);
try {
Claims claims = JwtUtil.parseJwtToken(token).getPayload();
log.info("refresh token:{}", token);
log.info("claims:{}", claims);
String phone = claims.get("username", String.class);
TokenDTO tokenDTO = new TokenDTO();
User user = userService.getOne(new QueryWrapper<User>().eq("phone", phone));
// 如果用户存在,就生成一个新的令牌
if (user != null) {
String refreshToken = JwtUtil.getNewRefreshToken(token);
String accessToken = JwtUtil.getNewAccessToken(token);
tokenDTO.setRefreshToken(refreshToken);
tokenDTO.setAccessToken(accessToken);
}
log.info("refresh token success:{}", tokenDTO.toString());
return tokenDTO;
} catch (Exception e) {
throw new RuntimeException();
}
}
}

74
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/controller/LoginController.java

@ -0,0 +1,74 @@
package com.biutag.outeradmin.controller;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.biutag.enums.ErrorEnum;
import com.biutag.outeradmin.dto.LoginFormData;
import com.biutag.outeradmin.dto.TokenDTO;
import com.biutag.outeradmin.entity.User;
import com.biutag.outeradmin.mapper.UserMapper;
import com.biutag.outeradmin.service.UserService;
import com.biutag.outeradmin.util.JwtUtil;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RequiredArgsConstructor
@RestController
@Slf4j
public class LoginController {
private final UserService userService;
private final UserMapper userMapper;
private static String randomCaptcha = "";
@RequestMapping("/login")
public TokenDTO login(@RequestBody String formData, HttpServletRequest request) {
LoginFormData data = JSON.parseObject(formData, LoginFormData.class);
TokenDTO tokens = new TokenDTO();
if (!data.getCaptcha().equals(randomCaptcha)) {
tokens.setStateCode(ErrorEnum.CAPTCHA_ERROR.getCode());
return tokens;
} else {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("phone", data.getAccount());
User user = userService.getOne(queryWrapper, false);
if (user == null) {
tokens.setStateCode(ErrorEnum.LOGIN_ACCOUNT_ERROR.getCode());
return tokens;
} else {
tokens.setAccessToken(JwtUtil.buildJwtToken(data.getAccount(), data.getCaptcha(), false));
tokens.setRefreshToken(JwtUtil.buildJwtToken(data.getAccount(), data.getCaptcha(), true));
log.info("refresh_token:{}", tokens.getRefreshToken());
tokens.setStateCode(ErrorEnum.SUCCESS.getCode());
return tokens;
}
}
}
@RequestMapping("/captcha")
public String captcha(@RequestBody String formData) {
LoginFormData data = JSON.parseObject(formData, LoginFormData.class);
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("phone", data.getAccount());
User user = userService.getOne(queryWrapper, false);
if (user == null) {
return Integer.toString(ErrorEnum.LOGIN_ACCOUNT_ERROR.getCode());
} else {
randomCaptcha = Integer.toString((int) ((Math.random() * 9 + 1) * 100000));
System.out.println(randomCaptcha);
return randomCaptcha;
}
}
@RequestMapping("/logout")
public int logout() {
log.info("用户已登出");
return ErrorEnum.SUCCESS.getCode();
}
}

149
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/controller/MailController.java

@ -0,0 +1,149 @@
package com.biutag.outeradmin.controller;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.biutag.outeradmin.dto.*;
import com.biutag.outeradmin.entity.*;
import com.biutag.outeradmin.mapper.MailMapper;
import com.biutag.outeradmin.service.MailService;
import com.biutag.outeradmin.util.DesensitizedUtil;
import com.biutag.outeradmin.util.ExcelUtil;
import com.biutag.util.StringUtils;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.List;
@RequiredArgsConstructor
@RequestMapping("/mailbox")
@RestController
public class MailController {
private final MailService mailService;
private final MailMapper mailMapper;
/**
* 查询所有信件
*
* @return 信件列表json
*/
@RequestMapping("/list")
public MailPageInfo list(@RequestBody String req) {
PageSet pageSet = JSON.parseObject(req, PageSet.class);
Page<Mail> page = new Page<>(pageSet.getCurrentPage(), pageSet.getPageSize());
List<Mail> mailPage = mailMapper.selectPage(page, null).getRecords();
pageSet.setTotalSize((int) page.getTotal());
MailPageInfo result = new MailPageInfo();
result.setMails(mailPage);
result.setPageSet(pageSet);
return result;
}
/**
* 根据前端表格数据查询指定信件
*
* @param form 前端信件表单数据
* @return 指定信件json
*/
@RequestMapping("/list-submit")
public MailPageInfo siftList(@RequestBody String form) {
MailFormPage mailFormPage = JSON.parseObject(form, MailFormPage.class);
QueryWrapper<Mail> queryWrapper = new QueryWrapper<>();
if (mailFormPage != null && mailFormPage.getFormData() != null && mailFormPage.getPageData() != null) {
MailFormData mailFormData = mailFormPage.getFormData();
if (StringUtils.isNotEmpty(mailFormData.getEvaluate())) {
switch (mailFormData.getEvaluate()) {
case "不满意":
mailFormData.setEvaluate("NOT_SATISFIED");
break;
case "基本满意":
mailFormData.setEvaluate("BASICALLY_SATISFIED");
break;
case "满意":
mailFormData.setEvaluate("SATISFIED");
break;
}
}
queryWrapper.lambda().like(StringUtils.isNotEmpty(mailFormData.getContactName()), Mail::getContactName, mailFormData.getContactName())
.like(StringUtils.isNotEmpty(mailFormData.getContactPhone()), Mail::getContactPhone, mailFormData.getContactPhone())
.like(StringUtils.isNotEmpty(mailFormData.getContactIdCard()), Mail::getContactIdCard, mailFormData.getContactIdCard())
.like(StringUtils.isNotEmpty(mailFormData.getId()), Mail::getId, mailFormData.getId())
.like(StringUtils.isNotEmpty(mailFormData.getContent()), Mail::getContent, mailFormData.getContent())
.eq(StringUtils.isNotEmpty(mailFormData.getEvaluate()), Mail::getSatisfaction, mailFormData.getEvaluate());
if (CollectionUtils.isNotEmpty(mailFormData.getDate()) && mailFormData.getDate().size() == 2) {
queryWrapper.lambda().between(Mail::getCreateTime, mailFormData.getDate().get(0), mailFormData.getDate().get(1));
}
}
PageSet pageSet = mailFormPage.getPageData();
Page<Mail> page = new Page<>(pageSet.getCurrentPage(), pageSet.getPageSize());
List<Mail> mailPage = mailMapper.selectPage(page, queryWrapper).getRecords();
for (Mail mail : mailPage) {
mail.setContactIdCard(DesensitizedUtil.encryptIDCard(mail.getContactIdCard()));
mail.setContactPhone(DesensitizedUtil.encryptPhone(mail.getContactPhone()));
if (StringUtils.isNotEmpty(mail.getSatisfaction())) {
switch (mail.getSatisfaction()) {
case "SATISFIED":
mail.setSatisfaction("满意");
break;
case "NOT_SATISFIED":
mail.setSatisfaction("不满意");
break;
case "BASICALLY_SATISFIED":
mail.setSatisfaction("基本满意");
break;
}
}
}
pageSet.setTotalSize((int) page.getTotal());
MailPageInfo result = new MailPageInfo();
result.setMails(mailPage);
result.setPageSet(pageSet);
return result;
}
/**
* 查询指定信件详情
*
* @param id 信件ID
* @return 指定信件详情json
*/
@RequestMapping("/detail")
public String detail(@RequestBody String id) {
MailID mailID = JSON.parseObject(id, MailID.class);
//TODO 这里根据ID查询数据库,记得删掉
Mail mail = mailService.getById(mailID.getID());
mail.setContactIdCard(DesensitizedUtil.encryptIDCard(mail.getContactIdCard()));
mail.setContactPhone(DesensitizedUtil.encryptPhone(mail.getContactPhone()));
return JSON.toJSONString(mail);
}
@RequestMapping("/exportexcel")
public void exportexcel(HttpServletResponse response, @RequestBody String form) throws IOException {
MailFormPage formPage = JSON.parseObject(form, MailFormPage.class);
QueryWrapper<Mail> queryWrapper = new QueryWrapper<>();
if (formPage != null && formPage.getFormData() != null && formPage.getPageData() != null) {
MailFormData formData = formPage.getFormData();
queryWrapper.lambda().like(StringUtils.isNotEmpty(formData.getContactName()), Mail::getContactName, formData.getContactName())
.like(StringUtils.isNotEmpty(formData.getContactPhone()), Mail::getContactPhone, formData.getContactPhone())
.like(StringUtils.isNotEmpty(formData.getContactIdCard()), Mail::getContactIdCard, formData.getContactIdCard())
.like(StringUtils.isNotEmpty(formData.getId()), Mail::getId, formData.getId())
.like(StringUtils.isNotEmpty(formData.getContent()), Mail::getContent, formData.getContent());
if (CollectionUtils.isNotEmpty(formData.getDate()) && formData.getDate().size() == 2) {
queryWrapper.lambda().between(Mail::getCreateTime, formData.getDate().get(0), formData.getDate().get(1));
}
}
List<Mail> mailPage = mailMapper.selectList(queryWrapper);
for (Mail mail : mailPage) {
mail.setContactIdCard(DesensitizedUtil.encryptIDCard(mail.getContactIdCard()));
mail.setContactPhone(DesensitizedUtil.encryptPhone(mail.getContactPhone()));
}
ExcelUtil.exportExcel(response, mailPage);
}
}

90
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/controller/UserController.java

@ -0,0 +1,90 @@
package com.biutag.outeradmin.controller;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.biutag.outeradmin.dto.PageSet;
import com.biutag.outeradmin.dto.UserFormData;
import com.biutag.outeradmin.dto.UserFormPage;
import com.biutag.outeradmin.dto.UserPageInfo;
import com.biutag.outeradmin.entity.*;
import com.biutag.outeradmin.mapper.UserMapper;
import com.biutag.outeradmin.service.UserService;
import com.biutag.outeradmin.util.DesensitizedUtil;
import com.biutag.util.StringUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
@RequestMapping("/user")
@RestController
@RequiredArgsConstructor
public class UserController {
private final UserMapper userMapper;
private final UserService userService;
@RequestMapping("/list-submit")
public UserPageInfo siftList(@RequestBody String form) {
UserFormPage userFormPage = JSON.parseObject(form, UserFormPage.class);
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
if (userFormPage != null && userFormPage.getFormData() != null && userFormPage.getPageData() != null) {
UserFormData formData = userFormPage.getFormData();
queryWrapper.lambda().like(StringUtils.isNotEmpty(formData.getRealName()), User::getRealName, formData.getRealName())
.like(StringUtils.isNotEmpty(formData.getPhone()), User::getPhone, formData.getPhone())
.like(StringUtils.isNotEmpty(formData.getIdCard()), User::getIdCard, formData.getIdCard());
if (CollectionUtils.isNotEmpty(formData.getDate()) && formData.getDate().size() == 2) {
queryWrapper.lambda().between(User::getCreateTime, formData.getDate().get(0), formData.getDate().get(1));
}
}
PageSet pageSet = userFormPage.getPageData();
Page<User> page = new Page<>(pageSet.getCurrentPage(), pageSet.getPageSize());
List<User> userPage = userMapper.selectPage(page, queryWrapper).getRecords();
for (User user : userPage) {
user.setIdCard(DesensitizedUtil.encryptIDCard(user.getIdCard()));
user.setPhone(DesensitizedUtil.encryptPhone(user.getPhone()));
}
pageSet.setTotalSize((int) page.getTotal());
UserPageInfo result = new UserPageInfo();
result.setUsers(userPage);
result.setPageSet(pageSet);
return result;
}
@RequestMapping("/add-user")
public String addUser(@RequestBody String form) {
UserFormData userForm = JSON.parseObject(form, UserFormData.class);
User user = new User();
user.setRealName(userForm.getRealName());
user.setPhone(userForm.getPhone());
user.setIdCard(userForm.getIdCard());
LocalDateTime createTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
user.setCreateTime(simpleDateFormat.parse(createTime.format(formatter)));
userMapper.insert(user);
return "success";
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
@RequestMapping("/delete-user")
public String deleteUser(@RequestBody String id) {
User user = JSON.parseObject(id, User.class);
userMapper.deleteById(user.getId());
return "success";
}
}

10
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/dto/HolidayDTO.java

@ -0,0 +1,10 @@
package com.biutag.outeradmin.dto;
import lombok.Data;
@Data
public class HolidayDTO {
private String date;
private String holidayFlag;
private String detail;
}

10
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/dto/HolidayRefresh.java

@ -0,0 +1,10 @@
package com.biutag.outeradmin.dto;
import lombok.Data;
import java.util.List;
@Data
public class HolidayRefresh {
private List<HolidayDTO> holidayList;
private String message;
}

8
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/dto/HolidayYear.java

@ -0,0 +1,8 @@
package com.biutag.outeradmin.dto;
import lombok.Data;
@Data
public class HolidayYear {
private String year;
}

9
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/dto/LoginFormData.java

@ -0,0 +1,9 @@
package com.biutag.outeradmin.dto;
import lombok.Data;
@Data
public class LoginFormData {
private String account;
private String captcha;
}

16
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/dto/MailFormData.java

@ -0,0 +1,16 @@
package com.biutag.outeradmin.dto;
import lombok.Data;
import java.util.List;
@Data
public class MailFormData {
private List<String> date;
private String contactName;
private String contactPhone;
private String contactIdCard;
private String id;
private String content;
private String evaluate;
}

10
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/dto/MailFormPage.java

@ -0,0 +1,10 @@
package com.biutag.outeradmin.dto;
import lombok.Data;
@Data
public class MailFormPage {
private MailFormData formData;
private PageSet pageData;
}

8
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/dto/MailID.java

@ -0,0 +1,8 @@
package com.biutag.outeradmin.dto;
import lombok.Data;
@Data
public class MailID {
private String ID;
}

12
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/dto/MailPageInfo.java

@ -0,0 +1,12 @@
package com.biutag.outeradmin.dto;
import com.biutag.outeradmin.entity.Mail;
import lombok.Data;
import java.util.List;
@Data
public class MailPageInfo {
private List<Mail> mails;
private PageSet pageSet;
}

10
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/dto/PageSet.java

@ -0,0 +1,10 @@
package com.biutag.outeradmin.dto;
import lombok.Data;
@Data
public class PageSet {
private int currentPage;
private int pageSize;
private int totalSize;
}

14
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/dto/TokenDTO.java

@ -0,0 +1,14 @@
package com.biutag.outeradmin.dto;
import lombok.Data;
import org.apache.poi.ss.formula.functions.T;
import java.util.List;
@Data
public class TokenDTO {
private String accessToken;
private String refreshToken;
private int stateCode;
private List<T> list;
}

13
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/dto/UserFormData.java

@ -0,0 +1,13 @@
package com.biutag.outeradmin.dto;
import lombok.Data;
import java.util.List;
@Data
public class UserFormData {
private List<String> date;
private String realName;
private String phone;
private String idCard;
}

9
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/dto/UserFormPage.java

@ -0,0 +1,9 @@
package com.biutag.outeradmin.dto;
import lombok.Data;
@Data
public class UserFormPage {
private UserFormData formData;
private PageSet pageData;
}

13
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/dto/UserPageInfo.java

@ -0,0 +1,13 @@
package com.biutag.outeradmin.dto;
import com.biutag.outeradmin.dto.PageSet;
import com.biutag.outeradmin.entity.User;
import lombok.Data;
import java.util.List;
@Data
public class UserPageInfo {
private List<User> users;
private PageSet pageSet;
}

11
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/entity/Holiday.java

@ -0,0 +1,11 @@
package com.biutag.outeradmin.entity;
import lombok.Data;
@Data
public class Holiday {
private Integer id;
private String date;
private String holidayFlag;
private String detail;
}

72
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/entity/Mail.java

@ -0,0 +1,72 @@
package com.biutag.outeradmin.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.util.Date;
@Data
public class Mail {
@TableId
private String id;
/**
* 联系人姓名
*/
private String contactName;
/**
* 联系人性别
*/
private String contactSex;
/**
* 联系人身份证号码
*/
private String contactIdCard;
/**
* 联系人手机号码
*/
private String contactPhone;
/**
* 案件编号
*/
private String caseNumber;
/**
* 内容
*/
private String content;
/**
* 附件
*/
private String attachments;
/**
* 用户ID
*/
private Integer userId;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
// /**
// * 评价
// */
// private String evaluate;
/**
* 是否满意
*/
private String satisfaction;
}

22
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/entity/User.java

@ -0,0 +1,22 @@
package com.biutag.outeradmin.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;
@Data
@TableName("\"user\"")
public class User {
@TableId
private Integer id;
private String openid;
private String nickName;
private Date createTime;
private String idCard;
private String realName;
private String phone;
private Date updateTime;
private Date faceAuthTime;
}

14
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/exception/GlobalExceptionHandler.java

@ -0,0 +1,14 @@
package com.biutag.outeradmin.exception;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(TokenException.class)
public String handleTokenException(TokenException e, HttpServletResponse response) {
response.setStatus(e.getCode());
return e.getMessage();
}
}

14
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/exception/TokenException.java

@ -0,0 +1,14 @@
package com.biutag.outeradmin.exception;
public class TokenException extends RuntimeException{
private int code;
public TokenException(int code, String message) {
super(message);
this.code = code;
}
public int getCode() {
return code;
}
}

68
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/interceptor/UserLoginInterceptor.java

@ -0,0 +1,68 @@
package com.biutag.outeradmin.interceptor;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.biutag.outeradmin.entity.User;
import com.biutag.outeradmin.service.UserService;
import com.biutag.outeradmin.util.JwtUtil;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.ExpiredJwtException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import java.util.Date;
@Slf4j
@Component
public class UserLoginInterceptor implements HandlerInterceptor {
@Autowired
private UserService userService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String token = request.getHeader("Authorization");
if (token != null && token.startsWith("Bearer ")) {
token = token.substring(7);
try {
Claims claims = JwtUtil.parseJwtToken(token).getPayload();
String name = claims.get("username", String.class);
Date date = claims.getExpiration();
if (name != null && date != null && date.after(new Date())) {
log.info("用户{}已登录", name);
return true;
}
} catch (Exception e) {
if (e instanceof ExpiredJwtException) {
response.setStatus(401);
log.info("用户未登录或长时间未操作导致登陆失效");
return false;
}
throw new RuntimeException("Token无效或过期");
}
}
return false;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
if (ex == null) {
String token = request.getHeader("Authorization");
token = token.substring(7);
Claims claims = JwtUtil.parseJwtToken(token).getPayload();
String phone = claims.get("username", String.class);
User user = userService.getOne(new QueryWrapper<User>().eq("phone", phone));
// 如果用户存在,就生成一个新的令牌
if (user != null) {
String newToken = JwtUtil.getNewAccessToken(token);
// 将新的令牌添加到响应头中
response.setHeader("Authorization", "Bearer " + newToken);
log.info("用户{}的令牌已更新", phone);
}
}
}
}

10
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/mapper/HolidayMapper.java

@ -0,0 +1,10 @@
package com.biutag.outeradmin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.biutag.outeradmin.entity.Holiday;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface HolidayMapper extends BaseMapper<Holiday> {
}

9
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/mapper/MailMapper.java

@ -0,0 +1,9 @@
package com.biutag.outeradmin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.biutag.outeradmin.entity.Mail;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface MailMapper extends BaseMapper<Mail> {
}

9
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/mapper/UserMapper.java

@ -0,0 +1,9 @@
package com.biutag.outeradmin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.biutag.outeradmin.entity.User;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper extends BaseMapper<User> {
}

10
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/service/HolidayService.java

@ -0,0 +1,10 @@
package com.biutag.outeradmin.service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.biutag.outeradmin.entity.Holiday;
import com.biutag.outeradmin.mapper.HolidayMapper;
import org.springframework.stereotype.Service;
@Service
public class HolidayService extends ServiceImpl<HolidayMapper, Holiday> {
}

10
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/service/MailService.java

@ -0,0 +1,10 @@
package com.biutag.outeradmin.service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.biutag.outeradmin.entity.Mail;
import com.biutag.outeradmin.mapper.MailMapper;
import org.springframework.stereotype.Service;
@Service
public class MailService extends ServiceImpl<MailMapper, Mail> {
}

10
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/service/UserService.java

@ -0,0 +1,10 @@
package com.biutag.outeradmin.service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.biutag.outeradmin.entity.User;
import com.biutag.outeradmin.mapper.UserMapper;
import org.springframework.stereotype.Service;
@Service
public class UserService extends ServiceImpl<UserMapper, User> {
}

27
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/util/DesensitizedUtil.java

@ -0,0 +1,27 @@
package com.biutag.outeradmin.util;
import com.biutag.util.StringUtils;
/**
* 身份证以及手机号脱敏处理工具类
*/
public class DesensitizedUtil {
public static String encryptIDCard(String idCard) {
if (StringUtils.isNotBlank(idCard)) {
if (idCard.length() == 15) {
idCard = idCard.replaceAll("(\\w{6})\\w*(\\w{4})", "$1******$2");
}
if (idCard.length() == 18) {
idCard = idCard.replaceAll("(\\w{6})\\w*(\\w{4})", "$1*********$2");
}
}
return idCard;
}
public static String encryptPhone(String phone) {
if (StringUtils.isNotBlank(phone)) {
phone = phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
}
return phone;
}
}

76
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/util/ExcelUtil.java

@ -0,0 +1,76 @@
package com.biutag.outeradmin.util;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.fill.FillConfig;
import com.alibaba.excel.write.metadata.fill.FillWrapper;
import com.biutag.outeradmin.entity.Mail;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.*;
public class ExcelUtil {
public static void exportExcel(HttpServletResponse response,List<Mail> mailPage) throws IOException {
// 模板文件
// String templateFile = "/excelmodel.xlsx";
Resource resource = new ClassPathResource("excelmodel.xlsx");
InputStream is = resource.getInputStream();
// long date = new Date().getTime();
Calendar calendar = Calendar.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(formatter.format(calendar.getTime()));
String name = formatter.format(calendar.getTime())+".xlsx";
String fileName = new String(name.getBytes());
response.setContentType("application/octet-stream");
response.setCharacterEncoding("utf8");
response.setHeader("Content-disposition", "attachment;filename=" + fileName);
// 根据模板文件生成目标文件
ExcelWriter excelWriter = EasyExcel
.write(response.getOutputStream(), Mail.class)
.withTemplate(is)
// 单独设置单元格格式
// .registerWriteHandler(new CellStyleHandler())
.build();
WriteSheet writeSheet = EasyExcel.writerSheet().build();
// 每次都会重新生成新的一行,而不是使用下面的空行
FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
// 第一种占位符替换
// Map<String, Object> map = new HashMap<String, Object>();
// map.put("reportDate", reportDate);
// excelWriter.fill(map, writeSheet);
// 第二种占位符替换,这里定义了 hisData
System.out.println(mailPage);
excelWriter.fill(new FillWrapper("mailPage",mailPage),fillConfig, writeSheet);
excelWriter.finish();
}
//
// private static List<MailDto> mailData(){
// List<MailDto> resList = new ArrayList<>();
// MailDto mailData = MailDto.builder()
// .contactName("today")
// .contactIdCard("34.211")
// .contactPhone("1.222")
// .caseNumber("34.211")
// .createTime(new Date())
// .build();
// resList.add(mailData);
// return resList;
// }
}

161
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/util/HolidayUtil.java

@ -0,0 +1,161 @@
package com.biutag.outeradmin.util;
import com.biutag.outeradmin.entity.Holiday;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
public class HolidayUtil {
/**
* 发送get请求
*/
private static String get(String url){
StringBuilder inputLine = new StringBuilder();
String read;
try {
HttpURLConnection urlConnection = (HttpURLConnection) new URL(url).openConnection();
urlConnection.setReadTimeout(30 * 1000);
urlConnection.setConnectTimeout(30 * 1000);
urlConnection.setRequestProperty("Charset", "UTF-8");
urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36)");
BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), StandardCharsets.UTF_8));
while ((read = in.readLine()) != null) {
inputLine.append(read);
}
in.close();
} catch (IOException e) {
e.printStackTrace();
}
return inputLine.toString();
}
public static List<Holiday> getAllHolidayByYear(String year) throws IOException {
List<Holiday> allDateDayList = new ArrayList<>();
// SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
// ArrayList<HolidayVo> holidayVoList = new ArrayList<>();
// HashMap<String, HolidayVo> hashMap = new HashMap<>();
//查询全年日历包含周末
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
List<String> allDateList = new ArrayList<>();
LocalDate startDate = LocalDate.of(Integer.parseInt(year.trim()), 1, 1);
LocalDate endDate = startDate;
while (Integer.parseInt(year) == endDate.getYear()) {
Holiday holiday = new Holiday();
DayOfWeek week = endDate.getDayOfWeek();
if(week == DayOfWeek.SATURDAY ) {
holiday.setHolidayFlag("Y");
holiday.setDate(endDate.format(formatter));
holiday.setDetail("周六");
allDateDayList.add(holiday);
}else if(week == DayOfWeek.SUNDAY){
holiday.setHolidayFlag("Y");
holiday.setDate(endDate.format(formatter));
holiday.setDetail("周日");
allDateDayList.add(holiday);
}else{
holiday.setHolidayFlag("N");
holiday.setDate(endDate.format(formatter));
allDateDayList.add(holiday);
}
endDate = endDate.plusDays(1L);
}
//查询全年节假日、调休
String holidayJson = HolidayUtil.get("https://timor.tech/api/holiday/year/"+year + "/");
ObjectMapper mapper = new ObjectMapper();
Map holidayMap = mapper.readValue(holidayJson,Map.class);
LinkedHashMap holidayList = (LinkedHashMap)holidayMap.get("holiday");
// if(holidayList == null){
//
// }
holidayList.forEach((key,value) -> {
Holiday holiday = new Holiday();
Map value1 = (Map) value;
String dateTime = value1.get("date").toString();
holiday.setDate(dateTime);
if(value1.get("name").toString().contains("补班")){
holiday.setDetail("正常上班");
holiday.setHolidayFlag("N");
}else {
holiday.setDetail(value1.get("name").toString());
holiday.setHolidayFlag("Y");
}
for(int i = 0;i<allDateDayList.size();i++){
if (allDateDayList.get(i).getDate().equals(holiday.getDate())){
String detail = holiday.getDetail();
StringBuilder sb = new StringBuilder();
for (int j = 0; j < detail.length(); j++) {
char c = detail.charAt(j);
if (sb.indexOf(String.valueOf(c)) == -1) {
sb.append(c);
}
}
String result = sb.toString();
allDateDayList.remove(allDateDayList.get(i));
holiday.setDetail(result);
allDateDayList.add(holiday);
}
}
});
Collections.sort(allDateDayList, (o1, o2) -> {
Integer i = o1.getDate().compareTo(o2.getDate());
return i;
});
for(Holiday holiday : allDateDayList){
System.out.println(holiday);
}
return allDateDayList;
}
// public static Map<String,List<HolidayVo>> HolidayHandle(List<Holiday> list){
// Map<String,List<HolidayVo>> map = new HashMap<String,List<HolidayVo>>();
// for(Holiday holiday : list){
// HolidayVo holidayVo = new HolidayVo();
//
// if (holiday.getDetail()==null){
// continue;
// }else if(holiday.getDetail().contains("初")||holiday.getDetail().contains("元旦")||holiday.getDetail().contains("节")||holiday.getDetail().contains("周")){
// holidayVo.setContent(holiday.getDetail());
// }else if(holiday.getDetail().contains("正常上班")){
// holidayVo.setContent(holiday.getDetail());
// }
// String mouth = holiday.getDate().substring(5,7);
// holidayVo.setWorkingday(holiday.getDate().substring(8,10));
//
// if (map.containsKey("mouth"+mouth)){
// List<HolidayVo> listofmap = map.get("mouth"+mouth);
// listofmap.add(holidayVo);
// }else {
// List<HolidayVo> listHolidayVo = new ArrayList<>();
// listHolidayVo.add(holidayVo);
// map.put("mouth"+mouth,listHolidayVo);
// }
// System.out.println(holidayVo);
// }
// return map;
// }
}

107
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/util/JwtUtil.java

@ -0,0 +1,107 @@
package com.biutag.outeradmin.util;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.JwsHeader;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import io.jsonwebtoken.security.SecureDigestAlgorithm;
import lombok.extern.slf4j.Slf4j;
import javax.crypto.SecretKey;
import java.time.Instant;
import java.util.Date;
@Slf4j
public class JwtUtil {
// TODO 正式上线以后需要修改accessToken持续时间
public static final long EXPIRATION_TIME = 5; // 1h
public static final long REFRESH_TIME = 60 * 60 * 24 * 7;
public static final String APP_SECRET = "5FtX1OpGWKBVyaIh3dwRl04gkAzLro6U";
public static final SecretKey KEY = Keys.hmacShaKeyFor(APP_SECRET.getBytes());
public static final SecureDigestAlgorithm<SecretKey, SecretKey> ALGORITHM = Jwts.SIG.HS256;
private final static String JWT_ISS = "admin";
private final static String SUBJECT = "Peripherals";
/**
* 构建双Token
*
* @param phone 用户手机号
* @param captcha 验证码
* @param ifRefresh 是否refreshToken控制参数
* @return
*/
public static String buildJwtToken(String phone, String captcha, boolean ifRefresh) {
Date exprireDate = Date.from(Instant.now().plusSeconds(EXPIRATION_TIME));
if (ifRefresh)
exprireDate = Date.from(Instant.now().plusSeconds(REFRESH_TIME));
return Jwts.builder()
.header().add("typ", "JWT").add("alg", "HS256")
.and()
.claim("username", phone).id(captcha)
.expiration(exprireDate)
.issuedAt(new Date())
.subject(SUBJECT)
.issuer(JWT_ISS)
.signWith(KEY, ALGORITHM)
.compact();
}
/**
* 在accessToken发送过来时刷新refreshToken
*
* @param Token
* @return
*/
public static String getNewRefreshToken(String Token) {
Jws<Claims> data = parseJwtToken(Token);
String name = data.getPayload().get("username", String.class);
String captcha = data.getPayload().getId();
return buildJwtToken(name, captcha, true);
}
/**
* accessToken过期时依据未过期的refreshToken刷新accessToken
*
* @param refreshToken
* @return
*/
public static String getNewAccessToken(String refreshToken) {
Jws<Claims> data = parseJwtToken(refreshToken);
String name = data.getPayload().get("username", String.class);
String captcha = data.getPayload().getId();
return buildJwtToken(name, captcha, true);
}
/**
* 解析Token
*
* @param token
* @return
*/
public static Jws<Claims> parseJwtToken(String token) {
return Jwts.parser().verifyWith(KEY).build().parseSignedClaims(token);
}
/**
* 解析Token中的header
*
* @param token
* @return
*/
public static JwsHeader parseTokenHeader(String token) {
return parseJwtToken(token).getHeader();
}
/**
* 解析Token中的payload
*
* @param token
* @return
*/
public static Claims parsePayload(String token) {
return parseJwtToken(token).getPayload();
}
}

22
mailbox-outer-admin/src/main/java/com/biutag/outeradmin/util/PhoneEncryptUtil.java

@ -0,0 +1,22 @@
package com.biutag.outeradmin.util;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.symmetric.AES;
public class PhoneEncryptUtil {
private static final String KEY = "D9ioYl2WCeVRfLXvg4FrqZ51UtT8Ewcz";
private static AES init() {
String result = "";
byte[] key = SecureUtil.generateKey(KEY).getEncoded();
return new AES(key);
}
public static String encrypt(String phone) {
return init().encryptHex(phone);
}
public static String decrypt(String phone) {
return init().decryptStr(phone);
}
}

BIN
mailbox-outer-admin/src/main/resources/excelmodel.xlsx

Binary file not shown.
Loading…
Cancel
Save