import { decryptCardVehicleInformation } from "@/datas/publicRequest"; const cmd = require("@/static/etcUtil/cmdConfig.js"); const tools = require("@/static/etcUtil/tools.js"); const datas = require("@/static/etcUtil/datas.js"); const bluetoothUtil = require("@/static/etcUtil/index.js"); /** * 获取卡号卡信息,连接蓝牙以后 */ export const getCardDetail = () => { return new Promise(async (resolve, reject) => { let card = { cardNo: '', startTime: '', endTime: '', version: '', money: '', v_userType: '', } //执行0015文件 tools.showLoadingAlert("执行指令"); let cmdArr = [cmd.HOME_DIRECTORY, cmd.APPLICATION_DIRECTORY, cmd.CMD_READBINARY, cmd.CMD_GETBALANCE]; bluetoothUtil.transCmd(cmdArr, '10', async (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) card.vehiclePlate = await decryptCardVehicleInformationPromise(res[2].substring(56, 80)); 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)); } // 读卡信息 // getCardList() //执行0016文件 let arr = [cmd.HOME_DIRECTORY, cmd.PERSONAL_INFORMATION] bluetoothUtil.transCmd(arr, '10', async (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) const userInfo = await decryptCardVehicleInformationPromise(res[1].substring(4, 44)); card.userName = userInfo card.userNameStr = card.userName[0] + '*'.repeat(card.userName.length - 1) let idNum = await decryptCardVehicleInformationPromise(res[1].substring(44, 108)); card.idNumStr = card.idNum.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); tools.hideLoadingAlert(); 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指令 // getObuId() tools.hideLoadingAlert(); resolve(card) } else { reject(resFail(res[2])) alertF("CMD_00B08E0000指令长度不符" + res[2]); } return; } reject(resFail(cmd.PERSONAL_INFORMATION + "_" + str)) alertF(cmd.PERSONAL_INFORMATION + "_" + str); }) } else { reject(resFail(res[1])) alertF("PERSONAL_INFORMATION指令长度不符" + res[1]); } return; } reject(resFail(res[1])) alertF("PERSONAL_INFORMATION指令长度不符" + res[1]); }, (err) => { reject(err) }) } else { reject(resFail(res[2])) alertF("CMD_READBINARY指令长度不符" + res[2]); } return; } reject(resFail(res[2])) alertF("CMD_READBINARY指令长度不符" + res[2]); }, (err) => { reject(resFail(err)) tools.hideLoadingAlert(); }) }) }; function decryptCardVehicleInformationPromise (code) { return new Promise(resolve => { decryptCardVehicleInformation(res[1].substring(44, 108), (res) => { resolve(res) }); }) } const resFail = (str) => { return ({ success: false, message: str }) }