|
@@ -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();
|