Commit 836043b1 authored by liyuanhong's avatar liyuanhong

完成M500 模拟器行驶数据的持久化

parent 309013ba
...@@ -9,9 +9,17 @@ import time ...@@ -9,9 +9,17 @@ import time
class ProtocolSimulaterDataService(): class ProtocolSimulaterDataService():
def __init__(self): def __init__(self,path="/data/protocolTools/carData/",fileName="default.json"):
self.data = {} self.data = {}
self.path = "/data/protocolTools/carData/" #保持车机数据文件地址 self.path = path #保存车机数据文件地址
self.fileName = fileName #保存车机数据文件
def setPath(self,data):
self.path = data
def setFileName(self,data):
self.fileName = data
def setData(self,data):
self.data = data
#################################################### ####################################################
# 生成一个默认数据模板 # 生成一个默认数据模板
...@@ -28,12 +36,55 @@ class ProtocolSimulaterDataService(): ...@@ -28,12 +36,55 @@ class ProtocolSimulaterDataService():
data["curDayTravel"]["todayTotalMilleage"] = 0 #今日行驶总里程 data["curDayTravel"]["todayTotalMilleage"] = 0 #今日行驶总里程
data["curDayTravel"]["todayTotalOil"] = 0 #今日行驶总油耗 data["curDayTravel"]["todayTotalOil"] = 0 #今日行驶总油耗
data["curDayTravel"]["todayTotalTime"] = 0 #今日行驶总时间 data["curDayTravel"]["todayTotalTime"] = 0 #今日行驶总时间
data["curDayTravel"]["theMilleage"] = 0 #本次行驶总里程
data["curDayTravel"]["theOil"] = 0 #本次行驶总油耗
data["curDayTravel"]["theTime"] = 0 #本次行驶总时间
data["travelData"] = {} #定义所有行驶数据 data["travelData"] = {} #定义所有行驶数据
data["travelData"]["totallMilleage"] = 0 #行驶总里程 data["travelData"]["totallMilleage"] = 0 #行驶总里程
data["travelData"]["totalOil"] = 0 #行驶总油耗 data["travelData"]["totalOil"] = 0 #行驶总油耗
data["travelData"]["totalTime"] = 0 #行驶总时间 data["travelData"]["totalTime"] = 0 #行驶总时间
return data return data
#设今日行驶总里程,同时写入文件
def setTodayTotalMilleage(self,data):
self.data["curDayTravel"]["todayTotalMilleage"] = data
self.writeToFile(self.path + self.fileName,self.data)
#设今日行驶总油耗,同时写入文件
def setTodayTodayTotalOil(self,data):
self.data["curDayTravel"]["todayTotalOil"] = data
self.writeToFile(self.path + self.fileName,self.data)
#设今日行驶总时间,同时写入文件
def setTodayTodayTotalTime(self,data):
self.data["curDayTravel"]["todayTotalTime"] = data
self.writeToFile(self.path + self.fileName,self.data)
#设本次行驶总里程,同时写入文件
def setTheMilleage(self,data):
self.data["curDayTravel"]["theMilleage"] = data
self.writeToFile(self.path + self.fileName,self.data)
#设本次行驶总油耗,同时写入文件
def setTheOil(self,data):
self.data["curDayTravel"]["theOil"] = data
self.writeToFile(self.path + self.fileName,self.data)
#设本次行驶总时间,同时写入文件
def setTheTime(self,data):
self.data["curDayTravel"]["theTime"] = data
self.writeToFile(self.path + self.fileName,self.data)
#设今日日期时间
def setDateTime2file(self,data):
self.data["time"]["dateTime"] = data
self.writeToFile(self.path + self.fileName,self.data)
#设今日日期
def setData2file(self,data):
self.data["time"]["date"] = data
self.writeToFile(self.path + self.fileName,self.data)
#设今日时间
def setTime2file(self,data):
self.data["time"]["time"] = data
self.writeToFile(self.path + self.fileName,self.data)
#################################################### ####################################################
# 将数据写入文件 # 将数据写入文件
#################################################### ####################################################
...@@ -56,10 +107,19 @@ class ProtocolSimulaterDataService(): ...@@ -56,10 +107,19 @@ class ProtocolSimulaterDataService():
timeM = time.strftime("%H:%M:%S", timeArray) timeM = time.strftime("%H:%M:%S", timeArray)
if dateM == conJson["time"]["date"]: if dateM == conJson["time"]["date"]:
pass pass
else: else: #如果不是当天日期,则将日期设置为当天
conJson["time"]["dateTime"] = dateTimeM conJson["time"]["dateTime"] = dateTimeM
conJson["time"]["date"] = dateM conJson["time"]["date"] = dateM
conJson["time"]["time"] = timeM conJson["time"]["time"] = timeM
data["curDayTravel"]["todayTotalMilleage"] = 0 # 今日行驶总里程
data["curDayTravel"]["todayTotalOil"] = 0 # 今日行驶总油耗
data["curDayTravel"]["todayTotalTime"] = 0 # 今日行驶总时间
self.setTodayTotalMilleage(0)
self.setTodayTodayTotalOil(0)
self.setTodayTodayTotalTime(0)
self.setDateTime2file(dateTimeM)
self.setData2file(dateM)
self.setTime2file(timeM)
self.data = conJson self.data = conJson
......
...@@ -5,6 +5,7 @@ M500车机模拟服务类 ...@@ -5,6 +5,7 @@ M500车机模拟服务类
''' '''
import binascii import binascii
import json import json
import os
import threading import threading
import time import time
import traceback import traceback
...@@ -15,12 +16,15 @@ from lib.protocol.report.GPSReport_protocol import GPSReport_protocol ...@@ -15,12 +16,15 @@ from lib.protocol.report.GPSReport_protocol import GPSReport_protocol
from lib.protocol.report.OBDReport_CAN_protocol import OBDReport_CAN_protocol from lib.protocol.report.OBDReport_CAN_protocol import OBDReport_CAN_protocol
from lib.protocol.report.response.Common_response import Common_response from lib.protocol.report.response.Common_response import Common_response
from lib.protocol.report.response.Update_response import Update_response from lib.protocol.report.response.Update_response import Update_response
from lib.socket.service.ProtocolSimulaterDataService import ProtocolSimulaterDataService
from lib.socket.service.websocket_service import Websocket_service from lib.socket.service.websocket_service import Websocket_service
class ProtocolSimulaterService(): class ProtocolSimulaterService():
def __init__(self): def __init__(self):
self.data = {} #用来接收模拟器传过来的参数 self.data = {} #用来接收模拟器传过来的参数
self.carData = {} #保存车辆行驶数据
self.carDataObj = None #管理车辆行驶数据对象
self.socket = None self.socket = None
self.sendDur = 5 #设置默认多久发一条消息 self.sendDur = 5 #设置默认多久发一条消息
self.serviceStatus = 0 #服务状态,0表示未启动,1表示启动 self.serviceStatus = 0 #服务状态,0表示未启动,1表示启动
...@@ -34,6 +38,8 @@ class ProtocolSimulaterService(): ...@@ -34,6 +38,8 @@ class ProtocolSimulaterService():
self.travelDirection = 0 #行驶方向,0表示正向行驶,1表示反向行驶 self.travelDirection = 0 #行驶方向,0表示正向行驶,1表示反向行驶
# 定义要发送的obd数据 # 定义要发送的obd数据
self.OBDdata = {"fireStatus":1,"ACCStatus":0,"engineSpeed":300,"speed":0,"meterMileage":6000,"totailMileage":600,"totalOilExpen":30,"totalRunTime":10} self.OBDdata = {"fireStatus":1,"ACCStatus":0,"engineSpeed":300,"speed":0,"meterMileage":6000,"totailMileage":600,"totalOilExpen":30,"totalRunTime":10}
# 定义初始的obd数据,与上面的OBD数据保持一致,主要用于汽车行驶过程中数据变化量的计算
self.OBDdataOri = {"fireStatus": 1, "ACCStatus": 0, "engineSpeed": 300, "speed": 0, "meterMileage": 6000,"totailMileage": 600, "totalOilExpen": 30, "totalRunTime": 10}
#设置套接字 #设置套接字
def setSocket(self,data): def setSocket(self,data):
...@@ -118,6 +124,15 @@ class ProtocolSimulaterService(): ...@@ -118,6 +124,15 @@ class ProtocolSimulaterService():
latitude = self.gpsLine[self.gpsLineIndex]["lat"] latitude = self.gpsLine[self.gpsLineIndex]["lat"]
longitude = self.gpsLine[self.gpsLineIndex]["lng"] longitude = self.gpsLine[self.gpsLineIndex]["lng"]
gpsMsg = self.genGPSMsg(latitude, longitude) gpsMsg = self.genGPSMsg(latitude, longitude)
self.carDataObj.setTodayTotalMilleage(self.carData["curDayTravel"]["todayTotalMilleage"] + self.OBDdata["totailMileage"] - self.OBDdataOri["totailMileage"])
self.carDataObj.setTheMilleage(self.carData["curDayTravel"]["theMilleage"] + self.OBDdata["totailMileage"] -self.OBDdataOri["totailMileage"])
self.OBDdataOri["totailMileage"] = self.OBDdata["totailMileage"]
self.carDataObj.setTodayTodayTotalOil(self.carData["curDayTravel"]["todayTotalOil"] + self.OBDdata["totalOilExpen"] - self.OBDdataOri["totalOilExpen"])
self.carDataObj.setTheOil(self.carData["curDayTravel"]["theOil"] + self.OBDdata["totalOilExpen"] - self.OBDdataOri["totalOilExpen"])
self.OBDdataOri["totalOilExpen"] = self.OBDdata["totalOilExpen"]
self.carDataObj.setTodayTodayTotalTime(self.carData["curDayTravel"]["todayTotalTime"] + self.OBDdata["totalRunTime"] - self.OBDdataOri["totalRunTime"])
self.carDataObj.setTheTime(self.carData["curDayTravel"]["theTime"] + self.OBDdata["totalRunTime"] - self.OBDdataOri["totalRunTime"])
self.OBDdataOri["totalRunTime"] = self.OBDdata["totalRunTime"]
if OBDMsg != "": if OBDMsg != "":
self.sendMsg(OBDMsg) self.sendMsg(OBDMsg)
self.sn = self.sn + 1 self.sn = self.sn + 1
...@@ -234,6 +249,41 @@ class ProtocolSimulaterService(): ...@@ -234,6 +249,41 @@ class ProtocolSimulaterService():
#点火,发送点火事件 #点火,发送点火事件
def fireOn(self): def fireOn(self):
if not os.path.exists("data/protocolTools/carData/" + self.carId + ".json"):
psdsObj = ProtocolSimulaterDataService()
data = psdsObj.genDataTemplate()
psdsObj.writeToFile("data/protocolTools/carData/" + self.carId + ".json",data)
#读取车机行驶数据
with open("data/protocolTools/carData/" + self.carId + ".json", "r", encoding="utf-8") as fi:
content = fi.read()
conJson = json.loads(content)
conJson["curDayTravel"]["theMilleage"] = 0 # 今日行驶总里程
conJson["curDayTravel"]["theOil"] = 0 # 今日行驶总油耗
conJson["curDayTravel"]["theTime"] = 0 # 今日行驶总时间
timeStamp = time.time()
timeArray = time.localtime(timeStamp)
dateTimeM = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
dateM = time.strftime("%Y-%m-%d", timeArray)
timeM = time.strftime("%H:%M:%S", timeArray)
dataFile = self.carId + ".json"
self.carDataObj = ProtocolSimulaterDataService("data/protocolTools/carData/", dataFile)
self.carDataObj.setData(conJson)
if dateM == conJson["time"]["date"]:
pass
else: #如果不是当天日期,则将日期设置为当天,并写入车辆数据文件
conJson["time"]["dateTime"] = dateTimeM
conJson["time"]["date"] = dateM
conJson["time"]["time"] = timeM
conJson["curDayTravel"]["todayTotalMilleage"] = 0 # 今日行驶总里程
conJson["curDayTravel"]["todayTotalOil"] = 0 # 今日行驶总油耗
conJson["curDayTravel"]["todayTotalTime"] = 0 # 今日行驶总时间
self.carDataObj.setTodayTotalMilleage(0)
self.carDataObj.setTodayTodayTotalOil(0)
self.carDataObj.setTodayTodayTotalTime(0)
self.carDataObj.setDateTime2file(dateTimeM)
self.carDataObj.setData2file(dateM)
self.carDataObj.setTime2file(timeM)
self.carData = conJson
fireOnEventObj = EventReport_protocol(DEV_ID=self.carId,WATER_CODE=self.sn) fireOnEventObj = EventReport_protocol(DEV_ID=self.carId,WATER_CODE=self.sn)
gpsData = self.genGPSData(self.gpsLine[0]["lat"], self.gpsLine[0]["lng"]) gpsData = self.genGPSData(self.gpsLine[0]["lat"], self.gpsLine[0]["lng"])
fireOnEventObj.setGPSPkg(gpsData) fireOnEventObj.setGPSPkg(gpsData)
......
...@@ -8,6 +8,8 @@ function carSimulaterTab(e){ ...@@ -8,6 +8,8 @@ function carSimulaterTab(e){
$(location).attr('href', "http://" + window.location.host + "/protocolTools/M_carSimulater_view/M_carSimulater_page"); $(location).attr('href', "http://" + window.location.host + "/protocolTools/M_carSimulater_view/M_carSimulater_page");
}else if(id == "setting_tab"){ }else if(id == "setting_tab"){
$(location).attr('href', "http://" + window.location.host + "/protocolTools/M_carSimulater_view/M_setting_page"); $(location).attr('href', "http://" + window.location.host + "/protocolTools/M_carSimulater_view/M_setting_page");
}else if(id == "carsimulaterData_tab"){
$(location).attr('href', "http://" + window.location.host + "/protocolTools/M_carSimulater_view/M_carSimulaterData_page");
}else{ }else{
alert(id) alert(id)
} }
......
{% extends "protocolTools/report/M_carSimulater_page.html" %}
{% block title %}GPS_protocol{% endblock %}
{% block content_1 %}
<div id="container3" style="width:100%;min-height:750px;float:left;_background:green;margin-top:10px;_border-top: 1px solid #eee;">
<div style="width:100%;padding-bottom:10px;border-bottom: 1px solid #eee;">
<h4>查询今日车机行驶数据</h4>
<span>
<label>输入车机号:</label><input style="width:200px;" id="carId" type="text" class="form-control" value="M202003060520">
<button id="searchCarData" type="button" class="btn btn-primary" id="saveSetting">查询</button>
</span>
</div>
<H3 style="border-bottom: 1px solid #eee;">返回信息:</H3>
<div style="width:100%;padding:5px;margin-top:10px;">
<textarea id="showFeedback" style="width:100%;padding:5px;" rows="15"></textarea>
</div>
</div>
<script>
//查询车机今日行驶数据
$("#searchCarData").click(function(){
var carId = $("#carId").val();
var data = {};
data["carId"] = carId;
var host = window.location.host;
$("#showFeedback").val("")
$.ajax({
url:"http://" + host + "/protocolTools/M_carSimulater_process/searchCarsimulaterData",
type:"post",
data:data,
dataType:"json",
success:function(data){
if(data.status == 200){
//window.location.reload()
msg = data.message
$("#showFeedback").val(msg)
}else{
$("#showFeedback").val(data.message)
alert(data.message);
}
}
});
});
</script>
{% endblock %}
\ No newline at end of file
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
<ul class="nav nav-pills" style="font-size:14px;"> <ul class="nav nav-pills" style="font-size:14px;">
<li role="presentation"><a id="setting_tab" {% if arg.path[2]=="M_setting_page" %} class="link-tab" {% endif %} onclick="carSimulaterTab(this)">设置</b></a></li> <li role="presentation"><a id="setting_tab" {% if arg.path[2]=="M_setting_page" %} class="link-tab" {% endif %} onclick="carSimulaterTab(this)">设置</b></a></li>
<li role="presentation"><a id="carsimulater_tab" {% if arg.path[2]=="M_carSimulater_page" %} class="link-tab" {% endif %} onclick="carSimulaterTab(this)">模拟器</b></a></li> <li role="presentation"><a id="carsimulater_tab" {% if arg.path[2]=="M_carSimulater_page" %} class="link-tab" {% endif %} onclick="carSimulaterTab(this)">模拟器</b></a></li>
<li role="presentation"><a id="carsimulaterData_tab" {% if arg.path[2]=="M_carSimulaterData_page" %} class="link-tab" {% endif %} onclick="carSimulaterTab(this)">查询车数据</b></a></li>
</ul> </ul>
{% endblock %} {% endblock %}
{% block content_1 %} {% block content_1 %}
...@@ -104,7 +105,16 @@ ...@@ -104,7 +105,16 @@
<h3>日志:</h3> <h3>日志:</h3>
<textarea id="showFeedback" style="width:100%;padding:5px;padding-bottom:60px;" rows="10"></textarea> <textarea id="showFeedback" style="width:100%;padding:5px;padding-bottom:60px;" rows="10"></textarea>
</div> </div>
<div style="width:100%;padding-bottom:10px;border-bottom: 1px solid #eee;">
<h4>查询今日车机行驶数据</h4>
<span>
<button id="searchCarData" type="button" class="btn btn-primary" id="saveSetting">查询</button>
</span>
</div>
<H3 style="border-bottom: 1px solid #eee;">返回信息:</H3>
<div style="width:100%;padding:5px;margin-top:10px;">
<textarea id="searchCardataShow" style="width:100%;padding:5px;" rows="8"></textarea>
</div>
</div> </div>
<script> <script>
//通过函数获取页面参数 //通过函数获取页面参数
...@@ -372,6 +382,30 @@ function download_sample(){ ...@@ -372,6 +382,30 @@ function download_sample(){
window.location.href = "http://" + host + "/protocolTools/M_carSimulater_process/sampleDowload" window.location.href = "http://" + host + "/protocolTools/M_carSimulater_process/sampleDowload"
} }
//查询车机今日行驶数据
$("#searchCarData").click(function(){
var carId = $("#carId").val();
var data = {};
data["carId"] = carId;
var host = window.location.host;
$.ajax({
url:"http://" + host + "/protocolTools/M_carSimulater_process/searchCarsimulaterData",
type:"post",
data:data,
dataType:"json",
success:function(data){
if(data.status == 200){
//window.location.reload()
msg = data.message
$("#searchCardataShow").val(msg)
}else{
$("#searchCardataShow").val(data.message)
alert(data.message);
}
}
});
});
</script> </script>
{% endblock %} {% endblock %}
</div> </div>
......
...@@ -62,7 +62,7 @@ ...@@ -62,7 +62,7 @@
var host = window.location.host; var host = window.location.host;
$.ajax({ $.ajax({
url:"http://" + host + "/protocolTools/setting_process/socketSetting_page", url:"http://" + host + "/protocolTools/setting_process/porcessSocketSetting",
type:"post", type:"post",
data:data, data:data,
dataType:"json", dataType:"json",
......
#coding:utf-8 #coding:utf-8
import os
from time import sleep from time import sleep
from flask import Blueprint ,Response,request,send_from_directory from flask import Blueprint ,Response,request,send_from_directory
...@@ -242,6 +243,10 @@ def reset(): ...@@ -242,6 +243,10 @@ def reset():
try: try:
for t in connects: for t in connects:
t["service"].stopTravel() t["service"].stopTravel()
try:
t["service"].fireOff()
except BaseException as e1:
pass
t["service"].stopWebsocketService() t["service"].stopWebsocketService()
t["service"].stopService() t["service"].stopService()
t["service"].closeSocket() t["service"].closeSocket()
...@@ -298,5 +303,37 @@ def fileUplad(): ...@@ -298,5 +303,37 @@ def fileUplad():
def sampleDowload(): def sampleDowload():
return send_from_directory(r"data/protocolTools/GPSLines",filename="1_sample.json",as_attachment=True) return send_from_directory(r"data/protocolTools/GPSLines",filename="1_sample.json",as_attachment=True)
##########################################
# 【接口类型】查询车机行驶数据
##########################################
@M_carSimulater_process.route("/searchCarsimulaterData",methods=['POST'])
def searchCarsimulaterData():
carId = request.form.get("carId")
data = {}
carFile = "data/protocolTools/carData/" + carId + ".json"
if not os.path.exists(carFile):
data["status"] = "200"
data["message"] = "该车机无行驶数据!"
return Response(json.dumps(data), mimetype='application/json')
else:
try:
with open(carFile, "r", encoding="utf-8") as fi:
content = fi.read()
conJson = json.loads(content)
data["status"] = "200"
# data["carData"] = {}
# data["carData"]["date"] = conJson["time"]["date"]
# data["carData"]["todayTotalMilleage"] = conJson["curDayTravel"]["todayTotalMilleage"]
# data["carData"]["todayTotalOil"] = conJson["curDayTravel"]["todayTotalOil"]
# data["carData"]["todayTotalTime"] = conJson["curDayTravel"]["todayTotalTime"]
data["message"] = "日期:" + conJson["time"]["date"] + "\n今日行驶总里程:" + str(conJson["curDayTravel"]["todayTotalMilleage"]) + "(米)" \
+ "\n今日行驶总油耗:" + str(conJson["curDayTravel"]["todayTotalOil"]) + "(ml)" + "\n今日行驶总时间:" + str(conJson["curDayTravel"]["todayTotalTime"]) + "(秒)" \
+ "\n------------------\n本次行驶里程:" + str(conJson["curDayTravel"]["theMilleage"]) + "(米)" \
+ "\n本次行驶油耗:" + str(conJson["curDayTravel"]["theOil"]) + "(ml)" + "\n本次行驶总时间:" + str(conJson["curDayTravel"]["theTime"]) + "(秒)"
except BaseException as e:
# 打印异常信息
traceback.print_exc()
data["status"] = "4003"
data["message"] = "Error: 查询车机数据失败失败!"
return Response(json.dumps(data), mimetype='application/json')
...@@ -40,4 +40,24 @@ def M_setting_page(): ...@@ -40,4 +40,24 @@ def M_setting_page():
conf_R.read("config/protocolTools/carSimulater.conf") conf_R.read("config/protocolTools/carSimulater.conf")
arg["socket"]["host"] = conf_R.get("socket", "host") arg["socket"]["host"] = conf_R.get("socket", "host")
arg["socket"]["port"] = conf_R.getint("socket", "port") arg["socket"]["port"] = conf_R.getint("socket", "port")
return render_template(path,arg=arg)
##########################################
# 【视图类型】访问模拟器查询车数据页面
##########################################
@M_carSimulater_view.route('/M_carSimulaterData_page')
def M_carSimulaterData_page():
#获取请求的路劲
url = request.url
reqPath = re.findall("http://(.*)$",url)[0]
reqPath = re.findall("/(.*)$", reqPath)[0]
arg = {}
path = "protocolTools/report/M_carSimulaterData_page.html"
arg["path"] = reqPath.split("/")
arg["socket"] = {}
# 读取config文件
conf_R = ConfigParser()
conf_R.read("config/protocolTools/carSimulater.conf")
arg["socket"]["host"] = conf_R.get("socket", "host")
arg["socket"]["port"] = conf_R.getint("socket", "port")
return render_template(path,arg=arg) return render_template(path,arg=arg)
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment