Prechádzať zdrojové kódy

支持字符串转Timestamp

AE86 2 rokov pred
rodič
commit
4789661f95

+ 4 - 0
dbsyncer-common/src/main/java/org/dbsyncer/common/util/DateFormatUtil.java

@@ -89,6 +89,10 @@ public abstract class DateFormatUtil {
         return Timestamp.valueOf(LocalDateTime.from(TS_FORMAT.parse(s)));
     }
 
+    public static Timestamp stringToTimestamp(String s, String pattern) {
+        return Timestamp.valueOf(LocalDateTime.from(DateTimeFormatter.ofPattern(pattern).parse(s)));
+    }
+
     public static OffsetTime timeWithTimeZone(String s) {
         return OffsetTime.parse(s, TIME_TZ_FORMAT).withOffsetSameInstant(ZoneOffset.UTC);
     }

+ 29 - 0
dbsyncer-parser/src/main/java/org/dbsyncer/parser/convert/handler/StringToTimestampHandler.java

@@ -0,0 +1,29 @@
+package org.dbsyncer.parser.convert.handler;
+
+import org.dbsyncer.common.util.DateFormatUtil;
+import org.dbsyncer.common.util.StringUtil;
+import org.dbsyncer.parser.convert.AbstractHandler;
+import org.springframework.util.Assert;
+
+import java.sql.Timestamp;
+
+/**
+ * 字符串转Timestamp
+ *
+ * @author AE86
+ * @version 1.0.0
+ * @date 2022/7/12 23:04
+ */
+public class StringToTimestampHandler extends AbstractHandler {
+
+    @Override
+    public Object convert(String args, Object value) {
+        if (value instanceof String) {
+            Assert.hasText(args, "缺少pattern参数.");
+            String s = (String) value;
+            value = DateFormatUtil.stringToTimestamp(s, args);
+        }
+        return value;
+    }
+
+}

+ 4 - 0
dbsyncer-parser/src/main/java/org/dbsyncer/parser/enums/ConvertEnum.java

@@ -42,6 +42,10 @@ public enum ConvertEnum {
      * Long转Timestamp
      */
     LONG_TO_TIMESTAMP("LONG_TO_TIMESTAMP", "Long转Timestamp", 0, new LongToTimestampHandler()),
+    /**
+     * String转Timestamp
+     */
+    STRING_TO_TIMESTAMP("STRING_TO_TIMESTAMP", "String转Timestamp(参数格式yyyy-MM-dd HH:mm:ss)", 1, new StringToTimestampHandler()),
     /**
      * Byte[]转String
      */

+ 2 - 2
dbsyncer-parser/src/main/java/org/dbsyncer/parser/model/Picker.java

@@ -67,7 +67,7 @@ public class Picker {
         return targetFields;
     }
 
-    public Map<String, Field> getSourceFieldMap() {
-        return sourceFields.stream().collect(Collectors.toMap(Field::getName, f -> f, (k1, k2) -> k1));
+    public Map<String, Field> getTargetFieldMap() {
+        return targetFields.stream().collect(Collectors.toMap(Field::getName, f -> f, (k1, k2) -> k1));
     }
 }

+ 1 - 1
dbsyncer-parser/src/main/java/org/dbsyncer/parser/strategy/impl/DisableWriterBufferActuatorStrategy.java

@@ -88,7 +88,7 @@ public final class DisableWriterBufferActuatorStrategy extends AbstractBinlogRec
 
         // 2、反序列数据
         final Picker picker = new Picker(tableGroup.getFieldMapping());
-        final Map<String, Field> fieldMap = picker.getSourceFieldMap();
+        final Map<String, Field> fieldMap = picker.getTargetFieldMap();
         Map<String, Object> data = new HashMap<>();
         message.getData().getRowMap().forEach((k, v) -> {
             if (fieldMap.containsKey(k)) {