123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271 |
- package com.jiayue.biz.service.impl;
- import cn.hutool.db.handler.StringHandler;
- import cn.hutool.http.HttpResponse;
- import cn.hutool.poi.excel.ExcelReader;
- import cn.hutool.poi.excel.ExcelUtil;
- import com.jiayue.biz.domain.*;
- import com.jiayue.biz.service.ProjectInfoService;
- import com.jiayue.biz.service.ProjectProgressService;
- import com.jiayue.biz.util.CalculationUtil;
- import com.jiayue.biz.util.FileUtil;
- import com.jiayue.common.utils.DateUtil;
- import lombok.AllArgsConstructor;
- import lombok.SneakyThrows;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.data.mongodb.core.MongoTemplate;
- import org.springframework.data.mongodb.core.query.Query;
- import org.springframework.stereotype.Service;
- import org.springframework.web.multipart.MultipartFile;
- import javax.servlet.ServletOutputStream;
- import javax.servlet.http.HttpServletResponse;
- import java.io.*;
- import java.net.URLEncoder;
- import java.nio.charset.StandardCharsets;
- import java.nio.file.Files;
- import java.nio.file.Paths;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.List;
- import java.util.UUID;
- import java.util.stream.Collectors;
- @Service
- @AllArgsConstructor
- public class ProjectProgressServiceImpl implements ProjectProgressService {
- private final String indexStr = "一二三四五六七";
- private final String indexStrs = "12345678910";
- private final String projectProgressDir = "D:\\\\projectProgressDir\\\\";
- private final String projectProgressAttachment = "attachment\\\\";
- private final String projectProgressBackNew = "new\\\\";
- private MongoTemplate mongoTemplate;
- private ProjectInfoService projectInfoService;
- //查询项目进展
- public List<ProjectProgress> selectProProjectInfo() {
- return mongoTemplate.find(new Query(), ProjectProgress.class, "project_progress");
- }
- //下载模板
- public void downloadProjectProgress(HttpServletResponse response, String id) {
- File projectProgressDirFileNew = new File(projectProgressDir + id + File.separator + projectProgressBackNew);
- if (!projectProgressDirFileNew.exists()) {
- projectProgressDirFileNew.mkdirs();
- }
- File[] files = projectProgressDirFileNew.listFiles();
- if (files.length > 0) {
- com.jiayue.biz.util.FileUtil.downloadFile(files[0], response);
- }else{
- com.jiayue.biz.util.FileUtil.downloadFile(new File("D:\\projectProgressDir\\model\\template.xls"), response);
- }
- }
- /**
- * 保存附件
- *
- * @param multipartFile 文件
- * @param id 文件夹名
- */
- @SneakyThrows
- public void saveAttachment(MultipartFile multipartFile, String id) {
- File projectProgressDirFileNew = new File(projectProgressDir + id + File.separator + projectProgressAttachment);
- if (!projectProgressDirFileNew.exists()) {
- projectProgressDirFileNew.mkdirs();
- }
- multipartFile.transferTo(new File(projectProgressDirFileNew.getPath() + File.separator + multipartFile.getOriginalFilename()));
- }
- //项目进展解析
- public void projectProgressParse(MultipartFile multipartFile, String id) {
- ProjectInfo oneProjectInfoById = projectInfoService.getOneProjectInfoById(id);
- try {
- //创建临时文件
- File tempFile = File.createTempFile(oneProjectInfoById.getProjectBasicInfo().getProjectName(), ".xls");
- multipartFile.transferTo(tempFile);
- //新文件目录
- File projectProgressDirFileNew = new File(projectProgressDir + id + File.separator + projectProgressBackNew);
- if (!projectProgressDirFileNew.exists()) {
- projectProgressDirFileNew.mkdirs();
- }
- File[] files = projectProgressDirFileNew.listFiles();
- //删除旧文件
- if (files != null && files.length > 0) {
- for (File file1 : files) {
- Files.delete(Paths.get(file1.getPath()));
- }
- }
- ExcelReader reader = ExcelUtil.getReader(tempFile);
- List<List<Object>> read = reader.read();
- //解析文件入库
- saveProjectProgress(read, id);
- if (tempFile.exists()) {
- //将临时文件复制到需要保存的目录
- cn.hutool.core.io.FileUtil.copy(tempFile, projectProgressDirFileNew, true);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- //项目进展解析文件入库
- public void saveProjectProgress(List<List<Object>> read, String id) {
- ArrayList<ProjectMenusOne> projectMenusOneList = new ArrayList<>();
- String s1 = "";
- //创建一级菜单
- ProjectMenusOne projectMenusOne = new ProjectMenusOne();
- ProjectMenusTow projectMenusTow = new ProjectMenusTow();
- List<List<Object>> collect = read.stream().filter(r -> r.get(0).toString().equals("一")).collect(Collectors.toList());
- System.out.println("collect = " + collect);
- //循环每行数据
- for (List<Object> objects : read) {
- if (indexStr.contains(objects.get(0).toString())) {
- //每次进入新的一级菜单都需要新的对象
- projectMenusOne = new ProjectMenusOne();
- projectMenusOne.setId(UUID.randomUUID().toString());
- projectMenusOne.setIndex(objects.get(0).toString());
- projectMenusOne.setWorkContent(objects.get(1).toString());
- if (objects.get(2) != null) {
- if (objects.get(2).toString().contains("00:00:00")) {
- projectMenusOne.setPlanTime(objects.get(2).toString().replace("00:00:00", ""));
- } else {
- projectMenusOne.setPlanTime(objects.get(2).toString());
- }
- }
- projectMenusOne.setProjectMenusTows(new ArrayList<ProjectMenusTow>());
- projectMenusOneList.add(projectMenusOne);
- if ((objects.get(0).toString().equals("一") && objects.get(3) != null && !objects.get(3).toString().equals("")) ||
- (objects.get(0).toString().equals("一") && objects.get(4) != null && !objects.get(4).toString().equals("")) ||
- (objects.get(0).toString().equals("一") && objects.get(5) != null && !objects.get(5).toString().equals(""))) {
- ProjectMenusTow projectMenusTow1 = new ProjectMenusTow();
- projectMenusTow1.setId(UUID.randomUUID().toString());
- projectMenusTow1.setIndex("");
- projectMenusTow1.setPlanTime("");
- projectMenusTow1.setWorkContent("");
- projectMenusTow1.setProjectMenusThreeList(new ArrayList<>());
- ProjectMenusThree projectMenusThree = new ProjectMenusThree();
- projectMenusThree.setIndex("");
- projectMenusThree.setWorkContent(objects.get(3) == null ? "" : objects.get(3).toString());
- if (objects.get(4) != null) {
- if (objects.get(4).toString().contains("00:00:00")) {
- projectMenusThree.setRealTime(objects.get(4).toString().replace("00:00:00", ""));
- } else {
- projectMenusThree.setRealTime(objects.get(4).toString());
- }
- }
- projectMenusThree.setRemark(objects.get(5) == null ? "" : objects.get(5).toString());
- projectMenusThree.setId(UUID.randomUUID().toString());
- projectMenusTow1.getProjectMenusThreeList().add(projectMenusThree);
- projectMenusOne.getProjectMenusTows().add(projectMenusTow1);
- }
- } else if (indexStrs.contains(objects.get(0).toString())) {
- //如果 二级菜单 有变化再创建新的
- if (!s1.equals(objects.get(1).toString())) {
- projectMenusTow = hTow(objects);
- projectMenusTow.setProjectMenusThreeList(new ArrayList<ProjectMenusThree>());
- projectMenusOne.getProjectMenusTows().add(projectMenusTow);
- }
- //三级菜单每次都需要新对象
- projectMenusTow.getProjectMenusThreeList().add(hThree(objects));
- s1 = objects.get(1).toString();
- }
- }
- //最终List
- List<ProjectProgress> projectProgresses = this.selectProProjectInfo();
- List<ProjectProgress> progressList = projectProgresses.stream().filter(p -> p.getProjectId().equals(id)).collect(Collectors.toList());
- ProjectProgress projectProgress = progressList.get(0);
- // ProjectProgress projectProgress = new ProjectProgress();
- projectProgress.setProjectMenusOneList(projectMenusOneList);
- mongoTemplate.save(projectProgress, "project_progress");
- }
- //设置二级
- public ProjectMenusTow hTow(List<Object> objects) {
- ProjectMenusTow projectMenusTow = new ProjectMenusTow();
- projectMenusTow.setId(UUID.randomUUID().toString());
- projectMenusTow.setIndex(objects.get(0) == null ? "" : objects.get(0).toString());
- projectMenusTow.setWorkContent(objects.get(1) == null ? "" : objects.get(1).toString());
- if (objects.get(2) != null) {
- if (objects.get(2).toString().contains("00:00:00")) {
- projectMenusTow.setPlanTime(objects.get(2).toString().replace("00:00:00", ""));
- } else {
- projectMenusTow.setPlanTime(objects.get(2) == null ? "" : objects.get(2).toString());
- }
- }
- return projectMenusTow;
- }
- //设置三级信息
- public ProjectMenusThree hThree(List<Object> objects) {
- ProjectMenusThree projectMenusThree = new ProjectMenusThree();
- projectMenusThree.setId(UUID.randomUUID().toString());
- if (objects.get(3) != null) {
- projectMenusThree.setIndex("");
- projectMenusThree.setWorkContent(objects.get(3).toString());
- }
- if (objects.get(4).toString().contains("00:00:00")) {
- projectMenusThree.setRealTime(objects.get(4).toString().replace("00:00:00", ""));
- } else {
- projectMenusThree.setRealTime(objects.get(4) == null ? "" : objects.get(4).toString());
- }
- projectMenusThree.setRemark(objects.get(5) == null ? "" : objects.get(5).toString());
- return projectMenusThree;
- }
- // public String splitStr(String strs) {
- // if (strs.contains(".")) {
- // int index = strs.indexOf(".");
- // String substring = strs.substring(0, index + 2);
- // return CalculationUtil.getNumberFromStringForDian(substring);
- // } else {
- // return "";
- // }
- // }
- //
- // public String splitStr22(String strs) {
- // if (strs.contains(".")) {
- // int index = strs.indexOf(".");
- // String substring = strs.substring(index);
- // return substring;
- // } else {
- // return "";
- // }
- // }
- }
|