Browse Source

feat: 设置文件权限

weijianghai 9 months ago
parent
commit
5e6e67f05a

+ 89 - 0
src/main/java/com/nokia/finance/tasks/jobs/car/chengben/CarFuWuFeiJob.java

@@ -0,0 +1,89 @@
+package com.nokia.finance.tasks.jobs.car.chengben;
+
+import com.nokia.finance.tasks.common.exception.MyRuntimeException;
+import com.nokia.finance.tasks.config.JobConfig;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+import java.util.List;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Stream;
+
+/**
+ * 河北成本管理系统车辆服务费数据入库定时任务
+ */
+@Slf4j
+@Service
+public class CarFuWuFeiJob {
+    private final JobConfig jobConfig;
+
+    public CarFuWuFeiJob(JobConfig jobConfig) {
+        this.jobConfig = jobConfig;
+    }
+
+    /**
+     * 执行任务
+     */
+    @Scheduled(cron = "0 34 6 12 * ?")
+    public void runJob() {
+        // 数据目录
+        Path dir = Paths.get(jobConfig.getCarSiCheGongYongSourcePath());
+        try (Stream<Path> stream = Files.list(dir)) {
+            // 获取数据目录下的文件列表
+            List<Path> pathList = stream.filter(t -> !t.toString().endsWith(".MD5")).sorted().toList();
+            log.info("河北成本管理系统车辆服务费数据文件列表: {}", pathList);
+            if (CollectionUtils.isEmpty(pathList)) {
+                throw new MyRuntimeException("河北成本管理系统车辆服务费数据没有文件");
+            }
+            for (Path path : pathList) {
+                CompletableFuture.runAsync(() -> {
+                    try {
+                        singleJob(path);
+                    } catch (Exception e) {
+                        throw new MyRuntimeException(e);
+                    }
+                }).get(1, TimeUnit.MINUTES);
+            }
+        } catch (InterruptedException e) {
+            log.error("线程中断: {}", e.getMessage(), e);
+            Thread.currentThread().interrupt();
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+    }
+
+    /**
+     * 处理单个文件
+     *
+     * @param path 文件路径
+     */
+    public void singleJob(Path path) throws Exception {
+        if (Files.size(path) == 0) {
+            move(path);
+            throw new MyRuntimeException(path.getFileName() + " 空文件");
+        }
+        move(path);
+    }
+
+    /**
+     * 移动源文件到历史文件夹
+     *
+     * @param path 源文件路径
+     */
+    public void move(Path path) throws Exception {
+        if (Files.exists(Paths.get(path + ".MD5"))) {
+            Files.move(Paths.get(path + ".MD5"),
+                    Paths.get(jobConfig.getCarSiCheGongYongHistoryPath(), path.getFileName().toString() + ".MD5"),
+                    StandardCopyOption.REPLACE_EXISTING);
+        }
+        Files.move(path, Paths.get(jobConfig.getCarSiCheGongYongHistoryPath(), path.getFileName().toString()),
+                StandardCopyOption.REPLACE_EXISTING);
+    }
+}

+ 11 - 4
src/main/java/com/nokia/finance/tasks/jobs/car/cxdp/CarCxdpJob.java

@@ -3,6 +3,7 @@ package com.nokia.finance.tasks.jobs.car.cxdp;
 import com.nokia.finance.tasks.common.exception.MyRuntimeException;
 import com.nokia.finance.tasks.config.JobConfig;
 import com.nokia.finance.tasks.dao.car.CarCxdpDao;
+import com.nokia.finance.tasks.utils.FileUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.csv.CSVFormat;
 import org.apache.commons.csv.CSVPrinter;
@@ -14,6 +15,7 @@ import org.springframework.util.CollectionUtils;
 import java.io.OutputStreamWriter;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
+import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
@@ -53,11 +55,15 @@ public class CarCxdpJob {
             }
             carCxdpDao.insertCarCxdp(startYearMonth, endYearMonth);
             List<LinkedHashMap<String, Object>> list = carCxdpDao.getCarCxdp(endYearMonth);
-            Files.createDirectories(Paths.get(jobConfig.getCarCxdpOutputPath()));
+            String dir = jobConfig.getCarCxdpOutputPath();
+            Path dirPath = Paths.get(dir);
+            Path filePath = Paths.get(dir + "car_cxdp_" + endYearMonth + ".csv");
+            if (!Files.exists(dirPath)) {
+                Files.createDirectories(dirPath);
+                FileUtil.setDefaultDirPermissions(dirPath);
+            }
             char delimiter = 1;
-            try (OutputStreamWriter osw = new OutputStreamWriter(
-                    Files.newOutputStream(Paths.get(jobConfig.getCarCxdpOutputPath()
-                            + "car_cxdp_" + endYearMonth + ".csv")),
+            try (OutputStreamWriter osw = new OutputStreamWriter(Files.newOutputStream(filePath),
                     StandardCharsets.UTF_8);
                  CSVPrinter printer = new CSVPrinter(osw,
                          CSVFormat.DEFAULT.builder().setDelimiter(delimiter).build())) {
@@ -73,6 +79,7 @@ public class CarCxdpJob {
                     printer.printRecord(map.values());
                 }
             }
+            FileUtil.setDefaultFilePermissions(filePath);
         } catch (Exception e) {
             log.error(e.getMessage(), e);
             throw new MyRuntimeException("车效大屏建设数据定时任务失败");

+ 14 - 6
src/main/java/com/nokia/finance/tasks/jobs/car/strategy/CarHighFuelConsumptionJob.java

@@ -3,6 +3,7 @@ package com.nokia.finance.tasks.jobs.car.strategy;
 import com.nokia.finance.tasks.common.exception.MyRuntimeException;
 import com.nokia.finance.tasks.config.JobConfig;
 import com.nokia.finance.tasks.dao.car.CarStrategyDao;
+import com.nokia.finance.tasks.utils.FileUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.csv.CSVFormat;
 import org.apache.commons.csv.CSVPrinter;
@@ -14,11 +15,13 @@ import org.springframework.util.CollectionUtils;
 import java.io.OutputStreamWriter;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
+import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 高油耗车辆策略定时任务
@@ -55,23 +58,28 @@ public class CarHighFuelConsumptionJob {
             if (CollectionUtils.isEmpty(list)) {
                 throw new MyRuntimeException("高油耗车辆策略为空");
             }
-            Files.createDirectories(Paths.get(jobConfig.getCarHighFuelConsumptionOutputPath()));
+            String dir = jobConfig.getCarHighFuelConsumptionOutputPath();
+            Path dirPath = Paths.get(dir);
+            Path filePath = Paths.get(dir + "car_high_fuel_consumption_" + endYearMonth + ".csv");
+            if (!Files.exists(dirPath)) {
+                Files.createDirectories(dirPath);
+                FileUtil.setDefaultDirPermissions(dirPath);
+            }
             char delimiter = 1;
-            try (OutputStreamWriter osw = new OutputStreamWriter(
-                    Files.newOutputStream(Paths.get(jobConfig.getCarHighFuelConsumptionOutputPath()
-                            + "car_high_fuel_consumption_" + endYearMonth + ".csv")),
+            try (OutputStreamWriter osw = new OutputStreamWriter(Files.newOutputStream(filePath),
                     StandardCharsets.UTF_8);
                  CSVPrinter printer = new CSVPrinter(osw,
                          CSVFormat.DEFAULT.builder().setDelimiter(delimiter).build())) {
                 // 添加bom头避免excel乱码
                 osw.write('\ufeff');
-                LinkedHashMap<String, Object> header = list.get(0);
+                Map<String, Object> header = list.get(0);
                 // 表头
                 printer.printRecord(header.keySet());
-                for (LinkedHashMap<String, Object> map : list) {
+                for (Map<String, Object> map : list) {
                     printer.printRecord(map.values());
                 }
             }
+            FileUtil.setDefaultFilePermissions(filePath);
         } catch (Exception e) {
             log.error(e.getMessage(), e);
             throw new MyRuntimeException("高油耗车辆策略定时任务失败");

+ 14 - 6
src/main/java/com/nokia/finance/tasks/jobs/car/strategy/CarHighRepairJob.java

@@ -3,6 +3,7 @@ package com.nokia.finance.tasks.jobs.car.strategy;
 import com.nokia.finance.tasks.common.exception.MyRuntimeException;
 import com.nokia.finance.tasks.config.JobConfig;
 import com.nokia.finance.tasks.dao.car.CarStrategyDao;
+import com.nokia.finance.tasks.utils.FileUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.csv.CSVFormat;
 import org.apache.commons.csv.CSVPrinter;
@@ -14,11 +15,13 @@ import org.springframework.util.CollectionUtils;
 import java.io.OutputStreamWriter;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
+import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 高修理车辆策略定时任务
@@ -54,23 +57,28 @@ public class CarHighRepairJob {
             if (CollectionUtils.isEmpty(list)) {
                 throw new MyRuntimeException("高修理车辆策略为空");
             }
-            Files.createDirectories(Paths.get(jobConfig.getCarHighRepairOutputPath()));
+            String dir = jobConfig.getCarHighRepairOutputPath();
+            Path dirPath = Paths.get(dir);
+            Path filePath = Paths.get(dir + "car_high_repair_" + endYearMonth + ".csv");
+            if (!Files.exists(dirPath)) {
+                Files.createDirectories(dirPath);
+                FileUtil.setDefaultDirPermissions(dirPath);
+            }
             char delimiter = 1;
-            try (OutputStreamWriter osw = new OutputStreamWriter(
-                    Files.newOutputStream(Paths.get(jobConfig.getCarHighRepairOutputPath()
-                            + "car_high_repair_" + endYearMonth + ".csv")),
+            try (OutputStreamWriter osw = new OutputStreamWriter(Files.newOutputStream(filePath),
                     StandardCharsets.UTF_8);
                  CSVPrinter printer = new CSVPrinter(osw,
                          CSVFormat.DEFAULT.builder().setDelimiter(delimiter).build())) {
                 // 添加bom头避免excel乱码
                 osw.write('\ufeff');
-                LinkedHashMap<String, Object> header = list.get(0);
+                Map<String, Object> header = list.get(0);
                 // 表头
                 printer.printRecord(header.keySet());
-                for (LinkedHashMap<String, Object> map : list) {
+                for (Map<String, Object> map : list) {
                     printer.printRecord(map.values());
                 }
             }
+            FileUtil.setDefaultFilePermissions(filePath);
         } catch (Exception e) {
             log.error(e.getMessage(), e);
             throw new MyRuntimeException("高修理车辆策略定时任务失败");

+ 11 - 4
src/main/java/com/nokia/finance/tasks/jobs/car/strategy/CarInefficiencyPercentJob.java

@@ -3,6 +3,7 @@ package com.nokia.finance.tasks.jobs.car.strategy;
 import com.nokia.finance.tasks.common.exception.MyRuntimeException;
 import com.nokia.finance.tasks.config.JobConfig;
 import com.nokia.finance.tasks.dao.car.CarStrategyDao;
+import com.nokia.finance.tasks.utils.FileUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.csv.CSVFormat;
 import org.apache.commons.csv.CSVPrinter;
@@ -14,6 +15,7 @@ import org.springframework.util.CollectionUtils;
 import java.io.OutputStreamWriter;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
+import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
@@ -51,11 +53,15 @@ public class CarInefficiencyPercentJob {
             }
             carStrategyDao.insertCarInefficiencyPercent(endYearMonth);
             List<LinkedHashMap<String, Object>> list = carStrategyDao.getCarInefficiencyPercent(endYearMonth);
-            Files.createDirectories(Paths.get(jobConfig.getCarInefficiencyPercentOutputPath()));
+            String dir = jobConfig.getCarInefficiencyPercentOutputPath();
+            Path dirPath = Paths.get(dir);
+            Path filePath = Paths.get(dir + "car_inefficiency_percent_" + endYearMonth + ".csv");
+            if (!Files.exists(dirPath)) {
+                Files.createDirectories(dirPath);
+                FileUtil.setDefaultDirPermissions(dirPath);
+            }
             char delimiter = 1;
-            try (OutputStreamWriter osw = new OutputStreamWriter(
-                    Files.newOutputStream(Paths.get(jobConfig.getCarInefficiencyPercentOutputPath()
-                            + "car_inefficiency_percent_" + endYearMonth + ".csv")),
+            try (OutputStreamWriter osw = new OutputStreamWriter(Files.newOutputStream(filePath),
                     StandardCharsets.UTF_8);
                  CSVPrinter printer = new CSVPrinter(osw,
                          CSVFormat.DEFAULT.builder().setDelimiter(delimiter).build())) {
@@ -71,6 +77,7 @@ public class CarInefficiencyPercentJob {
                     printer.printRecord(map.values());
                 }
             }
+            FileUtil.setDefaultFilePermissions(filePath);
         } catch (Exception e) {
             log.error(e.getMessage(), e);
             throw new MyRuntimeException("车辆低效占比策略定时任务失败");

+ 11 - 4
src/main/java/com/nokia/finance/tasks/jobs/car/strategy/CarInefficiencyQxJob.java

@@ -3,6 +3,7 @@ package com.nokia.finance.tasks.jobs.car.strategy;
 import com.nokia.finance.tasks.common.exception.MyRuntimeException;
 import com.nokia.finance.tasks.config.JobConfig;
 import com.nokia.finance.tasks.dao.car.CarStrategyDao;
+import com.nokia.finance.tasks.utils.FileUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.csv.CSVFormat;
 import org.apache.commons.csv.CSVPrinter;
@@ -14,6 +15,7 @@ import org.springframework.util.CollectionUtils;
 import java.io.OutputStreamWriter;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
+import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
@@ -51,11 +53,15 @@ public class CarInefficiencyQxJob {
             }
             carStrategyDao.insertCarInefficiencyQx(endYearMonth);
             List<LinkedHashMap<String, Object>> list = carStrategyDao.getCarInefficiencyQx(endYearMonth);
-            Files.createDirectories(Paths.get(jobConfig.getCarInefficiencyQxOutputPath()));
+            String dir = jobConfig.getCarInefficiencyQxOutputPath();
+            Path dirPath = Paths.get(dir);
+            Path filePath = Paths.get(dir + "car_inefficiency_qx_" + endYearMonth + ".csv");
+            if (!Files.exists(dirPath)) {
+                Files.createDirectories(dirPath);
+                FileUtil.setDefaultDirPermissions(dirPath);
+            }
             char delimiter = 1;
-            try (OutputStreamWriter osw = new OutputStreamWriter(
-                    Files.newOutputStream(Paths.get(jobConfig.getCarInefficiencyQxOutputPath()
-                            + "car_inefficiency_qx_" + endYearMonth + ".csv")),
+            try (OutputStreamWriter osw = new OutputStreamWriter(Files.newOutputStream(filePath),
                     StandardCharsets.UTF_8);
                  CSVPrinter printer = new CSVPrinter(osw,
                          CSVFormat.DEFAULT.builder().setDelimiter(delimiter).build())) {
@@ -71,6 +77,7 @@ public class CarInefficiencyQxJob {
                     printer.printRecord(map.values());
                 }
             }
+            FileUtil.setDefaultFilePermissions(filePath);
         } catch (Exception e) {
             log.error(e.getMessage(), e);
             throw new MyRuntimeException("车辆低效区县策略定时任务失败");

+ 11 - 4
src/main/java/com/nokia/finance/tasks/jobs/car/strategy/CarRentalRepairJob.java

@@ -3,6 +3,7 @@ package com.nokia.finance.tasks.jobs.car.strategy;
 import com.nokia.finance.tasks.common.exception.MyRuntimeException;
 import com.nokia.finance.tasks.config.JobConfig;
 import com.nokia.finance.tasks.dao.car.CarStrategyDao;
+import com.nokia.finance.tasks.utils.FileUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.csv.CSVFormat;
 import org.apache.commons.csv.CSVPrinter;
@@ -14,6 +15,7 @@ import org.springframework.util.CollectionUtils;
 import java.io.OutputStreamWriter;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
+import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
@@ -53,11 +55,15 @@ public class CarRentalRepairJob {
             }
             carStrategyDao.insertCarRentalRepair(startYearMonth, endYearMonth);
             List<LinkedHashMap<String, Object>> list = carStrategyDao.getCarRentalRepair(endYearMonth);
-            Files.createDirectories(Paths.get(jobConfig.getCarRentalRepairOutputPath()));
+            String dir = jobConfig.getCarRentalRepairOutputPath();
+            Path dirPath = Paths.get(dir);
+            Path filePath = Paths.get(dir + "car_rental_repair_" + endYearMonth + ".csv");
+            if (!Files.exists(dirPath)) {
+                Files.createDirectories(dirPath);
+                FileUtil.setDefaultDirPermissions(dirPath);
+            }
             char delimiter = 1;
-            try (OutputStreamWriter osw = new OutputStreamWriter(
-                    Files.newOutputStream(Paths.get(jobConfig.getCarRentalRepairOutputPath()
-                            + "car_rental_repair_" + endYearMonth + ".csv")),
+            try (OutputStreamWriter osw = new OutputStreamWriter(Files.newOutputStream(filePath),
                     StandardCharsets.UTF_8);
                  CSVPrinter printer = new CSVPrinter(osw,
                          CSVFormat.DEFAULT.builder().setDelimiter(delimiter).build())) {
@@ -73,6 +79,7 @@ public class CarRentalRepairJob {
                     printer.printRecord(map.values());
                 }
             }
+            FileUtil.setDefaultFilePermissions(filePath);
         } catch (Exception e) {
             log.error(e.getMessage(), e);
             throw new MyRuntimeException("租赁车辆产生维修费策略定时任务失败");

+ 11 - 4
src/main/java/com/nokia/finance/tasks/jobs/car/strategy/CarViolationUnprocessedJob.java

@@ -3,6 +3,7 @@ package com.nokia.finance.tasks.jobs.car.strategy;
 import com.nokia.finance.tasks.common.exception.MyRuntimeException;
 import com.nokia.finance.tasks.config.JobConfig;
 import com.nokia.finance.tasks.dao.car.CarStrategyDao;
+import com.nokia.finance.tasks.utils.FileUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.csv.CSVFormat;
 import org.apache.commons.csv.CSVPrinter;
@@ -14,6 +15,7 @@ import org.springframework.util.CollectionUtils;
 import java.io.OutputStreamWriter;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
+import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
@@ -52,11 +54,15 @@ public class CarViolationUnprocessedJob {
             }
             carStrategyDao.insertCarViolationUnprocessed(endYearMonth);
             List<LinkedHashMap<String, Object>> list = carStrategyDao.getCarViolationUnprocessed(endYearMonth);
-            Files.createDirectories(Paths.get(jobConfig.getCarViolationUnprocessedOutputPath()));
+            String dir = jobConfig.getCarViolationUnprocessedOutputPath();
+            Path dirPath = Paths.get(dir);
+            Path filePath = Paths.get(dir + "car_violation_unprocessed_" + endYearMonth + ".csv");
+            if (!Files.exists(dirPath)) {
+                Files.createDirectories(dirPath);
+                FileUtil.setDefaultDirPermissions(dirPath);
+            }
             char delimiter = 1;
-            try (OutputStreamWriter osw = new OutputStreamWriter(
-                    Files.newOutputStream(Paths.get(jobConfig.getCarViolationUnprocessedOutputPath()
-                            + "car_violation_unprocessed_" + endYearMonth + ".csv")),
+            try (OutputStreamWriter osw = new OutputStreamWriter(Files.newOutputStream(filePath),
                     StandardCharsets.UTF_8);
                  CSVPrinter printer = new CSVPrinter(osw,
                          CSVFormat.DEFAULT.builder().setDelimiter(delimiter).build())) {
@@ -72,6 +78,7 @@ public class CarViolationUnprocessedJob {
                     printer.printRecord(map.values());
                 }
             }
+            FileUtil.setDefaultFilePermissions(filePath);
         } catch (Exception e) {
             log.error(e.getMessage(), e);
             throw new MyRuntimeException("车辆违章未处理策略定时任务失败");

+ 11 - 4
src/main/java/com/nokia/finance/tasks/jobs/car/strategy/CarWdyjJob.java

@@ -3,6 +3,7 @@ package com.nokia.finance.tasks.jobs.car.strategy;
 import com.nokia.finance.tasks.common.exception.MyRuntimeException;
 import com.nokia.finance.tasks.config.JobConfig;
 import com.nokia.finance.tasks.dao.car.CarStrategyDao;
+import com.nokia.finance.tasks.utils.FileUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.csv.CSVFormat;
 import org.apache.commons.csv.CSVPrinter;
@@ -14,6 +15,7 @@ import org.springframework.util.CollectionUtils;
 import java.io.OutputStreamWriter;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
+import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
@@ -48,11 +50,15 @@ public class CarWdyjJob {
         try {
             carStrategyDao.insertCarWdyj(endYearMonth);
             List<LinkedHashMap<String, Object>> list = carStrategyDao.getCarWdyj(endYearMonth);
-            Files.createDirectories(Paths.get(jobConfig.getCarWdyjOutputPath()));
+            String dir = jobConfig.getCarWdyjOutputPath();
+            Path dirPath = Paths.get(dir);
+            Path filePath = Paths.get(dir + "car_wdyj_" + endYearMonth + ".csv");
+            if (!Files.exists(dirPath)) {
+                Files.createDirectories(dirPath);
+                FileUtil.setDefaultDirPermissions(dirPath);
+            }
             char delimiter = 1;
-            try (OutputStreamWriter osw = new OutputStreamWriter(
-                    Files.newOutputStream(Paths.get(jobConfig.getCarWdyjOutputPath()
-                            + "car_wdyj_" + endYearMonth + ".csv")),
+            try (OutputStreamWriter osw = new OutputStreamWriter(Files.newOutputStream(filePath),
                     StandardCharsets.UTF_8);
                  CSVPrinter printer = new CSVPrinter(osw,
                          CSVFormat.DEFAULT.builder().setDelimiter(delimiter).build())) {
@@ -68,6 +74,7 @@ public class CarWdyjJob {
                     printer.printRecord(map.values());
                 }
             }
+            FileUtil.setDefaultFilePermissions(filePath);
         } catch (Exception e) {
             log.error(e.getMessage(), e);
             throw new MyRuntimeException("违规车辆策略定时任务失败");

+ 11 - 4
src/main/java/com/nokia/finance/tasks/jobs/house/fcdp/HouseBuildingAreaStatJob.java

@@ -3,6 +3,7 @@ package com.nokia.finance.tasks.jobs.house.fcdp;
 import com.nokia.finance.tasks.common.exception.MyRuntimeException;
 import com.nokia.finance.tasks.config.JobConfig;
 import com.nokia.finance.tasks.dao.house.HouseFcdpDao;
+import com.nokia.finance.tasks.utils.FileUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.csv.CSVFormat;
 import org.apache.commons.csv.CSVPrinter;
@@ -14,6 +15,7 @@ import org.springframework.util.CollectionUtils;
 import java.io.OutputStreamWriter;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
+import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
@@ -51,11 +53,15 @@ public class HouseBuildingAreaStatJob {
                 throw new MyRuntimeException("房产大屏建筑面积统计定时任务失败");
             }
             List<LinkedHashMap<String, Object>> list = houseFcdpDao.getHouseBuildingAreaStat(endYearMonth);
-            Files.createDirectories(Paths.get(jobConfig.getHouseBuildingAreaStatOutputPath()));
+            String dir = jobConfig.getHouseBuildingAreaStatOutputPath();
+            Path dirPath = Paths.get(dir);
+            Path filePath = Paths.get(dir + "building_area_stat_" + endYearMonth + ".csv");
+            if (!Files.exists(dirPath)) {
+                Files.createDirectories(dirPath);
+                FileUtil.setDefaultDirPermissions(dirPath);
+            }
             char delimiter = 1;
-            try (OutputStreamWriter osw = new OutputStreamWriter(
-                    Files.newOutputStream(Paths.get(jobConfig.getHouseBuildingAreaStatOutputPath()
-                            + "building_area_stat_" + endYearMonth + ".csv")),
+            try (OutputStreamWriter osw = new OutputStreamWriter(Files.newOutputStream(filePath),
                     StandardCharsets.UTF_8);
                  CSVPrinter printer = new CSVPrinter(osw,
                          CSVFormat.DEFAULT.builder().setDelimiter(delimiter).build())) {
@@ -71,6 +77,7 @@ public class HouseBuildingAreaStatJob {
                     printer.printRecord(map.values());
                 }
             }
+            FileUtil.setDefaultFilePermissions(filePath);
         } catch (Exception e) {
             log.error(e.getMessage(), e);
             throw new MyRuntimeException("房产大屏建筑面积统计定时任务失败");

+ 11 - 4
src/main/java/com/nokia/finance/tasks/jobs/house/fcdp/HouseBuildingLandCountJob.java

@@ -3,6 +3,7 @@ package com.nokia.finance.tasks.jobs.house.fcdp;
 import com.nokia.finance.tasks.common.exception.MyRuntimeException;
 import com.nokia.finance.tasks.config.JobConfig;
 import com.nokia.finance.tasks.dao.house.HouseFcdpDao;
+import com.nokia.finance.tasks.utils.FileUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.csv.CSVFormat;
 import org.apache.commons.csv.CSVPrinter;
@@ -14,6 +15,7 @@ import org.springframework.util.CollectionUtils;
 import java.io.OutputStreamWriter;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
+import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
@@ -50,11 +52,15 @@ public class HouseBuildingLandCountJob {
                 throw new MyRuntimeException("房产大屏建筑和土地数量统计定时任务失败");
             }
             List<LinkedHashMap<String, Object>> list = houseFcdpDao.getHouseBuildingLandCount(endYearMonth);
-            Files.createDirectories(Paths.get(jobConfig.getHouseBuildingLandCountOutputPath()));
+            String dir = jobConfig.getHouseBuildingLandCountOutputPath();
+            Path dirPath = Paths.get(dir);
+            Path filePath = Paths.get(dir + "building_land_count_" + endYearMonth + ".csv");
+            if (!Files.exists(dirPath)) {
+                Files.createDirectories(dirPath);
+                FileUtil.setDefaultDirPermissions(dirPath);
+            }
             char delimiter = 1;
-            try (OutputStreamWriter osw = new OutputStreamWriter(
-                    Files.newOutputStream(Paths.get(jobConfig.getHouseBuildingLandCountOutputPath()
-                            + "building_land_count_" + endYearMonth + ".csv")),
+            try (OutputStreamWriter osw = new OutputStreamWriter(Files.newOutputStream(filePath),
                     StandardCharsets.UTF_8);
                  CSVPrinter printer = new CSVPrinter(osw,
                          CSVFormat.DEFAULT.builder().setDelimiter(delimiter).build())) {
@@ -70,6 +76,7 @@ public class HouseBuildingLandCountJob {
                     printer.printRecord(map.values());
                 }
             }
+            FileUtil.setDefaultFilePermissions(filePath);
         } catch (Exception e) {
             log.error(e.getMessage(), e);
             throw new MyRuntimeException("房产大屏建筑和土地数量统计定时任务失败");

+ 11 - 4
src/main/java/com/nokia/finance/tasks/jobs/house/fcdp/HouseRentalIncomeJob.java

@@ -2,6 +2,7 @@ package com.nokia.finance.tasks.jobs.house.fcdp;
 
 import com.nokia.finance.tasks.common.exception.MyRuntimeException;
 import com.nokia.finance.tasks.config.JobConfig;
+import com.nokia.finance.tasks.utils.FileUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.csv.CSVFormat;
 import org.apache.commons.csv.CSVPrinter;
@@ -12,6 +13,7 @@ import org.springframework.util.CollectionUtils;
 import java.io.OutputStreamWriter;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
+import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
@@ -42,11 +44,15 @@ public class HouseRentalIncomeJob {
             LocalDate localDateEnd = localDateNow.minusMonths(1);
             Integer endYearMonth = Integer.valueOf(localDateEnd.format(DateTimeFormatter.ofPattern("yyyyMM")));
             List<Map<String, Object>> list = new ArrayList<>();
-            Files.createDirectories(Paths.get(jobConfig.getHouseRentalIncomeOutputPath()));
+            String dir = jobConfig.getHouseRentalIncomeOutputPath();
+            Path dirPath = Paths.get(dir);
+            Path filePath = Paths.get(dir + "rental_income_" + endYearMonth + ".csv");
+            if (!Files.exists(dirPath)) {
+                Files.createDirectories(dirPath);
+                FileUtil.setDefaultDirPermissions(dirPath);
+            }
             char delimiter = 1;
-            try (OutputStreamWriter osw = new OutputStreamWriter(
-                    Files.newOutputStream(Paths.get(jobConfig.getHouseRentalIncomeOutputPath()
-                            + "rental_income_" + endYearMonth + ".csv")),
+            try (OutputStreamWriter osw = new OutputStreamWriter(Files.newOutputStream(filePath),
                     StandardCharsets.UTF_8);
                  CSVPrinter printer = new CSVPrinter(osw,
                          CSVFormat.DEFAULT.builder().setDelimiter(delimiter).build())) {
@@ -62,6 +68,7 @@ public class HouseRentalIncomeJob {
                     printer.printRecord(map.values());
                 }
             }
+            FileUtil.setDefaultFilePermissions(filePath);
         } catch (Exception e) {
             throw new MyRuntimeException("执行房产大屏出租收入统计定时任务失败");
         }

+ 11 - 4
src/main/java/com/nokia/finance/tasks/jobs/house/strategy/HouseBuildingIdleStrategyJob.java

@@ -3,6 +3,7 @@ package com.nokia.finance.tasks.jobs.house.strategy;
 import com.nokia.finance.tasks.common.exception.MyRuntimeException;
 import com.nokia.finance.tasks.config.JobConfig;
 import com.nokia.finance.tasks.dao.house.HouseStrategyDao;
+import com.nokia.finance.tasks.utils.FileUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.csv.CSVFormat;
 import org.apache.commons.csv.CSVPrinter;
@@ -14,6 +15,7 @@ import org.springframework.util.CollectionUtils;
 import java.io.OutputStreamWriter;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
+import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
@@ -53,11 +55,15 @@ public class HouseBuildingIdleStrategyJob {
             houseStrategyDao.insertHouseBuildingIdleStrategy(endYearMonth);
             houseStrategyDao.insertPublicBuildingIdleStrategy(endYearMonth);
             List<LinkedHashMap<String, Object>> list = houseStrategyDao.getBuildingIdleStrategy(endYearMonth);
-            Files.createDirectories(Paths.get(jobConfig.getHouseBuildingIdleStrategyOutputPath()));
+            String dir = jobConfig.getHouseBuildingIdleStrategyOutputPath();
+            Path dirPath = Paths.get(dir);
+            Path filePath = Paths.get(dir + "building_idle_strategy_" + endYearMonth + ".csv");
+            if (!Files.exists(dirPath)) {
+                Files.createDirectories(dirPath);
+                FileUtil.setDefaultDirPermissions(dirPath);
+            }
             char delimiter = 1;
-            try (OutputStreamWriter osw = new OutputStreamWriter(
-                    Files.newOutputStream(Paths.get(jobConfig.getHouseBuildingIdleStrategyOutputPath()
-                            + "building_idle_strategy_" + endYearMonth + ".csv")),
+            try (OutputStreamWriter osw = new OutputStreamWriter(Files.newOutputStream(filePath),
                     StandardCharsets.UTF_8);
                  CSVPrinter printer = new CSVPrinter(osw,
                          CSVFormat.DEFAULT.builder().setDelimiter(delimiter).build())) {
@@ -73,6 +79,7 @@ public class HouseBuildingIdleStrategyJob {
                     printer.printRecord(map.values());
                 }
             }
+            FileUtil.setDefaultFilePermissions(filePath);
         } catch (Exception e) {
             log.error(e.getMessage(), e);
             throw new MyRuntimeException("闲置建筑面积超过1000平米策略定时任务失败");

+ 38 - 0
src/main/java/com/nokia/finance/tasks/utils/FileUtil.java

@@ -0,0 +1,38 @@
+package com.nokia.finance.tasks.utils;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.attribute.PosixFilePermission;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+public class FileUtil {
+    static final Set<PosixFilePermission> DEFAULT_DIR_PERMISSIONS = Stream.of(
+            PosixFilePermission.OWNER_READ,
+            PosixFilePermission.OWNER_WRITE,
+            PosixFilePermission.OWNER_EXECUTE,
+            PosixFilePermission.GROUP_READ,
+            PosixFilePermission.GROUP_WRITE,
+            PosixFilePermission.GROUP_EXECUTE,
+            PosixFilePermission.OTHERS_READ,
+            PosixFilePermission.OTHERS_EXECUTE
+    ).collect(Collectors.toSet());
+
+    static final Set<PosixFilePermission> DEFAULT_FILE_PERMISSIONS = Stream.of(
+            PosixFilePermission.OWNER_READ,
+            PosixFilePermission.OWNER_WRITE,
+            PosixFilePermission.GROUP_READ,
+            PosixFilePermission.GROUP_WRITE,
+            PosixFilePermission.OTHERS_READ
+    ).collect(Collectors.toSet());
+
+    public static void setDefaultDirPermissions(Path path) throws IOException {
+        Files.setPosixFilePermissions(path, DEFAULT_DIR_PERMISSIONS);
+    }
+
+    public static void setDefaultFilePermissions(Path path) throws IOException {
+        Files.setPosixFilePermissions(path, DEFAULT_FILE_PERMISSIONS);
+    }
+}