Browse Source

后台导入导出项目负责人

master
gejunhao 4 weeks ago
parent
commit
490225a1da
  1. 61
      huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/ProjectManagerController.java
  2. 28
      huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/ProjectManagerMapper.java
  3. 39
      huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/ProjectManager.java
  4. 62
      huzhou/src/main/java/com/easy/admin/modules/huzhou/listener/ProjectManagerListener.java
  5. 27
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/ProjectManagerService.java
  6. 39
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/ProjectManagerServiceImpl.java

61
huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/ProjectManagerController.java

@ -0,0 +1,61 @@
package com.easy.admin.modules.huzhou.controller;
import com.alibaba.excel.EasyExcel;
import com.easy.admin.modules.huzhou.entity.ProjectManager;
import com.easy.admin.modules.huzhou.listener.ProjectManagerListener;
import com.easy.admin.modules.huzhou.service.ProjectManagerService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.time.LocalDate;
/**
* @Author gejunhao
* @Date 2025/1/8 9:52
* @Description: 用于后台导入项目负责人信息
*/
@Slf4j
@RequestMapping("/projectManager")
@RestController
public class ProjectManagerController {
@Resource
private ProjectManagerService projectManagerService;
@PostMapping("/upload")
public void upload(MultipartFile file, HttpServletResponse response) throws IOException {
long t1 = System.currentTimeMillis();
EasyExcel.read(file.getInputStream(), ProjectManager.class, new ProjectManagerListener(projectManagerService)).sheet().doRead();
response.setContentType("text/html;charset=utf8");
long t2 = System.currentTimeMillis();
response.getWriter().println("导入数据成功!,共用时:"+(t2-t1));
log.info("导入项目负责人数据成功! 共用时:{}ms",(t2-t1));
}
@GetMapping("/download")
public void download(HttpServletResponse response) throws IOException {
// 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
String flag = "项目负责人信息";
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
LocalDate currentDate = LocalDate.now();
System.out.println("当前日期: " + currentDate);
String fileName = URLEncoder.encode( flag+currentDate, "UTF-8")
.replaceAll("\\+", "%20");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
EasyExcel.write(response.getOutputStream(), ProjectManager.class)
.sheet("项目联系人信息"+currentDate)
.doWrite(projectManagerService.getData());
}
}

28
huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/ProjectManagerMapper.java

@ -0,0 +1,28 @@
package com.easy.admin.modules.huzhou.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.easy.admin.modules.huzhou.entity.ProjectManager;
import org.apache.ibatis.annotations.ResultType;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* @author gjh
* @description 针对表project_manager的数据库操作Mapper
* @createDate 2025-01-08 09:22:14
*/
public interface ProjectManagerMapper extends BaseMapper<ProjectManager> {
/**
*从数据库中获取数据
* @return
*/
@Select("select * from project_manager")
@ResultType(ProjectManager.class)
List<ProjectManager> getDate();
}

39
huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/ProjectManager.java

@ -0,0 +1,39 @@
package com.easy.admin.modules.huzhou.entity;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
/**
*
* @author gjh
* @TableName project_manager
*/
@TableName(value ="project_manager")
@Data
public class ProjectManager implements Serializable {
@ExcelProperty(value = "序号")
//@TableId(type = IdType.AUTO)
@TableField(exist = false)
private Integer id;
@ExcelProperty(value = "项目名称")
private String projectName;
/**
* 可以有多个项目负责人
*/
@ExcelProperty(value = "项目负责人")
private String manager;
@ExcelProperty(value = "联系方式")
private String phone;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}

62
huzhou/src/main/java/com/easy/admin/modules/huzhou/listener/ProjectManagerListener.java

@ -0,0 +1,62 @@
package com.easy.admin.modules.huzhou.listener;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import com.easy.admin.modules.huzhou.entity.ProjectManager;
import com.easy.admin.modules.huzhou.service.ProjectManagerService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.ArrayList;
import java.util.List;
/**
* 自定义监听器读数据
* @author gjh
*/
@Slf4j
public class ProjectManagerListener implements ReadListener<ProjectManager> {
private List<ProjectManager> list = new ArrayList<>();
/**
* 自己定义一个缓冲量
*/
private static final int BATCH_COUNT = 20;
@Autowired
private ProjectManagerService projectManagerService;
public ProjectManagerListener(ProjectManagerService projectManagerService) {
this.projectManagerService = projectManagerService;
}
/**
* 每读一行数据都会调用这个方法
*
* @param projectManager
* @param analysisContext
*/
@Override
public void invoke(ProjectManager projectManager, AnalysisContext analysisContext) {
// 读取一行数据就添加到集合
list.add(projectManager);
// 判断是否到达缓存量了
if (list.size() >= BATCH_COUNT){
// 操作数据库
projectManagerService.addData(list);
list = new ArrayList<>(BATCH_COUNT);
}
}
/**
* 读完整个excel之后再调用这个方法
*
* @param analysisContext
*/
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
if (list.size()>0){
projectManagerService.addData(list);
}
}
}

27
huzhou/src/main/java/com/easy/admin/modules/huzhou/service/ProjectManagerService.java

@ -0,0 +1,27 @@
package com.easy.admin.modules.huzhou.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.easy.admin.modules.huzhou.entity.ProjectManager;
import java.util.List;
/**
* @author gjh
* @description 针对表project_manager的数据库操作Service
* @createDate 2025-01-08 09:22:14
*/
public interface ProjectManagerService extends IService<ProjectManager> {
/**
* 批量插入数据
* @param list
*/
public void addData(List<ProjectManager> list);
/**
* 从数据库中获取数据
* @return
*/
public List<ProjectManager> getData();
}

39
huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/ProjectManagerServiceImpl.java

@ -0,0 +1,39 @@
package com.easy.admin.modules.huzhou.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.easy.admin.modules.huzhou.dao.ProjectManagerMapper;
import com.easy.admin.modules.huzhou.entity.ProjectManager;
import com.easy.admin.modules.huzhou.service.ProjectManagerService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* @author gjh
* @description 针对表project_manager的数据库操作Service实现
* @createDate 2025-01-08 09:22:14
*/
@Service
public class ProjectManagerServiceImpl extends ServiceImpl<ProjectManagerMapper, ProjectManager>
implements ProjectManagerService {
@Resource
private ProjectManagerMapper projectManagerMapper;
@Override
public void addData(List<ProjectManager> list) {
this.saveBatch(list);
}
@Override
public List<ProjectManager> getData() {
List<ProjectManager> projectManagers = projectManagerMapper.getDate();
return projectManagers;
}
}
Loading…
Cancel
Save