diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/ProjectManagerController.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/ProjectManagerController.java new file mode 100644 index 0000000..5c76b0a --- /dev/null +++ b/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()); + } +} diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/ProjectManagerMapper.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/ProjectManagerMapper.java new file mode 100644 index 0000000..afef0a4 --- /dev/null +++ b/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 { + /** + *从数据库中获取数据 + * @return + */ + @Select("select * from project_manager") + @ResultType(ProjectManager.class) + List getDate(); +} + + + + diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/ProjectManager.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/ProjectManager.java new file mode 100644 index 0000000..4423cb6 --- /dev/null +++ b/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; +} \ No newline at end of file diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/listener/ProjectManagerListener.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/listener/ProjectManagerListener.java new file mode 100644 index 0000000..04dfb7f --- /dev/null +++ b/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 { + + private List 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); + } + } +} diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/ProjectManagerService.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/ProjectManagerService.java new file mode 100644 index 0000000..fb9caef --- /dev/null +++ b/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 { + /** + * 批量插入数据 + * @param list + */ + public void addData(List list); + + + /** + * 从数据库中获取数据 + * @return + */ + public List getData(); +} diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/ProjectManagerServiceImpl.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/ProjectManagerServiceImpl.java new file mode 100644 index 0000000..411a9c3 --- /dev/null +++ b/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 + implements ProjectManagerService { + @Resource + private ProjectManagerMapper projectManagerMapper; + + @Override + public void addData(List list) { + this.saveBatch(list); + } + + @Override + public List getData() { + List projectManagers = projectManagerMapper.getDate(); + return projectManagers; + } + +} + + + +