Browse Source

编写抽奖后台相关接口

feature/0725lihuilin
willy 1 month ago
parent
commit
6ce63ec647
  1. 18
      lottery-system/lottery-common/pom.xml
  2. 14
      lottery-system/lottery-common/src/main/java/com/lottery/constant/RedisCacheConstant.java
  3. 101
      lottery-system/lottery-common/src/main/java/com/lottery/utils/ExcelUtil.java
  4. 18
      lottery-system/lottery-pojo/pom.xml
  5. 27
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/PrizeDto.java
  6. 23
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserDto.java
  7. 22
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserImportDto.java
  8. 19
      lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserQueryDto.java
  9. 8
      lottery-system/lottery-pojo/src/main/java/com/lottery/entity/Prize.java
  10. 2
      lottery-system/lottery-pojo/src/main/java/com/lottery/vo/GradeVo.java
  11. 5
      lottery-system/lottery-pojo/src/main/java/com/lottery/vo/PrizeVo.java
  12. 16
      lottery-system/lottery-service/pom.xml
  13. 53
      lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminPrizeController.java
  14. 96
      lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminUserController.java
  15. 1
      lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminGradeMapper.java
  16. 19
      lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminPrizeMapper.java
  17. 23
      lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminUserMapper.java
  18. 8
      lottery-system/lottery-service/src/main/java/com/lottery/admin/service/AdminPrizeService.java
  19. 34
      lottery-system/lottery-service/src/main/java/com/lottery/admin/service/AdminUserService.java
  20. 77
      lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminPrizeServiceImpl.java
  21. 141
      lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminUserServiceImpl.java
  22. 2
      lottery-system/lottery-service/src/main/java/com/lottery/api/controller/UserController.java
  23. 1
      lottery-system/lottery-service/src/main/java/com/lottery/api/mapper/IPrizeMapper.java
  24. 1
      lottery-system/lottery-service/src/main/java/com/lottery/api/service/IUserService.java
  25. 17
      lottery-system/lottery-service/src/main/java/com/lottery/api/service/Impl/UserServiceImpl.java
  26. 3
      lottery-system/lottery-service/src/main/resources/mapper/admin/AdminGradeMapper.xml
  27. 11
      lottery-system/lottery-service/src/main/resources/mapper/admin/AdminPrizeMapper.xml
  28. 6
      lottery-system/lottery-service/src/main/resources/mapper/admin/AdminUserMapper.xml
  29. 3
      lottery-system/lottery-service/src/main/resources/mapper/api/gradeMapper.xml
  30. 2
      lottery-system/lottery-service/src/main/resources/mapper/api/prizeMapper.xml
  31. 12
      lottery-system/pom.xml

18
lottery-system/lottery-common/pom.xml

@ -18,6 +18,24 @@
</properties> </properties>
<dependencies> <dependencies>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel-core</artifactId>
<version>3.3.2</version>
<scope>compile</scope>
</dependency>
</dependencies> </dependencies>

14
lottery-system/lottery-common/src/main/java/com/lottery/constant/RedisCacheConstant.java

@ -0,0 +1,14 @@
package com.lottery.constant;
/**
* @program: lottery
* @ClassName RedisCacheConstant
* @description:
* @author: wwl
* @create: 2025-07-15 17:59
* @Version 1.0
**/
public class RedisCacheConstant {
public static final String ALL_USER_CACHE = "all_user_cache";
}

101
lottery-system/lottery-common/src/main/java/com/lottery/utils/ExcelUtil.java

@ -0,0 +1,101 @@
package com.lottery.utils;
import com.alibaba.excel.annotation.ExcelProperty;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @program: lottery
* @ClassName ExcelUtil
* @description:
* @author: wwl
* @create: 2025-07-15 16:32
* @Version 1.0
**/
public class ExcelUtil {
public static <T> List<T> parseExcel(MultipartFile file, Class<T> clazz) throws Exception {
try (InputStream inputStream = file.getInputStream()) {
Workbook workbook = WorkbookFactory.create(inputStream);
Sheet sheet = workbook.getSheetAt(0);
// 获取表头映射
Row headerRow = sheet.getRow(0);
Map<String, Integer> headerMap = new HashMap<>();
for (Cell cell : headerRow) {
headerMap.put(cell.getStringCellValue().trim(), cell.getColumnIndex());
}
// 验证必要列是否存在
for (Field field : clazz.getDeclaredFields()) {
ExcelProperty annotation = field.getAnnotation(ExcelProperty.class);
if (annotation != null && !headerMap.containsKey(annotation.value()[0])) {
throw new IllegalArgumentException("缺少必要列: " + annotation.value()[0]);
}
}
// 读取数据
List<T> dataList = new ArrayList<>();
for (int i = 1; i <= sheet.getLastRowNum(); i++) {
Row row = sheet.getRow(i);
if (row == null) continue;
T dto = clazz.getDeclaredConstructor().newInstance();
boolean hasValue = false;
for (Field field : clazz.getDeclaredFields()) {
ExcelProperty annotation = field.getAnnotation(ExcelProperty.class);
if (annotation != null) {
String headerName = annotation.value()[0];
Integer colIndex = headerMap.get(headerName);
if (colIndex != null) {
Cell cell = row.getCell(colIndex);
Object value = getCellValue(cell);
if (value != null) {
field.setAccessible(true);
field.set(dto, value);
hasValue = true;
}
}
}
}
if (hasValue) {
dataList.add(dto);
}
}
return dataList;
}
}
private static Object getCellValue(Cell cell) {
if (cell == null) return null;
switch (cell.getCellType()) {
case STRING:
return cell.getStringCellValue().trim();
case NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
return cell.getDateCellValue();
}
return cell.getNumericCellValue();
case BOOLEAN:
return cell.getBooleanCellValue();
case FORMULA:
return cell.getCellFormula();
default:
return null;
}
}
}

18
lottery-system/lottery-pojo/pom.xml

@ -16,5 +16,23 @@
<maven.compiler.target>11</maven.compiler.target> <maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> </properties>
<dependencies>
<!-- <dependency>-->
<!-- <groupId>org.apache.poi</groupId>-->
<!-- <artifactId>poi</artifactId>-->
<!-- <version>5.2.3</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.poi</groupId>-->
<!-- <artifactId>poi-ooxml</artifactId>-->
<!-- <version>5.2.3</version>-->
<!-- </dependency> &lt;!&ndash; POI 核心 &ndash;&gt;-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.3</version> <!-- 建议使用最新版本 -->
</dependency>
</dependencies>
</project> </project>

27
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/PrizeDto.java

@ -0,0 +1,27 @@
package com.lottery.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @program: lottery
* @ClassName PrizeDto
* @description:
* @author: wwl
* @create: 2025-07-15 11:56
* @Version 1.0
**/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PrizeDto {
private Long id;
private String prizeName;
private String gradeName;
private String imageUrl;
}

23
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserDto.java

@ -0,0 +1,23 @@
package com.lottery.dto;
import lombok.Builder;
import lombok.Data;
/**
* @program: lottery
* @ClassName UserDto
* @description:
* @author: wwl
* @create: 2025-07-15 15:12
* @Version 1.0
**/
@Data
@Builder
public class UserDto {
private int id;
private String username;
private String jwcode;
}

22
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserImportDto.java

@ -0,0 +1,22 @@
package com.lottery.dto;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
/**
* @program: lottery
* @ClassName UserImportDto
* @description:
* @author: wwl
* @create: 2025-07-15 16:27
* @Version 1.0
**/
@Data
public class UserImportDto {
@ExcelProperty("姓名")
private String username;
@ExcelProperty("精网号")
private String jwcode;
}

19
lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserQueryDto.java

@ -0,0 +1,19 @@
package com.lottery.dto;
import lombok.Data;
/**
* @program: lottery
* @ClassName UserQueryDto
* @description:
* @author: wwl
* @create: 2025-07-15 16:03
* @Version 1.0
**/
@Data
public class UserQueryDto {
private String username;
private String jwcode;
}

8
lottery-system/lottery-pojo/src/main/java/com/lottery/entity/Prize.java

@ -9,9 +9,11 @@ package com.lottery.entity;
* @Version 1.0 * @Version 1.0
**/ **/
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@ -21,6 +23,7 @@ import java.util.Date;
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@TableName("prize") @TableName("prize")
@Builder
public class Prize { public class Prize {
// 主键ID // 主键ID
@TableId(type = IdType.AUTO) @TableId(type = IdType.AUTO)
@ -39,4 +42,9 @@ public class Prize {
// 更新时间 // 更新时间
private Date updateTime; private Date updateTime;
// 用于标记实体类中的非数据库字段一般可以用关联查询的额外字段
@TableField(exist = false)
private String gradeName;
} }

2
lottery-system/lottery-pojo/src/main/java/com/lottery/vo/GradeVo.java

@ -17,7 +17,7 @@ import java.util.Date;
@Data @Data
public class GradeVo { public class GradeVo {
private Long id;
// private Long id;
private String GradeName; // 等级名称 private String GradeName; // 等级名称

5
lottery-system/lottery-pojo/src/main/java/com/lottery/vo/PrizeVo.java

@ -16,7 +16,7 @@ import java.util.Date;
@Data @Data
public class PrizeVo { public class PrizeVo {
private Long prizeId;
// private Long id;
private String PrizeName; private String PrizeName;
@ -28,7 +28,4 @@ public class PrizeVo {
private Date updateTime; private Date updateTime;
// private int amount;
//
// private int grade;
} }

16
lottery-system/lottery-service/pom.xml

@ -30,6 +30,22 @@
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
</dependency> </dependency>
<!-- <dependency>-->
<!-- <groupId>org.apache.poi</groupId>-->
<!-- <artifactId>poi</artifactId>-->
<!-- <version>5.2.3</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.poi</groupId>-->
<!-- <artifactId>poi-ooxml</artifactId>-->
<!-- <version>5.2.3</version>-->
<!-- </dependency>-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.3</version> <!-- 建议使用最新版本 -->
</dependency>
</dependencies> </dependencies>

53
lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminPrizeController.java

@ -1,16 +1,14 @@
package com.lottery.admin.controller; package com.lottery.admin.controller;
import com.lottery.admin.service.AdminPrizeService; import com.lottery.admin.service.AdminPrizeService;
import com.lottery.dto.PrizeDto;
import com.lottery.result.Result; import com.lottery.result.Result;
import com.lottery.vo.PageInfo; import com.lottery.vo.PageInfo;
import com.lottery.vo.PrizeVo; import com.lottery.vo.PrizeVo;
import org.slf4j.Logger; 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.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
/** /**
* @program: lottery * @program: lottery
@ -36,4 +34,51 @@ public class AdminPrizeController {
PageInfo<PrizeVo> pageInfo = adminPrizeService.pageListPrize(pageNum, pageSize); PageInfo<PrizeVo> pageInfo = adminPrizeService.pageListPrize(pageNum, pageSize);
return Result.success(pageInfo); return Result.success(pageInfo);
} }
@GetMapping("/details")
public Result<PrizeVo> selectById(@RequestParam Long id) {
return Result.success(adminPrizeService.getPrizeById(id));
}
@PostMapping("/add")
public Result addPrize(@RequestBody PrizeDto prizeDto) {
LOGGER.info("新增奖品:{}", prizeDto);
if (prizeDto.getPrizeName() == null || prizeDto.getImageUrl() == null||
prizeDto.getGradeName() == null) {
return Result.failure("所有字段都必须填写");
}
if(!adminPrizeService.add(prizeDto)){
return Result.failure("该等级下已有礼物");
};
return Result.success();
}
@PutMapping("/update")
public Result updatePrize(@RequestBody PrizeDto prizeDto) {
LOGGER.info("修改奖品信息:{}",prizeDto);
if (prizeDto.getPrizeName() == null || prizeDto.getImageUrl() == null||
prizeDto.getGradeName() == null) {
return Result.failure("所有字段都必须填写");
}
if (adminPrizeService.getById(prizeDto.getId())== null) {
return Result.failure("修改的id不存在");
}
if(!adminPrizeService.updatePrize(prizeDto)){
return Result.failure("该等级下已有礼物");
};
return Result.success();
}
@DeleteMapping("/delete")
public Result deletePrize(@RequestParam Long id) {
LOGGER.info("根基id:{},删除奖品",id);
if (!adminPrizeService.removeById(id)){
return Result.failure("删除失败");
}
return Result.success();
}
} }

96
lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminUserController.java

@ -0,0 +1,96 @@
package com.lottery.admin.controller;
import com.lottery.admin.service.AdminUserService;
import com.lottery.dto.UserDto;
import com.lottery.dto.UserImportDto;
import com.lottery.dto.UserQueryDto;
import com.lottery.entity.User;
import com.lottery.result.Result;
import com.lottery.utils.ConvertBeanUtil;
import com.lottery.utils.ExcelUtil;
import com.lottery.vo.PageInfo;
import com.lottery.vo.UserVo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.*;
import java.util.stream.Collectors;
/**
* @program: lottery
* @ClassName AdminUserController
* @description:
* @author: wwl
* @create: 2025-07-15 14:56
* @Version 1.0
**/
@RestController
@RequestMapping("/admin/user")
public class AdminUserController {
@Autowired
private AdminUserService adminUserService;
private final static Logger LOGGER = LoggerFactory.getLogger(AdminUserController.class);
@PostMapping("/add")
public Result add(@RequestBody UserDto userDto) {
LOGGER.info("新增用户:{}",userDto);
if (userDto.getUsername() == null || userDto.getJwcode() == null) {
return Result.failure("所有字段都必须填写");
}
adminUserService.addUser(userDto);
return Result.success();
}
@PostMapping("/list")
public Result<PageInfo<UserVo>> getAllUser(@RequestParam(defaultValue = "1") int pageNum, @RequestParam(defaultValue = "10") int pageSize,
@RequestBody UserQueryDto userQueryDto ){
LOGGER.info("分页查询所有用户");
return Result.success(adminUserService.listUser(pageNum,pageSize,userQueryDto));
}
@GetMapping()
@DeleteMapping("/delete")
public Result delete(@RequestParam Long id) {
LOGGER.info("根据id删除用户:{}",id);
adminUserService.removeById(id);
return Result.success();
}
@DeleteMapping("/delete/batch")
public Result deleteBatch(@RequestParam List<Long> ids) {
LOGGER.info("批量删除用户:{}",ids);
if (ids == null || ids.size() == 0) {
return Result.failure("ids is null");
}
adminUserService.removeBatchByIds(ids);
return Result.success();
}
@PostMapping("/import")
public Result importUsers(@RequestParam("file") MultipartFile file) {
LOGGER.info("开始导入用户Excel文件: {}", file.getOriginalFilename());
// 1. 基本文件校验
if (file.isEmpty()) {
return Result.failure("请上传文件");
}
String fileName = file.getOriginalFilename();
if (!fileName.endsWith(".xlsx") && !fileName.endsWith(".xls")) {
return Result.failure("仅支持Excel文件(.xlsx, .xls)");
}
return adminUserService.importUsers(file);
}
}

1
lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminGradeMapper.java

@ -15,4 +15,5 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface AdminGradeMapper extends BaseMapper<Grade> { public interface AdminGradeMapper extends BaseMapper<Grade> {
Grade selectByName(String gradeName);
} }

19
lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminPrizeMapper.java

@ -0,0 +1,19 @@
package com.lottery.admin.mapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lottery.entity.Prize;
/**
* @program: lottery
* @ClassName AdminPrizeMapper
* @description:
* @author: wwl
* @create: 2025-07-15 15:00
* @Version 1.0
**/
public interface AdminPrizeMapper extends BaseMapper<Prize> {
Page<Prize> pageListPrize(Page<Prize> page, LambdaQueryWrapper<Prize> prizeLambdaQueryWrapper);
}

23
lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminUserMapper.java

@ -0,0 +1,23 @@
package com.lottery.admin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lottery.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.Set;
/**
* @program: lottery
* @ClassName AdminUserMapper
* @description:
* @author: wwl
* @create: 2025-07-15 14:59
* @Version 1.0
**/
@Mapper
public interface AdminUserMapper extends BaseMapper<User> {
@Select("select jwcode from user")
Set<String> selectAllUserCodes();
}

8
lottery-system/lottery-service/src/main/java/com/lottery/admin/service/AdminPrizeService.java

@ -1,7 +1,9 @@
package com.lottery.admin.service; package com.lottery.admin.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.lottery.dto.PrizeDto;
import com.lottery.entity.Prize; import com.lottery.entity.Prize;
import com.lottery.result.Result;
import com.lottery.vo.PageInfo; import com.lottery.vo.PageInfo;
import com.lottery.vo.PrizeVo; import com.lottery.vo.PrizeVo;
@ -15,4 +17,10 @@ import com.lottery.vo.PrizeVo;
**/ **/
public interface AdminPrizeService extends IService<Prize> { public interface AdminPrizeService extends IService<Prize> {
PageInfo<PrizeVo> pageListPrize(int pageNum, int pageSize); PageInfo<PrizeVo> pageListPrize(int pageNum, int pageSize);
boolean add(PrizeDto prizeDto);
boolean updatePrize(PrizeDto prizeDto);
PrizeVo getPrizeById(Long id);
} }

34
lottery-system/lottery-service/src/main/java/com/lottery/admin/service/AdminUserService.java

@ -0,0 +1,34 @@
package com.lottery.admin.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lottery.dto.UserDto;
import com.lottery.dto.UserQueryDto;
import com.lottery.entity.User;
import com.lottery.result.Result;
import com.lottery.vo.PageInfo;
import com.lottery.vo.UserVo;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
* @program: lottery
* @ClassName AdminUserService
* @description:
* @author: wwl
* @create: 2025-07-15 14:57
* @Version 1.0
**/
@Service
public interface AdminUserService extends IService<User> {
void addUser(UserDto userDto);
PageInfo<UserVo> listUser(int pageNum, int pageSize, UserQueryDto userQueryDto);
Result importUsers(MultipartFile file);
}

77
lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminPrizeServiceImpl.java

@ -4,10 +4,16 @@ import ch.qos.logback.classic.spi.EventArgUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.mapper.AdminGradeMapper;
import com.lottery.admin.mapper.AdminPrizeMapper;
import com.lottery.admin.service.AdminPrizeService; import com.lottery.admin.service.AdminPrizeService;
import com.lottery.api.mapper.IGradeMapper; import com.lottery.api.mapper.IGradeMapper;
import com.lottery.api.mapper.IPrizeMapper; import com.lottery.api.mapper.IPrizeMapper;
import com.lottery.dto.PrizeDto;
import com.lottery.entity.Grade;
import com.lottery.entity.Prize; import com.lottery.entity.Prize;
import com.lottery.exception.SomeException;
import com.lottery.result.Result;
import com.lottery.utils.ConvertBeanUtil; import com.lottery.utils.ConvertBeanUtil;
import com.lottery.vo.PageInfo; import com.lottery.vo.PageInfo;
import com.lottery.vo.PrizeVo; import com.lottery.vo.PrizeVo;
@ -17,6 +23,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.lang.module.Configuration; import java.lang.module.Configuration;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
@ -28,13 +35,13 @@ import java.util.List;
* @Version 1.0 * @Version 1.0
**/ **/
@Service @Service
public class AdminPrizeServiceImpl extends ServiceImpl<IPrizeMapper, Prize> implements AdminPrizeService {
public class AdminPrizeServiceImpl extends ServiceImpl<AdminPrizeMapper, Prize> implements AdminPrizeService {
@Autowired @Autowired
private IGradeMapper gradeMapper;
private AdminGradeMapper adminGradeMapper;
@Autowired @Autowired
private IPrizeMapper prizeMapper;
private AdminPrizeMapper adminPrizeMapper;
@Override @Override
public PageInfo<PrizeVo> pageListPrize(int pageNum, int pageSize) { public PageInfo<PrizeVo> pageListPrize(int pageNum, int pageSize) {
@ -42,9 +49,71 @@ public class AdminPrizeServiceImpl extends ServiceImpl<IPrizeMapper, Prize> impl
//关联grade查询sortprize表也按照g.sort排序 //关联grade查询sortprize表也按照g.sort排序
LambdaQueryWrapper<Prize> prizeLambdaQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<Prize> prizeLambdaQueryWrapper = new LambdaQueryWrapper<>();
Page<Prize> pagePrize = prizeMapper.pageListPrize(page, prizeLambdaQueryWrapper);
Page<Prize> pagePrize = adminPrizeMapper.pageListPrize(page, prizeLambdaQueryWrapper);
List<PrizeVo> prizeVos = ConvertBeanUtil.convertList(pagePrize.getRecords(), PrizeVo.class); List<PrizeVo> prizeVos = ConvertBeanUtil.convertList(pagePrize.getRecords(), PrizeVo.class);
return PageInfo.of(pagePrize, prizeVos); return PageInfo.of(pagePrize, prizeVos);
} }
@Override
public boolean add(PrizeDto prizeDto) {
String gradeName = prizeDto.getGradeName();
Grade grade = adminGradeMapper.selectByName(gradeName);
// if (grade == null) {
//// return Result.failure("等级不存在");
// throw new SomeException("heheh");
// }
// 3. 检查该等级是否已有奖品
LambdaQueryWrapper<Prize> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(Prize::getGradeId, grade.getId());
if (this.count(wrapper) > 0) {
// return Result.failure("该等级已存在奖品,不能重复添加");
// throw new SomeException("heheh");
return false;
}
Prize prize = Prize.builder()
.PrizeName(prizeDto.getPrizeName())
.gradeId(grade.getId())
.imageUrl(prizeDto.getImageUrl())
.createTime(new Date())
.updateTime(new Date())
.build();
return this.save(prize);
}
@Override
public boolean updatePrize(PrizeDto prizeDto) {
String gradeName = prizeDto.getGradeName();
Grade grade = adminGradeMapper.selectByName(gradeName);
LambdaQueryWrapper<Prize> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(Prize::getGradeId, grade.getId());
if (this.count(wrapper) > 0) {
// return Result.failure("该等级已存在奖品,不能重复添加");
// throw new SomeException("heheh");
return false;
}
Prize prize = ConvertBeanUtil.convert(prizeDto, Prize.class);
prize.setUpdateTime(new Date());
prize.setGradeId(grade.getId());
if (adminPrizeMapper.updateById(prize) > 0){
return true;
};
return false;
}
@Override
public PrizeVo getPrizeById(Long id) {
Prize prize = this.getById(id);
Long gradeId = prize.getGradeId();
Grade grade = adminGradeMapper.selectById(gradeId);
PrizeVo prizeVo = ConvertBeanUtil.convert(prize, PrizeVo.class);
prizeVo.setGradeName(grade.getGradeName());
return prizeVo;
}
} }

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

@ -0,0 +1,141 @@
package com.lottery.admin.service.Impl;
import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lottery.admin.controller.AdminUserController;
import com.lottery.admin.mapper.AdminUserMapper;
import com.lottery.admin.service.AdminUserService;
import com.lottery.api.service.Impl.UserServiceImpl;
import com.lottery.dto.UserDto;
import com.lottery.dto.UserImportDto;
import com.lottery.dto.UserQueryDto;
import com.lottery.entity.Grade;
import com.lottery.entity.User;
import com.lottery.result.Result;
import com.lottery.utils.ConvertBeanUtil;
import com.lottery.utils.ExcelUtil;
import com.lottery.vo.PageInfo;
import com.lottery.vo.UserVo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.util.*;
/**
* @program: lottery
* @ClassName AdminUserServiceImpl
* @description:
* @author: wwl
* @create: 2025-07-15 14:58
* @Version 1.0
**/
@Service
public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, User> implements AdminUserService {
@Autowired
private AdminUserMapper adminUserMapper;
private final static Logger LOGGER = LoggerFactory.getLogger(AdminUserController.class);
@Override
public void addUser(UserDto userDto) {
this.save(ConvertBeanUtil.convert(userDto, User.class));
}
@Override
public PageInfo<UserVo> listUser(int pageNum, int pageSize, UserQueryDto userQueryDto) {
Page<User> page = new Page<>(pageNum, pageSize);
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
if (StringUtils.isNotBlank(userQueryDto.getUsername())) {
queryWrapper.like(User::getUsername, userQueryDto.getUsername());
}
if(StringUtils.isNotBlank(userQueryDto.getJwcode())){
queryWrapper.like(User::getJwcode, userQueryDto.getJwcode());
}
Page<User> userPage = this.page(page, queryWrapper);
List<UserVo> userVolist = ConvertBeanUtil.convertList(userPage.getRecords(), UserVo.class);
return PageInfo.of(userPage, userVolist);
}
@Override
public Result importUsers(MultipartFile file) {
try {
// 2. 解析Excel
// List<UserImportDto> userDtos = ExcelUtil.parseExcel(file, UserImportDto.class);
List<UserImportDto> userDtos = EasyExcel.read(file.getInputStream())
.head(UserImportDto.class)
.sheet()
.doReadSync();
// 3. 数据校验和去重
Set<String> existingCodes = adminUserMapper.selectAllUserCodes(); // 查询已存在的精网号
List<User> users = new ArrayList<>();
Set<String> processedCodes = new HashSet<>(); // 用于当前文件内的去重
for (int i = 0; i < userDtos.size(); i++) {
UserImportDto dto = userDtos.get(i);
try {
validateUser(dto, i + 2, existingCodes, processedCodes); // i+2对应Excel行号
users.add(convertToEntity(dto));
processedCodes.add(dto.getJwcode());
} catch (IllegalArgumentException e) {
LOGGER.warn("导入数据校验失败: {}", e.getMessage());
}
}
// 4. 批量保存
if (!users.isEmpty()) {
boolean success = this.saveBatch(users);
return success ?
Result.success(String.format("导入成功%d条,跳过%d条", users.size(), userDtos.size() - users.size())) :
Result.failure("部分数据导入失败");
}
return Result.failure("没有有效数据可导入");
} catch (Exception e) {
LOGGER.error("导入用户失败", e);
return Result.failure("导入失败: " + e.getMessage());
}
}
private User convertToEntity(UserImportDto dto) {
User user = new User();
user.setJwcode(dto.getJwcode());
user.setUsername(dto.getUsername());
user.setCreateTime(new Date());
user.setUpdateTime(new Date());
// 设置默认密码
user.setPassword("123456");
return user;
}
private void validateUser(UserImportDto dto, int rowNum, Set<String> existingCodes, Set<String> processedCodes) {
if (StringUtils.isBlank(dto.getJwcode())) {
throw new IllegalArgumentException("第" + rowNum + "行: 精网号不能为空");
}
if (StringUtils.isBlank(dto.getUsername())) {
throw new IllegalArgumentException("第" + rowNum + "行: 姓名不能为空");
}
if (existingCodes.contains(dto.getJwcode())) {
throw new IllegalArgumentException("第" + rowNum + "行: 精网号已存在");
}
if (processedCodes.contains(dto.getJwcode())) {
throw new IllegalArgumentException("第" + rowNum + "行: 精网号在当前文件中重复");
}
}
}

2
lottery-system/lottery-service/src/main/java/com/lottery/api/controller/UserController.java

@ -71,7 +71,7 @@ public class UserController {
public Result<List<UserVo>> getAllUser(){ public Result<List<UserVo>> getAllUser(){
LOGGER.info("查询所有用户"); LOGGER.info("查询所有用户");
List<User> list = userService.list();
List<User> list = userService.listAllUser();
return Result.success(ConvertBeanUtil.convertList(list, UserVo.class)); return Result.success(ConvertBeanUtil.convertList(list, UserVo.class));
} }
} }

1
lottery-system/lottery-service/src/main/java/com/lottery/api/mapper/IPrizeMapper.java

@ -24,5 +24,4 @@ public interface IPrizeMapper extends BaseMapper<Prize> {
List<PrizeAndGradeVo> selectPrizeAndGrade(); List<PrizeAndGradeVo> selectPrizeAndGrade();
Page<Prize> pageListPrize(Page<Prize> page, LambdaQueryWrapper<Prize> prizeLambdaQueryWrapper);
} }

1
lottery-system/lottery-service/src/main/java/com/lottery/api/service/IUserService.java

@ -18,4 +18,5 @@ import java.util.List;
public interface IUserService extends IService<User> { public interface IUserService extends IService<User> {
User login(UserLoginDto userLoginDto); User login(UserLoginDto userLoginDto);
List<User> listAllUser();
} }

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

@ -1,14 +1,20 @@
package com.lottery.api.service.Impl; package com.lottery.api.service.Impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lottery.constant.RedisCacheConstant;
import com.lottery.dto.UserLoginDto; import com.lottery.dto.UserLoginDto;
import com.lottery.entity.User; import com.lottery.entity.User;
import com.lottery.exception.Accountexception; import com.lottery.exception.Accountexception;
import com.lottery.api.mapper.IUserMapper; import com.lottery.api.mapper.IUserMapper;
import com.lottery.api.service.IUserService; import com.lottery.api.service.IUserService;
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.StringRedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
/** /**
* @program: lottery-system * @program: lottery-system
* @ClassName UserServiceImpl * @ClassName UserServiceImpl
@ -23,6 +29,9 @@ public class UserServiceImpl extends ServiceImpl<IUserMapper, User> implements I
@Autowired @Autowired
private IUserMapper userMapper; private IUserMapper userMapper;
@Autowired
private StringRedisTemplate redisTemplate;
@Override @Override
public User login(UserLoginDto userLoginDto) { public User login(UserLoginDto userLoginDto) {
String password = userLoginDto.getPassword(); String password = userLoginDto.getPassword();
@ -35,9 +44,13 @@ public class UserServiceImpl extends ServiceImpl<IUserMapper, User> implements I
//密码错误 //密码错误
throw new Accountexception("密码错误"); throw new Accountexception("密码错误");
} }
return user; return user;
} }
@Override
public List<User> listAllUser() {
List<User> list = this.list();
redisTemplate.opsForValue().set(RedisCacheConstant.ALL_USER_CACHE, JSON.toJSONString(list));
return list;
}
} }

3
lottery-system/lottery-service/src/main/resources/mapper/admin/AdminGradeMapper.xml

@ -2,4 +2,7 @@
<!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="com.lottery.admin.mapper.AdminGradeMapper"> <mapper namespace="com.lottery.admin.mapper.AdminGradeMapper">
<select id="selectByName" resultType="com.lottery.entity.Grade">
select * from grade where grade_name = #{gradeName}
</select>
</mapper> </mapper>

11
lottery-system/lottery-service/src/main/resources/mapper/admin/AdminPrizeMapper.xml

@ -0,0 +1,11 @@
<?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.AdminPrizeMapper">
<select id="pageListPrize" resultType="com.lottery.entity.Prize">
select p.*, g.grade_name
from prize p
left join grade g on p.grade_id = g.id
order by g.sort desc
</select>
</mapper>

6
lottery-system/lottery-service/src/main/resources/mapper/admin/AdminUserMapper.xml

@ -0,0 +1,6 @@
<?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.AdminUserMapper">
</mapper>

3
lottery-system/lottery-service/src/main/resources/mapper/api/gradeMapper.xml

@ -2,4 +2,7 @@
<!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="com.lottery.api.mapper.IGradeMapper"> <mapper namespace="com.lottery.api.mapper.IGradeMapper">
<select id="selectByName" resultType="com.lottery.entity.Grade">
select * from grade where grade_name = #{gradeName}
</select>
</mapper> </mapper>

2
lottery-system/lottery-service/src/main/resources/mapper/api/prizeMapper.xml

@ -10,7 +10,7 @@
</select> </select>
<select id="pageListPrize" resultType="com.lottery.entity.Prize"> <select id="pageListPrize" resultType="com.lottery.entity.Prize">
select p.prize_name, p.image_url, g.grade_name
select p.*, g.grade_name
from prize p from prize p
left join grade g on p.grade_id = g.id left join grade g on p.grade_id = g.id
order by g.sort desc order by g.sort desc

12
lottery-system/pom.xml

@ -59,6 +59,13 @@
<artifactId>jedis</artifactId> <artifactId>jedis</artifactId>
</dependency> </dependency>
<!-- json -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.23</version> <!-- 推荐最新版本 -->
</dependency>
<!-- Lombok 简化代码 --> <!-- Lombok 简化代码 -->
<dependency> <dependency>
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
@ -79,6 +86,11 @@
<version>3.5.3</version> <version>3.5.3</version>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 其他工具类(可选) --> <!-- 其他工具类(可选) -->
<dependency> <dependency>
<groupId>org.apache.commons</groupId> <groupId>org.apache.commons</groupId>

Loading…
Cancel
Save