import numpy as np
import pandas as pd
from USER.eric.Common import FeiShuData
from USER.eric.Common import DBDownload
import time, datetime
from pandas.core.frame import DataFrame
from apscheduler.schedulers.blocking import BlockingScheduler
from DataStatistics import DataSta

#............................主程序................................... 
   


def Week_Task():
    all_period_fault_info=DataFrame(columns=['factory','week','level1_count','level2_count','level3_count','level4_count','level5_count','solve_rate'])

    #............................获取数据................................
    toweek='Week'+time.strftime('%W')
    CS_Data=FeiShuData.getFeiShuDATA()
    host='rm-bp10j10qy42bzy0q77o.mysql.rds.aliyuncs.com'
    port=3306
    db='safety_platform'
    user='qx_read'
    password='Qx@123456'
    mode=2
    tablename1='all_fault_info'
    DBRead=DBDownload.DBDownload(host, port, db, user, password,mode)
    with DBRead as DBRead:
        df_fltinfo=DBRead.getdata('product_id','level','code','start_time',tablename=tablename1,factory='骑享',sn='',timename='',st='',sp='')#dbdownload经过了改编
    #............................获取时间................................      
    end_time=datetime.datetime.now()
    # end_time=datetime.datetime.strptime(end_time,'%Y-%m-%d')
    start_time=end_time-datetime.timedelta(days=7)
    start_time=start_time.strftime('%Y-%m-%d')
    end_time=end_time.strftime('%Y-%m-%d')
    FltAlarmInfo,Celltype=DataSta.SaftyWarningSta(CS_Data,df_fltinfo,start_time,end_time)
    FaultLvlCount=DataSta.WeekInfoSta(df_fltinfo,start_time,end_time)
    lvl1=FaultLvlCount[FaultLvlCount['level']==1]['product_id'].values
    lvl2=FaultLvlCount[FaultLvlCount['level']==2]['product_id'].values
    lvl3=FaultLvlCount[FaultLvlCount['level']==3]['product_id'].values
    lvl4=FaultLvlCount[FaultLvlCount['level']==4]['product_id'].values
    lvl5=FaultLvlCount[FaultLvlCount['level']==5]['product_id'].values
    all_period_fault_info.loc[0,'factory']='骑享'
    all_period_fault_info.loc[0,'week']=toweek
    all_period_fault_info.loc[0,'level1_count']=lvl1
    all_period_fault_info.loc[0,'level2_count']=lvl2
    all_period_fault_info.loc[0,'level3_count']=lvl3
    all_period_fault_info.loc[0,'level4_count']=lvl4
    all_period_fault_info.loc[0,'level5_count']=lvl5
    all_period_fault_info.loc[0,'solve_rate']=FltAlarmInfo.loc[0,'OprationManageRate']
    
def Minutes_Task():
    
    #............................获取数据................................
    host='172.16.121.236'
    port=3306
    db='fastfun'
    user='readonly'
    password='Fast1234'
    mode=3
    tablename1='ff_battery_accum'
    DBRead=DBDownload.DBDownload(host, port, db, user, password,mode)
    with DBRead as DBRead:
        df_last_accum=DBRead.getdata('devcode','dsg_phaccum','dsg_ahaccum',tablename=tablename1,factory='',sn='',timename='',st='',sp='')#dbdownload经过了改编

    host='rm-bp10j10qy42bzy0q77o.mysql.rds.aliyuncs.com'
    port=3306
    db='qx_cas'
    user='qx_read'
    password='Qx@123456'
    mode=3
    tablename2='bat_first_data_time'
    DBRead=DBDownload.DBDownload(host, port, db, user, password,mode)
    with DBRead as DBRead:
        df_FirstDataTime=DBRead.getdata('sn','first_data_time',tablename=tablename2,factory='',sn='',timename='',st='',sp='')#dbdownload经过了改编
    CS_Data=FeiShuData.getFeiShuDATA()
    host='rm-bp10j10qy42bzy0q77o.mysql.rds.aliyuncs.com'
    port=3306
    db='safety_platform'
    user='qx_read'
    password='Qx@123456'
    mode=2
    tablename1='all_fault_info'
    DBRead=DBDownload.DBDownload(host, port, db, user, password,mode)
    with DBRead as DBRead:
        df_fltinfo=DBRead.getdata('product_id','level','code','start_time',tablename=tablename1,factory='骑享',sn='',timename='',st='',sp='')#dbdownload经过了改编
    #............................获取时间................................
    end_time=datetime.datetime.now()
    # end_time=datetime.datetime.strptime(end_time,'%Y-%m-%d')
    start_time=end_time-datetime.timedelta(days=1)
    start_time=start_time.strftime('%Y-%m-%d')
    end_time=end_time.strftime('%Y-%m-%d')
    #............................执行程序................................
    FltAlarmInfo,Celltype=DataSta.SaftyWarningSta(CS_Data,df_fltinfo,start_time,end_time)
    SatftyCount=DataSta.SftyWrngClsfy(df_fltinfo)
    MaxAccumAh,TotalAccumAh,MaxCycle,MaxRunningHour,TotalRunHour=DataSta.AccumInfo(df_last_accum,df_FirstDataTime,end_time)

    all_statistic_info=DataFrame(columns=['factory','total_alarm','alarm_total_today','alarm_not_close_today','alarm_close_today','alarm_uregent_total_today','alarm_uregent_close_today','alarm_uregent_not_close_today','alarm_close_total','run_time_total','dischrg_total','odo_total','max_dischrg_one','max_runtime_one','max_cycle_one','max_odo_one','alarm_close_total','alarm_total','cell_type','cell_type_count','cell_safety_risk_count','data_safety_risk_count','status_safety_risk_count','hv_safety_risk_count','system_safety_risk_count','sample_safety_risk_count','controller_safety_risk_count','design_safety_risk_count'])
    all_statistic_info.loc[0,'factory']='骑享'
    all_statistic_info.loc[0,'total_alarm']=FltAlarmInfo.loc[0,'SftyPlt_Data_Total']
    all_statistic_info.loc[0,'alarm_total_today']=FltAlarmInfo.loc[0,'SftyPlt_Data_day']
    all_statistic_info.loc[0,'alarm_close_today']=FltAlarmInfo.loc[0,'CS_Warning_day_Finish_Count']
    all_statistic_info.loc[0,'alarm_not_close_today']=FltAlarmInfo.loc[0,'SftyPlt_Data_day']-FltAlarmInfo.loc[0,'CS_Warning_day_Finish_Count']
    all_statistic_info.loc[0,'alarm_uregent_total_today']=FltAlarmInfo.loc[0,'SftyPlt_EmgcyData_day']
    all_statistic_info.loc[0,'alarm_uregent_close_today']=FltAlarmInfo.loc[0,'SftyPlt_EmgcyData_day_Finish_Count']
    all_statistic_info.loc[0,'alarm_uregent_not_close_today']=FltAlarmInfo.loc[0,'SftyPlt_EmgcyData_day']-FltAlarmInfo.loc[0,'SftyPlt_EmgcyData_day_Finish_Count']
    all_statistic_info.loc[0,'run_time_total']=TotalRunHour
    all_statistic_info.loc[0,'dischrg_total']=TotalAccumAh
    all_statistic_info.loc[0,'odo_total']=0
    all_statistic_info.loc[0,'max_dischrg_one']=MaxAccumAh
    all_statistic_info.loc[0,'max_runtime_one']=MaxRunningHour
    all_statistic_info.loc[0,'max_cycle_one']=MaxCycle
    all_statistic_info.loc[0,'max_odo_one']=0
    all_statistic_info.loc[0,'alarm_close_total']=FltAlarmInfo.loc[0,'CS_Warning_Total_Finish_Count']
    all_statistic_info.loc[0,'alarm_total']=FltAlarmInfo.loc[0,'SftyPlt_Data_Total']
    CellType=Celltype.columns.tolist()
    CellType=','.join(CellType) 
    all_statistic_info.loc[0,'cell_type']=str(CellType)
    CellTypeCount=Celltype.loc[0].tolist()
    CellTypeCount=[str(x) for x in CellTypeCount]
    CellTypeCount=','.join(CellTypeCount) 
    all_statistic_info.loc[0,'cell_type_count']=str(CellTypeCount)
    all_statistic_info.loc[0,'cell_safety_risk_count']=SatftyCount.loc[0,'CellSaftyCount']
    all_statistic_info.loc[0,'data_safety_risk_count']=SatftyCount.loc[0,'DataSaftyCodeCount']
    all_statistic_info.loc[0,'status_safety_risk_count']=SatftyCount.loc[0,'StateSaftyCodeCount']
    all_statistic_info.loc[0,'hv_safety_risk_count']=SatftyCount.loc[0,'HvSaftyCodeCount']
    all_statistic_info.loc[0,'system_safety_risk_count']=SatftyCount.loc[0,'SysSaftyCodeCount']
    all_statistic_info.loc[0,'sample_safety_risk_count']=SatftyCount.loc[0,'SamplingSatyCount']
    all_statistic_info.loc[0,'controller_safety_risk_count']=SatftyCount.loc[0,'CtrlSaftyCodeCount']
    all_statistic_info.loc[0,'design_safety_risk_count']=SatftyCount.loc[0,'DsnSaftyCodeCount']
#定时任务....................................................................................................................................................................... 
#Week_Task()
Minutes_Task()
scheduler = BlockingScheduler()
scheduler.add_job(Week_Task, 'interval', days=7, id='Week_Task')
scheduler.add_job(Minutes_Task, 'interval', seconds=300, id='Hour_Task')
try:  
    scheduler.start()
except Exception as e:
    scheduler.shutdown()
    print(repr(e))