|
@@ -7,6 +7,7 @@ import lombok.extern.slf4j.Slf4j;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.boot.test.context.SpringBootTest;
|
|
import org.springframework.boot.test.context.SpringBootTest;
|
|
|
|
+import org.springframework.dao.EmptyResultDataAccessException;
|
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
import org.springframework.util.CollectionUtils;
|
|
import org.springframework.util.CollectionUtils;
|
|
import org.springframework.util.StringUtils;
|
|
import org.springframework.util.StringUtils;
|
|
@@ -43,7 +44,7 @@ class SyncTest {
|
|
Map<String, AtomicLong> phoneCount = new HashMap<>();
|
|
Map<String, AtomicLong> phoneCount = new HashMap<>();
|
|
try (CsvReader csvReader = CsvReader.builder().build(Paths.get(p1), StandardCharsets.UTF_8);
|
|
try (CsvReader csvReader = CsvReader.builder().build(Paths.get(p1), StandardCharsets.UTF_8);
|
|
OutputStreamWriter osw = new OutputStreamWriter(Files.newOutputStream(Paths.get(phoneFile)),
|
|
OutputStreamWriter osw = new OutputStreamWriter(Files.newOutputStream(Paths.get(phoneFile)),
|
|
- StandardCharsets.UTF_8);
|
|
|
|
|
|
+ StandardCharsets.UTF_8);
|
|
CsvWriter csvWriter = CsvWriter.builder().build(osw);) {
|
|
CsvWriter csvWriter = CsvWriter.builder().build(osw);) {
|
|
for (CsvRow row : csvReader) {
|
|
for (CsvRow row : csvReader) {
|
|
if (row.getOriginalLineNumber() == 1) {
|
|
if (row.getOriginalLineNumber() == 1) {
|
|
@@ -68,7 +69,7 @@ class SyncTest {
|
|
StandardCharsets.UTF_8);
|
|
StandardCharsets.UTF_8);
|
|
CsvWriter csvWriter1 = CsvWriter.builder().build(osw1);
|
|
CsvWriter csvWriter1 = CsvWriter.builder().build(osw1);
|
|
OutputStreamWriter osw2 = new OutputStreamWriter(Files.newOutputStream(Paths.get(r2)),
|
|
OutputStreamWriter osw2 = new OutputStreamWriter(Files.newOutputStream(Paths.get(r2)),
|
|
- StandardCharsets.UTF_8);
|
|
|
|
|
|
+ StandardCharsets.UTF_8);
|
|
CsvWriter csvWriter2 = CsvWriter.builder().build(osw2);) {
|
|
CsvWriter csvWriter2 = CsvWriter.builder().build(osw2);) {
|
|
Map<String, List<String>> map = new HashMap<>();
|
|
Map<String, List<String>> map = new HashMap<>();
|
|
for (CsvRow csvRow : csvReader) {
|
|
for (CsvRow csvRow : csvReader) {
|
|
@@ -129,6 +130,8 @@ class SyncTest {
|
|
String r2 = TEST_DIR + "result2.csv";
|
|
String r2 = TEST_DIR + "result2.csv";
|
|
String d1 = TEST_DIR + "diff1.csv";
|
|
String d1 = TEST_DIR + "diff1.csv";
|
|
String d2 = TEST_DIR + "diff2.csv";
|
|
String d2 = TEST_DIR + "diff2.csv";
|
|
|
|
+ String o1 = TEST_DIR + "output1.csv";
|
|
|
|
+ String o2 = TEST_DIR + "output2.csv";
|
|
try {
|
|
try {
|
|
try (CsvReader csvReader = CsvReader.builder().build(Paths.get(p1), StandardCharsets.UTF_8)) {
|
|
try (CsvReader csvReader = CsvReader.builder().build(Paths.get(p1), StandardCharsets.UTF_8)) {
|
|
for (CsvRow row : csvReader) {
|
|
for (CsvRow row : csvReader) {
|
|
@@ -168,13 +171,18 @@ class SyncTest {
|
|
OutputStreamWriter osw2 = new OutputStreamWriter(Files.newOutputStream(Paths.get(d1)),
|
|
OutputStreamWriter osw2 = new OutputStreamWriter(Files.newOutputStream(Paths.get(d1)),
|
|
StandardCharsets.UTF_8);
|
|
StandardCharsets.UTF_8);
|
|
CsvWriter csvWriter2 = CsvWriter.builder().build(osw2);
|
|
CsvWriter csvWriter2 = CsvWriter.builder().build(osw2);
|
|
- ) {
|
|
|
|
- csvWriter1.writeRow("黑名单号码", "入黑名单原因", "开始时间", "结束时间", "解黑建议", "是否一致", "不一致原因", "入黑名单原因", "解黑建议", "开始时间", "结束时间", "命中策略说明", "操作类型");
|
|
|
|
|
|
+ OutputStreamWriter osw3 = new OutputStreamWriter(Files.newOutputStream(Paths.get(o1)),
|
|
|
|
+ StandardCharsets.UTF_8);
|
|
|
|
+ CsvWriter csvWriter3 = CsvWriter.builder().build(osw3);
|
|
|
|
+ ) {
|
|
|
|
+ csvWriter1.writeRow("黑名单号码", "入黑名单原因", "解黑建议", "开始时间", "结束时间", "入黑名单原因", "解黑建议", "开始时间", "结束时间", "命中策略说明", "操作类型", "是否一致", "不一致原因");
|
|
|
|
+ csvWriter3.writeRow("不一致情况", "黑名单号码", "入黑名单原因", "解黑建议", "开始时间", "结束时间", "入黑名单原因", "解黑建议", "开始时间", "结束时间");
|
|
for (Map<String, String> v1 : m1.values()) {
|
|
for (Map<String, String> v1 : m1.values()) {
|
|
String phone = v1.get("phone");
|
|
String phone = v1.get("phone");
|
|
Map<String, String> v2 = m2.getOrDefault(phone, new HashMap<>());
|
|
Map<String, String> v2 = m2.getOrDefault(phone, new HashMap<>());
|
|
String flag = "是";
|
|
String flag = "是";
|
|
String diff = "";
|
|
String diff = "";
|
|
|
|
+ String situation = "";
|
|
if (!v1.get("reason").equals(v2.get("reason"))) {
|
|
if (!v1.get("reason").equals(v2.get("reason"))) {
|
|
diff = "入黑名单原因、";
|
|
diff = "入黑名单原因、";
|
|
}
|
|
}
|
|
@@ -189,23 +197,33 @@ class SyncTest {
|
|
}
|
|
}
|
|
if (CollectionUtils.isEmpty(v2)) {
|
|
if (CollectionUtils.isEmpty(v2)) {
|
|
diff = "数据库中没有记录";
|
|
diff = "数据库中没有记录";
|
|
|
|
+ csvWriter3.writeRow(situation, phone, v2.get("reason"), v2.get("suggestion"), v2.get("start_time"), v2.get("end_time"), v1.get("reason"), v1.get("suggestion"), v1.get("start_time"), v1.get("end_time"));
|
|
}
|
|
}
|
|
if (StringUtils.hasText(diff)) {
|
|
if (StringUtils.hasText(diff)) {
|
|
flag = "否";
|
|
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("黑名单号码", "入黑名单原因", "开始时间", "结束时间", "命中策略说明", "操作类型", "解黑建议", "同步文件名");
|
|
|
|
|
|
+ csvWriter2.writeRow("黑名单号码", "入黑名单原因", "解黑建议", "开始时间", "结束时间", "入黑名单原因", "解黑建议", "开始时间", "结束时间", "命中策略说明", "操作类型", "是否一致", "不一致原因");
|
|
|
|
+ csvWriter2.writeRow(phone, v2.get("reason"), v2.get("suggestion"), v2.get("start_time"), v2.get("end_time"), v1.get("reason"), v1.get("suggestion"), v1.get("start_time"), v1.get("end_time"), v2.get("hit_desc"), v2.get("operation_type"), flag, diff);
|
|
|
|
+ csvWriter2.writeRow("黑名单号码", "入黑名单原因", "解黑建议", "开始时间", "结束时间", "命中策略说明", "操作类型", "同步文件名");
|
|
try (CsvReader csvReader = CsvReader.builder().build(Paths.get(record), StandardCharsets.UTF_8)) {
|
|
try (CsvReader csvReader = CsvReader.builder().build(Paths.get(record), StandardCharsets.UTF_8)) {
|
|
for (CsvRow row : csvReader) {
|
|
for (CsvRow row : csvReader) {
|
|
if (row.getOriginalLineNumber() == 1 || !phone.equals(row.getField(0))) {
|
|
if (row.getOriginalLineNumber() == 1 || !phone.equals(row.getField(0))) {
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
- csvWriter2.writeRow(row.getFields());
|
|
|
|
|
|
+ csvWriter2.writeRow(
|
|
|
|
+ row.getField(0),
|
|
|
|
+ row.getField(1),
|
|
|
|
+ row.getField(6),
|
|
|
|
+ row.getField(2),
|
|
|
|
+ row.getField(3),
|
|
|
|
+ row.getField(4),
|
|
|
|
+ row.getField(5),
|
|
|
|
+ row.getField(7)
|
|
|
|
+ );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
csvWriter2.writeRow();
|
|
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"));
|
|
|
|
|
|
+ csvWriter1.writeRow(phone, v1.get("reason"), v1.get("suggestion"), v1.get("start_time"), v1.get("end_time"), v2.get("reason"), v2.get("suggestion"), v2.get("start_time"), v2.get("end_time"), v2.get("hit_desc"), v2.get("operation_type"), flag, diff);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
try (OutputStreamWriter osw1 = new OutputStreamWriter(Files.newOutputStream(Paths.get(r2)),
|
|
try (OutputStreamWriter osw1 = new OutputStreamWriter(Files.newOutputStream(Paths.get(r2)),
|
|
@@ -214,8 +232,12 @@ class SyncTest {
|
|
OutputStreamWriter osw2 = new OutputStreamWriter(Files.newOutputStream(Paths.get(d2)),
|
|
OutputStreamWriter osw2 = new OutputStreamWriter(Files.newOutputStream(Paths.get(d2)),
|
|
StandardCharsets.UTF_8);
|
|
StandardCharsets.UTF_8);
|
|
CsvWriter csvWriter2 = CsvWriter.builder().build(osw2);
|
|
CsvWriter csvWriter2 = CsvWriter.builder().build(osw2);
|
|
- ) {
|
|
|
|
- csvWriter1.writeRow("黑名单号码", "入黑名单原因", "开始时间", "结束时间", "解黑建议", "是否一致", "不一致原因", "入黑名单原因", "解黑建议", "开始时间", "结束时间", "命中策略说明", "操作类型");
|
|
|
|
|
|
+ OutputStreamWriter osw3 = new OutputStreamWriter(Files.newOutputStream(Paths.get(o2)),
|
|
|
|
+ StandardCharsets.UTF_8);
|
|
|
|
+ CsvWriter csvWriter3 = CsvWriter.builder().build(osw3);
|
|
|
|
+ ) {
|
|
|
|
+ csvWriter1.writeRow("黑名单号码", "入黑名单原因", "解黑建议", "开始时间", "结束时间", "入黑名单原因", "解黑建议", "开始时间", "结束时间", "命中策略说明", "操作类型", "是否一致", "不一致原因");
|
|
|
|
+ csvWriter3.writeRow("不一致情况", "黑名单号码", "入黑名单原因", "解黑建议", "开始时间", "结束时间", "入黑名单原因", "解黑建议", "开始时间", "结束时间");
|
|
for (Map<String, String> v2 : m2.values()) {
|
|
for (Map<String, String> v2 : m2.values()) {
|
|
String phone = v2.get("phone");
|
|
String phone = v2.get("phone");
|
|
Map<String, String> v1 = m1.getOrDefault(phone, new HashMap<>());
|
|
Map<String, String> v1 = m1.getOrDefault(phone, new HashMap<>());
|
|
@@ -225,37 +247,53 @@ class SyncTest {
|
|
|
|
|
|
String flag = "是";
|
|
String flag = "是";
|
|
String diff = "";
|
|
String diff = "";
|
|
|
|
+ String situation = "";
|
|
if (!v2.get("reason").equals(v1.get("reason"))) {
|
|
if (!v2.get("reason").equals(v1.get("reason"))) {
|
|
diff = "入黑名单原因、";
|
|
diff = "入黑名单原因、";
|
|
|
|
+ situation = "有同步记录但是数据不一致";
|
|
}
|
|
}
|
|
if (!v2.get("start_time").equals(v1.get("start_time"))) {
|
|
if (!v2.get("start_time").equals(v1.get("start_time"))) {
|
|
diff = diff + "开始时间、";
|
|
diff = diff + "开始时间、";
|
|
|
|
+ situation = "有同步记录但是数据不一致";
|
|
}
|
|
}
|
|
if (!v2.get("end_time").equals(v1.get("end_time"))) {
|
|
if (!v2.get("end_time").equals(v1.get("end_time"))) {
|
|
diff = diff + "结束时间、";
|
|
diff = diff + "结束时间、";
|
|
|
|
+ situation = "有同步记录但是数据不一致";
|
|
}
|
|
}
|
|
if (!v2.get("suggestion").equals(v1.get("suggestion"))) {
|
|
if (!v2.get("suggestion").equals(v1.get("suggestion"))) {
|
|
diff = diff + "解黑建议、";
|
|
diff = diff + "解黑建议、";
|
|
|
|
+ situation = "有同步记录但是数据不一致";
|
|
}
|
|
}
|
|
if (CollectionUtils.isEmpty(v1)) {
|
|
if (CollectionUtils.isEmpty(v1)) {
|
|
diff = "在黑数据中没有记录";
|
|
diff = "在黑数据中没有记录";
|
|
|
|
+ situation = "数据库中存在但是在黑数据不存在";
|
|
}
|
|
}
|
|
if (StringUtils.hasText(diff)) {
|
|
if (StringUtils.hasText(diff)) {
|
|
flag = "否";
|
|
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("黑名单号码", "入黑名单原因", "开始时间", "结束时间", "命中策略说明", "操作类型", "解黑建议", "同步文件名");
|
|
|
|
|
|
+ csvWriter3.writeRow(situation, phone, v2.get("reason"), v2.get("suggestion"), v2.get("start_time"), v2.get("end_time"), v1.get("reason"), v1.get("suggestion"), v1.get("start_time"), v1.get("end_time"));
|
|
|
|
+ csvWriter2.writeRow("黑名单号码", "入黑名单原因", "解黑建议", "开始时间", "结束时间", "入黑名单原因", "解黑建议", "开始时间", "结束时间", "命中策略说明", "操作类型", "是否一致", "不一致原因");
|
|
|
|
+ csvWriter2.writeRow(phone, v2.get("reason"), v2.get("suggestion"), v2.get("start_time"), v2.get("end_time"), v1.get("reason"), v1.get("suggestion"), v1.get("start_time"), v1.get("end_time"), v2.get("hit_desc"), v2.get("operation_type"), flag, diff);
|
|
|
|
+ csvWriter2.writeRow("黑名单号码", "入黑名单原因", "解黑建议", "开始时间", "结束时间", "命中策略说明", "操作类型", "同步文件名");
|
|
try (CsvReader csvReader = CsvReader.builder().build(Paths.get(record), StandardCharsets.UTF_8)) {
|
|
try (CsvReader csvReader = CsvReader.builder().build(Paths.get(record), StandardCharsets.UTF_8)) {
|
|
for (CsvRow row : csvReader) {
|
|
for (CsvRow row : csvReader) {
|
|
if (row.getOriginalLineNumber() == 1 || !phone.equals(row.getField(0))) {
|
|
if (row.getOriginalLineNumber() == 1 || !phone.equals(row.getField(0))) {
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
- csvWriter2.writeRow(row.getFields());
|
|
|
|
|
|
+ csvWriter2.writeRow(
|
|
|
|
+ row.getField(0),
|
|
|
|
+ row.getField(1),
|
|
|
|
+ row.getField(6),
|
|
|
|
+ row.getField(2),
|
|
|
|
+ row.getField(3),
|
|
|
|
+ row.getField(4),
|
|
|
|
+ row.getField(5),
|
|
|
|
+ row.getField(7)
|
|
|
|
+ );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
csvWriter2.writeRow();
|
|
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"));
|
|
|
|
|
|
+ csvWriter1.writeRow(phone, v1.get("reason"), v1.get("suggestion"), v1.get("start_time"), v1.get("end_time"), v2.get("reason"), v2.get("suggestion"), v2.get("start_time"), v2.get("end_time"), v2.get("hit_desc"), v2.get("operation_type"), flag, diff);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
@@ -321,4 +359,45 @@ class SyncTest {
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ @Test
|
|
|
|
+ void testUpdate() {
|
|
|
|
+ Set<String> notExists = new HashSet<>();
|
|
|
|
+ try (CsvReader csvReader = CsvReader.builder().build(Paths.get(TEST_DIR + "data.csv"), StandardCharsets.UTF_8)) {
|
|
|
|
+ for (CsvRow row : csvReader) {
|
|
|
|
+ log.info("{} row: {}", row.getOriginalLineNumber(), row.getFields());
|
|
|
|
+ if (!StringUtils.hasText(row.getField(0))) {
|
|
|
|
+ log.warn("跳过空行");
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ String phone = StringUtils.trimAllWhitespace(row.getField(0));
|
|
|
|
+ Integer reason = Integer.valueOf(StringUtils.trimAllWhitespace(row.getField(1)));
|
|
|
|
+ String startTime = StringUtils.trimAllWhitespace(row.getField(2));
|
|
|
|
+ String endTime = StringUtils.trimAllWhitespace(row.getField(3));
|
|
|
|
+ Integer suggestion = Integer.valueOf(StringUtils.trimAllWhitespace(row.getField(4)));
|
|
|
|
+ log.info("{},{},{},{},{}", phone, reason, startTime, endTime, suggestion);
|
|
|
|
+ String sql = "select * from sms_blk.blacklist where phone = ?";
|
|
|
|
+ Map<String, Object> map = null;
|
|
|
|
+ try {
|
|
|
|
+ map = jdbcTemplate.queryForMap(sql, phone);
|
|
|
|
+ } catch (EmptyResultDataAccessException e) {
|
|
|
|
+ log.warn("{} not exist", phone);
|
|
|
|
+ notExists.add(phone);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!CollectionUtils.isEmpty(map)) {
|
|
|
|
+ if (startTime.equals(map.get("start_time"))
|
|
|
|
+ || (Long.parseLong(startTime) > Long.parseLong(map.get("start_time").toString()))) {
|
|
|
|
+ log.info("map: {}", map);
|
|
|
|
+ sql = "update sms_blk.blacklist set reason = ?, start_time = ?, end_time = ?, suggestion = ?, operation_type = 1 where phone = ?";
|
|
|
|
+ jdbcTemplate.update(sql, reason, startTime, endTime, suggestion, phone);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ log.info("{} notExists: {}", notExists.size(), notExists);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|