|
|
@@ -31,6 +31,7 @@ import com.huntersun.vkyes.etcopencard.project.bluetooth.MethodManager; |
|
|
|
import com.huntersun.vkyes.etcopencard.project.bluetooth.ServiceStatus; |
|
|
|
import com.huntersun.vkyes.etcopencard.src.aop.SingleClick; |
|
|
|
import com.huntersun.vkyes.etcopencard.src.app.AppActivity; |
|
|
|
import com.huntersun.vkyes.etcopencard.src.other.AppConfig; |
|
|
|
|
|
|
|
import java.util.HashMap; |
|
|
|
import java.util.Map; |
|
|
@@ -56,6 +57,7 @@ public class StartStopEtcActivity extends AppActivity { |
|
|
|
// 指令执行相关变量 |
|
|
|
private int currentStepNo = 1; // 当前步骤号 |
|
|
|
private String transOrderId = ""; // 指令编号 |
|
|
|
private String currentCommand = ""; // 当前要执行的指令 |
|
|
|
|
|
|
|
@Override |
|
|
|
protected View getLayoutView() { |
|
|
@@ -377,9 +379,9 @@ public class StartStopEtcActivity extends AppActivity { |
|
|
|
new Utils().showMessDialog(getActivity(), "是否确认" + actionText + "卡签?", new Utils.dialogCallback() { |
|
|
|
@Override |
|
|
|
public void onConfirm(BaseDialog dialog) { |
|
|
|
LogUtils.i("卡签操作", "用户确认" + actionText + "操作,开始调用申请接口"); |
|
|
|
// 调用设备启用/停用申请接口 |
|
|
|
callDeviceEnableApply(); |
|
|
|
LogUtils.i("卡签操作", "用户确认" + actionText + "操作,开始连接ETC设备"); |
|
|
|
// 先连接ETC设备,连接成功后再调用申请接口 |
|
|
|
connectDeviceAndApply(); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
@@ -394,7 +396,7 @@ public class StartStopEtcActivity extends AppActivity { |
|
|
|
params.put("accessToken", MyShared.getInstance().get(MyShared.ACCESSTOKEN, "") + ""); |
|
|
|
params.put("loginSource", Constants.LOGIN_SOURCE); |
|
|
|
params.put("staffId", MyShared.getInstance().get(MyShared.STAFFID, "")); |
|
|
|
params.put("cardId", curBizContent.getCardId()); |
|
|
|
params.put("cardId", curBizContent.getCardId()); |
|
|
|
params.put("obuId", curBizContent.getObuId()); |
|
|
|
params.put("vehicleId", plateNum + "_" + colorNum); |
|
|
|
params.put("customerId", MyShared.getInstance().get(MyShared.STAFFID, "") + ""); |
|
|
@@ -444,12 +446,17 @@ public class StartStopEtcActivity extends AppActivity { |
|
|
|
", stepNo: " + stepNo + ", transOrderId: " + transOrderId); |
|
|
|
|
|
|
|
if (!FunHelper.isEmpty(cmd)) { |
|
|
|
// 有指令需要执行,先连接ETC设备 |
|
|
|
LogUtils.i("解析申请响应", "检测到需要执行指令,准备连接ETC设备"); |
|
|
|
// 有指令需要执行,设置指令信息 |
|
|
|
LogUtils.i("解析申请响应", "检测到需要执行指令,指令类型: " + cmdType); |
|
|
|
this.transOrderId = transOrderId; |
|
|
|
this.currentStepNo = stepNo != null ? stepNo : 1; |
|
|
|
this.currentCommand = cmd; // 保存第一个指令 |
|
|
|
LogUtils.i("解析申请响应", "设置指令编号: " + this.transOrderId + ", 当前步骤号: " + this.currentStepNo); |
|
|
|
connectDeviceAndExecute(); |
|
|
|
LogUtils.i("解析申请响应", "保存第一个指令: " + cmd); |
|
|
|
|
|
|
|
// 申请成功后,直接开始执行指令流程 |
|
|
|
LogUtils.i("解析申请响应", "申请成功,开始执行指令流程"); |
|
|
|
executeEnableDisableCommand(); |
|
|
|
} else { |
|
|
|
LogUtils.i("解析申请响应", "无需执行指令,操作直接完成"); |
|
|
|
showSuccessPage(); |
|
|
@@ -466,14 +473,13 @@ public class StartStopEtcActivity extends AppActivity { |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 连接ETC设备并执行指令 |
|
|
|
* 连接ETC设备并申请启用/停用 |
|
|
|
*/ |
|
|
|
private void connectDeviceAndExecute() { |
|
|
|
private void connectDeviceAndApply() { |
|
|
|
LogUtils.i("连接ETC设备", "========== 开始连接ETC设备 =========="); |
|
|
|
LogUtils.i("连接ETC设备", "当前操作类型: " + (operation == 1 ? "停用" : "启用")); |
|
|
|
LogUtils.i("连接ETC设备", "车辆信息 - 车牌: " + plateNum + ", 颜色: " + colorNum); |
|
|
|
LogUtils.i("连接ETC设备", "设备信息 - 卡号: " + curBizContent.getCardId() + ", OBU号: " + curBizContent.getObuId()); |
|
|
|
LogUtils.i("连接ETC设备", "指令信息 - 步骤号: " + currentStepNo + ", 指令编号: " + transOrderId); |
|
|
|
|
|
|
|
// 连接蓝牙设备 |
|
|
|
bluetoothLink(new Currency() { |
|
|
@@ -481,18 +487,18 @@ public class StartStopEtcActivity extends AppActivity { |
|
|
|
public void success() { |
|
|
|
LogUtils.i("连接ETC设备", "========== 蓝牙连接成功 =========="); |
|
|
|
LogUtils.i("连接ETC设备", "设备类型: 普通蓝牙设备"); |
|
|
|
LogUtils.i("连接ETC设备", "开始执行" + (operation == 1 ? "停用" : "启用") + "指令"); |
|
|
|
// 蓝牙连接成功,执行指令 |
|
|
|
executeEnableDisableCommand(); |
|
|
|
LogUtils.i("连接ETC设备", "开始调用" + (operation == 1 ? "停用" : "启用") + "申请接口"); |
|
|
|
// 蓝牙连接成功,调用申请接口 |
|
|
|
callDeviceEnableApply(); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void success9901(int isPlk) { |
|
|
|
LogUtils.i("连接ETC设备", "========== 9901设备连接成功 =========="); |
|
|
|
LogUtils.i("连接ETC设备", "设备类型: 9901设备, isPlk: " + isPlk); |
|
|
|
LogUtils.i("连接ETC设备", "开始执行" + (operation == 1 ? "停用" : "启用") + "指令"); |
|
|
|
// 9901设备连接成功,执行指令 |
|
|
|
executeEnableDisableCommand(); |
|
|
|
LogUtils.i("连接ETC设备", "开始调用" + (operation == 1 ? "停用" : "启用") + "申请接口"); |
|
|
|
// 9901设备连接成功,调用申请接口 |
|
|
|
callDeviceEnableApply(); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
@@ -511,76 +517,19 @@ public class StartStopEtcActivity extends AppActivity { |
|
|
|
private void executeEnableDisableCommand() { |
|
|
|
LogUtils.i("执行指令流程", "========== 开始执行" + (operation == 1 ? "停用" : "启用") + "指令流程 =========="); |
|
|
|
LogUtils.i("执行指令流程", "当前步骤号: " + currentStepNo + ", 指令编号: " + transOrderId); |
|
|
|
LogUtils.i("执行指令流程", "设备已连接,开始获取指令"); |
|
|
|
LogUtils.i("执行指令流程", "当前指令: " + currentCommand); |
|
|
|
LogUtils.i("执行指令流程", "设备已连接,开始执行第一个指令"); |
|
|
|
|
|
|
|
// 从申请响应中已经获取了第一个指令,直接执行 |
|
|
|
// 这里需要从申请响应中获取cmd,但由于我们已经解析过了,需要重新获取 |
|
|
|
// 为了简化,我们直接调用指令回传接口获取下一个指令 |
|
|
|
getNextCommand(); |
|
|
|
// 直接执行第一个指令 |
|
|
|
if (!FunHelper.isEmpty(currentCommand)) { |
|
|
|
LogUtils.i("执行指令流程", "执行第一个指令: " + currentCommand); |
|
|
|
executeWriteCard(currentCommand, transOrderId); |
|
|
|
} else { |
|
|
|
LogUtils.e("执行指令流程", "第一个指令为空,无法执行"); |
|
|
|
ToastUtils.show("指令为空,无法执行"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 获取下一个指令 |
|
|
|
*/ |
|
|
|
private void getNextCommand() { |
|
|
|
showDialog("正在获取指令..."); |
|
|
|
|
|
|
|
HashMap<String, Object> params = new HashMap<>(); |
|
|
|
params.put("accessToken", MyShared.getInstance().get(MyShared.ACCESSTOKEN, "") + ""); |
|
|
|
params.put("loginSource", Constants.LOGIN_SOURCE); |
|
|
|
params.put("cmd", ""); // 第一次调用时cmd为空 |
|
|
|
params.put("cmdResult", ""); // 第一次调用时cmdResult为空 |
|
|
|
params.put("customerId", MyShared.getInstance().get(MyShared.STAFFID, "") + ""); |
|
|
|
params.put("stepNo", currentStepNo); |
|
|
|
params.put("transOrderId", transOrderId); |
|
|
|
|
|
|
|
LogUtils.i("获取指令", "请求参数: " + new Gson().toJson(params)); |
|
|
|
|
|
|
|
MyRetrofit.newInstanceGZ(this, IFCode.IFCODE_DEVICE_ENABLE_INST_CALLBACK, params, new MyRetrofit.ReturnResult() { |
|
|
|
@Override |
|
|
|
public void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent) { |
|
|
|
hideDialog(); |
|
|
|
LogUtils.i("获取指令", "响应数据: " + new Gson().toJson(resultBean)); |
|
|
|
|
|
|
|
try { |
|
|
|
if (resultBean.getData() != null) { |
|
|
|
String dataStr = JSONObject.toJSONString(resultBean.getData()); |
|
|
|
LogUtils.i("获取指令", "响应原始数据: " + dataStr); |
|
|
|
JSONObject dataObj = JSONObject.parseObject(dataStr); |
|
|
|
String cmd = dataObj.getString("cmd"); |
|
|
|
String cmdType = dataObj.getString("cmdType"); |
|
|
|
Integer stepNo = dataObj.getInteger("stepNo"); |
|
|
|
String transOrderId = dataObj.getString("transOrderId"); |
|
|
|
|
|
|
|
LogUtils.i("获取指令", "解析结果 - cmd: " + cmd + ", cmdType: " + cmdType + |
|
|
|
", stepNo: " + stepNo + ", transOrderId: " + transOrderId); |
|
|
|
|
|
|
|
if (!FunHelper.isEmpty(cmd)) { |
|
|
|
// 有指令需要执行 |
|
|
|
executeWriteCard(cmd, transOrderId); |
|
|
|
} else { |
|
|
|
LogUtils.i("获取指令", "无需执行指令,操作完成"); |
|
|
|
showSuccessPage(); |
|
|
|
} |
|
|
|
} else { |
|
|
|
LogUtils.e("获取指令", "获取指令失败:响应数据为空"); |
|
|
|
ToastUtils.show("获取指令失败:响应数据为空"); |
|
|
|
} |
|
|
|
} catch (Exception e) { |
|
|
|
LogUtils.e("获取指令", "解析指令响应失败: " + e.getMessage()); |
|
|
|
e.printStackTrace(); |
|
|
|
ToastUtils.show("解析指令响应失败"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void onError(Response<Result> resp) { |
|
|
|
hideDialog(); |
|
|
|
LogUtils.e("获取指令", "获取指令失败: " + (resp != null ? resp.message() : "未知错误")); |
|
|
|
ToastUtils.show("获取指令失败"); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 执行写卡操作 |
|
|
@@ -640,18 +589,21 @@ public class StartStopEtcActivity extends AppActivity { |
|
|
|
* 回传启用/停用指令结果 |
|
|
|
*/ |
|
|
|
private void callbackEnableDisableCommand(String command, String transOrderId, String result) { |
|
|
|
LogUtils.i("指令回传", "========== 开始回传指令结果 =========="); |
|
|
|
LogUtils.i("指令回传", "执行的指令: " + command); |
|
|
|
LogUtils.i("指令回传", "指令结果: " + result); |
|
|
|
LogUtils.i("指令回传", "当前步骤号: " + currentStepNo + ", 指令编号: " + transOrderId); |
|
|
|
|
|
|
|
HashMap<String, Object> params = new HashMap<>(); |
|
|
|
params.put("accessToken", MyShared.getInstance().get(MyShared.ACCESSTOKEN, "") + ""); |
|
|
|
params.put("loginSource", Constants.LOGIN_SOURCE); |
|
|
|
params.put("cmd", command); |
|
|
|
params.put("cmdResult", result); |
|
|
|
params.put("cmd", command); // 传递执行的指令 |
|
|
|
params.put("cmdResult", result); // 传递指令执行结果 |
|
|
|
params.put("customerId", MyShared.getInstance().get(MyShared.STAFFID, "") + ""); |
|
|
|
params.put("stepNo", currentStepNo); |
|
|
|
params.put("transOrderId", transOrderId); |
|
|
|
|
|
|
|
LogUtils.i("指令回传", "请求参数: " + new Gson().toJson(params)); |
|
|
|
LogUtils.i("指令回传", "当前步骤: " + currentStepNo + ", 指令: " + command + |
|
|
|
", 指令编号: " + transOrderId + ", 指令结果: " + result); |
|
|
|
LogUtils.i("指令回传", "回传接口请求参数: " + new Gson().toJson(params)); |
|
|
|
|
|
|
|
MyRetrofit.newInstanceGZ(this, IFCode.IFCODE_DEVICE_ENABLE_INST_CALLBACK, params, new MyRetrofit.ReturnResult() { |
|
|
|
@Override |
|
|
@@ -689,6 +641,8 @@ public class StartStopEtcActivity extends AppActivity { |
|
|
|
if (!FunHelper.isEmpty(cmd)) { |
|
|
|
LogUtils.i("指令回传", "获取到下一个指令,开始执行"); |
|
|
|
LogUtils.i("指令回传", "新指令: " + cmd); |
|
|
|
// 更新当前指令 |
|
|
|
currentCommand = cmd; |
|
|
|
executeWriteCard(cmd, transOrderId); |
|
|
|
} else { |
|
|
|
LogUtils.i("指令回传", "未获取到指令,操作完成"); |