main_V0.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <<<<<<< HEAD
  2. from coreV0 import *
  3. =======
  4. from LIB.MIDDLE.InfoChrgDrive.Charge.V1_0_0.coreV0 import *
  5. >>>>>>> dev
  6. import pymysql
  7. import datetime
  8. import pandas as pd
  9. from LIB.BACKEND import DBManager
  10. from sqlalchemy import create_engine
  11. from urllib import parse
  12. import datetime, time
  13. from apscheduler.schedulers.blocking import BlockingScheduler
  14. from LIB.MIDDLE.CellStateEstimation.Common.V1_0_1 import DBDownload
  15. #from LIB.MIDDLE.CellStateEstimation.Common.V1_0_1 import log
  16. from LIB.MIDDLE.CellStateEstimation.Common import log
  17. #...................................充电技术指标统计函数......................................................................................................................
  18. def diag_cal():
  19. global SNnums
  20. start=time.time()
  21. now_time=datetime.datetime.now()
  22. start_time=now_time-datetime.timedelta(hours=24)
  23. start_time=start_time.strftime('%Y-%m-%d %H:%M:%S')
  24. end_time=now_time.strftime('%Y-%m-%d %H:%M:%S')
  25. #数据库配置
  26. host='rm-bp10j10qy42bzy0q77o.mysql.rds.aliyuncs.com'
  27. port=3306
  28. db='qx_cas'
  29. user='qx_read'
  30. password='Qx@123456'
  31. #读取结果库数据......................................................
  32. param='sn,time_st,time_end,status,delta_time,soc_st,soc_end,volt_st,volt_end,diffvolt_st,diffvolt_end, \
  33. temp_max,temp_min,temp_incr,temp_mean,temp_st_mean,temp_end_mean,difftem_max,meancrnt,max_meancrnt, \
  34. sts_flg,full_chrg_flg,ovchrg_flg,ovchrg_prop,gps_lon,gps_lat,standtime_f,standtime_b,city,airtemp_st,airtemp_end'
  35. tablename='algo_charge_info'
  36. mysql = pymysql.connect (host=host, user=user, password=password, port=port, database=db)
  37. cursor = mysql.cursor()
  38. sql = "select %s from %s where time_end='0000-00-00 00:00:00'" %(param,tablename)
  39. cursor.execute(sql)
  40. res = cursor.fetchall()
  41. df_diag_ram= pd.DataFrame(res,columns=param.split(','))
  42. db_res_engine = create_engine(
  43. "mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8".format(
  44. user, parse.quote_plus(password), host, port, db
  45. ))
  46. mylog=log.Mylog('log_info_charge.txt','error')
  47. mylog.logcfg()
  48. for sn in SNnums:
  49. try:
  50. #读取原始数据库数据........................................................................................................................................................
  51. dbManager = DBManager.DBManager()
  52. df_data = dbManager.get_data(sn=sn, start_time=start_time, end_time=end_time, data_groups=['bms','gps'])
  53. df_bms = df_data['bms']
  54. df_gps = df_data['gps']
  55. #读取城市天气数据........................................................................................................................................................
  56. gpscity=pd.read_csv('gps.csv')
  57. #调用主函数................................................................................................................................................................
  58. if not df_bms.empty: #BMS数据非空
  59. df_merge=pd.merge(df_bms,df_gps,how='outer',sort=True)
  60. df_merge['sn']=sn
  61. df_diag_ram_sn=pd.Series()
  62. if not df_diag_ram.empty: #结果库非空
  63. df_diag_ram_sn=df_diag_ram[df_diag_ram['sn']==sn]
  64. if not df_diag_ram_sn.empty: #该sn相关结果非空
  65. df_diag_ram_sn.reset_index(inplace=True,drop=True)
  66. df_diag_new,df_diag_change=pro_output(df_merge,sn,gpscity,df_diag_ram_sn)
  67. if not df_diag_change.empty: #需变更的结果非空
  68. cursor.execute("DELETE FROM algo_charge_info WHERE time_end = '0000-00-00 00:00:00' and sn='{}'".format(sn))
  69. mysql.commit()
  70. df_diag_change.to_sql("algo_charge_info",con=db_res_engine, if_exists="append",index=False)
  71. #新增结果存入结果库.....................................................................
  72. if not df_diag_new.empty: #需新增的结果非空
  73. df_diag_new.to_sql("algo_charge_info",con=db_res_engine, if_exists="append",index=False)
  74. end=time.time()
  75. print(end-start)
  76. except Exception as e:
  77. print(repr(e))
  78. mylog.logopt(e)
  79. cursor.close()
  80. mysql.close()
  81. #...............................................主函数起定时作用.......................................................................................................................
  82. if __name__ == "__main__":
  83. #excelpath=r'D:\Platform\platform_python\data_analyze_platform\USER\spf\01qixiang\sn-20210903.xlsx'
  84. excelpath='sn-20210903.xlsx'
  85. dataSOH = pd.read_excel('sn-20210903.xlsx',sheet_name='sn-20210903')
  86. SNnums = list(dataSOH['sn'])
  87. mylog=log.Mylog('log_info_charge.txt','error')
  88. mylog.logcfg()
  89. diag_cal()
  90. #定时任务.......................................................................................................................................................................
  91. scheduler = BlockingScheduler()
  92. scheduler.add_job(diag_cal, 'interval', hours=24)
  93. try:
  94. scheduler.start()
  95. except Exception as e:
  96. scheduler.shutdown()
  97. print(repr(e))
  98. mylog.logopt(e)