Browse Source

代码重构

tom.xu@informa.com 2 years ago
parent
commit
91e74a99ed

+ 4 - 0
pom.xml

@@ -29,6 +29,10 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-websocket</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-logging</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>

+ 131 - 139
src/main/java/ieven/server/webapp/api/FileController.java

@@ -8,6 +8,8 @@ import ieven.server.webapp.domain.IdInput;
 import ieven.server.webapp.domain.file.FileListInput;
 import ieven.server.webapp.domain.file.FileService;
 import ieven.server.webapp.infrastructure.wrapper.Mapped;
+import ieven.server.webapp.util.EncodeDetector;
+import ieven.server.webapp.util.FileUtils;
 import io.swagger.annotations.Api;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.bson.types.ObjectId;
@@ -31,151 +33,141 @@ import java.util.logging.Logger;
 @RequestMapping("/file")
 @Api(value = "文件操作接口")
 public class FileController {
-  private final Logger logger = Logger.getLogger("UploadController");
-  @Autowired private GridFsOperations gridFsOperations;
-  @Autowired private MongoTemplate mongoTemplate;
-  @Autowired private FileService fileService;
-
-  public FileController() {}
-
-  private static ByteArrayOutputStream cloneInputStream(InputStream input) {
-    try {
-      ByteArrayOutputStream baos = new ByteArrayOutputStream();
-      byte[] buffer = new byte[1024];
-      int len;
-      while ((len = input.read(buffer)) > -1) {
-        baos.write(buffer, 0, len);
-      }
-      baos.flush();
-      return baos;
-    } catch (IOException e) {
-      e.printStackTrace();
-      return null;
+    private final Logger logger = Logger.getLogger("UploadController");
+    @Autowired
+    private GridFsOperations gridFsOperations;
+    @Autowired
+    private MongoTemplate mongoTemplate;
+    @Autowired
+    private FileService fileService;
+
+    public FileController() {
     }
-  }
-
-  @PostMapping({"/uploadSingle"})
-  public Mapped uploadSingle(@RequestParam MultipartFile file, @RequestParam String modelId)
-      throws IOException {
-    String filename = file.getOriginalFilename();
-    String extName = FileUtil.extName(filename);
-    String contentType = file.getContentType();
-    ByteArrayOutputStream baos = cloneInputStream(file.getInputStream());
-    if (extName.equalsIgnoreCase("xls") || extName.equalsIgnoreCase("xlsx")) {
-      ExcelReader reader = ExcelUtil.getReader(new ByteArrayInputStream(baos.toByteArray()));
-      List<Sheet> sheets = reader.getSheets();
-      List<String> headers = new ArrayList<>();
-      for (Sheet sheet : sheets) {
-        reader.setSheet(sheet);
-        List<Object> objects = reader.readRow(0);
-        if (objects.size() > 1) { // 至少大于1
-          StringBuilder stringBuilder = new StringBuilder();
-          for (Object object : objects) {
-            stringBuilder.append(object);
-          }
-          headers.add(stringBuilder.toString());
-        }
-      }
-      if (headers.size() > 1) {
-        // 判断sheet第一行内容是否一致
-        StringBuilder errorHeaders = new StringBuilder();
-        String baseHeader = headers.get(0);
-        for (int i = 0; i < headers.size(); i++) {
-          //
-          if (i == 0) {
-            continue;
-          }
-          if (!headers.get(i).equals(baseHeader)) {
-            errorHeaders.append("sheet").append(i).append("标题列与第一个sheet不一致!");
-          }
-        }
-        if (errorHeaders.length() > 0) {
-          return Mapped.ERROR(errorHeaders.toString());
+
+
+    @PostMapping({"/uploadSingle"})
+    public Mapped uploadSingle(@RequestParam MultipartFile file, @RequestParam String modelId)
+            throws Exception {
+        String filename = file.getOriginalFilename();
+        String extName = FileUtil.extName(filename);
+        String contentType = file.getContentType();
+        ByteArrayOutputStream baos = FileUtils.cloneInputStream(file.getInputStream());
+        if (extName.equalsIgnoreCase("xls") || extName.equalsIgnoreCase("xlsx")) {
+            ExcelReader reader = ExcelUtil.getReader(new ByteArrayInputStream(baos.toByteArray()));
+            List<Sheet> sheets = reader.getSheets();
+            List<String> headers = new ArrayList<>();
+            for (Sheet sheet : sheets) {
+                reader.setSheet(sheet);
+                List<Object> objects = reader.readRow(0);
+                if (objects.size() > 1) { // 至少大于1
+                    StringBuilder stringBuilder = new StringBuilder();
+                    for (Object object : objects) {
+                        stringBuilder.append(object);
+                    }
+                    headers.add(stringBuilder.toString());
+                }
+            }
+            if (headers.size() > 1) {
+                // 判断sheet第一行内容是否一致
+                StringBuilder errorHeaders = new StringBuilder();
+                String baseHeader = headers.get(0);
+                for (int i = 0; i < headers.size(); i++) {
+                    //
+                    if (i == 0) {
+                        continue;
+                    }
+                    if (!headers.get(i).equals(baseHeader)) {
+                        errorHeaders.append("sheet").append(i).append("标题列与第一个sheet不一致!");
+                    }
+                }
+                if (errorHeaders.length() > 0) {
+                    return Mapped.ERROR(errorHeaders.toString());
+                }
+            }
         }
-      }
+        String encoding = EncodeDetector.getEncoding(baos.toByteArray());
+        return this.fileService.storeUploaded(
+                new ByteArrayInputStream(baos.toByteArray()), encoding, filename, contentType, modelId);
+    }
+
+    @PostMapping({"/uploadedList"})
+    public Mapped listUploaded(@RequestBody FileListInput fileListInput) {
+        return this.fileService.listUploaded(fileListInput);
+    }
+
+    @PostMapping({"/uploadedGroupList"})
+    public Mapped listGroupUploaded(@RequestBody FileListInput fileListInput) {
+        return this.fileService.listGroupUploaded(fileListInput);
     }
-    return this.fileService.storeUploaded(
-        new ByteArrayInputStream(baos.toByteArray()), filename, contentType, modelId);
-  }
-
-  @PostMapping({"/uploadedList"})
-  public Mapped listUploaded(@RequestBody FileListInput fileListInput) {
-    return this.fileService.listUploaded(fileListInput);
-  }
-
-  @PostMapping({"/uploadedGroupList"})
-  public Mapped listGroupUploaded(@RequestBody FileListInput fileListInput) {
-    return this.fileService.listGroupUploaded(fileListInput);
-  }
-
-  @PostMapping({"/deleteById"})
-  public Map<String, Object> deleteById(@RequestBody IdInput idInput) {
-    return this.fileService.deleteById(idInput);
-  }
-
-  @GetMapping({"/downloadById"})
-  public void downloadById(HttpServletResponse response, @RequestBody IdInput idInput) {
-    String fileId = idInput.getId();
-    GridFSFile gridFSFile =
-        this.gridFsOperations.findOne(new Query(Criteria.where("_id").is(new ObjectId(fileId))));
-    if (gridFSFile != null) {
-      String filename = gridFSFile.getFilename();
-
-      try {
-        response.setHeader("Content-Type", "multipart/form-data");
-        response.addHeader(
-            "Content-Disposition",
-            "attachment;filename="
-                + new String(
-                    filename.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
-        response.setHeader("Content-Length", String.valueOf(gridFSFile.getLength()));
-        OutputStream out = response.getOutputStream();
-        InputStream input = this.gridFsOperations.getResource(gridFSFile).getInputStream();
-        byte[] b = new byte[2048];
-
-        int len;
-        while ((len = input.read(b)) != -1) {
-          out.write(b, 0, len);
-        }
 
-        input.close();
-      } catch (IOException var11) {
-        this.logger.info("下载文件失败:" + filename);
-        var11.printStackTrace();
-      }
+    @PostMapping({"/deleteById"})
+    public Map<String, Object> deleteById(@RequestBody IdInput idInput) {
+        return this.fileService.deleteById(idInput);
     }
-  }
-
-  @GetMapping({"/downloadAndDeleteById"})
-  public void downloadAndDeleteById(
-      HttpServletResponse response, @RequestParam("id") String fileId) {
-    GridFSFile gridFSFile =
-        this.gridFsOperations.findOne(new Query(Criteria.where("_id").is(new ObjectId(fileId))));
-    if (gridFSFile != null) {
-      String filename = gridFSFile.getFilename();
-      try {
-        response.setHeader("Content-Type", "multipart/form-data");
-        response.addHeader(
-            "Content-Disposition",
-            "attachment;filename="
-                + new String(
-                    filename.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
-        response.setHeader("Content-Length", String.valueOf(gridFSFile.getLength()));
-        OutputStream out = response.getOutputStream();
-        InputStream input = this.gridFsOperations.getResource(gridFSFile).getInputStream();
-        byte[] b = new byte[2048];
-
-        int len;
-        while ((len = input.read(b)) != -1) {
-          out.write(b, 0, len);
+
+    @GetMapping({"/downloadById"})
+    public void downloadById(HttpServletResponse response, @RequestBody IdInput idInput) {
+        String fileId = idInput.getId();
+        GridFSFile gridFSFile =
+                this.gridFsOperations.findOne(new Query(Criteria.where("_id").is(new ObjectId(fileId))));
+        if (gridFSFile != null) {
+            String filename = gridFSFile.getFilename();
+
+            try {
+                response.setHeader("Content-Type", "multipart/form-data");
+                response.addHeader(
+                        "Content-Disposition",
+                        "attachment;filename="
+                                + new String(
+                                filename.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
+                response.setHeader("Content-Length", String.valueOf(gridFSFile.getLength()));
+                OutputStream out = response.getOutputStream();
+                InputStream input = this.gridFsOperations.getResource(gridFSFile).getInputStream();
+                byte[] b = new byte[2048];
+
+                int len;
+                while ((len = input.read(b)) != -1) {
+                    out.write(b, 0, len);
+                }
+
+                input.close();
+            } catch (IOException var11) {
+                this.logger.info("下载文件失败:" + filename);
+                var11.printStackTrace();
+            }
         }
+    }
 
-        input.close();
-      } catch (IOException var9) {
-        this.logger.info("下载文件失败:" + filename);
-        var9.printStackTrace();
-      }
-      this.fileService.removePhysicalFile(fileId);
+    @GetMapping({"/downloadAndDeleteById"})
+    public void downloadAndDeleteById(
+            HttpServletResponse response, @RequestParam("id") String fileId) {
+        GridFSFile gridFSFile =
+                this.gridFsOperations.findOne(new Query(Criteria.where("_id").is(new ObjectId(fileId))));
+        if (gridFSFile != null) {
+            String filename = gridFSFile.getFilename();
+            try {
+                response.setHeader("Content-Type", "multipart/form-data");
+                response.addHeader(
+                        "Content-Disposition",
+                        "attachment;filename="
+                                + new String(
+                                filename.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
+                response.setHeader("Content-Length", String.valueOf(gridFSFile.getLength()));
+                OutputStream out = response.getOutputStream();
+                InputStream input = this.gridFsOperations.getResource(gridFSFile).getInputStream();
+                byte[] b = new byte[2048];
+
+                int len;
+                while ((len = input.read(b)) != -1) {
+                    out.write(b, 0, len);
+                }
+
+                input.close();
+            } catch (IOException var9) {
+                this.logger.info("下载文件失败:" + filename);
+                var9.printStackTrace();
+            }
+            this.fileService.removePhysicalFile(fileId);
+        }
     }
-  }
 }

+ 46 - 112
src/main/java/ieven/server/webapp/domain/alipay/AlipayHeaders.java

@@ -11,120 +11,54 @@ import java.util.List;
 import java.util.Map;
 
 public class AlipayHeaders {
-  public static final String REGISTER_1 = "卡类型";
-  public static final String REGISTER_2 = "银行简称";
-  public static final String REGISTER_3 = "绑定卡号";
-  public static final String LOGIN_1 = "日期";
-  public static final String LOGIN_2 = "时间";
-  public static final String TRADE_2 = "买家账号";
-  public static final String TRADE_3 = "买家昵称";
-  public static final String TRADE_5 = "卖家账号";
-  public static final String TRADE_6 = "卖家昵称";
-  public static final String TRADE_8 = "买家姓名";
-  public static final String TRADE_12 = "卖家姓名";
-  public static final String ACCOUNT_1 = "支付宝用户ID";
-  public static final String ACCOUNT_2 = "支付宝户名";
-  public static final String ACCOUNT_3 = "对手支付宝用户ID";
-  public static final String ACCOUNT_4 = "对手支付宝户名";
-  private static final Map<Integer, List<String>> mappedHeaders = new HashMap<>();
-  private static final Map<Integer, String> mappedNames = new HashMap<>();
+    public static final String REGISTER_1 = "卡类型";
+    public static final String REGISTER_2 = "银行简称";
+    public static final String REGISTER_3 = "绑定卡号";
+    public static final String LOGIN_1 = "日期";
+    public static final String LOGIN_2 = "时间";
+    public static final String TRADE_2 = "买家账号";
+    public static final String TRADE_3 = "买家昵称";
+    public static final String TRADE_5 = "卖家账号";
+    public static final String TRADE_6 = "卖家昵称";
+    public static final String TRADE_8 = "买家姓名";
+    public static final String TRADE_12 = "卖家姓名";
+    public static final String ACCOUNT_1 = "支付宝用户ID";
+    public static final String ACCOUNT_2 = "支付宝户名";
+    public static final String ACCOUNT_3 = "对手支付宝用户ID";
+    public static final String ACCOUNT_4 = "对手支付宝户名";
+    private static final Map<Integer, List<String>> mappedHeaders = new HashMap<>();
+    private static final Map<Integer, String> mappedNames = new HashMap<>();
 
-  static {
-    mappedHeaders.put(
-        1,
-        Arrays.asList(
-            "用户ID", "登录邮箱", "登录手机", "账户名称", "证件类型", "证件号", "可用余额", "注册时间", "绑定手机", "绑定银行卡",
-            "对应的协查数据"));
+    static {
+        mappedHeaders.put(1, Arrays.asList("用户ID", "登录邮箱", "登录手机", "账户名称", "证件类型", "证件号", "可用余额", "注册时间", "绑定手机", "绑定银行卡", "对应的协查数据"));
+        mappedHeaders.put(13, Arrays.asList("用户ID", "登录邮箱", "登录手机", "账户名称", "证件类型", "证件号", "可用余额", "注册时间", "绑定手机", "绑定银行卡","关联账户", "对应的协查数据"));
+        mappedHeaders.put(12, Arrays.asList("用户ID", "登录邮箱", "登录手机", "账户名称", "证件类型", "证件号", "可用余额", "绑定手机", "绑定银行卡", "对应的协查数据"));
+        mappedHeaders.put(2, Arrays.asList("用户ID", "登录邮箱", "登录手机", "账户名称", "证件类型", "证件号", "可用余额", "绑定手机", "绑定卡号", "银行简称", "卡类型", "对应的协查数据"));
+        mappedHeaders.put(3, Arrays.asList("登陆账号", "支付宝用户ID", "账户名", "客户端ip", "操作发生时间", "对应的协查数据"));
+        mappedHeaders.put(4, Arrays.asList("登陆账号", "支付宝用户ID", "账户名", "客户端IP", "操作发生时间", "对应的协查数据"));
+        mappedHeaders.put(5, Arrays.asList("交易号", "外部交易号", "交易状态", "合作伙伴ID", "买家用户id", "买家信息", "卖家用户id", "卖家信息", "交易金额(元)", "收款时间", "最后修改时间", "创建时间", "交易类型", "来源地", "商品名称", "收货人地址", "对应的协查数据"));
+        mappedHeaders.put(6, Arrays.asList("交易号", "外部交易号", "交易状态", "合作伙伴ID", "买家用户ID", "买家姓名", "买家账号", "买家昵称", "卖家用户ID", "卖家姓名", "卖家账号", "卖家昵称", "交易金额(元)", "收款时间", "最后修改时间", "创建时间", "交易类型", "来源地", "商品名称", "收货人地址", "对应的协查数据"));
+        mappedHeaders.put(7, Arrays.asList("交易号", "商户订单号", "交易创建时间", "付款时间", "最近修改时间", "交易来源地", "类型", "用户信息", "交易对方信息", "消费名称", "金额(元)", "收/支", "交易状态", "备注", "对应的协查数据"));
+        mappedHeaders.put(8, Arrays.asList("交易号", "商户订单号", "交易创建时间", "付款时间", "最近修改时间", "交易来源地", "类型", "支付宝用户ID", "支付宝户名", "对手支付宝用户ID", "对手支付宝户名", "消费名称", "金额(元)", "收/支", "交易状态", "备注", "对应的协查数据"));
+        mappedHeaders.put(9, Arrays.asList("交易号", "付款方支付宝账号", "收款方支付宝账号", "收款机构信息", "到账时间", "转账金额(元)", "转账产品名称", "交易发生地", "提现流水号", "对应的协查数据"));
+        mappedHeaders.put(10, Arrays.asList("交易号", "付款方支付宝用户ID", "收款方支付宝用户ID", "收款机构信息", "到账时间", "转账金额(元)", "转账产品名称", "交易发生地", "提现流水号", "对应的协查数据"));
+        mappedHeaders.put(11, Arrays.asList("用户ID", "用户名", "额外字段1", "额外字段2", "额外字段3"));
+        mappedNames.put(2, "五联单-注册信息");
+        mappedNames.put(4, "五联单-登录日志");
+        mappedNames.put(6, "五联单-交易记录");
+        mappedNames.put(8, "五联单-账户明细");
+        mappedNames.put(10, "五联单-转账明细");
+        mappedNames.put(11, "五联单-用户汇总表");
+    }
 
-    mappedHeaders.put(
-        12,
-        Arrays.asList(
-            "用户ID", "登录邮箱", "登录手机", "账户名称", "证件类型", "证件号", "可用余额", "绑定手机", "绑定银行卡", "对应的协查数据"));
-    mappedHeaders.put(
-        2,
-        Arrays.asList(
-            "用户ID", "登录邮箱", "登录手机", "账户名称", "证件类型", "证件号", "可用余额", "绑定手机", "绑定卡号", "银行简称", "卡类型",
-            "对应的协查数据"));
-    mappedHeaders.put(3, Arrays.asList("登陆账号", "支付宝用户ID", "账户名", "客户端ip", "操作发生时间", "对应的协查数据"));
-    mappedHeaders.put(4, Arrays.asList("登陆账号", "支付宝用户ID", "账户名", "客户端IP", "操作发生时间", "对应的协查数据"));
-    mappedHeaders.put(
-        5,
-        Arrays.asList(
-            "交易号", "外部交易号", "交易状态", "合作伙伴ID", "买家用户id", "买家信息", "卖家用户id", "卖家信息", "交易金额(元)", "收款时间",
-            "最后修改时间", "创建时间", "交易类型", "来源地", "商品名称", "收货人地址", "对应的协查数据"));
-    mappedHeaders.put(
-        6,
-        Arrays.asList(
-            "交易号", "外部交易号", "交易状态", "合作伙伴ID", "买家用户ID", "买家姓名", "买家账号", "买家昵称", "卖家用户ID", "卖家姓名",
-            "卖家账号", "卖家昵称", "交易金额(元)", "收款时间", "最后修改时间", "创建时间", "交易类型", "来源地", "商品名称", "收货人地址",
-            "对应的协查数据"));
-    mappedHeaders.put(
-        7,
-        Arrays.asList(
-            "交易号", "商户订单号", "交易创建时间", "付款时间", "最近修改时间", "交易来源地", "类型", "用户信息", "交易对方信息", "消费名称",
-            "金额(元)", "收/支", "交易状态", "备注", "对应的协查数据"));
-    mappedHeaders.put(
-        8,
-        Arrays.asList(
-            "交易号",
-            "商户订单号",
-            "交易创建时间",
-            "付款时间",
-            "最近修改时间",
-            "交易来源地",
-            "类型",
-            "支付宝用户ID",
-            "支付宝户名",
-            "对手支付宝用户ID",
-            "对手支付宝户名",
-            "消费名称",
-            "金额(元)",
-            "收/支",
-            "交易状态",
-            "备注",
-            "对应的协查数据"));
-    mappedHeaders.put(
-        9,
-        Arrays.asList(
-            "交易号",
-            "付款方支付宝账号",
-            "收款方支付宝账号",
-            "收款机构信息",
-            "到账时间",
-            "转账金额(元)",
-            "转账产品名称",
-            "交易发生地",
-            "提现流水号",
-            "对应的协查数据"));
-    mappedHeaders.put(
-        10,
-        Arrays.asList(
-            "交易号",
-            "付款方支付宝用户ID",
-            "收款方支付宝用户ID",
-            "收款机构信息",
-            "到账时间",
-            "转账金额(元)",
-            "转账产品名称",
-            "交易发生地",
-            "提现流水号",
-            "对应的协查数据"));
-    mappedHeaders.put(11, Arrays.asList("用户ID", "用户名", "额外字段1", "额外字段2", "额外字段3"));
-    mappedNames.put(2, "五联单-注册信息");
-    mappedNames.put(4, "五联单-登录日志");
-    mappedNames.put(6, "五联单-交易记录");
-    mappedNames.put(8, "五联单-账户明细");
-    mappedNames.put(10, "五联单-转账明细");
-    mappedNames.put(11, "五联单-用户汇总表");
-  }
+    public AlipayHeaders() {
+    }
 
-  public AlipayHeaders() {}
+    public static List<String> getHeaders(int type) {
+        return mappedHeaders.get(type);
+    }
 
-  public static List<String> getHeaders(int type) {
-    return mappedHeaders.get(type);
-  }
-
-  public static String getGeneratedName(int type) {
-    return mappedNames.get(type);
-  }
+    public static String getGeneratedName(int type) {
+        return mappedNames.get(type);
+    }
 }

+ 21 - 11
src/main/java/ieven/server/webapp/domain/file/FileService.java

@@ -66,9 +66,20 @@ public class FileService {
   public FileService() {}
 
   public Mapped storeUploaded(
-      InputStream inputStream, String filename, String contentType, String modelId) {
+      InputStream inputStream,String encoding, String filename, String contentType, String modelId) {
     ObjectId objectId;
     objectId = this.gridFsTemplate.store(inputStream, filename, contentType);
+
+    Query query =
+            new Query(
+                    Criteria.where("modelId")
+                            .is(modelId)
+                            .and("filename")
+                            .is(filename));
+    List<LogicalFile> existsFileList = this.mongoTemplate.find(query, LogicalFile.class);
+    if(existsFileList!=null && existsFileList.size()>0){
+      return Mapped.OK();
+    }
     LogicalFile logicalFile = new LogicalFile();
     logicalFile.setFilename(filename);
     logicalFile.setUploadDate(DateUtil.now());
@@ -77,12 +88,12 @@ public class FileService {
     logicalFile.setGenerated(Boolean.FALSE);
     logicalFile.setStatus("LOADING");
     logicalFile = this.mongoTemplate.insert(logicalFile);
-    this.readFile(logicalFile);
+    this.readFile(logicalFile,encoding);
     return Mapped.OK();
   }
 
   @Async
-  public void readFile(LogicalFile uploaded) {
+  public void readFile(LogicalFile uploaded,String encoding) {
     GridFSFile fsFile =
         this.fsOperations.findOne(new Query(Criteria.where("_id").is(uploaded.getGridId())));
     if (fsFile == null) {
@@ -108,14 +119,13 @@ public class FileService {
             mongoExcelService.insertRest();
           } else if (filename.endsWith(".csv")) {
             mongoExcelService = new MongoExcelService(this.mongoTemplate, uploaded.getId());
-            String randomFileName = RandomUtil.randomString(5);
-            String tmpdir = System.getProperty("java.io.tmpdir");
-            File file = new File(tmpdir + File.separator + randomFileName + ".csv");
-            FileUtil.writeFromStream(inputStream, file);
-            String encoding = EncodeDetector.getEncoding(file);
-            log.info("encoding:{}",encoding);
-            CSVParser csvParser =
-                CSVFormat.EXCEL.parse(new InputStreamReader(new FileInputStream(file), encoding));
+            log.info("encoding2:{}",encoding);
+            CSVParser csvParser = null;
+            if(encoding.equalsIgnoreCase("UTF-8")){
+              csvParser =  CSVFormat.EXCEL.parse(new InputStreamReader(inputStream,"utf-8"));
+            }else{
+              csvParser =  CSVFormat.EXCEL.parse(new InputStreamReader(inputStream));
+            }
             int curRow = 0;
             int curRowWxFile = 0;
             boolean wxFile = false;

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

@@ -31,6 +31,10 @@ public class FieldsService extends Ops {
 
     fields = this.checkFields(originFields, 12);
     this.updateLogicalFile(fields, "五联单-注册信息");
+
+    fields = this.checkFields(originFields, 13);
+    this.updateLogicalFile(fields, "五联单-注册信息");
+
     // 五联单-登录日志
     fields = this.checkFields(originFields, AlipayType.ALIPAY_ORIGIN_LOGIN);
     this.updateLogicalFile(fields, "五联单-登录日志");

+ 11 - 0
src/main/java/ieven/server/webapp/service/alipay/ALIPAY_ORIGIN_REGISTER.java

@@ -65,6 +65,17 @@ public class ALIPAY_ORIGIN_REGISTER extends Ops implements Runnable {
       }
     }
 
+    log.info("五联单-注册信息开始 增加关联账户");
+    fieldsList = checkFields(originFields, 13);
+    if (CollectionUtils.isNotEmpty(fieldsList)) {
+      Fields output = Ops.createFile(AlipayType.ALIPAY_GENERATED_REGISTER, modelId);
+      // 创建并存储文件和表头
+      // 可能有多个文件,对多个文件并行解析
+      for (Fields origin : fieldsList) {
+        extractRegister(origin, output);
+      }
+    }
+
     latch.countDown();
     log.info("五联单-注册信息结束");
   }

+ 21 - 18
src/main/java/ieven/server/webapp/util/FileUtils.java

@@ -3,25 +3,37 @@ package ieven.server.webapp.util;
 import com.ibm.icu.text.CharsetDetector;
 import com.ibm.icu.text.CharsetMatch;
 
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
+import java.io.*;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 
 public class FileUtils {
+
+    public static ByteArrayOutputStream cloneInputStream(InputStream input) {
+        try {
+            ByteArrayOutputStream baos = new ByteArrayOutputStream();
+            byte[] buffer = new byte[1024];
+            int len;
+            while ((len = input.read(buffer)) > -1) {
+                baos.write(buffer, 0, len);
+            }
+            baos.flush();
+            return baos;
+        } catch (IOException e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
     /**
      * 读文件,根据文件名,返回文件内容字符串;
      * 读文件之前会探测编码格式,按准确的编码格式进行读取;若编码格式探测失败,则默认按照"UTF-8"进行读取
      * */
-    public static String getFileCharsetByICU4J(File file) {
-        String encoding = null;
+    public static String getFileCharsetByICU4J(FileInputStream inputStream) {
+        String encoding = "UTF-8";
         try {
-            Path path = Paths.get(file.getPath());
-            byte[] data = Files.readAllBytes(path);
-            BufferedInputStream bin = new BufferedInputStream(new FileInputStream(file));
+            BufferedInputStream bin = new BufferedInputStream(inputStream);
             int p = (bin.read() << 8) + bin.read();
             bin.close();
             switch (p) {
@@ -37,15 +49,6 @@ public class FileUtils {
                 case 45801:
                     encoding = "GB18030";
                     break;
-                default:
-                    CharsetDetector detector = new CharsetDetector();
-                    detector.setText(data);
-                    CharsetMatch match = detector.detect();
-                    if (match == null) {
-                        encoding = "GBK";
-                    }else{
-                        encoding = match.getName();
-                    }
             }
 
         } catch (IOException var6) {