[6.11.0]
[fea] [二维码解析 orderid tenantId 各拆成2位]
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -10,6 +10,13 @@ import org.junit.Test
|
||||
*/
|
||||
open class QrUnitTest {
|
||||
|
||||
@Test
|
||||
fun testData111() {
|
||||
println("-----"+Radix91.decimalToBase91(
|
||||
1892144642963742720))
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testData() {
|
||||
// 构建二维码信息
|
||||
|
||||
Reference in New Issue
Block a user