LAPTOP-3T9ND0SJ\ieven 3 жил өмнө
parent
commit
ef0ed132d9
19 өөрчлөгдсөн 310 нэмэгдсэн , 297 устгасан
  1. 2 0
      src/main/java/ieven/server/webapp/WebappApplication.java
  2. 6 0
      src/main/java/ieven/server/webapp/api/AlipayController.java
  3. 12 0
      src/main/java/ieven/server/webapp/api/DataController.java
  4. 10 47
      src/main/java/ieven/server/webapp/api/FileController.java
  5. 0 17
      src/main/java/ieven/server/webapp/api/TaskController.java
  6. 0 10
      src/main/java/ieven/server/webapp/api/UpdateController.java
  7. 0 113
      src/main/java/ieven/server/webapp/api/ViewController.java
  8. 9 0
      src/main/java/ieven/server/webapp/domain/alipay/AlipayService.java
  9. 1 1
      src/main/java/ieven/server/webapp/domain/alipay/OperateInput.java
  10. 68 0
      src/main/java/ieven/server/webapp/domain/data/DataService.java
  11. 1 0
      src/main/java/ieven/server/webapp/domain/data/Fields.java
  12. 10 0
      src/main/java/ieven/server/webapp/domain/data/ViewInput.java
  13. 10 0
      src/main/java/ieven/server/webapp/domain/file/FileListInput.java
  14. 156 0
      src/main/java/ieven/server/webapp/domain/file/FileService.java
  15. 7 0
      src/main/java/ieven/server/webapp/domain/file/FileStatus.java
  16. 1 1
      src/main/java/ieven/server/webapp/domain/file/LogicalFile.java
  17. 0 4
      src/main/java/ieven/server/webapp/service/impl/FileServiceImpl.java
  18. 17 18
      src/main/java/ieven/server/webapp/service/impl/MongoExcelServiceImpl.java
  19. 0 86
      src/main/java/ieven/server/webapp/tasks/ReadFileTask.java

+ 2 - 0
src/main/java/ieven/server/webapp/WebappApplication.java

@@ -2,8 +2,10 @@ package ieven.server.webapp;
 
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableAsync;
 
 
 @SpringBootApplication
 @SpringBootApplication
+@EnableAsync
 public class WebappApplication {
 public class WebappApplication {
 
 
     public static void main(String[] args) {
     public static void main(String[] args) {

+ 6 - 0
src/main/java/ieven/server/webapp/api/AlipayController.java

@@ -23,4 +23,10 @@ public class AlipayController {
         Map<String, Object> operations = new LinkedHashMap<>();
         Map<String, Object> operations = new LinkedHashMap<>();
         return null;
         return null;
     }
     }
+
+    @PostMapping("/operate_chain")
+    public Mapped operateChain() {
+        Map<String, Object> operations = new LinkedHashMap<>();
+        return null;
+    }
 }
 }

+ 12 - 0
src/main/java/ieven/server/webapp/api/DataController.java

@@ -2,9 +2,13 @@ package ieven.server.webapp.api;
 
 
 import ieven.server.webapp.domain.data.DataMap;
 import ieven.server.webapp.domain.data.DataMap;
 import ieven.server.webapp.domain.data.DataRepository;
 import ieven.server.webapp.domain.data.DataRepository;
+import ieven.server.webapp.domain.data.DataService;
+import ieven.server.webapp.domain.data.ViewInput;
+import ieven.server.webapp.infrastructure.wrapper.Mapped;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
 
 
@@ -15,6 +19,8 @@ public class DataController {
 
 
     @Autowired
     @Autowired
     private DataRepository dataRepository;
     private DataRepository dataRepository;
+    @Autowired
+    private DataService dataService;
 
 
     @PostMapping("save")
     @PostMapping("save")
     public DataMap saveOne() {
     public DataMap saveOne() {
@@ -24,4 +30,10 @@ public class DataController {
         dataMap.formId();
         dataMap.formId();
         return dataMap;
         return dataMap;
     }
     }
+
+    @PostMapping("/viewDataByFileId")
+    public Mapped viewByFileId(@RequestBody ViewInput viewInput) {
+
+        return dataService.viewDataByFileId(viewInput);
+    }
 }
 }

+ 10 - 47
src/main/java/ieven/server/webapp/api/FileController.java

@@ -1,13 +1,15 @@
 package ieven.server.webapp.api;
 package ieven.server.webapp.api;
 
 
 import com.mongodb.client.gridfs.model.GridFSFile;
 import com.mongodb.client.gridfs.model.GridFSFile;
+import ieven.server.webapp.domain.file.FileListInput;
+import ieven.server.webapp.domain.file.FileService;
+import ieven.server.webapp.domain.file.LogicalFile;
+import ieven.server.webapp.infrastructure.wrapper.Mapped;
 import ieven.server.webapp.model.UploadedFile;
 import ieven.server.webapp.model.UploadedFile;
 import ieven.server.webapp.model.display.UploadedFileDisplay;
 import ieven.server.webapp.model.display.UploadedFileDisplay;
-import ieven.server.webapp.service.FileService;
 import ieven.server.webapp.util.Common;
 import ieven.server.webapp.util.Common;
 import ieven.server.webapp.util.Properties;
 import ieven.server.webapp.util.Properties;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.bson.types.ObjectId;
 import org.bson.types.ObjectId;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -22,7 +24,6 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.servlet.ServletException;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.Part;
 import java.io.IOException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.OutputStream;
@@ -40,8 +41,6 @@ import java.util.logging.Logger;
 public class FileController {
 public class FileController {
     private final Logger logger = Logger.getLogger("UploadController");
     private final Logger logger = Logger.getLogger("UploadController");
     @Autowired
     @Autowired
-    private GridFsTemplate gridFsTemplate;
-    @Autowired
     private GridFsOperations gridFsOperations;
     private GridFsOperations gridFsOperations;
     @Autowired
     @Autowired
     private MongoTemplate mongoTemplate;
     private MongoTemplate mongoTemplate;
@@ -49,48 +48,16 @@ public class FileController {
     private FileService fileService;
     private FileService fileService;
 
 
     //上传文件
     //上传文件
-    @PostMapping("/upload")
-    public Map<String, Object> uploadFile(@RequestParam MultipartFile file) throws ServletException, IOException {
-        String filename = file.getOriginalFilename();
-        String contentType = file.getContentType();
-        //直接上传到mongo
-        ObjectId objectId = gridFsTemplate.store(file.getInputStream(), filename, contentType);
-        UploadedFile uploaded = new UploadedFile();
-        uploaded.set_id(objectId.toHexString());
-        uploaded.setFilename(filename);
-        uploaded.setUploadDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
-        uploaded.setResolved(false);
-        uploaded.setCount(0);
-        mongoTemplate.insert(uploaded, Properties.COLLECTION_UPLOADED);
+    @PostMapping("/uploadSingle")
+    public Mapped uploadSingle(@RequestParam MultipartFile file, @RequestParam String modelId) {
         //异步读取数据并存储到mongo
         //异步读取数据并存储到mongo
-        fileService.readFileWhileStoreDataAsync(objectId);
-        logger.info("上传文件成功并加入到队列处理中:" + filename);
-        Map<String, Object> res = new HashMap<>();
-        res.put("code", 200);
-        res.put("result", "");
-        return res;
+        return fileService.storeUploaded(file, modelId);
     }
     }
 
 
     //列出已上传文件
     //列出已上传文件
-    @PostMapping("/uploaded")
-    public Map<String, Object> listUploaded(@RequestBody Map<String, Object> jsonMap) {
-        //查询总量
-        long total = mongoTemplate.count(new Query(), Properties.COLLECTION_UPLOADED);
-        int page = (int) jsonMap.getOrDefault("page", 1);
-        int pageSize = (int) jsonMap.getOrDefault("pageSize", 20);
-        int skip = (page - 1) * pageSize;
-        Query query = new Query();
-        List<UploadedFileDisplay> resultList = mongoTemplate.find(
-                query.skip(skip).limit(pageSize),
-                UploadedFileDisplay.class,
-                Properties.COLLECTION_UPLOADED);
-        Map<String, Object> res = new HashMap<>();
-        res.put("code", 200);
-        res.put("result", resultList);
-        res.put("total", total);
-        res.put("page", page);
-        res.put("pageSize", pageSize);
-        return res;
+    @PostMapping("/uploadedList")
+    public Mapped listUploaded(@RequestBody FileListInput fileListInput) {
+        return fileService.listUploaded(fileListInput);
     }
     }
 
 
     //删除已上传的文件
     //删除已上传的文件
@@ -111,10 +78,6 @@ public class FileController {
         return res;
         return res;
     }
     }
 
 
-    @PostMapping("/viewGeneratedFiles")
-    public Map<String, Object> viewGeneratedFiles(@RequestBody Map<String, Object> jsonMap) {
-        return null;
-    }
 
 
     @GetMapping("/downloadById")
     @GetMapping("/downloadById")
     public void downloadById(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String, Object> jsonMap) {
     public void downloadById(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String, Object> jsonMap) {

+ 0 - 17
src/main/java/ieven/server/webapp/api/TaskController.java

@@ -1,17 +0,0 @@
-package ieven.server.webapp.api;
-
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.Map;
-
-@RestController
-@RequestMapping("/task")
-public class TaskController {
-
-    @PostMapping("/list")
-    public Map<String, Object> taskList() {
-        return null;
-    }
-}

+ 0 - 10
src/main/java/ieven/server/webapp/api/UpdateController.java

@@ -1,10 +0,0 @@
-package ieven.server.webapp.api;
-
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-@RequestMapping("/update")
-public class UpdateController {
-
-}

+ 0 - 113
src/main/java/ieven/server/webapp/api/ViewController.java

@@ -1,113 +0,0 @@
-package ieven.server.webapp.api;
-
-import ieven.server.webapp.model.UploadedFile;
-import ieven.server.webapp.util.Common;
-import ieven.server.webapp.util.Properties;
-import org.apache.commons.lang3.StringUtils;
-import org.bson.types.ObjectId;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.mongodb.core.MongoTemplate;
-import org.springframework.data.mongodb.core.query.Criteria;
-import org.springframework.data.mongodb.core.query.Query;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-@RestController
-@RequestMapping("/view")
-public class ViewController {
-    @Autowired
-    private MongoTemplate mongoTemplate;
-
-    //列出已上传文件
-    @PostMapping("/byFileId")
-    public Map<String, Object> byFileId(@RequestBody Map<String, Object> jsonMap) {
-        String fileId = (String) jsonMap.getOrDefault("fileId", "");
-        int page = (int) jsonMap.getOrDefault("page", 1);
-        int pageSize = (int) jsonMap.getOrDefault("pageSize", 20);
-        Map<String, Object> res = new HashMap<>();
-        if (StringUtils.isBlank(fileId)) {
-            return Common.errorMapWithPage("没有找到fileId");
-        } else {
-            //查询总量和表头
-            Query queryTotal = new Query();
-            queryTotal.addCriteria(Criteria.where("_id").is(fileId));
-            queryTotal.fields().include("count");
-            queryTotal.fields().include("tableHeader");
-            UploadedFile uploaded = mongoTemplate.findOne(queryTotal, UploadedFile.class, Properties.COLLECTION_UPLOADED);
-            if (uploaded == null) {
-                return Common.errorMapWithPage("没有找到文件信息");
-            }
-            int total = uploaded.getCount();
-            List<String> tableHeader = uploaded.getTableHeader();
-            int skip = (page - 1) * pageSize;
-            Query queryList = new Query(Criteria.where("fileId").is(fileId));
-            List<Map> resultList = mongoTemplate.find(
-                    queryList.skip(skip).limit(pageSize),
-                    Map.class,
-                    Properties.COLLECTION_DATA);
-            for (Map<String, Object> map : resultList) {
-                ObjectId objectId = (ObjectId) map.get("_id");
-                map.put("id", objectId.toHexString());
-                map.remove("_id");
-            }
-            Map<String, Object> dataMap = new HashMap<>();
-            dataMap.put("result", resultList);
-            dataMap.put("header", tableHeader);
-            res.put("code", 200);
-            res.put("data", dataMap);
-            res.put("page", page);
-            res.put("total", total);
-            res.put("pageSize", pageSize);
-        }
-        return res;
-    }
-
-    @PostMapping("/byAdvanced")
-    public Map<String, Object> byAdvanced(@RequestBody Map<String, Object> jsonMap) {
-        String fileId = (String) jsonMap.getOrDefault("fileId", "");
-        int page = (int) jsonMap.getOrDefault("page", 1);
-        int pageSize = (int) jsonMap.getOrDefault("pageSize", 20);
-        Map<String, Object> res = new HashMap<>();
-        if (StringUtils.isBlank(fileId)) {
-            return Common.errorMapWithPage("没有找到fileId");
-        } else {
-            //查询总量和表头
-            Query queryTotal = new Query();
-            queryTotal.addCriteria(Criteria.where("_id").is(fileId));
-            queryTotal.fields().include("count");
-            queryTotal.fields().include("tableHeader");
-            UploadedFile uploaded = mongoTemplate.findOne(queryTotal, UploadedFile.class, Properties.COLLECTION_UPLOADED);
-            if (uploaded == null) {
-                return Common.errorMapWithPage("没有找到文件信息");
-            }
-            int total = uploaded.getCount();
-            List<String> tableHeader = uploaded.getTableHeader();
-            int skip = (page - 1) * pageSize;
-            Query queryList = new Query(Criteria.where("fileId").is(fileId));
-            List<Map> resultList = mongoTemplate.find(
-                    queryList.skip(skip).limit(pageSize),
-                    Map.class,
-                    Properties.COLLECTION_DATA);
-            for (Map<String, Object> map : resultList) {
-                ObjectId objectId = (ObjectId) map.get("_id");
-                map.put("id", objectId.toHexString());
-                map.remove("_id");
-            }
-            Map<String, Object> dataMap = new HashMap<>();
-            dataMap.put("result", resultList);
-            dataMap.put("header", tableHeader);
-            res.put("code", 200);
-            res.put("data", dataMap);
-            res.put("page", page);
-            res.put("total", total);
-            res.put("pageSize", pageSize);
-        }
-        return res;
-    }
-}

+ 9 - 0
src/main/java/ieven/server/webapp/domain/alipay/AlipayService.java

@@ -0,0 +1,9 @@
+package ieven.server.webapp.domain.alipay;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class AlipayService {
+
+}

+ 1 - 1
src/main/java/ieven/server/webapp/domain/alipay/OperateInput.java

@@ -8,5 +8,5 @@ import java.util.List;
 public class OperateInput {
 public class OperateInput {
     private String inputType;
     private String inputType;
     private List<String> selectedFileIds;
     private List<String> selectedFileIds;
-    private List<String> selectedFieldsForEnglish;
+    private List<String> selectedFieldsForAlias;
 }
 }

+ 68 - 0
src/main/java/ieven/server/webapp/domain/data/DataService.java

@@ -1,12 +1,80 @@
 package ieven.server.webapp.domain.data;
 package ieven.server.webapp.domain.data;
 
 
+import ieven.server.webapp.infrastructure.wrapper.Mapped;
+import ieven.server.webapp.util.Properties;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.bson.types.ObjectId;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.AsyncResult;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
+import java.util.*;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+
+@Slf4j
 @Service
 @Service
 public class DataService {
 public class DataService {
     @Autowired
     @Autowired
     private MongoTemplate mongoTemplate;
     private MongoTemplate mongoTemplate;
 
 
+    public Mapped viewDataByFileId(ViewInput viewInput) {
+        String fileId = viewInput.getFileId();
+        int page = viewInput.getPage();
+        int pageSize = viewInput.getPageSize();
+        if (StringUtils.isBlank(fileId)) {
+            return Mapped.ERROR("没有选择文件");
+        } else {
+            Future<Long> totalFuture = countTotal(fileId);
+            Future<LinkedHashMap<String, String>> headerFuture = viewHeaders(fileId);
+            int skip = (page - 1) * pageSize;
+            Query queryList = new Query(Criteria.where("fileId").is(fileId));
+            List<DataMap> resultList = mongoTemplate.find(
+                    queryList.skip(skip).limit(pageSize),
+                    DataMap.class);
+            for (DataMap dataMap : resultList) {
+                dataMap.formId();
+            }
+            Long total = null;
+            LinkedHashMap<String, String> headers = null;
+            try {
+                total = totalFuture.get();
+                headers = headerFuture.get();
+            } catch (InterruptedException | ExecutionException e) {
+                e.printStackTrace();
+                return Mapped.ERROR("系统查询出错");
+            }
+            Mapped mapped = Mapped.OK();
+            mapped.put("result", resultList);
+            mapped.put("header", headers);
+            mapped.put("code", 200);
+            mapped.put("page", page);
+            mapped.put("total", total);
+            mapped.put("pageSize", pageSize);
+            return mapped;
+        }
+    }
+
+    @Async
+    Future<Long> countTotal(String fileId) {
+        Long total = mongoTemplate.count(new Query(Criteria.where("fileId").is(fileId)), DataMap.class);
+        return new AsyncResult<>(total);
+    }
+
+    @Async
+    Future<LinkedHashMap<String, String>> viewHeaders(String fileId) {
+        Query query = new Query(Criteria.where("fileId").is(fileId));
+        Fields fields = mongoTemplate.findOne(query, Fields.class);
+        if (fields != null) {
+            return new AsyncResult<>(fields.getFields());
+        } else {
+            return new AsyncResult<>(new LinkedHashMap<>());
+        }
+
+    }
 }
 }

+ 1 - 0
src/main/java/ieven/server/webapp/domain/data/Fields.java

@@ -20,5 +20,6 @@ import java.util.LinkedHashMap;
 public class Fields {
 public class Fields {
     @Id
     @Id
     private ObjectId objectId;
     private ObjectId objectId;
+    private String fileId;
     private LinkedHashMap<String, String> fields;
     private LinkedHashMap<String, String> fields;
 }
 }

+ 10 - 0
src/main/java/ieven/server/webapp/domain/data/ViewInput.java

@@ -0,0 +1,10 @@
+package ieven.server.webapp.domain.data;
+
+import lombok.Data;
+
+@Data
+public class ViewInput {
+    private String fileId;
+    private int page = 1;
+    private int pageSize = 20;
+}

+ 10 - 0
src/main/java/ieven/server/webapp/domain/file/FileListInput.java

@@ -0,0 +1,10 @@
+package ieven.server.webapp.domain.file;
+
+import lombok.Data;
+
+@Data
+public class FileListInput {
+    private String modelId;
+    private int page;
+    private int pageSize;
+}

+ 156 - 0
src/main/java/ieven/server/webapp/domain/file/FileService.java

@@ -1,8 +1,164 @@
 package ieven.server.webapp.domain.file;
 package ieven.server.webapp.domain.file;
 
 
+import com.mongodb.client.gridfs.model.GridFSFile;
+import ieven.server.webapp.infrastructure.wrapper.Mapped;
+import ieven.server.webapp.model.UploadedFile;
+import ieven.server.webapp.model.display.UploadedFileDisplay;
+import ieven.server.webapp.service.impl.MongoExcelServiceImpl;
+import ieven.server.webapp.util.Properties;
+import ieven.server.webapp.util.excel.ExcelXlsReader;
+import ieven.server.webapp.util.excel.ExcelXlsxReader;
+import ieven.server.webapp.util.excel.PublicStatic;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.csv.CSVFormat;
+import org.apache.commons.csv.CSVParser;
+import org.apache.commons.csv.CSVRecord;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
+import org.bson.types.ObjectId;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.mongodb.core.query.Update;
+import org.springframework.data.mongodb.gridfs.GridFsOperations;
+import org.springframework.data.mongodb.gridfs.GridFsResource;
+import org.springframework.data.mongodb.gridfs.GridFsTemplate;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.AsyncResult;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+import org.xml.sax.SAXException;
 
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.Future;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.stream.Collectors;
+
+@Slf4j
 @Service
 @Service
 public class FileService {
 public class FileService {
+    @Autowired
+    private GridFsTemplate gridFsTemplate;
+    @Autowired
+    private MongoTemplate mongoTemplate;
+    @Autowired
+    @Qualifier("readFileExecutor")
+    private ThreadPoolExecutor threadPoolExecutor;
+    @Autowired
+    private GridFsOperations fsOperations;
+
+    public Mapped storeUploaded(MultipartFile file, String modelId) {
+        String filename = file.getOriginalFilename();
+        String contentType = file.getContentType();
+        //直接上传到mongo
+        ObjectId objectId = null;
+        try {
+            objectId = gridFsTemplate.store(file.getInputStream(), filename, contentType);
+        } catch (IOException e) {
+            log.info("转储文件失败");
+            e.printStackTrace();
+            return Mapped.ERROR("转储文件失败");
+        }
+        LogicalFile logicalFile = new LogicalFile();
+        logicalFile.setFilename(filename);
+        logicalFile.setUploadDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+        logicalFile.setModelId(modelId);
+        logicalFile.setGridId(objectId);
+        logicalFile.setStatus(FileStatus.STATUS_LOADING);
+        //使用主键自动生成id
+        logicalFile = mongoTemplate.insert(logicalFile);
+        //异步读取数据并存储到mongo
+        readFile(logicalFile);
+//        fileService.readFileWhileStoreDataAsync(objectId);
+        return Mapped.OK();
+    }
+
+    @Async
+    public void readFile(LogicalFile uploaded) {
+        GridFSFile fsFile = fsOperations.findOne(new Query(Criteria.where("_id").is(uploaded.getGridId())));
+        if (fsFile == null) {
+            //解析失败
+            modifyStatus(uploaded.getId(), FileStatus.STATUS_ERROR);
+            return;
+        }
+        GridFsResource resource = fsOperations.getResource(fsFile);
+        String filename = resource.getFilename();
+        if (StringUtils.isBlank(filename)) {
+            //解析失败
+            modifyStatus(uploaded.getId(), FileStatus.STATUS_ERROR);
+            return;
+        }
+        try {
+            InputStream inputStream = resource.getInputStream();
+            if (filename.endsWith(".xlsx")) {
+                MongoExcelServiceImpl mongoExcelService = new MongoExcelServiceImpl(mongoTemplate, uploaded.getId());
+                ExcelXlsxReader reader = new ExcelXlsxReader(mongoExcelService);
+                reader.processStream(inputStream);
+                mongoExcelService.insertRest();
+            } else if (filename.endsWith(".xls")) {
+                MongoExcelServiceImpl mongoExcelService = new MongoExcelServiceImpl(mongoTemplate, uploaded.getId());
+                ExcelXlsReader reader = new ExcelXlsReader(mongoExcelService);
+                reader.processStream(inputStream);
+                mongoExcelService.insertRest();
+            } else if (filename.endsWith(".csv")) {
+                MongoExcelServiceImpl mongoExcelService = new MongoExcelServiceImpl(mongoTemplate, uploaded.getId());
+                CSVParser csvParser = CSVFormat.EXCEL.parse(new InputStreamReader(inputStream, "gbk"));
+                int curRow = 0;
+                for (CSVRecord record : csvParser) {
+                    mongoExcelService.getRows(0, curRow, record.stream().map(PublicStatic::removeAllSpecial).collect(Collectors.toList()));
+                    curRow++;
+                }
+                mongoExcelService.insertRest();
+            }
+        } catch (IOException | OpenXML4JException | SAXException e) {
+            //解析失败
+            modifyStatus(uploaded.getId(), FileStatus.STATUS_ERROR);
+            e.printStackTrace();
+        }
+        //解析成功
+        modifyStatus(uploaded.getId(), FileStatus.STATUS_FINISHED);
+    }
+
+    private void modifyStatus(String id, String status) {
+        Query query = new Query();
+        query.addCriteria(Criteria.where("_id").is(id));
+        Update update = new Update();
+        update.set("status", status);
+        mongoTemplate.updateFirst(query, update, "logical_file");
+    }
+
+    public Mapped listUploaded(FileListInput fileListInput) {
+        String modelId = fileListInput.getModelId();
+        //查询总量
+        long total = mongoTemplate.count(new Query(), LogicalFile.class);
+        int page = fileListInput.getPage();
+        int pageSize = fileListInput.getPageSize();
+        int skip = (page - 1) * pageSize;
+        Query query = new Query();
+        List<LogicalFile> resultList = mongoTemplate.find(
+                query.skip(skip).limit(pageSize),
+                LogicalFile.class);
+        Mapped res = Mapped.OK();
+        res.put("code", 200);
+        res.put("result", resultList);
+        res.put("total", total);
+        res.put("page", page);
+        res.put("pageSize", pageSize);
+        return res;
+    }
 
 
+    @Async
+    Future<Long> countTotalByModelId(String modelId) {
+        Long total = mongoTemplate.count(new Query(Criteria.where("modelId").is(modelId)), LogicalFile.class);
+        return new AsyncResult<>(total);
+    }
 }
 }

+ 7 - 0
src/main/java/ieven/server/webapp/domain/file/FileStatus.java

@@ -0,0 +1,7 @@
+package ieven.server.webapp.domain.file;
+
+public class FileStatus {
+    public static final String STATUS_LOADING = "LOADING";
+    public static final String STATUS_FINISHED = "FINISHED";
+    public static final String STATUS_ERROR = "ERROR";
+}

+ 1 - 1
src/main/java/ieven/server/webapp/domain/file/LogicalFile.java

@@ -12,7 +12,7 @@ public class LogicalFile {
     @Id
     @Id
     private String id;
     private String id;
     @Indexed
     @Indexed
-    private ObjectId modelId;
+    private String modelId;
     private ObjectId gridId;
     private ObjectId gridId;
     private String status;
     private String status;
     private String filename;
     private String filename;

+ 0 - 4
src/main/java/ieven/server/webapp/service/impl/FileServiceImpl.java

@@ -1,13 +1,11 @@
 package ieven.server.webapp.service.impl;
 package ieven.server.webapp.service.impl;
 
 
 import ieven.server.webapp.service.FileService;
 import ieven.server.webapp.service.FileService;
-import ieven.server.webapp.tasks.ReadFileTask;
 import org.bson.types.ObjectId;
 import org.bson.types.ObjectId;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.gridfs.GridFsOperations;
 import org.springframework.data.mongodb.gridfs.GridFsOperations;
-import org.springframework.data.mongodb.gridfs.GridFsTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.ThreadPoolExecutor;
@@ -24,7 +22,5 @@ public class FileServiceImpl implements FileService {
 
 
     @Override
     @Override
     public void readFileWhileStoreDataAsync(ObjectId objectId) {
     public void readFileWhileStoreDataAsync(ObjectId objectId) {
-        Runnable runnable = new ReadFileTask(objectId,mongoTemplate,fsOperations);
-        threadPoolExecutor.execute(runnable);
     }
     }
 }
 }

+ 17 - 18
src/main/java/ieven/server/webapp/service/impl/MongoExcelServiceImpl.java

@@ -1,5 +1,6 @@
 package ieven.server.webapp.service.impl;
 package ieven.server.webapp.service.impl;
 
 
+import ieven.server.webapp.domain.data.Fields;
 import ieven.server.webapp.service.IExcelRowReader;
 import ieven.server.webapp.service.IExcelRowReader;
 import ieven.server.webapp.util.Properties;
 import ieven.server.webapp.util.Properties;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -16,18 +17,15 @@ import java.util.Map;
 
 
 public class MongoExcelServiceImpl implements IExcelRowReader {
 public class MongoExcelServiceImpl implements IExcelRowReader {
     private final Map<String, Integer> headerDefined = new LinkedHashMap<>();
     private final Map<String, Integer> headerDefined = new LinkedHashMap<>();
+    private final LinkedHashMap<String, String> headerTransfer = new LinkedHashMap<>();
     private final MongoTemplate mongoTemplate;
     private final MongoTemplate mongoTemplate;
-    private final String collectionUploaded = Properties.COLLECTION_UPLOADED;
     private final String collectionData = Properties.COLLECTION_DATA;
     private final String collectionData = Properties.COLLECTION_DATA;
-    private final ObjectId objectId;
     private final String fileId;
     private final String fileId;
-    private int countRead = 0;
     private final List<Map<String, String>> dataList = new ArrayList<>(1000);
     private final List<Map<String, String>> dataList = new ArrayList<>(1000);
 
 
-    public MongoExcelServiceImpl(MongoTemplate mongoTemplate, ObjectId objectId) {
+    public MongoExcelServiceImpl(MongoTemplate mongoTemplate, String fileId) {
         this.mongoTemplate = mongoTemplate;
         this.mongoTemplate = mongoTemplate;
-        this.objectId = objectId;
-        this.fileId = objectId.toHexString();
+        this.fileId = fileId;
     }
     }
 
 
     @Override
     @Override
@@ -36,17 +34,25 @@ public class MongoExcelServiceImpl implements IExcelRowReader {
             for (int i = 0; i < valueList.size(); i++) {
             for (int i = 0; i < valueList.size(); i++) {
                 String value = valueList.get(i);
                 String value = valueList.get(i);
                 if (StringUtils.isNotBlank(value)) {
                 if (StringUtils.isNotBlank(value)) {
-                    headerDefined.put(value, i);
+                    //存入数据库的字段名
+                    String aliasField = "f" + i;
+                    headerDefined.put(aliasField, i);
+                    headerTransfer.put(aliasField, value);
                 } else {
                 } else {
                     String undefined = "undefined" + i;
                     String undefined = "undefined" + i;
-                    headerDefined.put(undefined, i);
+                    //存入数据库的字段名
+                    String aliasField = "f" + i;
+                    headerDefined.put(aliasField, i);
+                    headerTransfer.put(aliasField, undefined);
                 }
                 }
             }
             }
-            Update update = new Update().set("tableHeader", new ArrayList<>(headerDefined.keySet()));
-            mongoTemplate.updateFirst(new Query(Criteria.where("_id").is(objectId)), update, collectionUploaded);
+            Fields fields = new Fields();
+            fields.setFileId(fileId);
+            fields.setFields(headerTransfer);
+            mongoTemplate.insert(fields);
         } else {
         } else {
             Map<String, String> data = new LinkedHashMap<>(headerDefined.size());
             Map<String, String> data = new LinkedHashMap<>(headerDefined.size());
-            data.put("fileId",fileId);
+            data.put("fileId", fileId);
             for (Map.Entry<String, Integer> entry : headerDefined.entrySet()) {
             for (Map.Entry<String, Integer> entry : headerDefined.entrySet()) {
                 String field = entry.getKey();
                 String field = entry.getKey();
                 Integer index = entry.getValue();
                 Integer index = entry.getValue();
@@ -58,16 +64,9 @@ public class MongoExcelServiceImpl implements IExcelRowReader {
                 mongoTemplate.insert(dataList, collectionData);
                 mongoTemplate.insert(dataList, collectionData);
                 dataList.clear();
                 dataList.clear();
             }
             }
-            countRead++;
         }
         }
     }
     }
 
 
-    public void updateCount() {
-        Query query = new Query(Criteria.where("_id").is(objectId));
-        Update update = new Update().inc("count", countRead).set("resolved",true);
-        mongoTemplate.updateFirst(query, update, collectionUploaded);
-    }
-
     public void insertRest() {
     public void insertRest() {
         if (dataList.size() > 0) {
         if (dataList.size() > 0) {
             mongoTemplate.insert(dataList, collectionData);
             mongoTemplate.insert(dataList, collectionData);

+ 0 - 86
src/main/java/ieven/server/webapp/tasks/ReadFileTask.java

@@ -1,86 +0,0 @@
-package ieven.server.webapp.tasks;
-
-import com.mongodb.client.gridfs.GridFSBucket;
-import com.mongodb.client.gridfs.GridFSDownloadStream;
-import com.mongodb.client.gridfs.model.GridFSFile;
-import ieven.server.webapp.service.impl.MongoExcelServiceImpl;
-import ieven.server.webapp.util.FileUtils;
-import ieven.server.webapp.util.excel.ExcelXlsReader;
-import ieven.server.webapp.util.excel.ExcelXlsxReader;
-import ieven.server.webapp.util.excel.PublicStatic;
-import org.apache.commons.csv.CSVFormat;
-import org.apache.commons.csv.CSVParser;
-import org.apache.commons.csv.CSVRecord;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
-import org.bson.types.ObjectId;
-import org.springframework.data.mongodb.core.MongoTemplate;
-import org.springframework.data.mongodb.core.query.Criteria;
-import org.springframework.data.mongodb.core.query.Query;
-import org.springframework.data.mongodb.gridfs.GridFsOperations;
-import org.springframework.data.mongodb.gridfs.GridFsResource;
-import org.springframework.data.mongodb.gridfs.GridFsTemplate;
-import org.xml.sax.SAXException;
-
-import java.io.*;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Logger;
-import java.util.stream.Collectors;
-
-public class ReadFileTask implements Runnable {
-    private final Logger logger = Logger.getLogger("ReadFileTask");
-    private final ObjectId objectId;
-    private final MongoTemplate mongoTemplate;
-    private final GridFsOperations fsOperations;
-
-    public ReadFileTask(ObjectId objectId, MongoTemplate mongoTemplate, GridFsOperations fsOperations) {
-        this.objectId = objectId;
-        this.mongoTemplate = mongoTemplate;
-        this.fsOperations = fsOperations;
-    }
-
-    @Override
-    public void run() {
-        GridFSFile fsFile = fsOperations.findOne(new Query(Criteria.where("_id").is(objectId)));
-        if (fsFile == null) {
-            return;
-        }
-        GridFsResource resource = fsOperations.getResource(fsFile);
-        String filename = resource.getFilename();
-        if (StringUtils.isBlank(filename)) {
-            return;
-        }
-        try {
-            InputStream inputStream = resource.getInputStream();
-            if (filename.endsWith(".xlsx")) {
-                MongoExcelServiceImpl mongoExcelService = new MongoExcelServiceImpl(mongoTemplate, objectId);
-                ExcelXlsxReader reader = new ExcelXlsxReader(mongoExcelService);
-                reader.processStream(inputStream);
-                mongoExcelService.insertRest();
-                mongoExcelService.updateCount();
-            } else if (filename.endsWith(".xls")) {
-                MongoExcelServiceImpl mongoExcelService = new MongoExcelServiceImpl(mongoTemplate, objectId);
-                ExcelXlsReader reader = new ExcelXlsReader(mongoExcelService);
-                reader.processStream(inputStream);
-                mongoExcelService.insertRest();
-                mongoExcelService.updateCount();
-            } else if (filename.endsWith(".csv")) {
-                MongoExcelServiceImpl mongoExcelService = new MongoExcelServiceImpl(mongoTemplate, objectId);
-                CSVParser csvParser = CSVFormat.EXCEL.parse(new InputStreamReader(inputStream,"gbk"));
-                int curRow = 0;
-                for (CSVRecord record : csvParser) {
-                    mongoExcelService.getRows(0, curRow, record.stream().map(PublicStatic::removeAllSpecial).collect(Collectors.toList()));
-                    curRow++;
-                }
-                mongoExcelService.insertRest();
-                mongoExcelService.updateCount();
-            }
-        } catch (IOException | OpenXML4JException | SAXException e) {
-            logger.info("读取文件:" + filename + "出错.");
-            e.printStackTrace();
-        }
-        logger.info("读取文件:" + filename + "完成");
-    }
-}