|
|
|
|
|
|
|
|
expireDate, |
|
|
expireDate, |
|
|
expireDate2, |
|
|
expireDate2, |
|
|
getFormatDate, |
|
|
getFormatDate, |
|
|
msg |
|
|
|
|
|
|
|
|
msg, |
|
|
|
|
|
navTo |
|
|
} from "@/utils/utils"; |
|
|
} from "@/utils/utils"; |
|
|
import { |
|
|
import { |
|
|
onLoad |
|
|
onLoad |
|
|
|
|
|
|
|
|
IntegerToHexString, |
|
|
IntegerToHexString, |
|
|
} from "@/utils/util/fileData.js"; |
|
|
} from "@/utils/util/fileData.js"; |
|
|
import { |
|
|
import { |
|
|
issueApply,issueCallback,orderDetailQuery,errorLogAdd |
|
|
|
|
|
|
|
|
issueApply,issueCallback,orderDetailQuery,errorLogAdd,cardObuQuery,cardObuQueryinLog,obuFileDataDecrypt |
|
|
} from "@/utils/network/api"; |
|
|
} from "@/utils/network/api"; |
|
|
import { |
|
|
import { |
|
|
agentId |
|
|
agentId |
|
|
|
|
|
|
|
|
const bluetoothUtil = require("../../../static/etcUtil/index.js"); |
|
|
const bluetoothUtil = require("../../../static/etcUtil/index.js"); |
|
|
import activeSuccess from "./components/popup-device-active-success"; |
|
|
import activeSuccess from "./components/popup-device-active-success"; |
|
|
const datas = require("../../../static/etcUtil/datas.js"); |
|
|
const datas = require("../../../static/etcUtil/datas.js"); |
|
|
|
|
|
import { |
|
|
|
|
|
getVehicleType |
|
|
|
|
|
} from "@/subpackage/after-sale/js/vehicleType.js" |
|
|
import { |
|
|
import { |
|
|
getVehiclePlateColor |
|
|
getVehiclePlateColor |
|
|
} from "@/datas/vehiclePlateColor"; |
|
|
} from "@/datas/vehiclePlateColor"; |
|
|
import { |
|
|
import { |
|
|
searchVehicleInfoQuery |
|
|
searchVehicleInfoQuery |
|
|
} from "@/subpackage/after-sale/js/publicRequest"; |
|
|
} from "@/subpackage/after-sale/js/publicRequest"; |
|
|
|
|
|
import { |
|
|
|
|
|
decryptCardVehicleInformation |
|
|
|
|
|
} from "@/datas/publicRequest"; |
|
|
import { |
|
|
import { |
|
|
channelId |
|
|
channelId |
|
|
} from "@/utils/network/difference"; |
|
|
} from "@/utils/network/difference"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const card = reactive({ |
|
|
const card = reactive({ |
|
|
cardId: "", |
|
|
cardId: "", |
|
|
netId: "", |
|
|
|
|
|
cardType: "", |
|
|
|
|
|
|
|
|
cardNo: "", |
|
|
startTime: "", |
|
|
startTime: "", |
|
|
endTime: "", |
|
|
endTime: "", |
|
|
userName: "", |
|
|
userName: "", |
|
|
|
|
|
userNameStr:"", |
|
|
idNum: "", |
|
|
idNum: "", |
|
|
|
|
|
idNumStr:"", |
|
|
vehiclePlate: "", |
|
|
vehiclePlate: "", |
|
|
vehiclePlateColor: "", |
|
|
vehiclePlateColor: "", |
|
|
color: "", |
|
|
color: "", |
|
|
|
|
|
colorStr:"", |
|
|
version: "", |
|
|
version: "", |
|
|
type: "", |
|
|
type: "", |
|
|
|
|
|
typeStr:"", |
|
|
favourable: "", |
|
|
favourable: "", |
|
|
|
|
|
favourableStr:"", |
|
|
money: "", |
|
|
money: "", |
|
|
v_userType: "", |
|
|
|
|
|
|
|
|
v_userType: "" |
|
|
}); |
|
|
}); |
|
|
const obu = reactive({ |
|
|
const obu = reactive({ |
|
|
obuId: "", |
|
|
obuId: "", |
|
|
|
|
|
num: "", |
|
|
startTime: "", |
|
|
startTime: "", |
|
|
endTime: "", |
|
|
endTime: "", |
|
|
version: "", |
|
|
version: "", |
|
|
|
|
|
|
|
|
axleDistance: "", |
|
|
axleDistance: "", |
|
|
engineNum: "", |
|
|
engineNum: "", |
|
|
type: "", |
|
|
type: "", |
|
|
|
|
|
typeStr:"", |
|
|
userType: "", |
|
|
userType: "", |
|
|
contractNo: "", |
|
|
|
|
|
|
|
|
userTypeStr:"", |
|
|
vehiclePlate: "", |
|
|
vehiclePlate: "", |
|
|
vehiclePlateColor: "", |
|
|
vehiclePlateColor: "", |
|
|
|
|
|
vehiclePlateColorStr:"", |
|
|
vin: "", |
|
|
vin: "", |
|
|
wheelCount: 0, |
|
|
|
|
|
isJH: "" |
|
|
|
|
|
|
|
|
wheelCount: "", |
|
|
|
|
|
isJH: "", |
|
|
|
|
|
isJHStr: "", |
|
|
|
|
|
outsideDimensions: "", |
|
|
|
|
|
loadStatus:"" |
|
|
}); |
|
|
}); |
|
|
let cmdRandNum = ''; |
|
|
let cmdRandNum = ''; |
|
|
let orderInfo = {}; |
|
|
let orderInfo = {}; |
|
|
|
|
|
|
|
|
approvedCount: 0, //核载人数 |
|
|
approvedCount: 0, //核载人数 |
|
|
cardId: "", //卡号 |
|
|
cardId: "", //卡号 |
|
|
obuId: "", //obu号 |
|
|
obuId: "", //obu号 |
|
|
obuId: "", //obu号 |
|
|
|
|
|
packageNum: "", //套餐编号 |
|
|
packageNum: "", //套餐编号 |
|
|
axleCount: 0, //轴数 |
|
|
axleCount: 0, //轴数 |
|
|
axleDistance: "", //轴距 |
|
|
axleDistance: "", //轴距 |
|
|
|
|
|
|
|
|
}) |
|
|
}) |
|
|
},2000) |
|
|
},2000) |
|
|
setTimeout(() => { |
|
|
setTimeout(() => { |
|
|
uni.navigateTo({ |
|
|
|
|
|
url: "/subpackage/after-sale/deviceInfo/deviceInfo", |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
getCardIdCommit() |
|
|
},5000) |
|
|
},5000) |
|
|
} else { |
|
|
} else { |
|
|
console.log("datas.stepNo", datas.stepNo) |
|
|
console.log("datas.stepNo", datas.stepNo) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}); |
|
|
}); |
|
|
}; |
|
|
}; |
|
|
|
|
|
/** |
|
|
|
|
|
* 获取卡号 |
|
|
|
|
|
*/ |
|
|
|
|
|
const getCardIdCommit = () => { |
|
|
|
|
|
//执行0015文件 |
|
|
|
|
|
tools.showLoadingAlert("执行指令"); |
|
|
|
|
|
let cmdArr = [cmd.HOME_DIRECTORY, cmd.APPLICATION_DIRECTORY, cmd.CMD_READBINARY, cmd.CMD_GETBALANCE]; |
|
|
|
|
|
console.log(cmdArr); |
|
|
|
|
|
console.log(bluetoothUtil); |
|
|
|
|
|
bluetoothUtil.transCmd(cmdArr, '10', function(res) { //10:写卡 20:写OBU |
|
|
|
|
|
console.log("5201",res) |
|
|
|
|
|
let str = res[2].substring(res[2].length - 4, res[2].length); //判断是否为9000 |
|
|
|
|
|
let str3 = res[3].substring(res[3].length - 4, res[3].length); //判断是否为9000 |
|
|
|
|
|
if (str == "9000" || str3 == "9000") { |
|
|
|
|
|
if (res[2].length > 86 || res[3] >= 12) { |
|
|
|
|
|
console.log("res[2]", res[2].substring(84, 86), getVehiclePlateColor(parseInt(res[2] |
|
|
|
|
|
.substring(82, 84), 16)), res[2].substring(18, 19)) |
|
|
|
|
|
card.cardNo = res[2].substring(20, 40); |
|
|
|
|
|
card.startTime = res[2].substring(40, 48); |
|
|
|
|
|
card.endTime = res[2].substring(48, 56); |
|
|
|
|
|
card.version = res[2].substring(18, 20); |
|
|
|
|
|
card.money = res[3].substring(0, 8); |
|
|
|
|
|
card.v_userType = parseInt(res[2].substring(80, 82), 16); |
|
|
|
|
|
console.log("card.v_userType", card.v_userType) |
|
|
|
|
|
decryptCardVehicleInformation(res[2].substring(56, 80), function (res) { |
|
|
|
|
|
card.vehiclePlate =res; |
|
|
|
|
|
}); |
|
|
|
|
|
console.log("res[2].substring(18, 19)",res[2].substring(18, 20)) |
|
|
|
|
|
if (res[2].substring(18, 19) >= 4) { |
|
|
|
|
|
//4x卡 |
|
|
|
|
|
card.type = parseInt(res[2].substring(84, 86), 16); |
|
|
|
|
|
card.typeStr = getVehicleType(parseInt(res[2].substring(84, 86), 16)); |
|
|
|
|
|
card.color = parseInt(res[2].substring(82, 84), 16) |
|
|
|
|
|
card.colorStr = getVehiclePlateColor(parseInt(res[2].substring(82, 84), 16)) |
|
|
|
|
|
} else { |
|
|
|
|
|
//2x卡--获取车牌颜色 |
|
|
|
|
|
card.type = "--"; |
|
|
|
|
|
card.color =parseInt(res[2].substring(82, 84), 16) |
|
|
|
|
|
card.colorStr = getVehiclePlateColor(parseInt(res[2].substring(82, 84), 16)) |
|
|
|
|
|
card.typeStr = getVehicleType(parseInt(res[2].substring(84, 86), 16)); |
|
|
|
|
|
} |
|
|
|
|
|
state.vehicleId = card.vehiclePlate + "_" + parseInt(res[2].substring(82, 84), 16) |
|
|
|
|
|
// 读卡信息 |
|
|
|
|
|
//执行0016文件 |
|
|
|
|
|
let arr = [cmd.HOME_DIRECTORY, cmd.PERSONAL_INFORMATION] |
|
|
|
|
|
bluetoothUtil.transCmd(arr, '10', function(res) { |
|
|
|
|
|
let str2 = res[1].substring(res[1].length - 4, res[1].length); |
|
|
|
|
|
if (str2 == "9000") { |
|
|
|
|
|
if (res[1].length > 108) { |
|
|
|
|
|
console.log("res====",res) |
|
|
|
|
|
decryptCardVehicleInformation(res[1].substring(4, 44), function (res) { |
|
|
|
|
|
card.userName = res; //姓名 |
|
|
|
|
|
card.userNameStr = card.userName[0] + '*'.repeat(card.userName.length - 1) |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
decryptCardVehicleInformation(res[1].substring(44, 108), function (res) { |
|
|
|
|
|
card.idNum = res; //身份证号码 |
|
|
|
|
|
card.idNumStr=res.replace(/^\d{14}/,'**************') |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
//获取是否有优惠 |
|
|
|
|
|
let cmdArr3 = [cmd.HOME_DIRECTORY, cmd.APPLICATION_DIRECTORY, cmd |
|
|
|
|
|
.CMD_00B08E0000 |
|
|
|
|
|
]; |
|
|
|
|
|
bluetoothUtil.transCmd(cmdArr3, '10', function(res) { |
|
|
|
|
|
let str3 = res[2].substring(res[2].length - 4, res[2] |
|
|
|
|
|
.length); |
|
|
|
|
|
if (str3 == "9000") { |
|
|
|
|
|
if (res[2].length > 131) { |
|
|
|
|
|
let _str = parseInt(res[2].substring(129, 130), |
|
|
|
|
|
16); |
|
|
|
|
|
card.favourable=_str |
|
|
|
|
|
switch (_str) { |
|
|
|
|
|
case 0: |
|
|
|
|
|
card.favourableStr = "否"; |
|
|
|
|
|
break; |
|
|
|
|
|
case 1: |
|
|
|
|
|
card.favourableStr = "是"; |
|
|
|
|
|
break; |
|
|
|
|
|
default: |
|
|
|
|
|
card.favourableStr = '未知' + "_" + _str; |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
//回调读取OBU指令 |
|
|
|
|
|
getObuIdCommit() |
|
|
|
|
|
tools.hideLoadingAlert(); |
|
|
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
alertF("CMD_00B08E0000指令长度不符" + res[2]); |
|
|
|
|
|
} |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
alertF(cmd.PERSONAL_INFORMATION + "_" + str); |
|
|
|
|
|
}) |
|
|
|
|
|
} else { |
|
|
|
|
|
alertF("PERSONAL_INFORMATION指令长度不符" + res[1]); |
|
|
|
|
|
} |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
alertF("PERSONAL_INFORMATION指令长度不符" + res[1]); |
|
|
|
|
|
}) |
|
|
|
|
|
} else { |
|
|
|
|
|
alertF("CMD_READBINARY指令长度不符" + res[2]); |
|
|
|
|
|
} |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
alertF("CMD_READBINARY指令长度不符" + res[2]); |
|
|
|
|
|
|
|
|
|
|
|
}) |
|
|
|
|
|
}; |
|
|
|
|
|
/** |
|
|
|
|
|
* 获取OBU号 |
|
|
|
|
|
*/ |
|
|
|
|
|
const getObuIdCommit = () => { |
|
|
|
|
|
tools.showLoadingAlert("执行指令"); |
|
|
|
|
|
let cmdArr = [cmd.HOME_DIRECTORY, cmd.OBU_SYSTEM_FILE]; |
|
|
|
|
|
bluetoothUtil.transCmd(cmdArr, '20', function(res) { |
|
|
|
|
|
let str = res[1].substring(res[1].length - 4, res[1].length); |
|
|
|
|
|
if (str == "9000") { |
|
|
|
|
|
if (res[1].length > 52) { |
|
|
|
|
|
|
|
|
|
|
|
obu.num = res[1].substring(20, 36); |
|
|
|
|
|
obu.startTime = res[1].substring(36, 44); |
|
|
|
|
|
obu.endTime = res[1].substring(44, 52); |
|
|
|
|
|
obu.version = res[1].substring(18, 20); |
|
|
|
|
|
obu.isJH = res[1].substring(53, 54) |
|
|
|
|
|
obu.isJHStr = res[1].substring(53, 54) == "1" ? "是" : res[1].substring(53, 54) == "0" ? |
|
|
|
|
|
"否" : "其他:" + res[1].substring(53, 54); |
|
|
|
|
|
obu.loadStatus=res[1].substring(52, 54)=='01'?'正常':'已拆卸', |
|
|
|
|
|
|
|
|
|
|
|
console.log("开始执行车辆信息识读"); |
|
|
|
|
|
let rand = res[1].substring(18, 20) >= 50?'40':'00'; |
|
|
|
|
|
var arr = [cmd.OBU_DF01, '00B400000A000000000000000045'+ rand]; |
|
|
|
|
|
bluetoothUtil.transCmd(arr, '20', function(res) { |
|
|
|
|
|
console.log(res); |
|
|
|
|
|
console.log("开始执行车辆信息识读成功"); |
|
|
|
|
|
let str2 = res[1].substring(res[1].length - 4, res[1].length); |
|
|
|
|
|
let obuVersion = res[1].substring(18, 20); |
|
|
|
|
|
let keyIndex = obuVersion > 50 ? '40' : '00'; |
|
|
|
|
|
let reqType = '00'; |
|
|
|
|
|
let proviceCode = '5201'; |
|
|
|
|
|
if (str2 == "9000") { |
|
|
|
|
|
console.log("===========", obu.num, res[1].substring(0, res[1].length - 4)) |
|
|
|
|
|
decryptObuVehicleInfo(obu.num, res[1].substring(0, res[1].length - 4), |
|
|
|
|
|
obuVersion, rand, reqType, proviceCode, |
|
|
|
|
|
function(res) { |
|
|
|
|
|
|
|
|
|
|
|
obu.approvedCount = res.approvedCount; |
|
|
|
|
|
obu.axleCount = res.axleCount; |
|
|
|
|
|
obu.axleDistance = res.axleDistance; |
|
|
|
|
|
obu.engineNum = res.engineNumber.replace(/\u0000/g, ''); |
|
|
|
|
|
obu.type = res.collectionType; |
|
|
|
|
|
obu.typeStr = getVehicleType(res.collectionType); |
|
|
|
|
|
obu.userType = res.userType; |
|
|
|
|
|
if(res.userType == 0){ |
|
|
|
|
|
obu.userTypeStr = "普通车" ; |
|
|
|
|
|
}else if(res.userType == 6){ |
|
|
|
|
|
obu.userTypeStr = "公务车" ; |
|
|
|
|
|
} |
|
|
|
|
|
obu.vehiclePlate = res.vehiclePlate.replace(/\u0000/g, ''); |
|
|
|
|
|
//获取车牌颜色 |
|
|
|
|
|
obu.vehiclePlateColor = res.vehiclePlateColor; |
|
|
|
|
|
obu.vehiclePlateColorStr = getVehiclePlateColor(res.vehiclePlateColor); |
|
|
|
|
|
obu.vin = res.vin.replace(/\u0000/g, ''); |
|
|
|
|
|
obu.wheelCount = res.wheelsCount; |
|
|
|
|
|
obu.outsideDimensions = res.carLong + "x" + res.carWidth + "x" + res.carHeight |
|
|
|
|
|
getObuList(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tools.hideLoadingAlert(); |
|
|
|
|
|
}); |
|
|
|
|
|
//断开蓝牙 |
|
|
|
|
|
bluetoothUtil.disconnectDevice(); |
|
|
|
|
|
tools.showToastAlert("蓝牙已断开"); |
|
|
|
|
|
console.log('蓝牙已断开=========') |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
alertF("OBU_00B400000A+rand+OBU_4F00指令长度不符" + res[1]); |
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
alertF("OBU_SYSTEM_FILE指令长度不符" + res[1]); |
|
|
|
|
|
} |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
alertF("OBU_SYSTEM_FILE指令长度不符" + res[1]); |
|
|
|
|
|
}) |
|
|
|
|
|
}; |
|
|
|
|
|
const getObuList = () => { |
|
|
|
|
|
var data = { |
|
|
|
|
|
obuId: obu.num, |
|
|
|
|
|
cardId:card.cardNo, |
|
|
|
|
|
}; |
|
|
|
|
|
const options = { |
|
|
|
|
|
type: 2, |
|
|
|
|
|
data: data, |
|
|
|
|
|
method: "POST", |
|
|
|
|
|
showLoading: true, |
|
|
|
|
|
}; |
|
|
|
|
|
requestNew(cardObuQuery, options).then((res) => { |
|
|
|
|
|
tools.hideLoadingAlert(); |
|
|
|
|
|
let result = res; |
|
|
|
|
|
state.obuStatus = result.obuStatus?result.obuStatus:"" |
|
|
|
|
|
state.cardStatus = result.cardStatus |
|
|
|
|
|
if (result.cardType == 1 && result.debitType == 1) { |
|
|
|
|
|
state.cardTypeName = "预存卡" |
|
|
|
|
|
card['cardTypeName']=3 |
|
|
|
|
|
} else if (result.cardType == 2) { |
|
|
|
|
|
state.cardTypeName = "储值卡" |
|
|
|
|
|
card['cardTypeName']=2 |
|
|
|
|
|
} else { |
|
|
|
|
|
state.cardTypeName = "记账卡" |
|
|
|
|
|
card['cardTypeName']=1 |
|
|
|
|
|
} |
|
|
|
|
|
// 卡签提交得信息 |
|
|
|
|
|
card['cardStatus']=result.cardStatus |
|
|
|
|
|
obu['obuStatus']=result.obuStatus?result.obuStatus:"" |
|
|
|
|
|
cardObuMsgUp() |
|
|
|
|
|
}) |
|
|
|
|
|
} |
|
|
|
|
|
// 签信息提交日志记录 |
|
|
|
|
|
const cardObuMsgUp = () => { |
|
|
|
|
|
var data = { |
|
|
|
|
|
cardLogInfo: card, |
|
|
|
|
|
obuLogInfo:obu, |
|
|
|
|
|
type:"active" |
|
|
|
|
|
}; |
|
|
|
|
|
const options = { |
|
|
|
|
|
type: 2, |
|
|
|
|
|
data: data, |
|
|
|
|
|
method: "POST", |
|
|
|
|
|
showLoading: true, |
|
|
|
|
|
}; |
|
|
|
|
|
requestNew(cardObuQueryinLog, options).then((res) => { |
|
|
|
|
|
tools.hideLoadingAlert(); |
|
|
|
|
|
navTo(`/subpackage/after-sale/activation/result`) |
|
|
|
|
|
console.log("提交成功") |
|
|
|
|
|
}) |
|
|
|
|
|
} |
|
|
|
|
|
/** |
|
|
|
|
|
* 解密OBU车辆信息 |
|
|
|
|
|
*/ |
|
|
|
|
|
const decryptObuVehicleInfo = (num, data,obuVersion, keyIndex, reqType, proviceCode, func) => { |
|
|
|
|
|
const options = { |
|
|
|
|
|
type: 2, |
|
|
|
|
|
data: { |
|
|
|
|
|
contractSN: num, |
|
|
|
|
|
cipherData: data, |
|
|
|
|
|
reqType: reqType, |
|
|
|
|
|
keyIndex: keyIndex, |
|
|
|
|
|
proviceCode: proviceCode |
|
|
|
|
|
}, |
|
|
|
|
|
method: "POST", |
|
|
|
|
|
showLoading: true, |
|
|
|
|
|
}; |
|
|
|
|
|
requestNew(obuFileDataDecrypt, options).then((res) => { |
|
|
|
|
|
console.log("obuFileDataDecrypt",res) |
|
|
|
|
|
const data =res |
|
|
|
|
|
func(data) |
|
|
|
|
|
}); |
|
|
|
|
|
}; |
|
|
</script> |
|
|
</script> |
|
|
|
|
|
|
|
|
<style> |
|
|
<style> |