#coding:utf-8
import os
import time

from flask import Blueprint ,Response,request,send_from_directory
from configparser import ConfigParser

import json
import traceback

from lib.protocol.m300.TravelAct_protocol_m300 import TravelAct_protocol_m300
from lib.socket.ClientSocket import ClientSocket
from lib.socket.service.M300SimulaterService import M300SimulaterService
from lib.util import fileUtil

M_m300Simulater_process = Blueprint('M_m300Simulater_process', __name__)

connects = {}                                  #用来保存连接的信息s
websocket = None                               #保存创建的websocket

##########################################
#   【接口类型】设置socket信息
##########################################
@M_m300Simulater_process.route("/porcessSocketSetting",methods=['POST'])
def porcessSocketSetting():
    host = request.form.get("host")
    port = request.form.get("port")

    data = {}
    if (host == None or port == None):
        data["status"] = "4003"
        data["message"] = "Info: 请检查是否传入了空数据!"
        return Response(json.dumps(data), mimetype='application/json')
    else:
        try:
            # d读取config文件
            conf_R = ConfigParser()
            conf_R.read("config/m300Tools/m300Simulater.conf")
            conf_W = conf_R
            conf_W["socket"]["host"] = host
            conf_W["socket"]["port"] = port
            with open("config/m300Tools/m300Simulater.conf", "w") as fi:
                conf_W.write(fi)
            data["status"] = "200"
            data["message"] = "Sucess: "
        except BaseException as e:
            # 打印异常信息
            traceback.print_exc()
            data["status"] = "4003"
            data["message"] = "Error: 处理失败!"
    return Response(json.dumps(data), mimetype='application/json')

##########################################
#   【接口类型】联网
##########################################
@M_m300Simulater_process.route("/porcessConnect",methods=['POST'])
def porcessConnect():
    params = request.get_data()
    params = json.loads(params.decode("utf-8"))
    sessionId = params["session"]["sessionId"]
    data = {}
    try:
        conf_R = ConfigParser()
        conf_R.read("config/m300Tools/m300Simulater.conf")
        if not sessionId in connects.keys():
            cliSocket = ClientSocket(conf_R.get("socket", "host"), conf_R.getint("socket", "port"))
            cliSocket.connect()
            connect = {}
            connects[sessionId] = connect
            socketName = "socket_" + str(len(connects) + 1)
            connect["name"] = socketName
            service = M300SimulaterService()
            global websocket
            if websocket == None:
                service.startWebsocketService()                # 如果没有创建websocket服务,则启动新的websocket服务
                websocket = service.getWebsocket()
            else:
                service.setWebsocket(websocket)                # 给新服务设置websocket服务对象
                service.addNewWebsocket()                      # 创建一个新的websocket连接
            service.setSocket(cliSocket)
            service.setTimeout(int(params["timeout"]))
            service.setCarId(params["carId"])
            service.setSendDur(int(params["durTime"]))
            service.setData(params)                                     #传入页面传过来的数据
            service.startWebsocketService()                             #启动websocket服务
            service.startReciveService()                                #接收消息的服务
            service.setGpsLine(params["gpsLine"])
            connect["service"] = connect
            connects[sessionId]["service"] = service
            timeArray = time.localtime(int(time.time()))
            curTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
            connects[sessionId]["time"] = curTime
            connects[sessionId]["carId"] = params["carId"]
            ip = request.remote_addr
            connects[sessionId]["ip"] = ip
            data["status"] = "200"
            data["message"] = "创建连接成功!"
        else:
            data["status"] = "4003"
            data["message"] = "已经创建了连接!"
    except BaseException as e:
        # 打印异常信息
        traceback.print_exc()
        data["status"] = "4003"
        data["message"] = "Error: 连接失败!"
    return Response(json.dumps(data), mimetype='application/json')

##########################################
#   【接口类型】车机登录
##########################################
@M_m300Simulater_process.route("/porcessLogin",methods=['POST'])
def porcessLogin():
    params = request.get_data()
    params = json.loads(params.decode("utf-8"))
    sessionId = params["session"]["sessionId"]
    data = {}
    try:
        connects[sessionId]["service"].carLogin()
        data["status"] = "200"
        data["message"] = "登录成功!"
    except BaseException as e:
        # 打印异常信息
        traceback.print_exc()
        data["status"] = "4003"
        data["message"] = "Error: 登录失败!"
    return Response(json.dumps(data), mimetype='application/json')

##########################################
#   【接口类型】车机点火
##########################################
@M_m300Simulater_process.route("/porcessFireOn",methods=['POST'])
def porcessFireOn():
    params = request.get_data()
    params = json.loads(params.decode("utf-8"))
    sessionId = params["session"]["sessionId"]
    data = {}
    try:
        connects[sessionId]["service"].fireOn()
        data["status"] = "200"
        data["message"] = "点火成功!"
    except BaseException as e:
        # 打印异常信息
        traceback.print_exc()
        data["status"] = "4003"
        data["message"] = "Error: 点火失败!"
    return Response(json.dumps(data), mimetype='application/json')

##########################################
#   【接口类型】车机开始行驶
##########################################
@M_m300Simulater_process.route("/porcessStartTravel",methods=['POST'])
def porcessStartTravel():
    params = request.get_data()
    params = json.loads(params.decode("utf-8"))
    sessionId = params["session"]["sessionId"]
    data = {}
    try:
        service = connects[sessionId]["service"]
        service.startService()
        service.startTravel()
        data["status"] = "200"
        data["message"] = "开始行驶成功!"
    except BaseException as e:
        # 打印异常信息
        traceback.print_exc()
        data["status"] = "4003"
        data["message"] = "Error: 开始行驶失败!"
    return Response(json.dumps(data), mimetype='application/json')

##########################################
#   【接口类型】车机停止行驶
##########################################
@M_m300Simulater_process.route("/porcessStopTravel",methods=['POST'])
def porcessStopTravel():
    params = request.get_data()
    params = json.loads(params.decode("utf-8"))
    sessionId = params["session"]["sessionId"]
    data = {}
    try:
        connects[sessionId]["service"].stopTravel()
        data["status"] = "200"
        data["message"] = "停止行驶成功!"
    except BaseException as e:
        # 打印异常信息
        traceback.print_exc()
        data["status"] = "4003"
        data["message"] = "Error: 停止行驶失败!"
    return Response(json.dumps(data), mimetype='application/json')

##########################################
#   【接口类型】车机熄火
##########################################
@M_m300Simulater_process.route("/porcessFireOff",methods=['POST'])
def porcessFireOff():
    params = request.get_data()
    params = json.loads(params.decode("utf-8"))
    sessionId = params["session"]["sessionId"]
    data = {}
    try:
        service = connects[sessionId]["service"]
        service.fireOff()
        service.stopTravel()
        service.stopService()
        data["status"] = "200"
        data["message"] = "熄火成功!"
    except BaseException as e:
        # 打印异常信息
        traceback.print_exc()
        data["status"] = "4003"
        data["message"] = "Error: 熄火失败!"
    return Response(json.dumps(data), mimetype='application/json')

##########################################
#   【接口类型】车机断网
##########################################
@M_m300Simulater_process.route("/porcessDisconnect",methods=['POST'])
def porcessDisconnect():
    params = request.get_data()
    params = json.loads(params.decode("utf-8"))
    sessionId = params["session"]["sessionId"]
    data = {}
    try:
        service = connects[sessionId]["service"]
        service.stopTravel()
        service.stopService()
        service.socket.close()
        connects.pop(sessionId)
        data["status"] = "200"
        data["message"] = "断开连接成功!"
    except BaseException as e:
        # 打印异常信息
        traceback.print_exc()
        data["status"] = "4003"
        data["message"] = "Error: 断开连接失败!"
    return Response(json.dumps(data), mimetype='application/json')

##########################################
#   【接口类型】车机复位
##########################################
@M_m300Simulater_process.route("/reset",methods=['POST'])
def reset():
    params = request.get_data()
    params = json.loads(params.decode("utf-8"))
    sessionId = params["session"]["sessionId"]
    data = {}
    global connects
    global websocket
    try:
        for key in connects:
            service = connects[key]["service"]
            service.stopTravel()
            try:
                pass
                # service.fireOff()
            except BaseException as e1:
                pass
            service.stopTravel()
            service.stopService()
            service.socket.close()
        websocket.close()
        websocket = None
        connects = {}
        data["status"] = "200"
        data["message"] = "复位成功!"
    except BaseException as e:
        # 打印异常信息
        traceback.print_exc()
        data["status"] = "4003"
        data["message"] = "Error: 复位失败!"
    return Response(json.dumps(data), mimetype='application/json')

##########################################
#   【接口类型】文件上传操作
##########################################
@M_m300Simulater_process.route("/fileUplad",methods=['POST'])
def fileUplad():
    # 获取前端传输的文件(对象)
    f = request.files.get('file')
    file_content = f.read()
    try:
        file_content = file_content.decode("utf-8").replace("\n","")
    except BaseException as e:
        pass
    try:
        file_content = file_content.decode("gbk").replace("\n","")
    except BaseException as e:
        pass
    maxPrefix = int(fileUtil.getMaxPrefixFilePre("data/m300Tools/GPSLines"))
    filenameOrg = f.filename
    filename = str(maxPrefix + 1) + "_" + filenameOrg
    fileData = {}
    fileData["filename"] = fileUtil.removeSuffix(filenameOrg)
    fileData["filenameOri"] = filename
    # 验证文件格式(简单设定几个格式)
    types = ['json','txt']
    data = {}
    if filename.split('.')[-1] in types:
        # 保存图片
        with open("data/m300Tools/GPSLines/" + filename,"w",encoding="utf-8") as fi:
            fi.write(file_content)
        # 返回给前端结果
        data["status"] = "200"
        data["message"] = "文件上传成功"
        data["file"] = fileData
    else:
        data["status"] = "4003"
        data["message"] = "文件上传失败"
    return Response(json.dumps(data), mimetype='application/json')


@M_m300Simulater_process.route("/sampleDowload")
def sampleDowload():
    return send_from_directory(r"data/m300Tools/GPSLines",filename="1_sample.json",as_attachment=True)

##########################################
#   【接口类型】查询车机行驶数据
##########################################
@M_m300Simulater_process.route("/searchCarsimulaterData",methods=['POST'])
def searchCarsimulaterData():
    carId = request.form.get("carId")
    data = {}
    carFile = "data/m300Tools/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["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')

##########################################
#   【接口类型】查询当前连接数,和连接对象
##########################################
@M_m300Simulater_process.route("/getConnects",methods=['POST'])
def getConnects():
    data = {}
    try:
        data["status"] = "200"
        data["userCounts"] = len(connects)
        data["result"] = str(connects)
        return Response(json.dumps(data), mimetype='application/json')
    except BaseException as e:
        # 打印异常信息
        traceback.print_exc()
        data["status"] = "4003"
        data["message"] = "Error: 获取在线人数失败失败!"
    return Response(json.dumps(data), mimetype='application/json')

#--------------------------------------  报警上报逻辑  --------------------------------------
##########################################
#   【接口类型】发送急加速事件
##########################################
@M_m300Simulater_process.route("/sendAccelerateEvent",methods=['POST'])
def sendAccelerateEvent():
    params = request.get_data()
    params = json.loads(params.decode("utf-8"))
    sessionId = params["session"]["sessionId"]
    data = {}
    if not sessionId in connects.keys():
        data["status"] = "4003"
        data["message"] = "Error: 未启动服务,不可发送急加速事件!"
        return Response(json.dumps(data), mimetype='application/json')

    service = connects[sessionId]["service"]
    travelStatus = service.getTravelStatus()                        #获取汽车行驶状态
    if travelStatus == 0 or travelStatus == 2:
        data["status"] = "4003"
        data["message"] = "Error: 汽车还未行驶,不可发送急加速事件!"
    elif travelStatus == 1:
        try:
            jdata = {"FUNID": "0007", "waterCode": "1", "DEV_ID": "M202004070000", "encryptionType": "0",
             "gps": {"dateInfo": "2020-06-05 11:28:33", "latitude": 40.22077, "longitude": 116.23128,
                     "positionStar": "2", "speed": "66.0", "direction": "55.3", "altitude": "11.0", "ACCStatus": "1",
                     "valtage": "36.0", "OBDSpeed": "66.4", "valid": 1, "tripMark": "0"}, "actType": "1",
             "accelerateTotalTimes": "2", "decelerateTotalTimes": "2", "sharpTurnTotalTimes": "2",
             "acceleration": "500", "speed": "60"}
            carData = service.getCarData()
            carData["event"]["threeRapid"]["totalRapidlyAccelerate"] = carData["event"]["threeRapid"]["totalRapidlyAccelerate"] + 1
            service.setCarData(carData)
            timeStamp = time.time() - 8 * 3600
            timeArray = time.localtime(timeStamp)
            curTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
            jdata["gps"]["dateInfo"] = curTime
            jdata["gps"]["latitude"] = service.getCurLatitude()
            jdata["gps"]["longitude"] = service.getCurLongtitude()
            jdata["gps"]["speed"] = service.getSpeed()
            jdata["gps"]["OBDSpeed"] = service.getSpeed()
            jdata["gps"]["direction"] = service.getDirAngle()
            jdata["accelerateTotalTimes"] = carData["event"]["threeRapid"]["totalRapidlyAccelerate"]
            jdata["decelerateTotalTimes"] = carData["event"]["threeRapid"]["totalSharpSlowdown"]
            jdata["sharpTurnTotalTimes"] = carData["event"]["threeRapid"]["totalSharpTurn"]
            jdata["DEV_ID"] = params["carId"]
            obj = TravelAct_protocol_m300(waterCode=int(jdata["waterCode"]), DEV_ID=jdata["DEV_ID"],encryptionType=int(jdata["encryptionType"]), \
                        actType=int(jdata["actType"]),accelerateTotalTimes=int(jdata["accelerateTotalTimes"]),decelerateTotalTimes=int(jdata["decelerateTotalTimes"]), \
                        sharpTurnTotalTimes=int(jdata["sharpTurnTotalTimes"]),acceleration=int(jdata["acceleration"]), speed=int(jdata["speed"]),gps=jdata["gps"])
            msg = obj.generateMsg()
            service.serviceSendMsg(msg)
            service.setSn(service.getSn() + 1)
            data["status"] = "200"
            data["message"] = "发送急加速事件成功!"
        except BaseException as e:
            # 打印异常信息
            traceback.print_exc()
            data["status"] = "4003"
            data["message"] = "Error: 发送急加速事件失败!"
    return Response(json.dumps(data), mimetype='application/json')

##########################################
#   【接口类型】发送急减速事件
##########################################
@M_m300Simulater_process.route("/sendDecelerateEvent",methods=['POST'])
def sendDecelerateEvent():
    params = request.get_data()
    params = json.loads(params.decode("utf-8"))
    sessionId = params["session"]["sessionId"]
    data = {}
    if not sessionId in connects.keys():
        data["status"] = "4003"
        data["message"] = "Error: 未启动服务,不可发送急减速事件!"
        return Response(json.dumps(data), mimetype='application/json')

    service = connects[sessionId]["service"]
    travelStatus = service.getTravelStatus()                        #获取汽车行驶状态
    if travelStatus == 0 or travelStatus == 2:
        data["status"] = "4003"
        data["message"] = "Error: 汽车还未行驶,不可发送急减速事件!"
    elif travelStatus == 1:
        try:
            jdata = {"FUNID": "0007", "waterCode": "1", "DEV_ID": "M202004070000", "encryptionType": "0",
             "gps": {"dateInfo": "2020-06-05 11:28:33", "latitude": 40.22077, "longitude": 116.23128,
                     "positionStar": "2", "speed": "66.0", "direction": "55.3", "altitude": "11.0", "ACCStatus": "1",
                     "valtage": "36.0", "OBDSpeed": "66.4", "valid": 1, "tripMark": "0"}, "actType": "2",
             "accelerateTotalTimes": "2", "decelerateTotalTimes": "2", "sharpTurnTotalTimes": "2",
             "acceleration": "500", "speed": "60"}
            carData = service.getCarData()
            carData["event"]["threeRapid"]["totalSharpSlowdown"] = carData["event"]["threeRapid"]["totalSharpSlowdown"] + 1
            service.setCarData(carData)
            timeStamp = time.time() - 8 * 3600
            timeArray = time.localtime(timeStamp)
            curTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
            jdata["gps"]["dateInfo"] = curTime
            jdata["gps"]["latitude"] = service.getCurLatitude()
            jdata["gps"]["longitude"] = service.getCurLongtitude()
            jdata["gps"]["speed"] = service.getSpeed()
            jdata["gps"]["OBDSpeed"] = service.getSpeed()
            jdata["gps"]["direction"] = service.getDirAngle()
            jdata["accelerateTotalTimes"] = carData["event"]["threeRapid"]["totalRapidlyAccelerate"]
            jdata["decelerateTotalTimes"] = carData["event"]["threeRapid"]["totalSharpSlowdown"]
            jdata["sharpTurnTotalTimes"] = carData["event"]["threeRapid"]["totalSharpTurn"]
            jdata["DEV_ID"] = params["carId"]
            obj = TravelAct_protocol_m300(waterCode=int(jdata["waterCode"]), DEV_ID=jdata["DEV_ID"],encryptionType=int(jdata["encryptionType"]), \
                        actType=int(jdata["actType"]),accelerateTotalTimes=int(jdata["accelerateTotalTimes"]),decelerateTotalTimes=int(jdata["decelerateTotalTimes"]), \
                        sharpTurnTotalTimes=int(jdata["sharpTurnTotalTimes"]),acceleration=int(jdata["acceleration"]), speed=int(jdata["speed"]),gps=jdata["gps"])
            msg = obj.generateMsg()
            service.serviceSendMsg(msg)
            service.setSn(service.getSn() + 1)
            data["status"] = "200"
            data["message"] = "发送急减速事件成功!"
        except BaseException as e:
            # 打印异常信息
            traceback.print_exc()
            data["status"] = "4003"
            data["message"] = "Error: 发送急减速事件失败!"
    return Response(json.dumps(data), mimetype='application/json')

##########################################
#   【接口类型】发送急转弯事件
##########################################
@M_m300Simulater_process.route("/sendSharpTurnEvent",methods=['POST'])
def sendSharpTurnEvent():
    params = request.get_data()
    params = json.loads(params.decode("utf-8"))
    sessionId = params["session"]["sessionId"]
    data = {}
    if not sessionId in connects.keys():
        data["status"] = "4003"
        data["message"] = "Error: 未启动服务,不可发送急转弯事件!"
        return Response(json.dumps(data), mimetype='application/json')

    service = connects[sessionId]["service"]
    travelStatus = service.getTravelStatus()                        #获取汽车行驶状态
    if travelStatus == 0 or travelStatus == 2:
        data["status"] = "4003"
        data["message"] = "Error: 汽车还未行驶,不可发送急转弯事件!"
    elif travelStatus == 1:
        try:
            jdata = {"FUNID": "0007", "waterCode": "1", "DEV_ID": "M202004070000", "encryptionType": "0",
             "gps": {"dateInfo": "2020-06-05 11:28:33", "latitude": 40.22077, "longitude": 116.23128,
                     "positionStar": "2", "speed": "66.0", "direction": "55.3", "altitude": "11.0", "ACCStatus": "1",
                     "valtage": "36.0", "OBDSpeed": "66.4", "valid": 1, "tripMark": "0"}, "actType": "3",
             "accelerateTotalTimes": "2", "decelerateTotalTimes": "2", "sharpTurnTotalTimes": "2",
             "acceleration": "500", "speed": "60"}
            carData = service.getCarData()
            carData["event"]["threeRapid"]["totalSharpSlowdown"] = carData["event"]["threeRapid"]["totalSharpSlowdown"] + 1
            service.setCarData(carData)
            timeStamp = time.time() - 8 * 3600
            timeArray = time.localtime(timeStamp)
            curTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
            jdata["gps"]["dateInfo"] = curTime
            jdata["gps"]["latitude"] = service.getCurLatitude()
            jdata["gps"]["longitude"] = service.getCurLongtitude()
            jdata["gps"]["speed"] = service.getSpeed()
            jdata["gps"]["OBDSpeed"] = service.getSpeed()
            jdata["gps"]["direction"] = service.getDirAngle()
            jdata["accelerateTotalTimes"] = carData["event"]["threeRapid"]["totalRapidlyAccelerate"]
            jdata["decelerateTotalTimes"] = carData["event"]["threeRapid"]["totalSharpSlowdown"]
            jdata["sharpTurnTotalTimes"] = carData["event"]["threeRapid"]["totalSharpTurn"]
            jdata["DEV_ID"] = params["carId"]
            obj = TravelAct_protocol_m300(waterCode=int(jdata["waterCode"]), DEV_ID=jdata["DEV_ID"],encryptionType=int(jdata["encryptionType"]), \
                        actType=int(jdata["actType"]),accelerateTotalTimes=int(jdata["accelerateTotalTimes"]),decelerateTotalTimes=int(jdata["decelerateTotalTimes"]), \
                        sharpTurnTotalTimes=int(jdata["sharpTurnTotalTimes"]),acceleration=int(jdata["acceleration"]), speed=int(jdata["speed"]),gps=jdata["gps"])
            msg = obj.generateMsg()
            service.serviceSendMsg(msg)
            service.setSn(service.getSn() + 1)
            data["status"] = "200"
            data["message"] = "发送急转弯事件成功!"
        except BaseException as e:
            # 打印异常信息
            traceback.print_exc()
            data["status"] = "4003"
            data["message"] = "Error: 发送急转弯事件失败!"
    return Response(json.dumps(data), mimetype='application/json')


#---------------------------------------  实时控制逻辑  ---------------------------------------
##########################################
#   【接口类型】改变车速
##########################################
@M_m300Simulater_process.route("/changeCarSpeed",methods=['POST'])
def changeCarSpeed():
    params = request.get_data()
    params = json.loads(params.decode("utf-8"))
    sessionId = params["session"]["sessionId"]
    data = {}
    if not sessionId in connects.keys():
        data["status"] = "4003"
        data["message"] = "Error: 未启动服务,不可改变车速!"
        return Response(json.dumps(data), mimetype='application/json')

    service = connects[sessionId]["service"]
    travelStatus = service.getTravelStatus()                        #获取汽车行驶状态
    if travelStatus == 0 or travelStatus == 2:
        data["status"] = "4003"
        data["message"] = "Error: 汽车还未行驶,不可改变车速!"
    elif travelStatus == 1:
        try:
            service.setCarSpeed(params["speed"])
            data["status"] = "200"
            data["message"] = "改变车速成功!"
        except BaseException as e:
            # 打印异常信息
            traceback.print_exc()
            data["status"] = "4003"
            data["message"] = "Error: 改变车速失败!"
    return Response(json.dumps(data), mimetype='application/json')

##########################################
#   【接口类型】改变油耗
##########################################
@M_m300Simulater_process.route("/changeOilExpend",methods=['POST'])
def changeOilExpend():
    params = request.get_data()
    params = json.loads(params.decode("utf-8"))
    sessionId = params["session"]["sessionId"]
    data = {}
    if not sessionId in connects.keys():
        data["status"] = "4003"
        data["message"] = "Error: 未启动服务,不可改变油耗!"
        return Response(json.dumps(data), mimetype='application/json')

    service = connects[sessionId]["service"]
    travelStatus = service.getTravelStatus()                        #获取汽车行驶状态
    if travelStatus == 0 or travelStatus == 2:
        data["status"] = "4003"
        data["message"] = "Error: 汽车还未行驶,不可改变油耗!"
    elif travelStatus == 1:
        try:
            service.setOilExpend(params["oilExpend"])
            data["status"] = "200"
            data["message"] = "改变油耗成功!"
        except BaseException as e:
            # 打印异常信息
            traceback.print_exc()
            data["status"] = "4003"
            data["message"] = "Error: 改变油耗失败!"
    return Response(json.dumps(data), mimetype='application/json')

##########################################
#   【接口类型】改变发送间隔
##########################################
@M_m300Simulater_process.route("/changeDurTime",methods=['POST'])
def changeDurTime():
    params = request.get_data()
    params = json.loads(params.decode("utf-8"))
    sessionId = params["session"]["sessionId"]
    data = {}
    if not sessionId in connects.keys():
        data["status"] = "4003"
        data["message"] = "Error: 未启动服务,不可改变发送间隔!"
        return Response(json.dumps(data), mimetype='application/json')

    service = connects[sessionId]["service"]
    travelStatus = service.getTravelStatus()                        #获取汽车行驶状态
    if travelStatus == 0 or travelStatus == 2:
        data["status"] = "4003"
        data["message"] = "Error: 汽车还未行驶,不可改变发送间隔!"
    elif travelStatus == 1:
        try:
            service.setSendDur(int(params["durTime"]))
            data["status"] = "200"
            data["message"] = "改变发送间隔成功!"
        except BaseException as e:
            # 打印异常信息
            traceback.print_exc()
            data["status"] = "4003"
            data["message"] = "Error: 改变发送间隔失败!"
    return Response(json.dumps(data), mimetype='application/json')