Browse Source

Merge branch 'milestone-20250723-wwl' into wuweili/feature-20250715095139-抽奖众筹

# Conflicts:修改
#	lottery-system/lottery-service/src/main/java/com/lottery/config/CorsConfig.java
feature/0725lihuilin
willy 4 weeks ago
parent
commit
ff3fb59217
  1. 17
      lottery-system/lottery-common/src/main/java/com/lottery/exception/GlobalExceptionHandler.java
  2. 12
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/AdminLogin.java
  3. 29
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserByJwcodeDto.java
  4. 24
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserByJwcodePageDto.java
  5. 26
      lottery-system/lottery-pojo/src/main/java/com/lottery/entity/JwcodeTable.java
  6. 26
      lottery-system/lottery-pojo/src/main/java/com/lottery/vo/LoginUserVo.java
  7. 50
      lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminIsLoginController.java
  8. 26
      lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminIsLoginMapper.java
  9. 27
      lottery-system/lottery-service/src/main/java/com/lottery/admin/service/AdminIsLoginService.java
  10. 79
      lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminIsLoginServiceImpl.java
  11. 24
      lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminUserServiceImpl.java
  12. 12
      lottery-system/lottery-service/src/main/java/com/lottery/api/controller/ApiFundingController.java
  13. 17
      lottery-system/lottery-service/src/main/java/com/lottery/api/service/Impl/ApiFundingServiceImpl.java
  14. 32
      lottery-system/lottery-service/src/main/java/com/lottery/config/CorsConfig.java
  15. 41
      lottery-system/lottery-service/src/main/java/com/lottery/config/WebConfig.java
  16. 74
      lottery-system/lottery-service/src/main/java/com/lottery/interceptor/AuthInterceptor.java
  17. 9
      lottery-system/lottery-service/src/main/resources/application.yml
  18. 21
      lottery-system/lottery-service/src/main/resources/mapper/admin/AdminIsLoginMapper.xml
  19. 0
      lottery-system/lottery-service/src/main/resources/mapper/api/AdminIsLoginMapper.xml

17
lottery-system/lottery-common/src/main/java/com/lottery/exception/GlobalExceptionHandler.java

@ -2,6 +2,8 @@ package com.lottery.exception;
import com.lottery.result.Result; import com.lottery.result.Result;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindException; import org.springframework.validation.BindException;
import org.springframework.validation.FieldError; import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.MethodArgumentNotValidException;
@ -10,6 +12,7 @@ import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
import javax.servlet.http.HttpServletRequest;
import javax.validation.ConstraintViolation; import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException; import javax.validation.ConstraintViolationException;
import java.util.List; import java.util.List;
@ -105,8 +108,18 @@ public class GlobalExceptionHandler {
// 捕获自定义业务异常 // 捕获自定义业务异常
@ExceptionHandler(BusinessException.class) @ExceptionHandler(BusinessException.class)
public Result<Void> handleBusinessException(BusinessException e) {
return Result.failure(e.getCode(), e.getMessage());
public ResponseEntity<Result> handleBusinessException(BusinessException ex, HttpServletRequest request) {
HttpHeaders headers = new HttpHeaders();
headers.set("Access-Control-Allow-Origin", "*"); // 或指定域名
headers.set("Access-Control-Allow-Credentials", "true");
// 构建统一的错误响应
Result<Void> errorResult = Result.failure(ex.getCode(), ex.getMessage());
return ResponseEntity
.status(ex.getCode()) // 使用 BusinessException 中的状态码
.headers(headers)
.body(errorResult); // 返回 Result 作为响应体
} }
/** /**

12
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/AdminLogin.java

@ -1,6 +1,12 @@
package com.lottery.dto; package com.lottery.dto;
import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
/** /**
* @program: lottery * @program: lottery
@ -11,7 +17,13 @@ import lombok.Data;
* @Version 1.0 * @Version 1.0
**/ **/
@Data @Data
@NoArgsConstructor
@AllArgsConstructor
@Slf4j
public class AdminLogin { public class AdminLogin {
@NotNull(message = "用户名不能为空")
@Size(min = 8,max = 8,message = "用户名长度为8位")
private String username; private String username;
@NotNull(message = "密码不能为空")
private String password; private String password;
} }

29
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserByJwcodeDto.java

@ -0,0 +1,29 @@
package com.lottery.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
/**
* @program: lottery-system
* @ClassName UserByJwcodeDto
* @description:
* @author:jihaipeng
* @create: 202507-22 11:51
* @Version 1.0
**/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Slf4j
public class UserByJwcodeDto {
@NotNull(message = "jwcode不能为空")
@Size(min = 8, max = 8, message = "jwcode必须是8位")
@Pattern(regexp = "^\\d{8}$", message = "jwcode必须全是数字")
private String jwcode;
}

24
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserByJwcodePageDto.java

@ -0,0 +1,24 @@
package com.lottery.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
/**
* @program: lottery-system
* @ClassName UserByJwcodePageDto
* @description:
* @author:jihaipeng
* @create: 202507-22 15:03
* @Version 1.0
**/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Slf4j
public class UserByJwcodePageDto {
private String jwcode;
private int pageNum = 1;
private int pageSize = 10;
}

26
lottery-system/lottery-pojo/src/main/java/com/lottery/entity/JwcodeTable.java

@ -0,0 +1,26 @@
package com.lottery.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* @program: lottery-system
* @ClassName JwcodeTable
* @description:
* @author:jihaipeng
* @create: 202507-22 15:11
* @Version 1.0
**/
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("jwcode_table")
public class JwcodeTable {
private String jwcode;
private LocalDateTime createTime;
}

26
lottery-system/lottery-pojo/src/main/java/com/lottery/vo/LoginUserVo.java

@ -0,0 +1,26 @@
package com.lottery.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* @program: lottery-system
* @ClassName LoginUserVo
* @description:
* @author:jihaipeng
* @create: 202507-22 15:00
* @Version 1.0
**/
@Data
@Slf4j
@NoArgsConstructor
@AllArgsConstructor
public class LoginUserVo {
private String jwcode;
private LocalDateTime createTime;
}

50
lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminIsLoginController.java

@ -0,0 +1,50 @@
package com.lottery.admin.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.lottery.admin.service.AdminIsLoginService;
import com.lottery.dto.UserByJwcodeDto;
import com.lottery.dto.UserByJwcodePageDto;
import com.lottery.result.Result;
import com.lottery.vo.LoginUserVo;
import com.lottery.vo.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
/**
* @program: lottery-system
* @ClassName LoginController
* @description:
* @author:jihaipeng
* @create: 202507-22 11:15
* @Version 1.0
**/
@RestController
@RequestMapping("/admin/isLogin")
public class AdminIsLoginController {
@Autowired
private AdminIsLoginService adminIsLoginService;
//添加精网号
@RequestMapping("/addUser")
public Result<String> addUser(@RequestBody @Valid UserByJwcodeDto userDto) {
return adminIsLoginService.addUser(userDto.getJwcode());
}
//删除精网号
@RequestMapping("/deleteUser")
public Result<String> deleteUser(@RequestBody @Valid UserByJwcodeDto userDto) {
return adminIsLoginService.deleteUser(userDto.getJwcode());
}
//分页返回数据
@RequestMapping("/selectByJwcode")
public Result<PageInfo<LoginUserVo>> selectByJwcode(@RequestBody UserByJwcodePageDto userByJwcodePageDto) {
return adminIsLoginService.selectByJwcode(userByJwcodePageDto.getJwcode(), userByJwcodePageDto.getPageNum(), userByJwcodePageDto.getPageSize(),userByJwcodePageDto.getPageNum());
}
}

26
lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminIsLoginMapper.java

@ -0,0 +1,26 @@
package com.lottery.admin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lottery.entity.JwcodeTable;
import org.apache.ibatis.annotations.Mapper;
import java.time.LocalDateTime;
/**
* @program: lottery-system
* @ClassName AdminIsLoginMappper
* @description:
* @author:jihaipeng
* @create: 202507-22 14:09
* @Version 1.0
**/
@Mapper
public interface AdminIsLoginMapper extends BaseMapper<JwcodeTable> {
void addUser(String jwcode, LocalDateTime now);
Integer selectByJwcode(String jwcode);
int deleteUser(String jwcode);
}

27
lottery-system/lottery-service/src/main/java/com/lottery/admin/service/AdminIsLoginService.java

@ -0,0 +1,27 @@
package com.lottery.admin.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lottery.entity.JwcodeTable;
import com.lottery.result.Result;
import com.lottery.vo.LoginUserVo;
import com.lottery.vo.PageInfo;
import org.apache.tomcat.Jar;
/**
* @program: lottery-system
* @ClassName AdminIsLoginService
* @description:
* @author:jihaipeng
* @create: 202507-22 11:32
* @Version 1.0
**/
public interface AdminIsLoginService extends IService<JwcodeTable> {
Result<String> addUser(String jwcode);
Result<String> deleteUser(String jwcode);
Result<PageInfo<LoginUserVo>> selectByJwcode(String jwcode, int pageNum, int pageSize, int pageNum1);
}

79
lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminIsLoginServiceImpl.java

@ -0,0 +1,79 @@
package com.lottery.admin.service.Impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lottery.admin.mapper.AdminIsLoginMapper;
import com.lottery.admin.service.AdminIsLoginService;
import com.lottery.entity.JwcodeTable;
import com.lottery.result.Result;
import com.lottery.utils.ConvertBeanUtil;
import com.lottery.vo.LoginUserVo;
import com.lottery.vo.PageInfo;
import org.springframework.beans.ConversionNotSupportedException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
/**
* @program: lottery-system
* @ClassName AdminIsLoginServiceImpl
* @description:
* @author:jihaipeng
* @create: 202507-22 11:36
* @Version 1.0
**/
@Service
public class AdminIsLoginServiceImpl extends ServiceImpl<AdminIsLoginMapper, JwcodeTable> implements AdminIsLoginService {
@Autowired
private AdminIsLoginMapper adminIsLoginMappper;
@Override
public Result<String> addUser(String jwcode) {
Integer isLogin = adminIsLoginMappper.selectByJwcode(jwcode);
//检查一下是否已经添加过了
if(isLogin != null && isLogin > 0){
return Result.failure("该用户已经添加过了");
}
LocalDateTime now = LocalDateTime.now();
adminIsLoginMappper.addUser(jwcode,now);
return Result.success("添加成功");
}
@Override
public Result<String> deleteUser(String jwcode) {
Long total = adminIsLoginMappper.selectCount(null);
System.out.println(total);
if(total <= 1) {
return Result.failure("至少要保留一个用户");
}
int count = adminIsLoginMappper.deleteUser(jwcode);
if(count > 0){
return Result.success("删除成功");
}else {
return Result.failure("删除失败,可能该用户不存在");
}
}
@Override
public Result<PageInfo<LoginUserVo>> selectByJwcode(String jwcode, int pageNum, int pageSize, int pageNum1) {
Page<JwcodeTable> usePage = new Page<>(pageNum, pageSize);
LambdaQueryWrapper<JwcodeTable> jwcodeTableLambdaQueryWrapper = new LambdaQueryWrapper<>();
if (jwcode != null){
jwcodeTableLambdaQueryWrapper.like(JwcodeTable::getJwcode, jwcode);
}
Page<JwcodeTable> jwcodeTablePage = adminIsLoginMappper.selectPage(usePage, jwcodeTableLambdaQueryWrapper);
List<JwcodeTable> records = jwcodeTablePage.getRecords();
List<LoginUserVo> loginUserVos = ConvertBeanUtil.convertList(records, LoginUserVo.class);
return Result.success(PageInfo.of(jwcodeTablePage, loginUserVos));
}
}

24
lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminUserServiceImpl.java

@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lottery.admin.controller.AdminUserController; import com.lottery.admin.controller.AdminUserController;
import com.lottery.admin.mapper.AdminIsLoginMapper;
import com.lottery.admin.mapper.AdminUserDetailMapper; import com.lottery.admin.mapper.AdminUserDetailMapper;
import com.lottery.admin.mapper.AdminUserMapper; import com.lottery.admin.mapper.AdminUserMapper;
import com.lottery.admin.mapper.AdminWinMapper; import com.lottery.admin.mapper.AdminWinMapper;
@ -29,10 +30,12 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import org.json.JSONObject; import org.json.JSONObject;
import javax.persistence.criteria.CriteriaBuilder;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -54,6 +57,10 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, User> imp
private AdminUserMapper adminUserMapper; private AdminUserMapper adminUserMapper;
private final static Logger LOGGER = LoggerFactory.getLogger(AdminUserController.class); private final static Logger LOGGER = LoggerFactory.getLogger(AdminUserController.class);
@Autowired
private StringRedisTemplate redisTemplate;
@Autowired @Autowired
private AdminUserDetailMapper adminUserDetailMapper; private AdminUserDetailMapper adminUserDetailMapper;
@ -62,11 +69,18 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, User> imp
@Autowired @Autowired
private com.lottery.propertise.jwtPropertice jwtPropertice; private com.lottery.propertise.jwtPropertice jwtPropertice;
@Autowired @Autowired
private RedisTemplate<String, String> redisTemplate;
private AdminIsLoginMapper adminIsLoginMapper;
@Override @Override
public Result<UserLoginVo> AdminUserlogin(AdminLogin adminLogin) { public Result<UserLoginVo> AdminUserlogin(AdminLogin adminLogin) {
//查看是否有权限
Integer isLogin = adminIsLoginMapper.selectByJwcode(adminLogin.getUsername());
if(isLogin == null || isLogin <= 0){
return Result.failure("用户无权限登录");
}
String token = ""; String token = "";
try { try {
// 1. 准备请求参数 // 1. 准备请求参数
@ -89,11 +103,8 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, User> imp
if (jsonResponse.getInt("code") == 200) { if (jsonResponse.getInt("code") == 200) {
JSONObject data = jsonResponse.getJSONObject("data"); JSONObject data = jsonResponse.getJSONObject("data");
token = data.getString("token"); token = data.getString("token");
// String username = data.getString("username");
LOGGER.info("登录成功,Token:{} " ,token); LOGGER.info("登录成功,Token:{} " ,token);
// 后续可以使用token调用其他API // 后续可以使用token调用其他API
} else { } else {
LOGGER.error(jsonResponse.getString("msg")); LOGGER.error(jsonResponse.getString("msg"));
@ -107,9 +118,7 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, User> imp
UserLoginVo userLoginVo = new UserLoginVo(); UserLoginVo userLoginVo = new UserLoginVo();
userLoginVo.setUsername(adminLogin.getUsername()); userLoginVo.setUsername(adminLogin.getUsername());
userLoginVo.setToken(token); userLoginVo.setToken(token);
//把token传入redis
redisTemplate.opsForValue().set(token, userLoginVo.getUsername(),2, TimeUnit.HOURS);
redisTemplate.opsForValue().set( "token:"+token, adminLogin.getUsername(),24, TimeUnit.HOURS);
return Result.success(userLoginVo); return Result.success(userLoginVo);
} }
@ -242,7 +251,6 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, User> imp
} }
} }
@Override @Override
public void removeUserById(Long id) { public void removeUserById(Long id) {
//关联删除user_detail //关联删除user_detail

12
lottery-system/lottery-service/src/main/java/com/lottery/api/controller/ApiFundingController.java

@ -34,21 +34,21 @@ public class ApiFundingController {
//前台获取活动详情 //前台获取活动详情
@PostMapping("/getActivity") @PostMapping("/getActivity")
public Result<ApiFundingVO> getFundingActivity(@RequestHeader String token){
if(token == null|| token.trim().isEmpty()){
public Result<ApiFundingVO> getFundingActivity(@RequestHeader String Apitoken){
if(Apitoken == null|| Apitoken.trim().isEmpty()){
return Result.failure("请先登录"); return Result.failure("请先登录");
} }
LOGGER.info("前台获取众筹活动所有数据"); LOGGER.info("前台获取众筹活动所有数据");
return fundingService.getActivityDetailOne(token);
return fundingService.getActivityDetailOne(Apitoken);
} }
//添加用户参与记录 //添加用户参与记录
@PostMapping("/addRecord") @PostMapping("/addRecord")
public Result<String> addRecord(@RequestHeader String token,@RequestBody @Valid FundingRecordDto fundingRecordDto) throws Exception {
if(token == null|| token.trim().isEmpty()){
public Result<String> addRecord(@RequestHeader String Apitoken,@RequestBody @Valid FundingRecordDto fundingRecordDto) throws Exception {
if(Apitoken == null|| Apitoken.trim().isEmpty()){
return Result.failure("请先登录"); return Result.failure("请先登录");
} }
LOGGER.info("添加用户参与记录,参数为{}", fundingRecordDto); LOGGER.info("添加用户参与记录,参数为{}", fundingRecordDto);
return fundingService.addRecord(token,fundingRecordDto);
return fundingService.addRecord(Apitoken,fundingRecordDto);
} }
} }

17
lottery-system/lottery-service/src/main/java/com/lottery/api/service/Impl/ApiFundingServiceImpl.java

@ -14,6 +14,8 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
@ -39,6 +41,7 @@ public class ApiFundingServiceImpl implements ApiIFundingService {
@Override @Override
public Result getActivityDetailOne(String token) { public Result getActivityDetailOne(String token) {
String token1 = URLDecoder.decode(token, StandardCharsets.UTF_8);
//根据活动id查询活动时间市场一市场二设置的初始时间俩个市场总助力次数 //根据活动id查询活动时间市场一市场二设置的初始时间俩个市场总助力次数
//先查询一下有几个活动开启 //先查询一下有几个活动开启
@ -67,11 +70,11 @@ public class ApiFundingServiceImpl implements ApiIFundingService {
try { try {
// 1. 定义请求 URL // 1. 定义请求 URL
String url = "https://api.homilychart.com/hljw/api/v2/member/info";
String url = "http://39.101.133.168:8828/hljw/api/v2/member/info";
// 准备请求参数 // 准备请求参数
Map<String, String> params = new HashMap<>(); Map<String, String> params = new HashMap<>();
params.put("token", token); // 如果接口需要 token 作为参数
params.put("token", token1); // 如果接口需要 token 作为参数
// 调用接口 // 调用接口
String response = HttpUtils.postUrlencoded(url, params); String response = HttpUtils.postUrlencoded(url, params);
JsonNode rootNode = objectMapper.readTree(response); JsonNode rootNode = objectMapper.readTree(response);
@ -153,7 +156,7 @@ public class ApiFundingServiceImpl implements ApiIFundingService {
@Override @Override
public Result<String> addRecord(String token,FundingRecordDto fundingRecordDto) { public Result<String> addRecord(String token,FundingRecordDto fundingRecordDto) {
String token1 = URLDecoder.decode(token, StandardCharsets.UTF_8);
//检查活动id是否存在 //检查活动id是否存在
Integer count = fundingMapper.selectActivityISExist(fundingRecordDto.getActivityId()); Integer count = fundingMapper.selectActivityISExist(fundingRecordDto.getActivityId());
if(count == null || count == 0){ if(count == null || count == 0){
@ -166,14 +169,18 @@ public class ApiFundingServiceImpl implements ApiIFundingService {
try { try {
// 1. 定义请求 URL // 1. 定义请求 URL
String url = "https://api.homilychart.com/hljw/api/v2/member/info";
String url = "http://39.101.133.168:8828/hljw/api/v2/member/info";
// 准备请求参数 // 准备请求参数
Map<String, String> params = new HashMap<>(); Map<String, String> params = new HashMap<>();
params.put("token", token); // 如果接口需要 token 作为参数
params.put("token", token1); // 如果接口需要 token 作为参数
// 调用接口 // 调用接口
String response = HttpUtils.postUrlencoded(url, params); String response = HttpUtils.postUrlencoded(url, params);
JsonNode rootNode = objectMapper.readTree(response); JsonNode rootNode = objectMapper.readTree(response);
if(rootNode.path("code").asInt() == 401){
return Result.failure("登录凭证错误");
}
// 提取 username // 提取 username
String username = rootNode.path("data").path("username").asText(); String username = rootNode.path("data").path("username").asText();
String jwcode = rootNode.path("data").path("jwcode").asText(); String jwcode = rootNode.path("data").path("jwcode").asText();

32
lottery-system/lottery-service/src/main/java/com/lottery/config/CorsConfig.java

@ -1,32 +0,0 @@
package com.lottery.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @program: lottery
* @ClassName CorsConfig
* @description:
* @author: wwl
* @create: 2025-07-18 10:21
* @Version 1.0
**/
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*") // 允许所有来源
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.allowedHeaders("*");
// registry.addMapping("/**")
// .allowedOriginPatterns("*") // 允许所有来源模式
// .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
// .allowedHeaders("*")
// .allowCredentials(true); // 允许携带凭证如cookie认证头
}
}

41
lottery-system/lottery-service/src/main/java/com/lottery/config/WebConfig.java

@ -0,0 +1,41 @@
package com.lottery.config;
import com.lottery.interceptor.AuthInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @program: lottery-system
* @ClassName WebConfig
* @description:
* @author:jihaipeng
* @create: 202507-22 16:46
* @Version 1.0
**/
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private AuthInterceptor authInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(authInterceptor)
.addPathPatterns("/**") // 拦截所有请求
.excludePathPatterns( // 放行不需要校验的路径
"/login" // 登录接口
);
}
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*") // 允许所有来源
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.allowedHeaders("*");
}
}

74
lottery-system/lottery-service/src/main/java/com/lottery/interceptor/AuthInterceptor.java

@ -0,0 +1,74 @@
package com.lottery.interceptor;
import com.lottery.exception.BusinessException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @program: lottery-system
* @ClassName AuthInterceptor
* @description:
* @author:jihaipeng
* @create: 202507-22 16:19
* @Version 1.0
**/
@Component
public class AuthInterceptor implements HandlerInterceptor {
@Autowired
private StringRedisTemplate redisTemplate;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 放行 OPTIONS 预检请求
if ("OPTIONS".equals(request.getMethod())) {
return true;
}
// 1. 放行登录接口/login
if ("/admin/user/login".equals(request.getRequestURI())) {
return true;
}
if("/api/prize/list".equals(request.getRequestURI())) {
return true;
}
if("/api/user/list".equals(request.getRequestURI())) {
return true;
}
if("/admin/win/list".equals(request.getRequestURI())) {
return true;
}
if("/api/lottery/start".equals(request.getRequestURI())) {
return true;
}
if("/api/funding/addRecord".equals(request.getRequestURI())) {
return true;
}
if("/api/funding/getActivity".equals(request.getRequestURI())) {
return true;
}
// 2. 检查其他接口是否携带 Token
String token = request.getHeader("Token");
if (token == null || token.isEmpty()) {
throw new BusinessException(400,"登录缺失凭证,请重新登录");
}
// 3. 校验 Token 是否在 Redis 中存在
String redisKey = "token:" + token;
if (!Boolean.TRUE.equals(redisTemplate.hasKey(redisKey))) {
throw new BusinessException(400,"用户登录已失效,请重新登录");
}
// 4. Token 校验通过放行请求
return true;
}
}

9
lottery-system/lottery-service/src/main/resources/application.yml

@ -8,10 +8,6 @@ spring:
username: link username: link
password: tEhdERkaGprEA7nT password: tEhdERkaGprEA7nT
driver-class-name: com.mysql.cj.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
# hikari:
# pool-name: LotteryHikariCP
# maximum-pool-size: 10 # 连接池大小
# connection-timeout: 30000
hikari: hikari:
maximum-pool-size: 20 # 默认一般是 10,根据并发量调整 maximum-pool-size: 20 # 默认一般是 10,根据并发量调整
@ -20,14 +16,13 @@ spring:
max-lifetime: 1800000 # 连接最大生命周期(默认 30 分钟) max-lifetime: 1800000 # 连接最大生命周期(默认 30 分钟)
leak-detection-threshold: 5000 # 连接泄漏检测(毫秒,建议 5s) leak-detection-threshold: 5000 # 连接泄漏检测(毫秒,建议 5s)
#
# ========== Redis 配置 ========== # ========== Redis 配置 ==========
redis: redis:
host: 39.98.127.73 host: 39.98.127.73
port: 7001 port: 7001
password: 2TOVfFeJ0pyi9Wtj password: 2TOVfFeJ0pyi9Wtj
database: 8 # 默认DB索引
lettuce:
database: 1 # 默认DB索引
jedis:
pool: pool:
max-active: 100 # 最大连接数 max-active: 100 # 最大连接数
max-wait: 300 # 最大等待时间 max-wait: 300 # 最大等待时间

21
lottery-system/lottery-service/src/main/resources/mapper/admin/AdminIsLoginMapper.xml

@ -0,0 +1,21 @@
<?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">
<mapper namespace="com.lottery.admin.mapper.AdminIsLoginMapper">
<insert id="addUser">
INSERT INTO jwcode_table(jwcode,create_time) VALUES (#{jwcode},#{now})
</insert>
<delete id="deleteUser" parameterType="java.lang.String">
DELETE FROM jwcode_table WHERE jwcode = #{jwcode}
</delete>
<select id="selectByJwcode" resultType="java.lang.Integer" parameterType="java.lang.String">
SELECT
count(*)
FROM
jwcode_table
WHERE
jwcode = #{jwcode}
</select>
</mapper>

0
lottery-system/lottery-service/src/main/resources/mapper/api/userDetailMapper.xml → lottery-system/lottery-service/src/main/resources/mapper/api/AdminIsLoginMapper.xml

Loading…
Cancel
Save