123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- import sys
- import numpy as np
- import pandas as pd
- import string
- import os
- from pandas import Series
- from matplotlib import pyplot as plt
- from pandas.core.frame import DataFrame
- from pandas.core.indexes.base import Index
- from LIB.BACKEND import DBManager
- import datetime
- import time
- import string
- import re
- import math
- from sqlalchemy import create_engine
- from sqlalchemy.orm import sessionmaker
- from urllib import parse
- import pymysql
- class BMSReportError:
- def __init__(self):
- pass
- def main(sn,bms_info,df_Diag_Ram_in,FactoryType,errorcode_map):
- newCode_total=[]
- if len(df_Diag_Ram_in):
- df_Diag_Ram_in['code']=df_Diag_Ram_in['code'].apply(str)
- df_Diag_Ram_BMS=df_Diag_Ram_in[df_Diag_Ram_in['code'].str.contains('B')].copy()
- df_Diag_Ram_Cloud=df_Diag_Ram_in[df_Diag_Ram_in['code'].str.contains('C')].copy()
- else:
- df_Diag_Ram_BMS=DataFrame(columns=['start_time', 'end_time', 'product_id', 'code', 'level', 'info','advice'])
- df_Diag_Ram_Cloud=DataFrame(columns=['start_time', 'end_time', 'product_id', 'code', 'level', 'info','advice'])
- if len(bms_info):
- df_bms=bms_info[['时间戳','故障等级','故障代码']]
- newCode=[]
- for i in range (0,len(df_bms)):
- #拆解故障码,PK专用
- if FactoryType ==1:
- code=df_bms.loc[i,'故障代码']
- newCode=[]
- if not pd.isnull(code):
- if code>2:
- num=math.log(code)/math.log(2)
- power=int(num)
- nCode=int(math.pow(2,power))
- newCode.append(nCode)
- code=code-nCode
- while(code>0):
- num=float(math.log(code)/math.log(2))
- power=int(num)
- nCode=int(math.pow(2,power))
- newCode.append(nCode)
- code=code-nCode
- elif code>0:
- newCode.append(code)
- else:
- newCode=[]
- else:
- newCode=[]
- else:
- newCode=df_bms.loc[i,'故障代码']
- if not pd.isnull(newCode) and newCode!=0:
- newCode=[newCode]
- else:
- newCode=[]
-
- # 数据库配置
- if len(newCode):
- for j in range(0,len(newCode)):
- # host='rm-bp10j10qy42bzy0q77o.mysql.rds.aliyuncs.com'
- # port=3306
- # database='algo_dict'
- # user='qx_algo_readonly'
- # password='qx@123456'
- # db_engine = create_engine("mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8".format(user, password, host, port, database))
- # DbSession = sessionmaker(bind=db_engine)
- # errorcode_map = pd.read_sql("select * from faultcode_map", db_engine)
- # if 'K50' in sn:
- # FactoryType=1
- # elif 'MGMCL' in sn or 'UD' in sn:
- # FactoryType=2
- # else:
- # FactoryType=3
-
-
- code = newCode[j] # 终端故障码
- platform_code = errorcode_map[(errorcode_map['protocol']==FactoryType)&(errorcode_map['end_errorcode']==str(code))]['platform_errorcode']
- # db_engine.dispose()
- if len(platform_code) == 0:
- pass
- else:
- newCode_total.append(platform_code.values[0])
- newCode[j]=platform_code.values[0]
- if not platform_code.values[0] in df_Diag_Ram_BMS['code'].values.tolist():
- df_Diag_Ram_BMS.loc[len(df_Diag_Ram_BMS)]=[df_bms.loc[i,'时间戳'],'0000-00-00 00:00:00',sn,platform_code.values[0],df_bms.loc[i,'故障等级'],'','']
- else:
- pass
- if len(df_Diag_Ram_BMS):
- df_Diag_Ram_BMS=df_Diag_Ram_BMS.reset_index(drop=True)
- for k in range(0,len(df_Diag_Ram_BMS)):
- newCode_total=list(set(newCode_total))
- if not df_Diag_Ram_BMS.loc[k,'code'] in newCode_total:
- end_time=datetime.datetime.now()
- end_time=end_time.strftime('%Y-%m-%d %H:%M:%S')
- df_Diag_Ram_BMS.loc[k,'end_time']=end_time
- else:
- pass
- df_Diag_Ram=df_Diag_Ram_BMS.append(df_Diag_Ram_Cloud)
- df_Diag_Ram=df_Diag_Ram.reset_index(drop=True)
- return df_Diag_Ram
|