소스 검색

update 续驶里程写表方式

lmstack 3 년 전
부모
커밋
f01cec9666

+ 11 - 9
LIB/FRONTEND/DrivingRange/create_table1.py

@@ -9,14 +9,14 @@ from urllib import parse
 Base = declarative_base()
 
 
-class ConsistencyDeltaSoc(Base):
+class DrivingRangeSnFactorNewest(Base):
     __tablename__ = "driving_range_sn_factor_newest"
     __table_args__ = ({'comment': '续驶里程 最新sn factor'})  # 添加索引和表注释
 
-    id = Column(Integer, primary_key=True, autoincrement=True, comment="主键")
+    # id = Column(Integer, primary_key=True, autoincrement=True, comment="主键")
     add_time = Column(TIMESTAMP(True), server_default=func.now(), comment='记录创建时间') # 创建时间
     update_time = Column(TIMESTAMP(True), nullable=False, server_default=func.now(), onupdate=func.now(), comment='记录更新时间') # 更新时间
-    sn = Column(String(64), comment="sn")
+    sn = Column(String(64), comment="sn,主键", primary_key=True)
     date = Column(DateTime, comment="日期")
     a0 = Column(FLOAT, comment="系数")
     a1 = Column(FLOAT, comment="系数")
@@ -25,12 +25,14 @@ class ConsistencyDeltaSoc(Base):
     a4 = Column(FLOAT, comment="系数")
 
 
-    # def __init__(self, sn, current, time_stamp, pack_state, line_state):
-    #     self.sn = sn
-    #     self.current = current
-    #     self.time_stamp = time_stamp
-    #     self.pack_state = pack_state
-    #     self.line_state = line_state
+    def __init__(self, sn, date, a0, a1, a2, a3, a4):
+        self.sn = sn
+        self.date = date
+        self.a0 = a0
+        self.a1 = a1
+        self.a2 = a2
+        self.a3 = a3
+        self.a4 = a4
 
 # 执行该文件,创建表格到对应的数据库中
 if __name__ == "__main__":

+ 13 - 9
LIB/FRONTEND/DrivingRange/create_table2.py

@@ -9,14 +9,14 @@ from urllib import parse
 Base = declarative_base()
 
 
-class ConsistencyDeltaSoc(Base):
+class DrivingRangeResult(Base):
     __tablename__ = "driving_range_result"
     __table_args__ = ({'comment': '每5分钟计算一次续驶里程结果'})  # 添加索引和表注释
 
-    id = Column(Integer, primary_key=True, autoincrement=True, comment="主键")
+    # id = Column(Integer, primary_key=True, autoincrement=True, comment="主键")
     add_time = Column(TIMESTAMP(True), server_default=func.now(), comment='记录创建时间') # 创建时间
     update_time = Column(TIMESTAMP(True), nullable=False, server_default=func.now(), onupdate=func.now(), comment='记录更新时间') # 更新时间
-    sn = Column(String(64), comment="sn")
+    sn = Column(String(64), comment="sn, 主键", primary_key=True,)
     time = Column(DateTime, comment="时间")
     soc = Column(FLOAT, comment="soc")
     a0 = Column(FLOAT, comment="系数")
@@ -27,12 +27,16 @@ class ConsistencyDeltaSoc(Base):
     vehelecrng = Column(FLOAT, comment="续驶里程")
 
 
-    # def __init__(self, sn, current, time_stamp, pack_state, line_state):
-    #     self.sn = sn
-    #     self.current = current
-    #     self.time_stamp = time_stamp
-    #     self.pack_state = pack_state
-    #     self.line_state = line_state
+    def __init__(self, sn, time, soc, a0, a1, a2, a3, a4, vehelecrng):
+        self.sn = sn
+        self.time = time
+        self.soc = soc
+        self.a0 = a0
+        self.a1 = a1
+        self.a2 = a2
+        self.a3 = a3
+        self.a4 = a4
+        self.vehelecrng = vehelecrng
 
 # 执行该文件,创建表格到对应的数据库中
 if __name__ == "__main__":

+ 21 - 11
LIB/FRONTEND/DrivingRange/deploy_driving_range.py

@@ -12,6 +12,7 @@ from LIB.MIDDLE.DrivingRange import UpdtFct
 from urllib import parse
 import pymysql
 import dateutil.relativedelta
+from create_table2 import DrivingRangeResult
 
 dbManager = DBManager.DBManager()
 if __name__ == "__main__":
@@ -70,21 +71,30 @@ if __name__ == "__main__":
 
     logger.info("pid is {}".format(os.getpid()))
     
-    # SNdata_6060 = pd.read_excel('骑享资产梳理-20210621.xlsx', sheet_name='6060')
-    # SNnums_6060=SNdata_6060['SN号']
-    # # SNnums_6060 = ['PK504B00100004019','PK504B00100004029', 'PK504B00100004080', 'PK504B00100004264', 'PK504B10100004331']
-    # now_time=datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
-    # now_time = "2021-08-01 00:00:00" # 定时任务开启时,需要删除改行!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-    # now_time=datetime.datetime.strptime(now_time,'%Y-%m-%d %H:%M:%S')
-    # start_time=now_time-datetime.timedelta(days=1000)
-    # end_time=str(now_time)
-    # start_time=str(start_time)
     try:
         #调度周期:每天运行一次。
         #更新所有sn,连读多日的factor,如果start_date和end_date相隔一天,代表更新start_date的factor。
         logger.info(u"{},{} 任务运行开始\n".format(start_time,end_time), exc_info=True)
-        UpdtFct.updtVehElecRng(db_qx, db_qx, db_engine, range_table_name='driving_range_result', sn_newest_table_name='driving_range_sn_factor_newest', input_time=start_time)
+        df_res = UpdtFct.updtVehElecRng(db_qx, db_qx, sn_newest_table_name='driving_range_sn_factor_newest', input_time=start_time)
+        df_res = df_res.reset_index(drop=True)
+        session = DbSession()
+        for i in range(0, len(df_res)-1):
+            obj = session.query(DrivingRangeResult).filter_by(sn=df_res.loc[i,'sn']).first()
+            if not obj:
+                obj = DrivingRangeResult(df_res.loc[i,'sn'],df_res.loc[i,'time'],df_res.loc[i,'soc'],df_res.loc[i,'a0'],df_res.loc[i,'a1'],df_res.loc[i,'a2'],df_res.loc[i,'a3'],df_res.loc[i,'a4'],
+                                         df_res.loc[i,'vehelecrng'])               
+            else:
+                obj.time = df_res.loc[i,'time']
+                obj.soc = df_res.loc[i,'soc']
+                obj.a0 = df_res.loc[i,'a0']
+                obj.a1 = df_res.loc[i,'a1']
+                obj.a2 = df_res.loc[i,'a2']
+                obj.a3 = df_res.loc[i,'a3']
+                obj.a4 = df_res.loc[i,'a4']
+                obj.vehelecrng = df_res.loc[i,'vehelecrng']
+            session.add(obj)
+        session.commit()
+        session.close()
         logger.info(u"{},{} 续驶里程计算完成\n".format(start_time,end_time), exc_info=True)
     except:
         logger.error(traceback.format_exc)

+ 22 - 2
LIB/FRONTEND/DrivingRange/deploy_sn_factor.py

@@ -6,12 +6,14 @@ from LIB.BACKEND import DBManager, Log
 from LIB.MIDDLE import SignalMonitor
 from sqlalchemy import create_engine
 from sqlalchemy.orm import sessionmaker
+from sqlalchemy.dialects.mysql import insert
 import time, datetime
 import traceback
 from LIB.MIDDLE.DrivingRange import UpdtFct
 from urllib import parse
 import pymysql
 import dateutil.relativedelta
+from create_table1 import DrivingRangeSnFactorNewest
 
 dbManager = DBManager.DBManager()
 if __name__ == "__main__":
@@ -83,10 +85,28 @@ if __name__ == "__main__":
         #调度周期:每天运行一次。
         #更新所有sn,连读多日的factor,如果start_date和end_date相隔一天,代表更新start_date的factor。
         logger.info(u"{},{} 任务运行开始\n".format(start_time,end_time), exc_info=True)
-        UpdtFct.updtAllSnFct(start_time[0:10],end_time[0:10], db_engine, db_qx, db_qx, sn_table_name='driving_range_sn_factor')
+        # UpdtFct.updtAllSnFct(start_time[0:10],end_time[0:10], db_engine, db_qx, db_qx, sn_table_name='driving_range_sn_factor')
         logger.info(u"{},{} sn 参数更新完成\n".format(start_time,end_time), exc_info=True)
         logger.info(u"{},{} sn 最新参数更新开始\n".format(start_time,end_time), exc_info=True)
-        UpdtFct.updtNewestFctTb(db_qx, db_engine, sn_table_name='driving_range_sn_factor', sn_newest_table_name='driving_range_sn_factor_newest')
+        df_res = UpdtFct.updtNewestFctTb(now_time, db_qx, sn_table_name='driving_range_sn_factor')
+        df_res = df_res.reset_index(drop=True)
+        session = DbSession()
+        
+        for i in range(0, len(df_res)-1):
+            obj = session.query(DrivingRangeSnFactorNewest).filter_by(sn=df_res.loc[i,'sn']).first()
+            if not obj:
+                obj = DrivingRangeSnFactorNewest(df_res.loc[i,'sn'],df_res.loc[i,'date'],df_res.loc[i,'a0'],df_res.loc[i,'a1'],df_res.loc[i,'a2'],df_res.loc[i,'a3'],df_res.loc[i,'a4'])               
+            else:
+                obj.date = df_res.loc[i,'date']
+                obj.a0 = df_res.loc[i,'a0']
+                obj.a1 = df_res.loc[i,'a1']
+                obj.a2 = df_res.loc[i,'a2']
+                obj.a3 = df_res.loc[i,'a3']
+                obj.a4 = df_res.loc[i,'a4']
+            session.add(obj)
+        session.commit()
+        session.close()
+
         logger.info(u"{},{} sn 最新参数更新完成\n".format(start_time,end_time), exc_info=True)
     except:
         logger.error(traceback.format_exc)