实现订单 Tab 并接入扫码核销流程
This commit is contained in:
55
suixinkan/Features/Orders/Utils/SaleUserQrParser.swift
Normal file
55
suixinkan/Features/Orders/Utils/SaleUserQrParser.swift
Normal file
@ -0,0 +1,55 @@
|
||||
//
|
||||
// SaleUserQrParser.swift
|
||||
// suixinkan
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
/// 获客员二维码解析,对齐 Android `SaleUserQrParser`。
|
||||
enum SaleUserQrParser {
|
||||
static let methodSaleUserBind = "sale_user_bind"
|
||||
|
||||
static func parseSaleUserId(_ content: String) -> Int? {
|
||||
let trimmed = content.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
guard !trimmed.isEmpty else { return nil }
|
||||
|
||||
if trimmed.hasPrefix("{"), let data = trimmed.data(using: .utf8),
|
||||
let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any] {
|
||||
if let fromMethod = parseFromJSON(json) { return fromMethod }
|
||||
}
|
||||
|
||||
if let intValue = Int(trimmed), intValue > 0 { return intValue }
|
||||
|
||||
if trimmed.contains("://") || trimmed.contains("?"),
|
||||
let components = URLComponents(string: trimmed) {
|
||||
for key in ["sale_user_id", "saleUserId", "user_id", "id"] {
|
||||
if let value = components.queryItems?.first(where: { $0.name == key })?.value,
|
||||
let intValue = Int(value), intValue > 0 {
|
||||
return intValue
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
private static func parseFromJSON(_ json: [String: Any]) -> Int? {
|
||||
if let method = json["method"] as? String, method == methodSaleUserBind,
|
||||
let id = readInt(json["sale_user_id"]), id > 0 {
|
||||
return id
|
||||
}
|
||||
for key in ["sale_user_id", "saleUserId", "user_id", "id"] {
|
||||
if let id = readInt(json[key]), id > 0 { return id }
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
private static func readInt(_ value: Any?) -> Int? {
|
||||
if let intValue = value as? Int { return intValue }
|
||||
if let stringValue = value as? String, let intValue = Int(stringValue.trimmingCharacters(in: .whitespacesAndNewlines)) {
|
||||
return intValue
|
||||
}
|
||||
if let doubleValue = value as? Double { return Int(doubleValue) }
|
||||
return nil
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user