diff --git a/TK_Cust/dev/tk_cust/泰克客户/wf_dag_tk_cust.py b/TK_Cust/dev/tk_cust/泰克客户/wf_dag_tk_cust.py
new file mode 100644
index 0000000..2fc3f41
--- /dev/null
+++ b/TK_Cust/dev/tk_cust/泰克客户/wf_dag_tk_cust.py
@@ -0,0 +1,333 @@
+#!/usr/bin/python
+# -*- encoding=utf-8 -*-
+from airflow import DAG
+from datetime import datetime, timedelta
+from airflow.contrib.hooks.ssh_hook import SSHHook
+from airflow.contrib.operators.ssh_operator import SSHOperator
+from airflow.sensors.external_task_sensor import ExternalTaskSensor
+import json
+
+from airflow.operators.email_operator import EmailOperator
+from airflow.utils.trigger_rule import TriggerRule
+
+
+sshHook = SSHHook(ssh_conn_id ='ssh_air')
+default_args = {
+'owner': 'info@idgvalue.com',
+'email': [''],
+'email_on_failure': True,
+'email_on_retry':True,
+'start_date': datetime(2022, 9, 12),
+'depends_on_past': False,
+'retries': 6,
+'retry_delay': timedelta(minutes=10),
+}
+
+dag = DAG('wf_dag_tk_cust', default_args=default_args,
+schedule_interval="0 0 * * *",
+catchup=False,
+dagrun_timeout=timedelta(minutes=160),
+max_active_runs=3)
+
+task_failed = EmailOperator (
+ dag=dag,
+ trigger_rule=TriggerRule.ONE_FAILED,
+ task_id="task_failed",
+ to=["info@idgvalue.com"],
+ cc=[""],
+ subject="tk_cust_failed",
+ html_content='
您好,tk_cust作业失败,请及时处理"
')
+
+file_Tk01 = SSHOperator(
+ssh_hook=sshHook,
+task_id='file_Tk01',
+command='python /data/airflow/bin/FILELOD.py {{ params.my_param }} {{ ds_nodash }} >>/data/airflow/logs/file_load/file_load_{{ds_nodash}}.log 2>&1 ',
+params={'my_param':"Tk01"},
+depends_on_past=False,
+retries=3,
+dag=dag)
+
+
+file_Update_af0912 = SSHOperator(
+ssh_hook=sshHook,
+task_id='file_Update_af0912',
+command='python /data/airflow/bin/FILELOD.py {{ params.my_param }} {{ ds_nodash }} >>/data/airflow/logs/file_load/file_load_{{ds_nodash}}.log 2>&1 ',
+params={'my_param':"Update_af0912"},
+depends_on_past=False,
+retries=3,
+dag=dag)
+
+
+file_Merge_af0912 = SSHOperator(
+ssh_hook=sshHook,
+task_id='file_Merge_af0912',
+command='python /data/airflow/bin/FILELOD.py {{ params.my_param }} {{ ds_nodash }} >>/data/airflow/logs/file_load/file_load_{{ds_nodash}}.log 2>&1 ',
+params={'my_param':"Merge_af0912"},
+depends_on_past=False,
+retries=3,
+dag=dag)
+
+
+file_SCRM_Contact_af0912 = SSHOperator(
+ssh_hook=sshHook,
+task_id='file_SCRM_Contact_af0912',
+command='python /data/airflow/bin/FILELOD.py {{ params.my_param }} {{ ds_nodash }} >>/data/airflow/logs/file_load/file_load_{{ds_nodash}}.log 2>&1 ',
+params={'my_param':"SCRM_Contact_af0912"},
+depends_on_past=False,
+retries=3,
+dag=dag)
+
+
+file_SCRM_Contact_bf0912 = SSHOperator(
+ssh_hook=sshHook,
+task_id='file_SCRM_Contact_bf0912',
+command='python /data/airflow/bin/FILELOD.py {{ params.my_param }} {{ ds_nodash }} >>/data/airflow/logs/file_load/file_load_{{ds_nodash}}.log 2>&1 ',
+params={'my_param':"SCRM_Contact_bf0912"},
+depends_on_past=False,
+retries=3,
+dag=dag)
+
+
+livechat_6381 = SSHOperator(
+ssh_hook=sshHook,
+task_id='livechat_6381',
+command='/data/airflow/etl/SA/run_sa.sh {{ ds_nodash }} {{ params.my_param }} >>/data/airflow/logs/run_psql_{{ds_nodash}}.log 2>&1 ',
+params={'my_param':"S98_S_livechat"},
+depends_on_past=False,
+retries=3,
+dag=dag)
+
+scrm_contact_af0912_6333 = SSHOperator(
+ssh_hook=sshHook,
+task_id='scrm_contact_af0912_6333',
+command='/data/airflow/etl/SA/run_sa.sh {{ ds_nodash }} {{ params.my_param }} >>/data/airflow/logs/run_psql_{{ds_nodash}}.log 2>&1 ',
+params={'my_param':"S98_S_scrm_contact_af0912"},
+depends_on_past=False,
+retries=3,
+dag=dag)
+
+scrm_contact_update_af0912_6448 = SSHOperator(
+ssh_hook=sshHook,
+task_id='scrm_contact_update_af0912_6448',
+command='/data/airflow/etl/SA/run_sa.sh {{ ds_nodash }} {{ params.my_param }} >>/data/airflow/logs/run_psql_{{ds_nodash}}.log 2>&1 ',
+params={'my_param':"S98_S_scrm_contact_update_af0912"},
+depends_on_past=False,
+retries=3,
+dag=dag)
+
+scrm_contact_merge_af0912_7975 = SSHOperator(
+ssh_hook=sshHook,
+task_id='scrm_contact_merge_af0912_7975',
+command='/data/airflow/etl/SA/run_sa.sh {{ ds_nodash }} {{ params.my_param }} >>/data/airflow/logs/run_psql_{{ds_nodash}}.log 2>&1 ',
+params={'my_param':"S98_S_scrm_contact_merge_af0912"},
+depends_on_past=False,
+retries=3,
+dag=dag)
+
+scrm_contact_bf0912_6949 = SSHOperator(
+ssh_hook=sshHook,
+task_id='scrm_contact_bf0912_6949',
+command='/data/airflow/etl/SA/run_sa.sh {{ ds_nodash }} {{ params.my_param }} >>/data/airflow/logs/run_psql_{{ds_nodash}}.log 2>&1 ',
+params={'my_param':"S98_S_scrm_contact_bf0912"},
+depends_on_past=False,
+retries=3,
+dag=dag)
+
+T01_SCRM_CONTACT = SSHOperator(
+ssh_hook=sshHook,
+task_id='T01_SCRM_CONTACT',
+command='/data/airflow/etl/PDM/run_sa.sh {{ ds_nodash }} {{params.my_param}} >>/data/airflow/logs/run_tpt_{{ds_nodash}}.log 2>&1 ',
+params={'my_param':"T01_SCRM_CONTACT_agi"},
+depends_on_past=False,
+retries=3,
+dag=dag)
+file_Udesk_record = SSHOperator(
+ssh_hook=sshHook,
+task_id='file_Udesk_record',
+command='python /data/airflow/bin/FILELOD.py {{ params.my_param }} {{ ds_nodash }} >>/data/airflow/logs/file_load/file_load_{{ds_nodash}}.log 2>&1 ',
+params={'my_param':"Udesk_record"},
+depends_on_past=False,
+retries=3,
+dag=dag)
+
+
+file_CRM_Raw_Leads = SSHOperator(
+ssh_hook=sshHook,
+task_id='file_CRM_Raw_Leads',
+command='python /data/airflow/bin/FILELOD.py {{ params.my_param }} {{ ds_nodash }} >>/data/airflow/logs/file_load/file_load_{{ds_nodash}}.log 2>&1 ',
+params={'my_param':"CRM_Raw_Leads"},
+depends_on_past=False,
+retries=3,
+dag=dag)
+
+
+file_scrm_leads_bf0912 = SSHOperator(
+ssh_hook=sshHook,
+task_id='file_scrm_leads_bf0912',
+command='python /data/airflow/bin/FILELOD.py {{ params.my_param }} {{ ds_nodash }} >>/data/airflow/logs/file_load/file_load_{{ds_nodash}}.log 2>&1 ',
+params={'my_param':"scrm_leads_bf0912"},
+depends_on_past=False,
+retries=3,
+dag=dag)
+
+
+file_scrm_leads_af0912 = SSHOperator(
+ssh_hook=sshHook,
+task_id='file_scrm_leads_af0912',
+command='python /data/airflow/bin/FILELOD.py {{ params.my_param }} {{ ds_nodash }} >>/data/airflow/logs/file_load/file_load_{{ds_nodash}}.log 2>&1 ',
+params={'my_param':"scrm_leads_af0912"},
+depends_on_past=False,
+retries=3,
+dag=dag)
+
+
+udesk_record_3768 = SSHOperator(
+ssh_hook=sshHook,
+task_id='udesk_record_3768',
+command='/data/airflow/etl/SA/run_sa.sh {{ ds_nodash }} {{ params.my_param }} >>/data/airflow/logs/run_psql_{{ds_nodash}}.log 2>&1 ',
+params={'my_param':"S98_S_udesk_record"},
+depends_on_past=False,
+retries=3,
+dag=dag)
+
+scrm_leads_bf0912_508 = SSHOperator(
+ssh_hook=sshHook,
+task_id='scrm_leads_bf0912_508',
+command='/data/airflow/etl/SA/run_sa.sh {{ ds_nodash }} {{ params.my_param }} >>/data/airflow/logs/run_psql_{{ds_nodash}}.log 2>&1 ',
+params={'my_param':"S98_S_scrm_leads_bf0912"},
+depends_on_past=False,
+retries=3,
+dag=dag)
+
+scrm_leads_af0912_5813 = SSHOperator(
+ssh_hook=sshHook,
+task_id='scrm_leads_af0912_5813',
+command='/data/airflow/etl/SA/run_sa.sh {{ ds_nodash }} {{ params.my_param }} >>/data/airflow/logs/run_psql_{{ds_nodash}}.log 2>&1 ',
+params={'my_param':"S98_S_scrm_leads_af0912"},
+depends_on_past=False,
+retries=3,
+dag=dag)
+
+crm_raw_leads_6024 = SSHOperator(
+ssh_hook=sshHook,
+task_id='crm_raw_leads_6024',
+command='/data/airflow/etl/SA/run_sa.sh {{ ds_nodash }} {{ params.my_param }} >>/data/airflow/logs/run_psql_{{ds_nodash}}.log 2>&1 ',
+params={'my_param':"S98_S_crm_raw_leads"},
+depends_on_past=False,
+retries=3,
+dag=dag)
+
+t01_scrm_contact_his = SSHOperator(
+ssh_hook=sshHook,
+task_id='t01_scrm_contact_his',
+command='/data/airflow/etl/PDM/run_sa.sh {{ ds_nodash }} {{params.my_param}} >>/data/airflow/logs/run_tpt_{{ds_nodash}}.log 2>&1 ',
+params={'my_param':"t01_scrm_contact_his_agi"},
+depends_on_past=False,
+retries=3,
+dag=dag)
+t01_scrm_contact_update = SSHOperator(
+ssh_hook=sshHook,
+task_id='t01_scrm_contact_update',
+command='/data/airflow/etl/PDM/run_sa.sh {{ ds_nodash }} {{params.my_param}} >>/data/airflow/logs/run_tpt_{{ds_nodash}}.log 2>&1 ',
+params={'my_param':"t01_scrm_contact_update_agi"},
+depends_on_past=False,
+retries=3,
+dag=dag)
+t01_scrm_contact_merge = SSHOperator(
+ssh_hook=sshHook,
+task_id='t01_scrm_contact_merge',
+command='/data/airflow/etl/PDM/run_sa.sh {{ ds_nodash }} {{params.my_param}} >>/data/airflow/logs/run_tpt_{{ds_nodash}}.log 2>&1 ',
+params={'my_param':"t01_scrm_contact_merge_agi"},
+depends_on_past=False,
+retries=3,
+dag=dag)
+t01_livechat_record = SSHOperator(
+ssh_hook=sshHook,
+task_id='t01_livechat_record',
+command='/data/airflow/etl/PDM/run_sa.sh {{ ds_nodash }} {{params.my_param}} >>/data/airflow/logs/run_tpt_{{ds_nodash}}.log 2>&1 ',
+params={'my_param':"t01_livechat_record_agi"},
+depends_on_past=False,
+retries=3,
+dag=dag)
+china_city_4536 = SSHOperator(
+ssh_hook=sshHook,
+task_id='china_city_4536',
+command='/data/airflow/etl/SA/run_sa.sh {{ ds_nodash }} {{ params.my_param }} >>/data/airflow/logs/run_psql_{{ds_nodash}}.log 2>&1 ',
+params={'my_param':"S98_S_china_city"},
+depends_on_past=False,
+retries=3,
+dag=dag)
+
+country_cde_3310 = SSHOperator(
+ssh_hook=sshHook,
+task_id='country_cde_3310',
+command='/data/airflow/etl/SA/run_sa.sh {{ ds_nodash }} {{ params.my_param }} >>/data/airflow/logs/run_psql_{{ds_nodash}}.log 2>&1 ',
+params={'my_param':"S98_S_country_cde"},
+depends_on_past=False,
+retries=3,
+dag=dag)
+
+file_china_city = SSHOperator(
+ssh_hook=sshHook,
+task_id='file_china_city',
+command='python /data/airflow/bin/FILELOD.py {{ params.my_param }} {{ ds_nodash }} >>/data/airflow/logs/file_load/file_load_{{ds_nodash}}.log 2>&1 ',
+params={'my_param':"china_city"},
+depends_on_past=False,
+retries=3,
+dag=dag)
+
+
+file_country_cde = SSHOperator(
+ssh_hook=sshHook,
+task_id='file_country_cde',
+command='python /data/airflow/bin/FILELOD.py {{ params.my_param }} {{ ds_nodash }} >>/data/airflow/logs/file_load/file_load_{{ds_nodash}}.log 2>&1 ',
+params={'my_param':"country_cde"},
+depends_on_past=False,
+retries=3,
+dag=dag)
+
+
+t01_crm_raw_leads = SSHOperator(
+ssh_hook=sshHook,
+task_id='t01_crm_raw_leads',
+command='/data/airflow/etl/PDM/run_sa.sh {{ ds_nodash }} {{params.my_param}} >>/data/airflow/logs/run_tpt_{{ds_nodash}}.log 2>&1 ',
+params={'my_param':"t01_crm_raw_leads_agi"},
+depends_on_past=False,
+retries=3,
+dag=dag)
+t00_country_info = SSHOperator(
+ssh_hook=sshHook,
+task_id='t00_country_info',
+command='/data/airflow/etl/PDM/run_sa.sh {{ ds_nodash }} {{params.my_param}} >>/data/airflow/logs/run_tpt_{{ds_nodash}}.log 2>&1 ',
+params={'my_param':"t00_country_info_agi"},
+depends_on_past=False,
+retries=3,
+dag=dag)
+t00_china_city_info = SSHOperator(
+ssh_hook=sshHook,
+task_id='t00_china_city_info',
+command='/data/airflow/etl/PDM/run_sa.sh {{ ds_nodash }} {{params.my_param}} >>/data/airflow/logs/run_tpt_{{ds_nodash}}.log 2>&1 ',
+params={'my_param':"t00_china_city_info_agi"},
+depends_on_past=False,
+retries=3,
+dag=dag)
+file_Tk01 >> livechat_6381
+file_Merge_af0912 >> scrm_contact_merge_af0912_7975
+file_SCRM_Contact_bf0912 >> scrm_contact_bf0912_6949
+file_SCRM_Contact_af0912 >> scrm_contact_af0912_6333
+file_Update_af0912 >> scrm_contact_update_af0912_6448
+scrm_contact_af0912_6333 >> T01_SCRM_CONTACT
+file_Udesk_record >> udesk_record_3768
+file_scrm_leads_bf0912 >> scrm_leads_bf0912_508
+file_scrm_leads_af0912 >> scrm_leads_af0912_5813
+file_CRM_Raw_Leads >> crm_raw_leads_6024
+scrm_contact_bf0912_6949 >> t01_scrm_contact_his
+scrm_contact_update_af0912_6448 >> t01_scrm_contact_update
+scrm_contact_merge_af0912_7975 >> t01_scrm_contact_merge
+livechat_6381 >> t01_livechat_record
+file_country_cde >> country_cde_3310
+file_china_city >> china_city_4536
+crm_raw_leads_6024 >> t01_crm_raw_leads
+country_cde_3310 >> t00_country_info
+china_city_4536 >> t00_china_city_info
+t00_china_city_info >> task_failed