ProjectProgressServiceImpl.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. package com.jiayue.biz.service.impl;
  2. import cn.hutool.db.handler.StringHandler;
  3. import cn.hutool.http.HttpResponse;
  4. import cn.hutool.poi.excel.ExcelReader;
  5. import cn.hutool.poi.excel.ExcelUtil;
  6. import com.jiayue.biz.domain.*;
  7. import com.jiayue.biz.service.ProjectInfoService;
  8. import com.jiayue.biz.service.ProjectProgressService;
  9. import com.jiayue.biz.util.CalculationUtil;
  10. import com.jiayue.biz.util.FileUtil;
  11. import com.jiayue.common.utils.DateUtil;
  12. import lombok.AllArgsConstructor;
  13. import lombok.SneakyThrows;
  14. import org.springframework.beans.factory.annotation.Value;
  15. import org.springframework.data.mongodb.core.MongoTemplate;
  16. import org.springframework.data.mongodb.core.query.Query;
  17. import org.springframework.stereotype.Service;
  18. import org.springframework.web.multipart.MultipartFile;
  19. import javax.servlet.ServletOutputStream;
  20. import javax.servlet.http.HttpServletResponse;
  21. import java.io.*;
  22. import java.net.URLEncoder;
  23. import java.nio.charset.StandardCharsets;
  24. import java.nio.file.Files;
  25. import java.nio.file.Paths;
  26. import java.util.ArrayList;
  27. import java.util.Arrays;
  28. import java.util.List;
  29. import java.util.UUID;
  30. import java.util.stream.Collectors;
  31. @Service
  32. @AllArgsConstructor
  33. public class ProjectProgressServiceImpl implements ProjectProgressService {
  34. private final String indexStr = "一二三四五六七";
  35. private final String indexStrs = "12345678910";
  36. private final String projectProgressDir = "D:\\\\projectProgressDir\\\\";
  37. private final String projectProgressAttachment = "attachment\\\\";
  38. private final String projectProgressBackNew = "new\\\\";
  39. private MongoTemplate mongoTemplate;
  40. private ProjectInfoService projectInfoService;
  41. //查询项目进展
  42. public List<ProjectProgress> selectProProjectInfo() {
  43. return mongoTemplate.find(new Query(), ProjectProgress.class, "project_progress");
  44. }
  45. //下载模板
  46. public void downloadProjectProgress(HttpServletResponse response, String id) {
  47. File projectProgressDirFileNew = new File(projectProgressDir + id + File.separator + projectProgressBackNew);
  48. if (!projectProgressDirFileNew.exists()) {
  49. projectProgressDirFileNew.mkdirs();
  50. }
  51. File[] files = projectProgressDirFileNew.listFiles();
  52. if (files.length > 0) {
  53. com.jiayue.biz.util.FileUtil.downloadFile(files[0], response);
  54. }else{
  55. com.jiayue.biz.util.FileUtil.downloadFile(new File("D:\\projectProgressDir\\model\\template.xls"), response);
  56. }
  57. }
  58. /**
  59. * 保存附件
  60. *
  61. * @param multipartFile 文件
  62. * @param id 文件夹名
  63. */
  64. @SneakyThrows
  65. public void saveAttachment(MultipartFile multipartFile, String id) {
  66. File projectProgressDirFileNew = new File(projectProgressDir + id + File.separator + projectProgressAttachment);
  67. if (!projectProgressDirFileNew.exists()) {
  68. projectProgressDirFileNew.mkdirs();
  69. }
  70. multipartFile.transferTo(new File(projectProgressDirFileNew.getPath() + File.separator + multipartFile.getOriginalFilename()));
  71. }
  72. //项目进展解析
  73. public void projectProgressParse(MultipartFile multipartFile, String id) {
  74. ProjectInfo oneProjectInfoById = projectInfoService.getOneProjectInfoById(id);
  75. try {
  76. //创建临时文件
  77. File tempFile = File.createTempFile(oneProjectInfoById.getProjectBasicInfo().getProjectName(), ".xls");
  78. multipartFile.transferTo(tempFile);
  79. //新文件目录
  80. File projectProgressDirFileNew = new File(projectProgressDir + id + File.separator + projectProgressBackNew);
  81. if (!projectProgressDirFileNew.exists()) {
  82. projectProgressDirFileNew.mkdirs();
  83. }
  84. File[] files = projectProgressDirFileNew.listFiles();
  85. //删除旧文件
  86. if (files != null && files.length > 0) {
  87. for (File file1 : files) {
  88. Files.delete(Paths.get(file1.getPath()));
  89. }
  90. }
  91. ExcelReader reader = ExcelUtil.getReader(tempFile);
  92. List<List<Object>> read = reader.read();
  93. //解析文件入库
  94. saveProjectProgress(read, id);
  95. if (tempFile.exists()) {
  96. //将临时文件复制到需要保存的目录
  97. cn.hutool.core.io.FileUtil.copy(tempFile, projectProgressDirFileNew, true);
  98. }
  99. } catch (Exception e) {
  100. e.printStackTrace();
  101. }
  102. }
  103. //项目进展解析文件入库
  104. public void saveProjectProgress(List<List<Object>> read, String id) {
  105. ArrayList<ProjectMenusOne> projectMenusOneList = new ArrayList<>();
  106. String s1 = "";
  107. //创建一级菜单
  108. ProjectMenusOne projectMenusOne = new ProjectMenusOne();
  109. ProjectMenusTow projectMenusTow = new ProjectMenusTow();
  110. List<List<Object>> collect = read.stream().filter(r -> r.get(0).toString().equals("一")).collect(Collectors.toList());
  111. System.out.println("collect = " + collect);
  112. //循环每行数据
  113. for (List<Object> objects : read) {
  114. if (indexStr.contains(objects.get(0).toString())) {
  115. //每次进入新的一级菜单都需要新的对象
  116. projectMenusOne = new ProjectMenusOne();
  117. projectMenusOne.setId(UUID.randomUUID().toString());
  118. projectMenusOne.setIndex(objects.get(0).toString());
  119. projectMenusOne.setWorkContent(objects.get(1).toString());
  120. if (objects.get(2) != null) {
  121. if (objects.get(2).toString().contains("00:00:00")) {
  122. projectMenusOne.setPlanTime(objects.get(2).toString().replace("00:00:00", ""));
  123. } else {
  124. projectMenusOne.setPlanTime(objects.get(2).toString());
  125. }
  126. }
  127. projectMenusOne.setProjectMenusTows(new ArrayList<ProjectMenusTow>());
  128. projectMenusOneList.add(projectMenusOne);
  129. if ((objects.get(0).toString().equals("一") && objects.get(3) != null && !objects.get(3).toString().equals("")) ||
  130. (objects.get(0).toString().equals("一") && objects.get(4) != null && !objects.get(4).toString().equals("")) ||
  131. (objects.get(0).toString().equals("一") && objects.get(5) != null && !objects.get(5).toString().equals(""))) {
  132. ProjectMenusTow projectMenusTow1 = new ProjectMenusTow();
  133. projectMenusTow1.setId(UUID.randomUUID().toString());
  134. projectMenusTow1.setIndex("");
  135. projectMenusTow1.setPlanTime("");
  136. projectMenusTow1.setWorkContent("");
  137. projectMenusTow1.setProjectMenusThreeList(new ArrayList<>());
  138. ProjectMenusThree projectMenusThree = new ProjectMenusThree();
  139. projectMenusThree.setIndex("");
  140. projectMenusThree.setWorkContent(objects.get(3) == null ? "" : objects.get(3).toString());
  141. if (objects.get(4) != null) {
  142. if (objects.get(4).toString().contains("00:00:00")) {
  143. projectMenusThree.setRealTime(objects.get(4).toString().replace("00:00:00", ""));
  144. } else {
  145. projectMenusThree.setRealTime(objects.get(4).toString());
  146. }
  147. }
  148. projectMenusThree.setRemark(objects.get(5) == null ? "" : objects.get(5).toString());
  149. projectMenusThree.setId(UUID.randomUUID().toString());
  150. projectMenusTow1.getProjectMenusThreeList().add(projectMenusThree);
  151. projectMenusOne.getProjectMenusTows().add(projectMenusTow1);
  152. }
  153. } else if (indexStrs.contains(objects.get(0).toString())) {
  154. //如果 二级菜单 有变化再创建新的
  155. if (!s1.equals(objects.get(1).toString())) {
  156. projectMenusTow = hTow(objects);
  157. projectMenusTow.setProjectMenusThreeList(new ArrayList<ProjectMenusThree>());
  158. projectMenusOne.getProjectMenusTows().add(projectMenusTow);
  159. }
  160. //三级菜单每次都需要新对象
  161. projectMenusTow.getProjectMenusThreeList().add(hThree(objects));
  162. s1 = objects.get(1).toString();
  163. }
  164. }
  165. //最终List
  166. List<ProjectProgress> projectProgresses = this.selectProProjectInfo();
  167. List<ProjectProgress> progressList = projectProgresses.stream().filter(p -> p.getProjectId().equals(id)).collect(Collectors.toList());
  168. ProjectProgress projectProgress = progressList.get(0);
  169. // ProjectProgress projectProgress = new ProjectProgress();
  170. projectProgress.setProjectMenusOneList(projectMenusOneList);
  171. mongoTemplate.save(projectProgress, "project_progress");
  172. }
  173. //设置二级
  174. public ProjectMenusTow hTow(List<Object> objects) {
  175. ProjectMenusTow projectMenusTow = new ProjectMenusTow();
  176. projectMenusTow.setId(UUID.randomUUID().toString());
  177. projectMenusTow.setIndex(objects.get(0) == null ? "" : objects.get(0).toString());
  178. projectMenusTow.setWorkContent(objects.get(1) == null ? "" : objects.get(1).toString());
  179. if (objects.get(2) != null) {
  180. if (objects.get(2).toString().contains("00:00:00")) {
  181. projectMenusTow.setPlanTime(objects.get(2).toString().replace("00:00:00", ""));
  182. } else {
  183. projectMenusTow.setPlanTime(objects.get(2) == null ? "" : objects.get(2).toString());
  184. }
  185. }
  186. return projectMenusTow;
  187. }
  188. //设置三级信息
  189. public ProjectMenusThree hThree(List<Object> objects) {
  190. ProjectMenusThree projectMenusThree = new ProjectMenusThree();
  191. projectMenusThree.setId(UUID.randomUUID().toString());
  192. if (objects.get(3) != null) {
  193. projectMenusThree.setIndex("");
  194. projectMenusThree.setWorkContent(objects.get(3).toString());
  195. }
  196. if (objects.get(4).toString().contains("00:00:00")) {
  197. projectMenusThree.setRealTime(objects.get(4).toString().replace("00:00:00", ""));
  198. } else {
  199. projectMenusThree.setRealTime(objects.get(4) == null ? "" : objects.get(4).toString());
  200. }
  201. projectMenusThree.setRemark(objects.get(5) == null ? "" : objects.get(5).toString());
  202. return projectMenusThree;
  203. }
  204. // public String splitStr(String strs) {
  205. // if (strs.contains(".")) {
  206. // int index = strs.indexOf(".");
  207. // String substring = strs.substring(0, index + 2);
  208. // return CalculationUtil.getNumberFromStringForDian(substring);
  209. // } else {
  210. // return "";
  211. // }
  212. // }
  213. //
  214. // public String splitStr22(String strs) {
  215. // if (strs.contains(".")) {
  216. // int index = strs.indexOf(".");
  217. // String substring = strs.substring(index);
  218. // return substring;
  219. // } else {
  220. // return "";
  221. // }
  222. // }
  223. }