From 64da36163573dd80524181c089967bbaa400c325 Mon Sep 17 00:00:00 2001 From: yangyakun Date: Thu, 20 Feb 2025 11:12:08 +0800 Subject: [PATCH] =?UTF-8?q?[6.11.0]=20[fea]=20[=E4=BA=8C=E7=BB=B4=E7=A0=81?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=20orderid=20tenantId=20=E5=90=84=E6=8B=86?= =?UTF-8?q?=E6=88=902=E4=BD=8D]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/mogo/och/biz/qrcode/QrParse.kt | 225 ++++++++++-------- .../com/mogo/och/biz/qrcode/ScannerManager.kt | 1 + .../com/mogo/och/biz/qrcode/QrUnitTest.kt | 7 + 3 files changed, 128 insertions(+), 105 deletions(-) diff --git a/OCH/common/biz/src/main/java/com/mogo/och/biz/qrcode/QrParse.kt b/OCH/common/biz/src/main/java/com/mogo/och/biz/qrcode/QrParse.kt index 4e44ca1490..a6325738fe 100644 --- a/OCH/common/biz/src/main/java/com/mogo/och/biz/qrcode/QrParse.kt +++ b/OCH/common/biz/src/main/java/com/mogo/och/biz/qrcode/QrParse.kt @@ -26,118 +26,133 @@ object QrParse { private fun parseVersion3ton(payload: String?): QrBean? { payload?.let { - val split = it.split(",") - if(split.isEmpty()){ - return null - } - // 业务模式+版本号 - val typeAndVersion92 = split[0] - val tenantId92 = split[1] - val orderNo92 = split[2] - val uidCode = split[3] - val pipeCode = split[4] - val phoneCode = split[5] - val lineIdCode = split[6] - val expiryTimeCode = split[7] - val bookingTimeCode = split[8] - val availableTimesCode = split[9] - val ticketSize = split[10].toInt() ?:0 - - val base92ToBase10 = Radix91.base91ToBase10(typeAndVersion92).toString() - val bizTypeCode = base92ToBase10.substring(0,1) - val bizType = Product.getCodeFromWxQr(bizTypeCode) - val version = base92ToBase10.substring(1).toInt() + 2// 0 1 这两个版本在Android端定义 二维码从优化后开始 - val tenantId = Radix91.base91ToBase10(tenantId92) - val orderNo = Radix91.base91ToBase10(orderNo92).toString() - val uid = uidCode.substring(0, 8) + "-" + - uidCode.substring(8, 12) + "-" + - uidCode.substring(12, 16) + "-" + - uidCode.substring(16, 20) + "-" + - uidCode.substring(20, 32) // 构造一个标准的 UUID 字符串 - - val pipe = if (pipeCode.equals("1")) { - "mogogosafety" - } else { - "ehsafety" - } - val phoneLike = Radix91.base91ToBase10(phoneCode).toString() - val phone = if (RegexUtils.isMobileExact(phoneLike)) { - phoneLike - }else{ - phoneCode - } - val lineId = Radix91.base91ToBase10(lineIdCode) - val expiryTime = Radix91.base91ToBase10(expiryTimeCode) - val bookingTime = Radix91.base91ToBase10(bookingTimeCode) - val availableTimes = Radix91.base91ToBase10(availableTimesCode).toInt() - - // 顺序可变部分 - val shiftsId:Long - val startStationId:Long - val ticketName:String - when (Product.valueOf(bizType)) { - Product.BUS -> { - shiftsId = 0 - val startStationIdCode = split[11] - startStationId = Radix91.base91ToBase10(startStationIdCode) - ticketName = "" + try { + val split = it.split(",") + if(split.isEmpty()){ + return null } - Product.SHUTTLE -> { - shiftsId = 0 - val ticketNameCode = split[11] - ticketName =when (ticketNameCode) { - "0" -> { - "单站票" - } - "1" -> { - "多站票" - } - "2" -> { - "全站票" - } - "3" -> { - "通勤票" - } - else -> { - URLDecoder.decode(ticketNameCode?:"","UTF-8") - } + // 业务模式+版本号 + val typeAndVersion92 = split[0] + val tenantId92_head = split[1] + val tenantId92_tail = split[2] + val orderNo92_head = split[3] + val orderNo92_tail = split[4] + val uidCode = split[5] + val pipeCode = split[6] + val phoneCode = split[7] + val lineIdCode = split[8] + val expiryTimeCode = split[9] + val bookingTimeCode = split[10] + val availableTimesCode = split[11] + val ticketSize = split[12].toInt() ?:0 + + val base92ToBase10 = Radix91.base91ToBase10(typeAndVersion92).toString().padStart(3,'0') + val bizTypeCode = base92ToBase10.substring(0,1) + val bizType = Product.getCodeFromWxQr(bizTypeCode) + val version = base92ToBase10.substring(1).toInt() + 2// 0 1 这两个版本在Android端定义 二维码从优化后开始 + + val tenantIdHead = Radix91.base91ToBase10(tenantId92_head).toString() + val tenantIdTail = Radix91.base91ToBase10(tenantId92_tail).toString() + val tenantId = tenantIdHead+tenantIdTail + + val orderNoHead = Radix91.base91ToBase10(orderNo92_head).toString() + val orderNoTail = Radix91.base91ToBase10(orderNo92_tail).toString() + + val orderNo = orderNoHead+orderNoTail + + val uid = uidCode.substring(0, 8) + "-" + + uidCode.substring(8, 12) + "-" + + uidCode.substring(12, 16) + "-" + + uidCode.substring(16, 20) + "-" + + uidCode.substring(20, 32) // 构造一个标准的 UUID 字符串 + + val pipe = if (pipeCode.equals("1")) { + "mogogosafety" + } else { + "ehsafety" + } + val phoneLike = Radix91.base91ToBase10(phoneCode).toString() + val phone = if (RegexUtils.isMobileExact(phoneLike)) { + phoneLike + }else{ + phoneCode + } + val lineId = Radix91.base91ToBase10(lineIdCode) + val expiryTime = Radix91.base91ToBase10(expiryTimeCode) + val bookingTime = Radix91.base91ToBase10(bookingTimeCode) + val availableTimes = Radix91.base91ToBase10(availableTimesCode).toInt() + + // 顺序可变部分 + val shiftsId:Long + val startStationId:Long + val ticketName:String + when (Product.valueOf(bizType)) { + Product.BUS -> { + shiftsId = 0 + val startStationIdCode = split[13] + startStationId = Radix91.base91ToBase10(startStationIdCode) + ticketName = "" } - startStationId = 0 - } - Product.SCHEDULED -> { - val shiftsIdCode = split[12] - shiftsId = Radix91.base91ToBase10(shiftsIdCode) - val ticketNameCode = split[11] - ticketName =when (ticketNameCode) { - "0" -> { - "单站票" - } - "1" -> { - "多站票" - } - "2" -> { - "全站票" - } - "3" -> { - "通勤票" - } - else -> { - URLDecoder.decode(ticketNameCode?:"","UTF-8") + Product.SHUTTLE -> { + shiftsId = 0 + val ticketNameCode = split[13] + ticketName =when (ticketNameCode) { + "0" -> { + "单站票" + } + "1" -> { + "多站票" + } + "2" -> { + "全站票" + } + "3" -> { + "通勤票" + } + else -> { + URLDecoder.decode(ticketNameCode?:"","UTF-8") + } } + startStationId = 0 + } + Product.SCHEDULED -> { + val shiftsIdCode = split[14] + shiftsId = Radix91.base91ToBase10(shiftsIdCode) + val ticketNameCode = split[13] + ticketName =when (ticketNameCode) { + "0" -> { + "单站票" + } + "1" -> { + "多站票" + } + "2" -> { + "全站票" + } + "3" -> { + "通勤票" + } + else -> { + URLDecoder.decode(ticketNameCode?:"","UTF-8") + } + } + startStationId = 0 + } + else->{ + shiftsId = 0 + startStationId = 0 + ticketName = "" } - startStationId = 0 - } - else->{ - shiftsId = 0 - startStationId = 0 - ticketName = "" } + + return QrBean(version, orderNo, uid, phone, bizType, pipe, expiryTime, + bookingTime, lineId, availableTimes, ticketSize, ticketName, tenantId.toLong(), + shiftsId, startStationId + ) + }catch (e:Exception){ + e.printStackTrace() } - return QrBean(version, orderNo, uid, phone, bizType, pipe, expiryTime, - bookingTime, lineId, availableTimes, ticketSize, ticketName, tenantId, - shiftsId, startStationId - ) } return null } diff --git a/OCH/common/biz/src/main/java/com/mogo/och/biz/qrcode/ScannerManager.kt b/OCH/common/biz/src/main/java/com/mogo/och/biz/qrcode/ScannerManager.kt index 386e799ba2..33db3c28ca 100644 --- a/OCH/common/biz/src/main/java/com/mogo/och/biz/qrcode/ScannerManager.kt +++ b/OCH/common/biz/src/main/java/com/mogo/och/biz/qrcode/ScannerManager.kt @@ -230,6 +230,7 @@ class ScannerManager : ScannerService { fun parseParams(payload: String?) { val qrBean = QrParse.parse(payload) + OchChainLogManager.writeChainLogWriteOff("解析数据","二维码解析数据:$qrBean") if (qrBean!=null) { if (stateChanageListeners.size > 0) { stateChanageListeners.forEach { diff --git a/OCH/common/biz/src/test/java/com/mogo/och/biz/qrcode/QrUnitTest.kt b/OCH/common/biz/src/test/java/com/mogo/och/biz/qrcode/QrUnitTest.kt index c8bd8cfa62..2676081e7b 100644 --- a/OCH/common/biz/src/test/java/com/mogo/och/biz/qrcode/QrUnitTest.kt +++ b/OCH/common/biz/src/test/java/com/mogo/och/biz/qrcode/QrUnitTest.kt @@ -10,6 +10,13 @@ import org.junit.Test */ open class QrUnitTest { + @Test + fun testData111() { + println("-----"+Radix91.decimalToBase91( + 1892144642963742720)) + + } + @Test fun testData() { // 构建二维码信息