You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. import { decryptCardVehicleInformation } from "@/datas/publicRequest";
  2. const cmd = require("@/static/etcUtil/cmdConfig.js");
  3. const tools = require("@/static/etcUtil/tools.js");
  4. const datas = require("@/static/etcUtil/datas.js");
  5. const bluetoothUtil = require("@/static/etcUtil/index.js");
  6. /**
  7. * 获取卡号卡信息,连接蓝牙以后
  8. */
  9. export const getCardDetail = () => {
  10. return new Promise(async (resolve, reject) => {
  11. let card = {
  12. cardNo: '',
  13. startTime: '',
  14. endTime: '',
  15. version: '',
  16. money: '',
  17. v_userType: '',
  18. }
  19. //执行0015文件
  20. tools.showLoadingAlert("执行指令");
  21. let cmdArr = [cmd.HOME_DIRECTORY, cmd.APPLICATION_DIRECTORY, cmd.CMD_READBINARY, cmd.CMD_GETBALANCE];
  22. bluetoothUtil.transCmd(cmdArr, '10', async (res) => { //10:写卡 20:写OBU
  23. console.log("5201",res)
  24. let str = res[2].substring(res[2].length - 4, res[2].length); //判断是否为9000
  25. let str3 = res[3].substring(res[3].length - 4, res[3].length); //判断是否为9000
  26. if (str == "9000" || str3 == "9000") {
  27. if (res[2].length > 86 || res[3] >= 12) {
  28. console.log("res[2]", res[2].substring(84, 86), getVehiclePlateColor(parseInt(res[2].substring(82, 84), 16)), res[2].substring(18, 19))
  29. card.cardNo = res[2].substring(20, 40);
  30. card.startTime = res[2].substring(40, 48);
  31. card.endTime = res[2].substring(48, 56);
  32. card.version = res[2].substring(18, 20);
  33. card.money = res[3].substring(0, 8);
  34. card.v_userType = parseInt(res[2].substring(80, 82), 16);
  35. console.log("card.v_userType", card.v_userType)
  36. card.vehiclePlate = await decryptCardVehicleInformationPromise(res[2].substring(56, 80));
  37. console.log("res[2].substring(18, 19)",res[2].substring(18, 20))
  38. if (res[2].substring(18, 19) >= 4) {
  39. //4x卡
  40. card.type = parseInt(res[2].substring(84, 86), 16);
  41. card.typeStr = getVehicleType(parseInt(res[2].substring(84, 86), 16));
  42. card.color = parseInt(res[2].substring(82, 84), 16)
  43. card.colorStr = getVehiclePlateColor(parseInt(res[2].substring(82, 84), 16))
  44. } else {
  45. //2x卡--获取车牌颜色
  46. card.type = "--";
  47. card.color =parseInt(res[2].substring(82, 84), 16)
  48. card.colorStr = getVehiclePlateColor(parseInt(res[2].substring(82, 84), 16))
  49. card.typeStr = getVehicleType(parseInt(res[2].substring(84, 86), 16));
  50. }
  51. // 读卡信息
  52. // getCardList()
  53. //执行0016文件
  54. let arr = [cmd.HOME_DIRECTORY, cmd.PERSONAL_INFORMATION]
  55. bluetoothUtil.transCmd(arr, '10', async (res) => {
  56. let str2 = res[1].substring(res[1].length - 4, res[1].length);
  57. if (str2 == "9000") {
  58. if (res[1].length > 108) {
  59. console.log("res====",res)
  60. const userInfo = await decryptCardVehicleInformationPromise(res[1].substring(4, 44));
  61. card.userName = userInfo
  62. card.userNameStr = card.userName[0] + '*'.repeat(card.userName.length - 1)
  63. let idNum = await decryptCardVehicleInformationPromise(res[1].substring(44, 108));
  64. card.idNumStr = card.idNum.replace(/^\d{14}/,'**************')
  65. //获取是否有优惠
  66. let cmdArr3 = [cmd.HOME_DIRECTORY, cmd.APPLICATION_DIRECTORY, cmd.CMD_00B08E0000];
  67. bluetoothUtil.transCmd(cmdArr3, '10', function(res) {
  68. let str3 = res[2].substring(res[2].length - 4, res[2].length);
  69. tools.hideLoadingAlert();
  70. if (str3 == "9000") {
  71. if (res[2].length > 131) {
  72. let _str = parseInt(res[2].substring(129, 130), 16);
  73. card.favourable=_str
  74. switch (_str) {
  75. case 0:
  76. card.favourableStr = "否";
  77. break;
  78. case 1:
  79. card.favourableStr = "是";
  80. break;
  81. default:
  82. card.favourableStr = '未知' + "_" + _str;
  83. break;
  84. }
  85. //回调读取OBU指令
  86. // getObuId()
  87. tools.hideLoadingAlert();
  88. resolve(card)
  89. } else {
  90. reject(resFail(res[2]))
  91. alertF("CMD_00B08E0000指令长度不符" + res[2]);
  92. }
  93. return;
  94. }
  95. reject(resFail(cmd.PERSONAL_INFORMATION + "_" + str))
  96. alertF(cmd.PERSONAL_INFORMATION + "_" + str);
  97. })
  98. } else {
  99. reject(resFail(res[1]))
  100. alertF("PERSONAL_INFORMATION指令长度不符" + res[1]);
  101. }
  102. return;
  103. }
  104. reject(resFail(res[1]))
  105. alertF("PERSONAL_INFORMATION指令长度不符" + res[1]);
  106. }, (err) => {
  107. reject(err)
  108. })
  109. } else {
  110. reject(resFail(res[2]))
  111. alertF("CMD_READBINARY指令长度不符" + res[2]);
  112. }
  113. return;
  114. }
  115. reject(resFail(res[2]))
  116. alertF("CMD_READBINARY指令长度不符" + res[2]);
  117. }, (err) => {
  118. reject(resFail(err))
  119. tools.hideLoadingAlert();
  120. })
  121. })
  122. };
  123. function decryptCardVehicleInformationPromise (code) {
  124. return new Promise(resolve => {
  125. decryptCardVehicleInformation(res[1].substring(44, 108), (res) => {
  126. resolve(res)
  127. });
  128. })
  129. }
  130. const resFail = (str) => {
  131. return ({
  132. success: false,
  133. message: str
  134. })
  135. }