From 939d0202ac25521ddcd359d77fecb3b02172a976 Mon Sep 17 00:00:00 2001 From: 杜方 Date: Tue, 21 Apr 2026 17:22:26 +0800 Subject: [PATCH] 畅游通标准4.0:新增动态二维码解析 --- build.gradle | 20 +++++++++++++------- libs/cyt-common-dynamic-code-3.6.4.jar | Bin 0 -> 10456 bytes src/com/ectrip/cyt/ui/NewHandleScanerActivity.java | 31 ++++++++++++++++++++++++++++++- src/com/ectrip/cyt/ui/PhomeScanerOrderActivity.java | 30 ++++++++++++++++++++++++++++-- src/com/ectrip/cyt/ui/QRCodeOrderListActivity.java | 6 ++++++ src/com/ectrip/cyt/ui/ScanerOrderActivity.java | 33 +++++++++++++++++++++++++++++++-- 6 files changed, 108 insertions(+), 12 deletions(-) create mode 100644 libs/cyt-common-dynamic-code-3.6.4.jar diff --git a/build.gradle b/build.gradle index e447a9f..ba5ee5e 100644 --- a/build.gradle +++ b/build.gradle @@ -7,9 +7,9 @@ buildscript { mavenCentral() jcenter() google() - maven { url "https://jitpack.io"} - maven { url "https://maven.aliyun.com/repository/google"} - maven { url "https://maven.aliyun.com/repository/public"} + maven { url "https://jitpack.io" } + maven { url "https://maven.aliyun.com/repository/google" } + maven { url "https://maven.aliyun.com/repository/public" } // maven { url "https://maven.aliyun.com/repository/releases"} // maven { url "https://maven.aliyun.com/repository/central"} // maven { url "https://maven.aliyun.com/repository/gradle-plugin"} @@ -52,6 +52,7 @@ dependencies { implementation files('libs\\jsch-0.1.54.jar') implementation 'org.jetbrains:annotations-java5:15.0' implementation files('libs\\zxingcore-2.3.0.jar') + implementation files('libs\\cyt-common-dynamic-code-3.6.4.jar') compileOnly files('external_libs/classes_2.1.11_20160907.jar') compileOnly files('external_libs/bw_odm_20160526.jar') implementation files('libs/bw_pos_sdk2.0.18.jar') @@ -95,6 +96,11 @@ android { } } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + //在apk文件后边生成版本号信息 android.applicationVariants.all { variant -> @@ -131,7 +137,7 @@ android { defaultConfig { minSdkVersion 19 targetSdkVersion 30 - vectorDrawables.useSupportLibrary =true + vectorDrawables.useSupportLibrary = true ndk { abiFilters "armeabi", "armeabi-v7a"//可以适当补填其他 @@ -165,7 +171,7 @@ repositories { mavenCentral() jcenter() google() - maven { url "https://jitpack.io"} - maven { url "https://maven.aliyun.com/repository/google"} - maven { url "https://maven.aliyun.com/repository/public"} + maven { url "https://jitpack.io" } + maven { url "https://maven.aliyun.com/repository/google" } + maven { url "https://maven.aliyun.com/repository/public" } } \ No newline at end of file diff --git a/libs/cyt-common-dynamic-code-3.6.4.jar b/libs/cyt-common-dynamic-code-3.6.4.jar new file mode 100644 index 0000000..7202bab Binary files /dev/null and b/libs/cyt-common-dynamic-code-3.6.4.jar differ diff --git a/src/com/ectrip/cyt/ui/NewHandleScanerActivity.java b/src/com/ectrip/cyt/ui/NewHandleScanerActivity.java index 2a4a497..608e618 100644 --- a/src/com/ectrip/cyt/ui/NewHandleScanerActivity.java +++ b/src/com/ectrip/cyt/ui/NewHandleScanerActivity.java @@ -8,6 +8,7 @@ import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.security.InvalidParameterException; import java.util.ArrayList; +import java.util.Date; import java.util.concurrent.atomic.AtomicBoolean; import android.app.AlertDialog; @@ -23,6 +24,9 @@ import android.widget.Toast; import android_serialport_api.SerialPortNewHandset; +import com.ectrip.common.dynamic.code.core.DynamicVerifyCodeTool; +import com.ectrip.common.dynamic.code.exception.DynamicVerifyCodeException; +import com.ectrip.common.dynamic.code.model.DynamicVerifyCodeDecodeResult; import com.ectrip.cyt.bean.ConfigBean; import com.ectrip.cyt.config.DevicTool; import com.ectrip.cyt.config.MyApp; @@ -159,7 +163,7 @@ public class NewHandleScanerActivity extends BaseActivity { } else { try { if (result.startsWith("CYT_")) { - LogUtil.i(TAG,"result = " + result); + LogUtil.i(TAG, "result = " + result); typeScan = 0; if (result.contains(",")) { result = result.substring(result.indexOf("_") + 1, result.indexOf(",")); @@ -186,6 +190,31 @@ public class NewHandleScanerActivity extends BaseActivity { } else if ((result.startsWith("TY_") || (result.startsWith("PMS_")))) { typeScan = 1; result = result; + } else if (result.startsWith("OCP_")) { + typeScan = 0; + result = result; + } else if (result.startsWith("DYV_")) { + try { + DynamicVerifyCodeDecodeResult decodeResult = DynamicVerifyCodeTool.decodeDynamicCode(result); + boolean expired = decodeResult.getExpired(); + String staticCode = decodeResult.getStaticCode(); + Date expireTime = decodeResult.getExpireTime(); + LogUtil.d(TAG, "expired = " + expired); + LogUtil.d(TAG, "staticCode = " + staticCode); + LogUtil.d(TAG, "expireTime = " + expireTime); + if (!expired) { + typeScan = 1; + result = staticCode; + } else { + typeScan = 2; + result = "动态二维码已过有效期"; + } + } catch (DynamicVerifyCodeException e) { + typeScan = 2; + LogUtil.d(TAG, "动态核销码异常:" + e.getMessage()); + result = e.getMessage(); + e.printStackTrace(); + } } else { typeScan = 1; result = result; diff --git a/src/com/ectrip/cyt/ui/PhomeScanerOrderActivity.java b/src/com/ectrip/cyt/ui/PhomeScanerOrderActivity.java index a312042..f0a5392 100644 --- a/src/com/ectrip/cyt/ui/PhomeScanerOrderActivity.java +++ b/src/com/ectrip/cyt/ui/PhomeScanerOrderActivity.java @@ -2,6 +2,7 @@ package com.ectrip.cyt.ui; import java.io.IOException; import java.util.ArrayList; +import java.util.Date; import java.util.Vector; import android.content.Intent; @@ -22,6 +23,9 @@ import android.view.WindowManager; import android.widget.TextView; import android.widget.Toast; +import com.ectrip.common.dynamic.code.core.DynamicVerifyCodeTool; +import com.ectrip.common.dynamic.code.exception.DynamicVerifyCodeException; +import com.ectrip.common.dynamic.code.model.DynamicVerifyCodeDecodeResult; import com.ectrip.cyt.bean.ConfigBean; import com.ectrip.cyt.config.DevicTool; import com.ectrip.cyt.constant.constant; @@ -174,6 +178,28 @@ public class PhomeScanerOrderActivity extends BaseActivity implements Callback { } else if (resultString.startsWith("OCP_")) { typeScan = 0; resultString = resultString; + } else if (resultString.startsWith("DYV_")) { + try { + DynamicVerifyCodeDecodeResult decodeResult = DynamicVerifyCodeTool.decodeDynamicCode(resultString); + boolean expired = decodeResult.getExpired(); + String staticCode = decodeResult.getStaticCode(); + Date expireTime = decodeResult.getExpireTime(); + LogUtil.d(TAG, "expired = " + expired); + LogUtil.d(TAG, "staticCode = " + staticCode); + LogUtil.d(TAG, "expireTime = " + expireTime); + if (!expired) { + typeScan = 1; + resultString = staticCode; + } else { + typeScan = 2; + resultString = "动态二维码已过有效期"; + } + } catch (DynamicVerifyCodeException e) { + typeScan = 2; + LogUtil.d(TAG, "动态核销码异常:" + e.getMessage()); + resultString = e.getMessage(); + e.printStackTrace(); + } } else { typeScan = 1; resultString = resultString; @@ -186,8 +212,8 @@ public class PhomeScanerOrderActivity extends BaseActivity implements Callback { // intent = new Intent(PhomeScanerOrderActivity.this, // PhoneCodeListActivity.class); // } else { - intent = new Intent(PhomeScanerOrderActivity.this, - QRCodeOrderListActivity.class); + intent = new Intent(PhomeScanerOrderActivity.this, + QRCodeOrderListActivity.class); // } intent.putExtra("mode", 1); intent.putExtra("input_orid", resultString); diff --git a/src/com/ectrip/cyt/ui/QRCodeOrderListActivity.java b/src/com/ectrip/cyt/ui/QRCodeOrderListActivity.java index 7af04f0..e92d831 100644 --- a/src/com/ectrip/cyt/ui/QRCodeOrderListActivity.java +++ b/src/com/ectrip/cyt/ui/QRCodeOrderListActivity.java @@ -103,6 +103,12 @@ public class QRCodeOrderListActivity extends BaseActivity implements ListOnclick LogUtil.d(TAG, "orid = " + orid); typeScan = getIntent().getIntExtra("typeScan", 0); LogUtil.d(TAG, "typeScan = " + typeScan); + if (typeScan == 2) { + orderList.setEmptyView(errorLayout); + errorLayout.setVisibility(View.VISIBLE); + errorInfo.setText(orid); + return; + } if (orid.startsWith("OCP_")) { ArrayList productOfConsumeOrders = new ArrayList<>(); ProductOfConsumeOrder productOfConsumeOrder = new ProductOfConsumeOrder(); diff --git a/src/com/ectrip/cyt/ui/ScanerOrderActivity.java b/src/com/ectrip/cyt/ui/ScanerOrderActivity.java index 973956b..a126586 100644 --- a/src/com/ectrip/cyt/ui/ScanerOrderActivity.java +++ b/src/com/ectrip/cyt/ui/ScanerOrderActivity.java @@ -23,6 +23,9 @@ import android.view.View.OnClickListener; import android.widget.FrameLayout; import android.widget.TextView; +import com.ectrip.common.dynamic.code.core.DynamicVerifyCodeTool; +import com.ectrip.common.dynamic.code.exception.DynamicVerifyCodeException; +import com.ectrip.common.dynamic.code.model.DynamicVerifyCodeDecodeResult; import com.ectrip.cyt.bean.ConfigBean; import com.ectrip.cyt.constant.constant; import com.ectrip.cyt.db.DbManager; @@ -45,6 +48,7 @@ import net.sourceforge.zbar.SymbolSet; import java.io.IOException; import java.util.ArrayList; +import java.util.Date; /** * 二维码pos版扫描 @@ -240,6 +244,31 @@ public class ScanerOrderActivity extends BaseActivity { } else if ((scannerResult.startsWith("TY_") || (scannerResult.startsWith("PMS_")))) { typeScan = 1; scannerResult = scannerResult; + } else if (scannerResult.startsWith("OCP_")) { + typeScan = 0; + result = result; + } else if (scannerResult.startsWith("DYV_")) { + try { + DynamicVerifyCodeDecodeResult decodeResult = DynamicVerifyCodeTool.decodeDynamicCode(scannerResult); + boolean expired = decodeResult.getExpired(); + String staticCode = decodeResult.getStaticCode(); + Date expireTime = decodeResult.getExpireTime(); + LogUtil.d(TAG, "expired = " + expired); + LogUtil.d(TAG, "staticCode = " + staticCode); + LogUtil.d(TAG, "expireTime = " + expireTime); + if (!expired) { + typeScan = 1; + scannerResult = staticCode; + } else { + typeScan = 2; + scannerResult = "动态二维码已过有效期"; + } + } catch (DynamicVerifyCodeException e) { + typeScan = 2; + LogUtil.d(TAG, "动态核销码异常:" + e.getMessage()); + scannerResult = e.getMessage(); + e.printStackTrace(); + } } else { typeScan = 1; scannerResult = scannerResult; @@ -263,8 +292,8 @@ public class ScanerOrderActivity extends BaseActivity { } } - }else{ - LogUtil.d(TAG,"未扫到数据"); + } else { + LogUtil.d(TAG, "未扫到数据"); } } }; -- libgit2 0.21.4