diff --git a/lottery-system/lottery-common/pom.xml b/lottery-system/lottery-common/pom.xml
index 8ce5f96..029f651 100644
--- a/lottery-system/lottery-common/pom.xml
+++ b/lottery-system/lottery-common/pom.xml
@@ -18,6 +18,24 @@
+
+ org.apache.poi
+ poi
+ 5.2.3
+ compile
+
+
+ org.apache.poi
+ poi-ooxml
+ 5.2.3
+ compile
+
+
+ com.alibaba
+ easyexcel-core
+ 3.3.2
+ compile
+
diff --git a/lottery-system/lottery-common/src/main/java/com/lottery/constant/RedisCacheConstant.java b/lottery-system/lottery-common/src/main/java/com/lottery/constant/RedisCacheConstant.java
new file mode 100644
index 0000000..16615c3
--- /dev/null
+++ b/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";
+}
diff --git a/lottery-system/lottery-common/src/main/java/com/lottery/utils/ExcelUtil.java b/lottery-system/lottery-common/src/main/java/com/lottery/utils/ExcelUtil.java
new file mode 100644
index 0000000..8020137
--- /dev/null
+++ b/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 List parseExcel(MultipartFile file, Class clazz) throws Exception {
+ try (InputStream inputStream = file.getInputStream()) {
+ Workbook workbook = WorkbookFactory.create(inputStream);
+ Sheet sheet = workbook.getSheetAt(0);
+
+ // 获取表头映射
+ Row headerRow = sheet.getRow(0);
+ Map 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 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;
+ }
+ }
+}
+
diff --git a/lottery-system/lottery-pojo/pom.xml b/lottery-system/lottery-pojo/pom.xml
index bab56a3..2b66117 100644
--- a/lottery-system/lottery-pojo/pom.xml
+++ b/lottery-system/lottery-pojo/pom.xml
@@ -16,5 +16,23 @@
11
UTF-8
+
+
+
+
+
+
+
+
+
+
+
+
+
+ com.alibaba
+ easyexcel
+ 3.1.3
+
+
\ No newline at end of file
diff --git a/lottery-system/lottery-pojo/src/main/java/com/lottery/dto/PrizeDto.java b/lottery-system/lottery-pojo/src/main/java/com/lottery/dto/PrizeDto.java
new file mode 100644
index 0000000..2ad9d87
--- /dev/null
+++ b/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;
+}
diff --git a/lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserDto.java b/lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserDto.java
new file mode 100644
index 0000000..1a90973
--- /dev/null
+++ b/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;
+}
diff --git a/lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserImportDto.java b/lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserImportDto.java
new file mode 100644
index 0000000..e6a0aef
--- /dev/null
+++ b/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;
+}
diff --git a/lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserQueryDto.java b/lottery-system/lottery-pojo/src/main/java/com/lottery/dto/UserQueryDto.java
new file mode 100644
index 0000000..108e4a9
--- /dev/null
+++ b/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;
+}
diff --git a/lottery-system/lottery-pojo/src/main/java/com/lottery/entity/Prize.java b/lottery-system/lottery-pojo/src/main/java/com/lottery/entity/Prize.java
index ca2bea7..0b3a9ba 100644
--- a/lottery-system/lottery-pojo/src/main/java/com/lottery/entity/Prize.java
+++ b/lottery-system/lottery-pojo/src/main/java/com/lottery/entity/Prize.java
@@ -9,9 +9,11 @@ package com.lottery.entity;
* @Version 1.0
**/
import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
+import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -21,6 +23,7 @@ import java.util.Date;
@AllArgsConstructor
@NoArgsConstructor
@TableName("prize")
+@Builder
public class Prize {
// 主键ID
@TableId(type = IdType.AUTO)
@@ -39,4 +42,9 @@ public class Prize {
// 更新时间
private Date updateTime;
+
+
+// 用于标记实体类中的非数据库字段。,一般可以用关联查询的额外字段
+ @TableField(exist = false)
+ private String gradeName;
}
\ No newline at end of file
diff --git a/lottery-system/lottery-pojo/src/main/java/com/lottery/vo/GradeVo.java b/lottery-system/lottery-pojo/src/main/java/com/lottery/vo/GradeVo.java
index 39a243d..6cf4238 100644
--- a/lottery-system/lottery-pojo/src/main/java/com/lottery/vo/GradeVo.java
+++ b/lottery-system/lottery-pojo/src/main/java/com/lottery/vo/GradeVo.java
@@ -17,7 +17,7 @@ import java.util.Date;
@Data
public class GradeVo {
- private Long id;
+// private Long id;
private String GradeName; // 等级名称
diff --git a/lottery-system/lottery-pojo/src/main/java/com/lottery/vo/PrizeVo.java b/lottery-system/lottery-pojo/src/main/java/com/lottery/vo/PrizeVo.java
index e8cc434..13ea326 100644
--- a/lottery-system/lottery-pojo/src/main/java/com/lottery/vo/PrizeVo.java
+++ b/lottery-system/lottery-pojo/src/main/java/com/lottery/vo/PrizeVo.java
@@ -16,7 +16,7 @@ import java.util.Date;
@Data
public class PrizeVo {
- private Long prizeId;
+// private Long id;
private String PrizeName;
@@ -28,7 +28,4 @@ public class PrizeVo {
private Date updateTime;
-// private int amount;
-//
-// private int grade;
}
diff --git a/lottery-system/lottery-service/pom.xml b/lottery-system/lottery-service/pom.xml
index e57a96f..21e527e 100644
--- a/lottery-system/lottery-service/pom.xml
+++ b/lottery-system/lottery-service/pom.xml
@@ -30,6 +30,22 @@
1.0-SNAPSHOT
+
+
+
+
+
+
+
+
+
+
+
+ com.alibaba
+ easyexcel
+ 3.1.3
+
+
diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminPrizeController.java b/lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminPrizeController.java
index ec77096..064eb8a 100644
--- a/lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminPrizeController.java
+++ b/lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminPrizeController.java
@@ -1,16 +1,14 @@
package com.lottery.admin.controller;
import com.lottery.admin.service.AdminPrizeService;
+import com.lottery.dto.PrizeDto;
import com.lottery.result.Result;
import com.lottery.vo.PageInfo;
import com.lottery.vo.PrizeVo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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
@@ -36,4 +34,51 @@ public class AdminPrizeController {
PageInfo pageInfo = adminPrizeService.pageListPrize(pageNum, pageSize);
return Result.success(pageInfo);
}
+
+ @GetMapping("/details")
+ public Result 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();
+ }
+
+
}
diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminUserController.java b/lottery-system/lottery-service/src/main/java/com/lottery/admin/controller/AdminUserController.java
new file mode 100644
index 0000000..5e8d009
--- /dev/null
+++ b/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> 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 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);
+ }
+
+}
diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminGradeMapper.java b/lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminGradeMapper.java
index b0ffb50..fdb2bf2 100644
--- a/lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminGradeMapper.java
+++ b/lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminGradeMapper.java
@@ -15,4 +15,5 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface AdminGradeMapper extends BaseMapper {
+ Grade selectByName(String gradeName);
}
diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminPrizeMapper.java b/lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminPrizeMapper.java
new file mode 100644
index 0000000..02a4704
--- /dev/null
+++ b/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 {
+
+ Page pageListPrize(Page page, LambdaQueryWrapper prizeLambdaQueryWrapper);
+}
diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminUserMapper.java b/lottery-system/lottery-service/src/main/java/com/lottery/admin/mapper/AdminUserMapper.java
new file mode 100644
index 0000000..c65eb0d
--- /dev/null
+++ b/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 {
+
+ @Select("select jwcode from user")
+ Set selectAllUserCodes();
+}
diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/AdminPrizeService.java b/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/AdminPrizeService.java
index 1b9744c..43a947f 100644
--- a/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/AdminPrizeService.java
+++ b/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/AdminPrizeService.java
@@ -1,7 +1,9 @@
package com.lottery.admin.service;
import com.baomidou.mybatisplus.extension.service.IService;
+import com.lottery.dto.PrizeDto;
import com.lottery.entity.Prize;
+import com.lottery.result.Result;
import com.lottery.vo.PageInfo;
import com.lottery.vo.PrizeVo;
@@ -15,4 +17,10 @@ import com.lottery.vo.PrizeVo;
**/
public interface AdminPrizeService extends IService {
PageInfo pageListPrize(int pageNum, int pageSize);
+
+ boolean add(PrizeDto prizeDto);
+
+ boolean updatePrize(PrizeDto prizeDto);
+
+ PrizeVo getPrizeById(Long id);
}
diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/AdminUserService.java b/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/AdminUserService.java
new file mode 100644
index 0000000..5ee2c88
--- /dev/null
+++ b/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 {
+ void addUser(UserDto userDto);
+
+
+ PageInfo listUser(int pageNum, int pageSize, UserQueryDto userQueryDto);
+
+
+ Result importUsers(MultipartFile file);
+}
+
diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminPrizeServiceImpl.java b/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminPrizeServiceImpl.java
index 5aa87f2..bcb2b44 100644
--- a/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminPrizeServiceImpl.java
+++ b/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.extension.plugins.pagination.Page;
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.api.mapper.IGradeMapper;
import com.lottery.api.mapper.IPrizeMapper;
+import com.lottery.dto.PrizeDto;
+import com.lottery.entity.Grade;
import com.lottery.entity.Prize;
+import com.lottery.exception.SomeException;
+import com.lottery.result.Result;
import com.lottery.utils.ConvertBeanUtil;
import com.lottery.vo.PageInfo;
import com.lottery.vo.PrizeVo;
@@ -17,6 +23,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.lang.module.Configuration;
+import java.util.Date;
import java.util.List;
/**
@@ -28,13 +35,13 @@ import java.util.List;
* @Version 1.0
**/
@Service
-public class AdminPrizeServiceImpl extends ServiceImpl implements AdminPrizeService {
+public class AdminPrizeServiceImpl extends ServiceImpl implements AdminPrizeService {
@Autowired
- private IGradeMapper gradeMapper;
+ private AdminGradeMapper adminGradeMapper;
@Autowired
- private IPrizeMapper prizeMapper;
+ private AdminPrizeMapper adminPrizeMapper;
@Override
public PageInfo pageListPrize(int pageNum, int pageSize) {
@@ -42,9 +49,71 @@ public class AdminPrizeServiceImpl extends ServiceImpl impl
//关联grade查询sort,prize表也按照g.sort排序
LambdaQueryWrapper prizeLambdaQueryWrapper = new LambdaQueryWrapper<>();
- Page pagePrize = prizeMapper.pageListPrize(page, prizeLambdaQueryWrapper);
+ Page pagePrize = adminPrizeMapper.pageListPrize(page, prizeLambdaQueryWrapper);
List prizeVos = ConvertBeanUtil.convertList(pagePrize.getRecords(), PrizeVo.class);
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 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 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;
+ }
}
diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminUserServiceImpl.java b/lottery-system/lottery-service/src/main/java/com/lottery/admin/service/Impl/AdminUserServiceImpl.java
new file mode 100644
index 0000000..7c9074f
--- /dev/null
+++ b/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 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 listUser(int pageNum, int pageSize, UserQueryDto userQueryDto) {
+ Page page = new Page<>(pageNum, pageSize);
+
+ LambdaQueryWrapper 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 userPage = this.page(page, queryWrapper);
+ List userVolist = ConvertBeanUtil.convertList(userPage.getRecords(), UserVo.class);
+ return PageInfo.of(userPage, userVolist);
+ }
+
+ @Override
+ public Result importUsers(MultipartFile file) {
+
+ try {
+ // 2. 解析Excel
+// List userDtos = ExcelUtil.parseExcel(file, UserImportDto.class);
+ List userDtos = EasyExcel.read(file.getInputStream())
+ .head(UserImportDto.class)
+ .sheet()
+ .doReadSync();
+
+ // 3. 数据校验和去重
+ Set existingCodes = adminUserMapper.selectAllUserCodes(); // 查询已存在的精网号
+ List users = new ArrayList<>();
+ Set 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 existingCodes, Set 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 + "行: 精网号在当前文件中重复");
+ }
+ }
+}
+
diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/api/controller/UserController.java b/lottery-system/lottery-service/src/main/java/com/lottery/api/controller/UserController.java
index 17ee70c..171a666 100644
--- a/lottery-system/lottery-service/src/main/java/com/lottery/api/controller/UserController.java
+++ b/lottery-system/lottery-service/src/main/java/com/lottery/api/controller/UserController.java
@@ -71,7 +71,7 @@ public class UserController {
public Result> getAllUser(){
LOGGER.info("查询所有用户");
- List list = userService.list();
+ List list = userService.listAllUser();
return Result.success(ConvertBeanUtil.convertList(list, UserVo.class));
}
}
diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/api/mapper/IPrizeMapper.java b/lottery-system/lottery-service/src/main/java/com/lottery/api/mapper/IPrizeMapper.java
index 8db8eae..545160e 100644
--- a/lottery-system/lottery-service/src/main/java/com/lottery/api/mapper/IPrizeMapper.java
+++ b/lottery-system/lottery-service/src/main/java/com/lottery/api/mapper/IPrizeMapper.java
@@ -24,5 +24,4 @@ public interface IPrizeMapper extends BaseMapper {
List selectPrizeAndGrade();
- Page pageListPrize(Page page, LambdaQueryWrapper prizeLambdaQueryWrapper);
}
diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/api/service/IUserService.java b/lottery-system/lottery-service/src/main/java/com/lottery/api/service/IUserService.java
index c5536d5..848a35d 100644
--- a/lottery-system/lottery-service/src/main/java/com/lottery/api/service/IUserService.java
+++ b/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 login(UserLoginDto userLoginDto);
+ List listAllUser();
}
diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/api/service/Impl/UserServiceImpl.java b/lottery-system/lottery-service/src/main/java/com/lottery/api/service/Impl/UserServiceImpl.java
index 4122065..9f03fd5 100644
--- a/lottery-system/lottery-service/src/main/java/com/lottery/api/service/Impl/UserServiceImpl.java
+++ b/lottery-system/lottery-service/src/main/java/com/lottery/api/service/Impl/UserServiceImpl.java
@@ -1,14 +1,20 @@
package com.lottery.api.service.Impl;
+import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.lottery.constant.RedisCacheConstant;
import com.lottery.dto.UserLoginDto;
import com.lottery.entity.User;
import com.lottery.exception.Accountexception;
import com.lottery.api.mapper.IUserMapper;
import com.lottery.api.service.IUserService;
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 java.util.List;
+
/**
* @program: lottery-system
* @ClassName UserServiceImpl
@@ -23,6 +29,9 @@ public class UserServiceImpl extends ServiceImpl implements I
@Autowired
private IUserMapper userMapper;
+ @Autowired
+ private StringRedisTemplate redisTemplate;
+
@Override
public User login(UserLoginDto userLoginDto) {
String password = userLoginDto.getPassword();
@@ -35,9 +44,13 @@ public class UserServiceImpl extends ServiceImpl implements I
//密码错误
throw new Accountexception("密码错误");
}
-
-
return user;
}
+ @Override
+ public List listAllUser() {
+ List list = this.list();
+ redisTemplate.opsForValue().set(RedisCacheConstant.ALL_USER_CACHE, JSON.toJSONString(list));
+ return list;
+ }
}
diff --git a/lottery-system/lottery-service/src/main/resources/mapper/admin/AdminGradeMapper.xml b/lottery-system/lottery-service/src/main/resources/mapper/admin/AdminGradeMapper.xml
index 601dd33..3046f29 100644
--- a/lottery-system/lottery-service/src/main/resources/mapper/admin/AdminGradeMapper.xml
+++ b/lottery-system/lottery-service/src/main/resources/mapper/admin/AdminGradeMapper.xml
@@ -2,4 +2,7 @@
+
\ No newline at end of file
diff --git a/lottery-system/lottery-service/src/main/resources/mapper/admin/AdminPrizeMapper.xml b/lottery-system/lottery-service/src/main/resources/mapper/admin/AdminPrizeMapper.xml
new file mode 100644
index 0000000..4ec34c1
--- /dev/null
+++ b/lottery-system/lottery-service/src/main/resources/mapper/admin/AdminPrizeMapper.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lottery-system/lottery-service/src/main/resources/mapper/admin/AdminUserMapper.xml b/lottery-system/lottery-service/src/main/resources/mapper/admin/AdminUserMapper.xml
new file mode 100644
index 0000000..165b190
--- /dev/null
+++ b/lottery-system/lottery-service/src/main/resources/mapper/admin/AdminUserMapper.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lottery-system/lottery-service/src/main/resources/mapper/api/gradeMapper.xml b/lottery-system/lottery-service/src/main/resources/mapper/api/gradeMapper.xml
index 881a719..e85625e 100644
--- a/lottery-system/lottery-service/src/main/resources/mapper/api/gradeMapper.xml
+++ b/lottery-system/lottery-service/src/main/resources/mapper/api/gradeMapper.xml
@@ -2,4 +2,7 @@
+
\ No newline at end of file
diff --git a/lottery-system/lottery-service/src/main/resources/mapper/api/prizeMapper.xml b/lottery-system/lottery-service/src/main/resources/mapper/api/prizeMapper.xml
index 4cbc009..710af8c 100644
--- a/lottery-system/lottery-service/src/main/resources/mapper/api/prizeMapper.xml
+++ b/lottery-system/lottery-service/src/main/resources/mapper/api/prizeMapper.xml
@@ -10,7 +10,7 @@