main
黄海 5 months ago
parent 729d76056e
commit abefe23611

@ -51,6 +51,13 @@ def main():
'com_charge_discount_type', 'special_channel_order_source'
]
)
# 在main()函数初始化mapper后添加
test_date = '2020-09-23 15:15:45'
test_result = mapper.map_row(
columns=['order_time'],
row=(test_date,)
)
print(f"测试日期映射: {test_date}{test_result} (类型: {type(test_result['order_time'])})")
# 创建同步服务
service = SyncService(

@ -29,10 +29,9 @@ class DataMapper:
def _handle_datetime(self, value):
dt = self._parse_datetime(value)
return dt.strftime('%Y-%m-%d %H:%M:%S') if dt else '1970-01-01 00:00:00'
return dt if dt else self.min_date
def _parse_datetime(self, value):
# 完整日期解析逻辑
if value in (None, 0, '0', '0.0', '0.00', '', 'null', 'NULL'):
return self.min_date
@ -40,17 +39,26 @@ class DataMapper:
str_value = str(value).strip()
for fmt in ('%Y-%m-%d %H:%M:%S', '%Y-%m-%d', '%Y%m%d%H%M%S', '%Y/%m/%d %H:%M:%S'):
try:
return datetime.strptime(str_value, fmt)
parsed = datetime.strptime(str_value, fmt)
return self._clamp_datetime(parsed)
except ValueError:
continue
if str_value.isdigit():
ts = int(str_value)
if 1e12 < ts < 1e13: # 毫秒级时间戳
return datetime.fromtimestamp(ts / 1000)
parsed = datetime.fromtimestamp(ts / 1000)
elif 1e9 < ts < 1e10: # 秒级时间戳
return datetime.fromtimestamp(ts)
parsed = datetime.fromtimestamp(ts)
return self._clamp_datetime(parsed)
return self.min_date
except:
return self.min_date
return self.min_date
def _clamp_datetime(self, dt):
if dt < self.min_date:
return self.min_date
elif dt > self.max_date:
return self.max_date
return dt

@ -57,5 +57,10 @@ class SyncService:
self.ch_conn.connect().execute(
'INSERT INTO t_equipment_charge_order VALUES',
batch,
types_check=True
types_check=True,
settings={
'date_time_input_format': 'best_effort',
'allow_experimental_analyzer': 0,
'input_format_null_as_default': 1
}
)
Loading…
Cancel
Save