Browse Source

test: 黑名单数据测试

weijianghai 2 years ago
parent
commit
dada1e392a
1 changed files with 167 additions and 33 deletions
  1. 167 33
      sms_blk_interface/src/test/java/com/nokia/sms/SyncTest.java

+ 167 - 33
sms_blk_interface/src/test/java/com/nokia/sms/SyncTest.java

@@ -8,16 +8,17 @@ import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
 
 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.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicLong;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -28,6 +29,72 @@ class SyncTest {
     @Autowired
     private JdbcTemplate jdbcTemplate;
 
+    /**
+     * 筛选无在黑记录号码
+     */
+    @Test
+    void testFindNoBlack() {
+        String p1 = TEST_DIR + "data.csv";
+        String p2 = TEST_DIR + "blacklist.csv";
+        String r1 = TEST_DIR + "result1.csv";
+        String r2 = TEST_DIR + "result2.csv";
+        String phoneFile = TEST_DIR + "phones.csv";
+        Set<String> phones = ConcurrentHashMap.newKeySet();
+        Map<String, AtomicLong> phoneCount = new HashMap<>();
+        try (CsvReader csvReader = CsvReader.builder().build(Paths.get(p1), StandardCharsets.UTF_8);
+             OutputStreamWriter osw = new OutputStreamWriter(Files.newOutputStream(Paths.get(phoneFile)),
+                StandardCharsets.UTF_8);
+             CsvWriter csvWriter = CsvWriter.builder().build(osw);) {
+            for (CsvRow row : csvReader) {
+                if (row.getOriginalLineNumber() == 1) {
+                    continue;
+                }
+
+                String phone = row.getField(0);
+                phones.add(phone);
+                phoneCount.putIfAbsent(phone, new AtomicLong(0L));
+                phoneCount.get(phone).incrementAndGet();
+            }
+            for (String phone : phones) {
+                csvWriter.writeRow(phone);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        System.out.println(phones.size());
+        try (CsvReader csvReader = CsvReader.builder().build(Paths.get(p2), StandardCharsets.UTF_8);
+             OutputStreamWriter osw1 = new OutputStreamWriter(Files.newOutputStream(Paths.get(r1)),
+                     StandardCharsets.UTF_8);
+             CsvWriter csvWriter1 = CsvWriter.builder().build(osw1);
+             OutputStreamWriter osw2 = new OutputStreamWriter(Files.newOutputStream(Paths.get(r2)),
+                StandardCharsets.UTF_8);
+             CsvWriter csvWriter2 = CsvWriter.builder().build(osw2);) {
+            Map<String, List<String>> map = new HashMap<>();
+            for (CsvRow csvRow : csvReader) {
+                map.put(csvRow.getField(0), csvRow.getFields());
+            }
+            for (String phone : phones) {
+                for (Map.Entry<String, List<String>> entry : map.entrySet()) {
+                    String key = entry.getKey();
+                    if (key.equals(phone)) {
+                        phones.remove(phone);
+                        csvWriter2.writeRow(entry.getValue());
+                    }
+                }
+            }
+            for (String phone : phones) {
+                csvWriter1.writeRow(phone, phoneCount.get(phone).toString());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        System.out.println(phones.size());
+    }
+
+    /**
+     * 筛选在黑数据
+     */
     @Test
     void testBlack() {
         String p1 = TEST_DIR + "blacklist.csv";
@@ -48,14 +115,20 @@ class SyncTest {
         }
     }
 
+    /**
+     * 黑名单数据比对
+     */
     @Test
-    void test() {
+    void testDiff() {
         Map<String, Map<String, String>> m1 = new HashMap<>();
         Map<String, Map<String, String>> m2 = new HashMap<>();
+        String record = TEST_DIR + "blacklist_file.csv";
         String p1 = TEST_DIR + "data.csv";
-        String p2 = TEST_DIR + "black.csv";
-//        String p2 = TEST_DIR + "blacklist.csv";
-        String result = TEST_DIR + "result2.csv";
+        String p2 = TEST_DIR + "blacklist.csv";
+        String r1 = TEST_DIR + "result1.csv";
+        String r2 = TEST_DIR + "result2.csv";
+        String d1 = TEST_DIR + "diff1.csv";
+        String d2 = TEST_DIR + "diff2.csv";
         try {
             try (CsvReader csvReader = CsvReader.builder().build(Paths.get(p1), StandardCharsets.UTF_8)) {
                 for (CsvRow row : csvReader) {
@@ -89,40 +162,101 @@ class SyncTest {
                     }});
                 }
             }
-            try (OutputStreamWriter osw = new OutputStreamWriter(Files.newOutputStream(Paths.get(result)),
+            try (OutputStreamWriter osw1 = new OutputStreamWriter(Files.newOutputStream(Paths.get(r1)),
+                    StandardCharsets.UTF_8);
+                 CsvWriter csvWriter1 = CsvWriter.builder().build(osw1);
+                 OutputStreamWriter osw2 = new OutputStreamWriter(Files.newOutputStream(Paths.get(d1)),
+                         StandardCharsets.UTF_8);
+                 CsvWriter csvWriter2 = CsvWriter.builder().build(osw2);
+                 ) {
+                csvWriter1.writeRow("黑名单号码", "入黑名单原因", "开始时间", "结束时间", "解黑建议", "是否一致", "不一致原因", "入黑名单原因", "解黑建议", "开始时间", "结束时间", "命中策略说明", "操作类型");
+                for (Map<String, String> v1 : m1.values()) {
+                    String phone = v1.get("phone");
+                    Map<String, String> v2 = m2.getOrDefault(phone, new HashMap<>());
+                    String flag = "是";
+                    String diff = "";
+                    if (!v1.get("reason").equals(v2.get("reason"))) {
+                        diff = "入黑名单原因、";
+                    }
+                    if (!v1.get("start_time").equals(v2.get("start_time"))) {
+                        diff = diff + "开始时间、";
+                    }
+                    if (!v1.get("end_time").equals(v2.get("end_time"))) {
+                        diff = diff + "结束时间、";
+                    }
+                    if (!v1.get("suggestion").equals(v2.get("suggestion"))) {
+                        diff = diff + "解黑建议、";
+                    }
+                    if (CollectionUtils.isEmpty(v2)) {
+                        diff = "数据库中没有记录";
+                    }
+                    if (StringUtils.hasText(diff)) {
+                        flag = "否";
+                        csvWriter2.writeRow("黑名单号码", "入黑名单原因", "开始时间", "结束时间", "解黑建议", "是否一致", "不一致原因", "入黑名单原因", "解黑建议", "开始时间", "结束时间", "命中策略说明", "操作类型");
+                        csvWriter2.writeRow(phone, v1.get("reason"), v1.get("start_time"), v1.get("end_time"), v1.get("suggestion"), flag, diff, v2.get("reason"), v2.get("suggestion"), v2.get("start_time"), v2.get("end_time"), v2.get("hit_desc"), v2.get("operation_type"));
+                        csvWriter2.writeRow("黑名单号码", "入黑名单原因", "开始时间", "结束时间", "命中策略说明", "操作类型", "解黑建议", "同步文件名");
+                        try (CsvReader csvReader = CsvReader.builder().build(Paths.get(record), StandardCharsets.UTF_8)) {
+                            for (CsvRow row : csvReader) {
+                                if (row.getOriginalLineNumber() == 1 || !phone.equals(row.getField(0))) {
+                                    continue;
+                                }
+                                csvWriter2.writeRow(row.getFields());
+                            }
+                        }
+                        csvWriter2.writeRow();
+                    }
+                    csvWriter1.writeRow(phone, v1.get("reason"), v1.get("start_time"), v1.get("end_time"), v1.get("suggestion"), flag, diff, v2.get("reason"), v2.get("suggestion"), v2.get("start_time"), v2.get("end_time"), v2.get("hit_desc"), v2.get("operation_type"));
+                }
+            }
+            try (OutputStreamWriter osw1 = new OutputStreamWriter(Files.newOutputStream(Paths.get(r2)),
                     StandardCharsets.UTF_8);
-                 CsvWriter csvWriter = CsvWriter.builder().build(osw);) {
-                csvWriter.writeRow("黑名单号码", "入黑名单原因", "开始时间", "结束时间", "解黑建议", "是否一致", "入黑名单原因", "解黑建议", "开始时间", "结束时间", "命中策略说明", "操作类型");
+                 CsvWriter csvWriter1 = CsvWriter.builder().build(osw1);
+                 OutputStreamWriter osw2 = new OutputStreamWriter(Files.newOutputStream(Paths.get(d2)),
+                         StandardCharsets.UTF_8);
+                 CsvWriter csvWriter2 = CsvWriter.builder().build(osw2);
+                 ) {
+                csvWriter1.writeRow("黑名单号码", "入黑名单原因", "开始时间", "结束时间", "解黑建议", "是否一致", "不一致原因", "入黑名单原因", "解黑建议", "开始时间", "结束时间", "命中策略说明", "操作类型");
                 for (Map<String, String> v2 : m2.values()) {
                     String phone = v2.get("phone");
                     Map<String, String> v1 = m1.getOrDefault(phone, new HashMap<>());
-//                    if (CollectionUtils.isEmpty(v1) && "2".equals(v2.get("operation_type"))) {
-//                        continue;
-//                    }
+                    if (CollectionUtils.isEmpty(v1) && "2".equals(v2.get("operation_type"))) {
+                        continue;
+                    }
 
                     String flag = "是";
-                    if (!v2.get("reason").equals(v1.get("reason"))
-                            || !v2.get("start_time").equals(v1.get("start_time"))
-                            || !v2.get("end_time").equals(v1.get("end_time"))
-                            || !v2.get("suggestion").equals(v1.get("suggestion"))
-                    ) {
+                    String diff = "";
+                    if (!v2.get("reason").equals(v1.get("reason"))) {
+                        diff = "入黑名单原因、";
+                    }
+                    if (!v2.get("start_time").equals(v1.get("start_time"))) {
+                        diff = diff + "开始时间、";
+                    }
+                    if (!v2.get("end_time").equals(v1.get("end_time"))) {
+                        diff = diff + "结束时间、";
+                    }
+                    if (!v2.get("suggestion").equals(v1.get("suggestion"))) {
+                        diff = diff + "解黑建议、";
+                    }
+                    if (CollectionUtils.isEmpty(v1)) {
+                        diff = "在黑数据中没有记录";
+                    }
+                    if (StringUtils.hasText(diff)) {
                         flag = "否";
+                        csvWriter2.writeRow("黑名单号码", "入黑名单原因", "开始时间", "结束时间", "解黑建议", "是否一致", "不一致原因", "入黑名单原因", "解黑建议", "开始时间", "结束时间", "命中策略说明", "操作类型");
+                        csvWriter2.writeRow(phone, v1.get("reason"), v1.get("start_time"), v1.get("end_time"), v1.get("suggestion"), flag, diff, v2.get("reason"), v2.get("suggestion"), v2.get("start_time"), v2.get("end_time"), v2.get("hit_desc"), v2.get("operation_type"));
+                        csvWriter2.writeRow("黑名单号码", "入黑名单原因", "开始时间", "结束时间", "命中策略说明", "操作类型", "解黑建议", "同步文件名");
+                        try (CsvReader csvReader = CsvReader.builder().build(Paths.get(record), StandardCharsets.UTF_8)) {
+                            for (CsvRow row : csvReader) {
+                                if (row.getOriginalLineNumber() == 1 || !phone.equals(row.getField(0))) {
+                                    continue;
+                                }
+                                csvWriter2.writeRow(row.getFields());
+                            }
+                        }
+                        csvWriter2.writeRow();
                     }
-                    csvWriter.writeRow(phone, v1.get("reason"), v1.get("suggestion"), v1.get("start_time"), v1.get("end_time"), flag, v2.get("reason"), v2.get("suggestion"), v2.get("start_time"), v2.get("end_time"), v2.get("hit_desc"), v2.get("operation_type"));
+                    csvWriter1.writeRow(phone, v1.get("reason"), v1.get("start_time"), v1.get("end_time"), v1.get("suggestion"), flag, diff, v2.get("reason"), v2.get("suggestion"), v2.get("start_time"), v2.get("end_time"), v2.get("hit_desc"), v2.get("operation_type"));
                 }
-//                for (Map<String, String> v1 : m1.values()) {
-//                    String phone = v1.get("phone");
-//                    Map<String, String> v2 = m2.getOrDefault(phone, new HashMap<>());
-//                    String flag = "是";
-//                    if (!v1.get("reason").equals(v2.get("reason"))
-//                            || !v1.get("start_time").equals(v2.get("start_time"))
-//                            || !v1.get("end_time").equals(v2.get("end_time"))
-//                            || !v1.get("suggestion").equals(v2.get("suggestion"))
-//                    ) {
-//                        flag = "否";
-//                    }
-//                    csvWriter.writeRow(phone, v1.get("reason"), v1.get("suggestion"), v1.get("start_time"), v1.get("end_time"), flag, v2.get("reason"), v2.get("suggestion"), v2.get("start_time"), v2.get("end_time"), v2.get("hit_desc"), v2.get("operation_type"));
-//                }
             }
         } catch (Exception e) {
             e.printStackTrace();