From 52bd61da17d683541d46b0c97ae4e131cdf42c27 Mon Sep 17 00:00:00 2001
From: Bunny <1319900154@qq.com>
Date: Fri, 15 Dec 2023 16:32:31 +0800
Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E5=92=8C=E5=AF=BC=E5=87=BAEx?=
=?UTF-8?q?cel=E5=AE=8C=E6=88=90?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/encodings.xml | 1 +
.idea/inspectionProfiles/Project_Default.xml | 1 +
.idea/misc.xml | 5 +-
spzx-manager/pom.xml | 1 +
.../bunny/controller/CategoryController.java | 21 +++++--
.../bunny/controller/SysUserController.java | 12 ++--
.../java/cn/bunny/lister/ExcelLister.java | 55 ++++++++++++++++++
.../java/cn/bunny/mapper/CategoryMapper.java | 6 ++
.../cn/bunny/service/CategoryService.java | 8 +++
.../java/cn/bunny/service/SysUserService.java | 2 +-
.../service/impl/CategoryServiceImpl.java | 58 +++++++++++++++++++
.../service/impl/SysRoleServiceImpl.java | 3 +-
.../service/impl/SysUserServiceImpl.java | 6 +-
.../mapper/category/CategoryMapper.xml | 35 +++++++++++
.../resources/mapper/user/SysUserMapper.xml | 1 -
.../test/java/cn/bunny/common/EasyExcel.java | 31 ++++++++++
.../java/cn/bunny/common/ExcelListener.java | 26 +++++++++
17 files changed, 255 insertions(+), 17 deletions(-)
create mode 100644 spzx-manager/src/main/java/cn/bunny/lister/ExcelLister.java
create mode 100644 spzx-manager/src/main/test/java/cn/bunny/common/EasyExcel.java
create mode 100644 spzx-manager/src/main/test/java/cn/bunny/common/ExcelListener.java
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
index 958e4cc..e91bfef 100644
--- a/.idea/encodings.xml
+++ b/.idea/encodings.xml
@@ -20,5 +20,6 @@
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
index 649fe27..4c7f39d 100644
--- a/.idea/inspectionProfiles/Project_Default.xml
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -4,5 +4,6 @@
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 44de3ab..1b1ae75 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,18 +1,21 @@
+
+
-
+
\ No newline at end of file
diff --git a/spzx-manager/pom.xml b/spzx-manager/pom.xml
index 3a3364d..0433159 100644
--- a/spzx-manager/pom.xml
+++ b/spzx-manager/pom.xml
@@ -53,6 +53,7 @@
org.springframework.boot
spring-boot-starter-test
+ test
diff --git a/spzx-manager/src/main/java/cn/bunny/controller/CategoryController.java b/spzx-manager/src/main/java/cn/bunny/controller/CategoryController.java
index 2fecbce..f76efec 100644
--- a/spzx-manager/src/main/java/cn/bunny/controller/CategoryController.java
+++ b/spzx-manager/src/main/java/cn/bunny/controller/CategoryController.java
@@ -7,11 +7,10 @@ import cn.bunny.common.spzx.model.vo.common.ResultCodeEnum;
import cn.bunny.service.CategoryService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
import java.util.List;
@@ -22,6 +21,20 @@ public class CategoryController {
@Autowired
CategoryService categoryService;
+ @Operation(summary = "导入文件", operationId = "导入Excel")
+ @PostMapping("importData")
+ public Result importData(@RequestParam("file") MultipartFile file) {
+ categoryService.importData(file);
+ return Result.build(null, ResultCodeEnum.SUCCESS);
+ }
+
+ @Operation(summary = "导出Excel", operationId = "导出文件为Excel")
+ @GetMapping("exportData")
+ public void exportData(HttpServletResponse response) {
+ categoryService.exportData(response);
+ }
+
+
@Operation(summary = "查询分类类别", description = "使用懒加载")
@GetMapping("/findCategoryList/{id}")
public Result findCategoryList(@PathVariable("id") Long id) {
diff --git a/spzx-manager/src/main/java/cn/bunny/controller/SysUserController.java b/spzx-manager/src/main/java/cn/bunny/controller/SysUserController.java
index 780abc9..18e7558 100644
--- a/spzx-manager/src/main/java/cn/bunny/controller/SysUserController.java
+++ b/spzx-manager/src/main/java/cn/bunny/controller/SysUserController.java
@@ -22,15 +22,17 @@ public class SysUserController {
@Operation(summary = "查询用户列表", description = "查询用户列表,包含关键字分页器")
@GetMapping(value = "findByPage/{pageNum}/{pageSize}")
- public Result findByPage(@PathVariable("pageNum") Integer pageNum, @PathVariable("pageSize") Integer pageSize, SysUserDto sysUserDto) {
+ public Result findByPage(@PathVariable("pageNum") Integer pageNum,
+ @PathVariable("pageSize") Integer pageSize,
+ SysUserDto sysUserDto) {
PageInfo pageInfo = sysUserService.findByPage(pageNum, pageSize, sysUserDto);
return Result.build(pageInfo, ResultCodeEnum.SUCCESS);
}
@Operation(summary = "用户添加", description = "添加用户")
- @PostMapping("saveSysuser")
- public Result saveSysuser(@RequestBody SysUser sysUser) {
- sysUserService.saveSysuser(sysUser);
+ @PostMapping("saveSysUser")
+ public Result saveSysUser(@RequestBody SysUser sysUser) {
+ sysUserService.saveSysUser(sysUser);
return Result.build(null, ResultCodeEnum.SUCCESS);
}
@@ -42,7 +44,7 @@ public class SysUserController {
}
@Operation(summary = "删除用户", description = "删除用户将status改为1")
- @PutMapping("deleteUserById/{userId}")
+ @DeleteMapping("deleteById/{userId}")
public Result deleteUserById(@PathVariable("userId") Integer userId) {
sysUserService.deleteUserById(userId);
return Result.build(null, ResultCodeEnum.SUCCESS);
diff --git a/spzx-manager/src/main/java/cn/bunny/lister/ExcelLister.java b/spzx-manager/src/main/java/cn/bunny/lister/ExcelLister.java
new file mode 100644
index 0000000..8652257
--- /dev/null
+++ b/spzx-manager/src/main/java/cn/bunny/lister/ExcelLister.java
@@ -0,0 +1,55 @@
+package cn.bunny.lister;
+
+import cn.bunny.common.spzx.model.entity.product.Category;
+import cn.bunny.common.spzx.model.vo.product.CategoryExcelVo;
+import cn.bunny.mapper.CategoryMapper;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.alibaba.excel.util.ListUtils;
+
+import java.util.List;
+
+public class ExcelLister extends AnalysisEventListener {
+ /**
+ * 每隔5条存储数据库,实际使用中可以100条,然后清理list ,方便内存回收
+ */
+ private static final int BATCH_COUNT = 100;
+ /**
+ * 缓存的数据
+ */
+ private List cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
+
+ // 获取mapper对象
+ private final CategoryMapper categoryMapper;
+
+ public ExcelLister(CategoryMapper categoryMapper) {
+ this.categoryMapper = categoryMapper;
+ }
+
+ @Override
+ public void invoke(T o, AnalysisContext analysisContext) {
+ CategoryExcelVo data = (CategoryExcelVo) o;
+ cachedDataList.add(data);
+ // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
+ if (cachedDataList.size() >= BATCH_COUNT) {
+ saveData();
+ // 存储完成清理 list
+ cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
+ }
+ }
+
+
+ @Override
+ public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+ // excel解析完毕以后需要执行的代码
+ // 这里也要保存数据,确保最后遗留的数据也存储到数据库
+ saveData();
+ }
+
+ /**
+ * 保存方法
+ */
+ private void saveData() {
+ categoryMapper.batchInsert((List) cachedDataList);
+ }
+}
diff --git a/spzx-manager/src/main/java/cn/bunny/mapper/CategoryMapper.java b/spzx-manager/src/main/java/cn/bunny/mapper/CategoryMapper.java
index 09204fe..e90bbed 100644
--- a/spzx-manager/src/main/java/cn/bunny/mapper/CategoryMapper.java
+++ b/spzx-manager/src/main/java/cn/bunny/mapper/CategoryMapper.java
@@ -12,4 +12,10 @@ public interface CategoryMapper {
// 查询是否有下级菜单
int selectCountByParentId(Long parentId);
+
+ // 导出Excel---查询所有分类
+ List findAll();
+
+ // 保存方法---插入数据
+ void batchInsert(List categoryList);
}
diff --git a/spzx-manager/src/main/java/cn/bunny/service/CategoryService.java b/spzx-manager/src/main/java/cn/bunny/service/CategoryService.java
index 735fa96..9349baa 100644
--- a/spzx-manager/src/main/java/cn/bunny/service/CategoryService.java
+++ b/spzx-manager/src/main/java/cn/bunny/service/CategoryService.java
@@ -1,10 +1,18 @@
package cn.bunny.service;
import cn.bunny.common.spzx.model.entity.product.Category;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.web.multipart.MultipartFile;
import java.util.List;
public interface CategoryService {
// 根据id查询分类列表
List findCategoryList(Long id);
+
+ // 导出Excel
+ void exportData(HttpServletResponse response);
+
+ // 导入文件
+ void importData(MultipartFile multipartFile);
}
diff --git a/spzx-manager/src/main/java/cn/bunny/service/SysUserService.java b/spzx-manager/src/main/java/cn/bunny/service/SysUserService.java
index 100daa0..bfcf3f1 100644
--- a/spzx-manager/src/main/java/cn/bunny/service/SysUserService.java
+++ b/spzx-manager/src/main/java/cn/bunny/service/SysUserService.java
@@ -21,7 +21,7 @@ public interface SysUserService {
PageInfo findByPage(Integer pageNum, Integer pageSize, SysUserDto sysUserDto);
// 用户添加
- void saveSysuser(SysUser sysUser);
+ void saveSysUser(SysUser sysUser);
// 用户修改
void updateSysUser(SysUser sysUser);
diff --git a/spzx-manager/src/main/java/cn/bunny/service/impl/CategoryServiceImpl.java b/spzx-manager/src/main/java/cn/bunny/service/impl/CategoryServiceImpl.java
index 19e8fd0..d048822 100644
--- a/spzx-manager/src/main/java/cn/bunny/service/impl/CategoryServiceImpl.java
+++ b/spzx-manager/src/main/java/cn/bunny/service/impl/CategoryServiceImpl.java
@@ -1,12 +1,24 @@
package cn.bunny.service.impl;
+import cn.bunny.common.exception.BunnyException;
import cn.bunny.common.spzx.model.entity.product.Category;
+import cn.bunny.common.spzx.model.vo.common.ResultCodeEnum;
+import cn.bunny.common.spzx.model.vo.product.CategoryExcelVo;
+import cn.bunny.lister.ExcelLister;
import cn.bunny.mapper.CategoryMapper;
import cn.bunny.service.CategoryService;
+import com.alibaba.excel.EasyExcel;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
+import org.springframework.web.multipart.MultipartFile;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
import java.util.List;
@Service
@@ -28,4 +40,50 @@ public class CategoryServiceImpl implements CategoryService {
}
return categoryList;
}
+
+ // 导出Excel
+ @Override
+ public void exportData(HttpServletResponse response) {
+ try {
+ // 1. 设置响应头信息
+ response.setContentType("application/vnd.ms-excel");
+ response.setCharacterEncoding("utf-8");
+
+ String filename = URLEncoder.encode("分类数据", StandardCharsets.UTF_8);
+
+ response.setHeader("Content-dispostion", "attachment;filename=" + filename + ".xlsx");
+ // 2. 调用mapper,查询所有分类,返回list集合
+ List categoryList = categoryMapper.findAll();
+ List categoryExcelVoArrayList = new ArrayList<>();
+
+ for (Category category : categoryList) {
+ CategoryExcelVo categoryExcelVo = new CategoryExcelVo();
+ BeanUtils.copyProperties(category, categoryExcelVo);
+ categoryExcelVoArrayList.add(categoryExcelVo);
+ }
+
+ EasyExcel.write(response.getOutputStream(), CategoryExcelVo.class)
+ .sheet("分类数据")
+ .doWrite(categoryExcelVoArrayList);
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new BunnyException(ResultCodeEnum.DATA_ERROR);
+ }
+
+ }
+
+ // 导入文件
+ @Override
+ public void importData(MultipartFile file) {
+ try {
+ // 创建监听器对象,传递mapper对象
+ ExcelLister excelListener = new ExcelLister<>(categoryMapper);
+ // 调用read方法读取excel数据
+ EasyExcel.read(file.getInputStream(),
+ CategoryExcelVo.class,
+ excelListener).sheet().doRead();
+ } catch (IOException e) {
+ throw new BunnyException(ResultCodeEnum.DATA_ERROR);
+ }
+ }
}
\ No newline at end of file
diff --git a/spzx-manager/src/main/java/cn/bunny/service/impl/SysRoleServiceImpl.java b/spzx-manager/src/main/java/cn/bunny/service/impl/SysRoleServiceImpl.java
index 749795f..5df5746 100644
--- a/spzx-manager/src/main/java/cn/bunny/service/impl/SysRoleServiceImpl.java
+++ b/spzx-manager/src/main/java/cn/bunny/service/impl/SysRoleServiceImpl.java
@@ -31,8 +31,7 @@ public class SysRoleServiceImpl implements SysRoleService {
// 根据条件查询所以数据
List list = sysRoleMapper.findByPage(sysRoleDto);
// 封装pageinfo对象
- PageInfo pageInfo = new PageInfo<>(list);
- return pageInfo;
+ return new PageInfo<>(list);
}
// 角色添加的方法
diff --git a/spzx-manager/src/main/java/cn/bunny/service/impl/SysUserServiceImpl.java b/spzx-manager/src/main/java/cn/bunny/service/impl/SysUserServiceImpl.java
index 9621959..5c7d64d 100644
--- a/spzx-manager/src/main/java/cn/bunny/service/impl/SysUserServiceImpl.java
+++ b/spzx-manager/src/main/java/cn/bunny/service/impl/SysUserServiceImpl.java
@@ -96,13 +96,13 @@ public class SysUserServiceImpl implements SysUserService {
@Override
public PageInfo findByPage(Integer pageNum, Integer pageSize, SysUserDto sysUserDto) {
PageHelper.startPage(pageNum, pageSize);
- List list = sysUserMapper.findByPage(sysUserDto);
- return new PageInfo<>(list);
+ List sysUserList = sysUserMapper.findByPage(sysUserDto);
+ return new PageInfo(sysUserList);
}
// 用户添加
@Override
- public void saveSysuser(SysUser sysUser) {
+ public void saveSysUser(SysUser sysUser) {
// 判断用户名不重复
String userName = sysUser.getUserName();
SysUser dbUser = sysUserMapper.selectUserInfoByUserName(userName);
diff --git a/spzx-manager/src/main/resources/mapper/category/CategoryMapper.xml b/spzx-manager/src/main/resources/mapper/category/CategoryMapper.xml
index ad73207..c96a113 100644
--- a/spzx-manager/src/main/resources/mapper/category/CategoryMapper.xml
+++ b/spzx-manager/src/main/resources/mapper/category/CategoryMapper.xml
@@ -8,6 +8,34 @@
id,name,image_url,parent_id,status,order_num,create_time,update_time,is_deleted
+
+
+ insert into category (
+ id,
+ name,
+ image_url,
+ parent_id,
+ status,
+ order_num,
+ create_time ,
+ update_time ,
+ is_deleted
+ ) values
+
+ (
+ #{item.id},
+ #{item.name},
+ #{item.imageUrl},
+ #{item.parentId},
+ #{item.status},
+ #{item.orderNum},
+ now(),
+ now(),
+ 0
+ )
+
+
+
+
+
+
diff --git a/spzx-manager/src/main/resources/mapper/user/SysUserMapper.xml b/spzx-manager/src/main/resources/mapper/user/SysUserMapper.xml
index 6d9d191..2c5a139 100644
--- a/spzx-manager/src/main/resources/mapper/user/SysUserMapper.xml
+++ b/spzx-manager/src/main/resources/mapper/user/SysUserMapper.xml
@@ -86,7 +86,6 @@
and is_deleted=0
-
order by id desc
\ No newline at end of file
diff --git a/spzx-manager/src/main/test/java/cn/bunny/common/EasyExcel.java b/spzx-manager/src/main/test/java/cn/bunny/common/EasyExcel.java
new file mode 100644
index 0000000..8788490
--- /dev/null
+++ b/spzx-manager/src/main/test/java/cn/bunny/common/EasyExcel.java
@@ -0,0 +1,31 @@
+package java.cn.bunny.common;
+
+import cn.bunny.common.spzx.model.vo.product.CategoryExcelVo;
+import cn.bunny.service.CategoryService;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class EasyExcel {
+ public static void main(String[] args) {
+ read();
+ // write();
+ }
+
+ public static void read() {
+ String fileName = "F:\\java项目\\尚硅谷-尚品甄选项目\\资料\\01.xlsx";
+ ExcelListener excelListener = new ExcelListener();
+ com.alibaba.excel.EasyExcel.read(fileName, CategoryService.class, excelListener)
+ .sheet().doRead();
+
+ List data = excelListener.getData();
+ System.out.println(data);
+ }
+
+ public static void write() {
+ List list = new ArrayList<>();
+
+ com.alibaba.excel.EasyExcel.write("F:\\java项目\\尚硅谷-尚品甄选项目\\资料\\02.xlsx", CategoryExcelVo.class)
+ .sheet("分类数据").doWrite(list);
+ }
+}
diff --git a/spzx-manager/src/main/test/java/cn/bunny/common/ExcelListener.java b/spzx-manager/src/main/test/java/cn/bunny/common/ExcelListener.java
new file mode 100644
index 0000000..36c632c
--- /dev/null
+++ b/spzx-manager/src/main/test/java/cn/bunny/common/ExcelListener.java
@@ -0,0 +1,26 @@
+package java.cn.bunny.common;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ExcelListener extends AnalysisEventListener {
+ private final List data = new ArrayList<>();
+
+ // 读取Excel内容
+ @Override
+ public void invoke(T t, AnalysisContext analysisContext) {
+ data.add(t);
+ }
+
+ public List getData() {
+ return data;
+ }
+
+ @Override
+ public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+
+ }
+}