lujin 6 месяцев назад
Родитель
Сommit
5e9edc0354
23 измененных файлов: 899 добавлений и 297 удалений
  1. 3
    3
      app/release/output-metadata.json
  2. 10
    5
      app/src/main/java/com/huntersun/vkyes/etcopencard/project/api/ConverterGZ.java
  3. 1
    1
      app/src/main/java/com/huntersun/vkyes/etcopencard/project/api/MyRetrofit.java
  4. 1
    2
      app/src/main/java/com/huntersun/vkyes/etcopencard/project/api/bean/IFCode.java
  5. 3
    0
      app/src/main/java/com/huntersun/vkyes/etcopencard/project/api/bean/ResultBean.java
  6. 286
    33
      app/src/main/java/com/huntersun/vkyes/etcopencard/project/bluetooth/BluetoothDialog.java
  7. 1
    0
      app/src/main/java/com/huntersun/vkyes/etcopencard/project/bluetooth/BluetoothLoop.java
  8. 139
    30
      app/src/main/java/com/huntersun/vkyes/etcopencard/project/bluetooth/BluetoothReadUtils.java
  9. 15
    0
      app/src/main/java/com/huntersun/vkyes/etcopencard/project/bluetooth/bean/CardReadInfoBean.java
  10. 22
    0
      app/src/main/java/com/huntersun/vkyes/etcopencard/project/bluetooth/bean/ObuReadInfoBean.java
  11. 1
    1
      app/src/main/java/com/huntersun/vkyes/etcopencard/project/copapply/ObuActivateRequester.java
  12. 2
    0
      app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/activity/after/RechargeRecordActivity.java
  13. 1
    1
      app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/activity/after/RechargeRecordContinueStepActivity.java
  14. 1
    1
      app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/activity/after/TopDefrayActivity.java
  15. 25
    24
      app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/activity/after/TopEntrapmentActivity.java
  16. 23
    5
      app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/activity/mail/FormDeliveryActivity.java
  17. 241
    115
      app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/activity/mail/InfoTabActivity.java
  18. 59
    58
      app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/activity/obu/ObuActivationBLESearchActivity.java
  19. 53
    12
      app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/activity/order/OrderUtils.java
  20. 3
    3
      app/src/main/java/com/huntersun/vkyes/etcopencard/src/app/AppActivity.java
  21. 2
    0
      app/src/main/res/layout/login_activity.xml
  22. 2
    2
      common.gradle
  23. 5
    1
      library/obublelib/src/main/java/com/huntersun/vky/obublelib/box/BoxManagers.java

+ 3
- 3
app/release/output-metadata.json Просмотреть файл

@@ -10,9 +10,9 @@
{
"type": "SINGLE",
"filters": [],
"versionCode": 2,
"versionName": "1.0.1",
"outputFile": "jz_app_v1.0.1_release_1217.apk"
"versionCode": 1,
"versionName": "1.3.3",
"outputFile": "jz_app_v1.3.3_release_1219.apk"
}
]
}

+ 10
- 5
app/src/main/java/com/huntersun/vkyes/etcopencard/project/api/ConverterGZ.java Просмотреть файл

@@ -83,13 +83,13 @@ public abstract class ConverterGZ<T extends Result> implements Callback<T>, Toas

public void showLoading(Activity context, String msg) {
if (context != null) {
mDialog = new WaitDialog.Builder(context)
.setCancelable(false)
.setMessage(msg)
.create();
post(new Runnable() {
@Override
public void run() {
mDialog = new WaitDialog.Builder(context)
.setCancelable(false)
.setMessage(msg)
.create();
mDialog.show();
}
});
@@ -188,7 +188,12 @@ public abstract class ConverterGZ<T extends Result> implements Callback<T>, Toas
@Override
public void onFailure(@NotNull Call<T> call, @NotNull Throwable t) {
if (null!=mDialog&&mDialog.isShowing()){
mDialog.dismiss();
postDelayed(new Runnable() {
@Override
public void run() {
mDialog.dismiss();
}
},0);
}
Log.e("请求异常Exception",t.getMessage()+"~~~"+t);
if (Objects.requireNonNull(t.toString()).contains("TimeoutException")){

+ 1
- 1
app/src/main/java/com/huntersun/vkyes/etcopencard/project/api/MyRetrofit.java Просмотреть файл

@@ -257,7 +257,7 @@ public class MyRetrofit implements ToastAction {
//加密
// parameters.setBizContent(SM4Utils.encryptCBC(parameters.getBizContent(), SM4_KEY));
new MyRetrofit().getRetrofitGZ(code).create(Api.class)
.message3GZ(linkedTreeMap)
.message2GZ(linkedTreeMap)
.enqueue(new ConverterGZ<Result>(context, start, false, loadHint) {
@Override
protected void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent) {

+ 1
- 2
app/src/main/java/com/huntersun/vkyes/etcopencard/project/api/bean/IFCode.java Просмотреть файл

@@ -130,7 +130,7 @@ public class IFCode {
public static final String IFCODE80 = "80"; //安装确认
public static final String IFCODE81 = "81"; //卡签挂起
public static final String IFCODE82 = "iaw/api/afterSale/cardObuLoss/loss"; //卡签挂失解挂
public static final String IFCODE90 = "iaw/ass/issueBase/obuFileDataDecrypt"; //VFJ-OBU系统信息在线解密
public static final String IFCODE90 = "iaw/vfj/getVehInfoClear";//"iaw/ass/issueBase/obuFileDataDecrypt"; //VFJ-OBU系统信息在线解密
public static final String IFCODE_QUERYCARDANDOBU = "iaw/ass/query/cardObuQuery"; //卡签信息查询
public static final String IFCODE91 = "iaw/ocr/businessLicenseOcr"; //OCR识别(营业执照) id_back: 身份证背页 id_front: 身份证前页 bank_card:银行卡 business_license:营业执照

@@ -313,7 +313,6 @@ public class IFCode {
public static final String IFCODE_ISSUE_CALLBACK = "iaw/issue/order/issueCallback";//发行指令回传

public static final String IFCODE_OBU_INSTALL_APPLY = "iaw/api/secondActive/installApply";//OBU安装申请
public static final String IFCODE_VFJ_WRITE_ACTIVATION = "iaw/api/secondActive/writeActiveInfo";// VFJ-写激活信息(普通车)
public static final String IFCODE_OBU_ISSUE_CONFIRM = "iaw/api/secondActive/issueConfirm";// OBU发行确认
public static final String IFCODE_OBU_DEVICECHECK = "iaw/aftersale/deviceUpgrade/preDeviceCheck";//设备质检
public static final String IFCODE_OBU_DEVICECHECK_BACK = "iaw/aftersale/deviceUpgrade/preDeviceCheckRes";//设备质检回传

+ 3
- 0
app/src/main/java/com/huntersun/vkyes/etcopencard/project/api/bean/ResultBean.java Просмотреть файл

@@ -386,6 +386,9 @@ public class ResultBean<T> {
private int isTransfer;
public int transfer;
public String department;
public String wheelsCount;
public String collectionType;
public String engineNumber;
public String activeStatus;
public String newCardId;
public String newObuId;

+ 286
- 33
app/src/main/java/com/huntersun/vkyes/etcopencard/project/bluetooth/BluetoothDialog.java Просмотреть файл

@@ -8,9 +8,6 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Handler;
import android.os.HandlerThread;
import android.text.TextUtils;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
@@ -21,14 +18,14 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.alibaba.fastjson.JSON;
import com.artc.gbapi.ArtcCallBack.ArtcInterface;
import com.artc.gbapi.invoke.ArtcObuManger;
import com.hjq.base.BaseDialog;
import com.huntersun.vky.obublelib.bean.DecryptVehicleApduBean;
import com.huntersun.vky.obublelib.box.BoxManagers;
import com.huntersun.vky.obublelib.constant.Constant;
import com.huntersun.vky.obublelib.util.UtilTool;
import com.huntersun.vkyes.etcopencard.R;
import com.huntersun.vkyes.etcopencard.project.api.bean.ResultBean;
import com.huntersun.vkyes.etcopencard.project.tool.Utils;
import com.huntersun.vkyes.etcopencard.project.ui.activity.ydplatform.bluetooth9901.BluetoothDialog9901;
import com.huntersun.vkyes.etcopencard.project.bluetooth.bean.CardReadInfoBean;
import com.huntersun.vkyes.etcopencard.project.bluetooth.bean.ObuReadInfoBean;
import com.huntersun.vkyes.etcopencard.project.ui.activity.ydplatform.bluetooth9901.bean.ServiceObject;
import com.huntersun.vkyes.etcopencard.project.ui.activity.ydplatform.manager.CardObuCommandManager;
import com.huntersun.vkyes.etcopencard.project.ui.adapter.DeviceAdapter;
@@ -36,24 +33,21 @@ import com.huntersun.vkyes.etcopencard.src.action.ToastAction;
import com.huntersun.vkyes.etcopencard.src.aop.SingleClick;
import com.huntersun.vkyes.etcopencard.src.ui.dialog.CommonDialog;
import com.huntersun.vkyes.etcopencard.src.ui.dialog.WaitDialog;
import com.jeremyliao.liveeventbus.LiveEventBus;
import com.obu.util.BluetoothHelper;
import com.sdjictec.jtobu_lib.JtObu;

import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import etc.obu.service.ConnectStatusCallback;
import etc.obu.service.ServiceStatus;
import io.reactivex.Observable;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.Observer;
import io.reactivex.Scheduler;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
import jl.obu.com.obu.area.biyadi.Callback;
import jl.obu.com.obu.area.biyadi.JLBydBleSDK;
import jl.obu.com.obu.area.biyadi.ResultStatus;

/**
* @author admin
@@ -71,21 +65,40 @@ public class BluetoothDialog {
private OnResult mResult;
private final BaseDialog mDialog;
private static JLBydBleSDK jlBydBleSDK;
private static ArtcObuManger artcObuManger;
private BluetoothReceiver bluetoothReceiver;
private int isPlk;
private int JL= 0;//聚力
private int ATS= 1;//聚力
private static int isPlk;
public static int HS_JL = 0;//恒生聚力
public static int ATS = 1;//艾特斯
public static int JL = 2;//聚力
// private HandlerThread thread;
// private Handler mBackgroundHandler;
private final TextView mHintTextView;
private final String[] deviceWith = new String[] //
{"PLK_", "WJ", "TianDi", "sdlan", "JY", "LC", "ZZ", "AT", "JT", "WQ", "CG", "TD", "JL", "ETC"}; //设备扫描过滤
private static final String OBU_SYSTEM_FILE = "00B0810063"; //返回99字节数据SystemInfo
private static final String RANDOM_NUMBER = "0084000004";//随机数

private static final String HOME_DIRECTORY = "00A40000023F00";//选择主目
private static final String APPLICATION_DIRECTORY = "00A40000021001";//选择文件1001--DF01联网收费应用目录
private static final String CMD_READBINARY = "00B095002B"; //15文件--卡片发行基本数据文件
private static final String CMD_GETBALANCE = "805C000204"; //钱包
private static final String CMD_00B08E0000 = "00B08E0046";//读取卡是否有优惠
private static final String PERSONAL_INFORMATION = "00B0960037";//0016文件--卡片用户信息
private static final String OBU_DF01 = "00A4000002DF01"; //打开DF文件目录
private static final String OBU_EF01 = "00A4000002EF01"; //打开EF文件--车辆信息
private static final String OBU_00B400000A = "00B400000A";
private static final String OBU_4F00 = "4F00";
private static final String[] sendCos = {HOME_DIRECTORY, APPLICATION_DIRECTORY, CMD_READBINARY, CMD_GETBALANCE};//读取0015文件
private static final String[] sendCos2 = {HOME_DIRECTORY, PERSONAL_INFORMATION};//读取0016文件
private static final String[] sendCos3 = {HOME_DIRECTORY, OBU_SYSTEM_FILE};//读取OBU号

public Builder(Activity context) {
super(context);
Context = context;
setCustomView(R.layout.activity_my_bluetooth);
jlBydBleSDK = new JLBydBleSDK(context);
artcObuManger = ArtcObuManger.getInstance(context);
// artcBleAPI = ArtcBleAPI.getInstance(context);
//加载动画
loadingLay = findViewById(R.id.loading_lay);
@@ -143,9 +156,10 @@ public class BluetoothDialog {

}

default void BluetoothLinkIsSuccessful9901(int code) {
default void BluetoothLinkIsSuccessful9901(int code, int isPlk) {
}


default void close() {
}
}
@@ -323,9 +337,7 @@ public class BluetoothDialog {
// public void run() {
if (list.size() > 0) {
if (list.get(position).getName().startsWith("ETC")) {
if (list.get(position).getName().contains("CTSK") || list.get(position).getName().contains("JL")) {
new ConnectDeviceThread(list.get(position)).start();
}
new ConnectDeviceThread(list.get(position)).start();
} else {
connectDevice(plkCallBack, list.get(position));
}
@@ -356,8 +368,7 @@ public class BluetoothDialog {
}

/**
* 9901设备链接
* 烦死了,后续售后混在一起
*
*/
private class ConnectDeviceThread extends Thread {

@@ -369,19 +380,43 @@ public class BluetoothDialog {

@Override
public void run() {
if (d.getName().contains("CTSK") || d.getName().contains("JL")) {
jlBydBleSDK.connectDevice(d, resultStatus -> {
//链接提示
autoDismiss();
if (resultStatus.getCode() == 0) {
isPlk = JL;
Log.e("聚力", "链接成功");
ServiceObject serviceObjectCard = JSON.parseObject(JSON.toJSONString(jlBydBleSDK.ccGetCardInformation().getServiceObject()), ServiceObject.class);
if (serviceObjectCard.cardId.startsWith("5201")) {
isPlk = JL;
} else {
isPlk = HS_JL;
}
mDialog.dismiss();
mResult.BluetoothLinkIsSuccessful9901(resultStatus.getCode());
mResult.BluetoothLinkIsSuccessful9901(resultStatus.getCode(), isPlk);
}
}, resultStatus -> {
if (resultStatus.getCode() != 0) {
// new Utils().showMessDialog(Context,resultStatus.getMsg());
Log.e("聚力", "链接失败");
}
});
} else if (d.getName().contains("ATS")) {
autoDismiss();
artcObuManger.connectBleDev(d, new ArtcInterface.BleConnectCallBack() {
@Override
public void onFail(String s) {

}

@Override
public void onSuccess() {
isPlk = ATS;
mDialog.dismiss();
mResult.BluetoothLinkIsSuccessful9901(0, isPlk);
}
});
}
}
}

@@ -468,17 +503,235 @@ public class BluetoothDialog {
}
}

public static ServiceObject readCard(){
return JSON.parseObject(JSON.toJSONString(jlBydBleSDK.ccGetCardInformation().getServiceObject()), ServiceObject.class);
/**
* 读卡
*
* @param callBack
*/
public static void readCard(ReadCardCallBack callBack) {
if (isPlk == HS_JL) {
ServiceObject serviceObjectCard = JSON.parseObject(JSON.toJSONString(jlBydBleSDK.ccGetCardInformation().getServiceObject()), ServiceObject.class);
callBack.onSuccess(serviceObjectCard.cardId);
} else {
transCmd(sendCos, "10", new performCmdCallBack() {
@Override
public void performOnSuccess(String[] strings1) {
transCmd(sendCos2, "10", new performCmdCallBack() {
@Override
public void performOnSuccess(String[] strings2) {
CardReadInfoBean cardInfoBean = cardInfoParse(strings1, strings2);
Log.e("步骤", "5");
callBack.onSuccessCardBean(cardInfoBean);
callBack.onSuccess(cardInfoBean.cardNo);
}
});
}
});
}
}

public static ServiceObject readObu(){
return JSON.parseObject(JSON.toJSONString(jlBydBleSDK.ccReadObuSystemInfo().getServiceObject()), ServiceObject.class);
/**
* 读签
*
* @param callBack
*/
public static void readObu(ReadObuCallBack callBack) {
if (isPlk == HS_JL) {
ServiceObject serviceObjectObu = JSON.parseObject(JSON.toJSONString(jlBydBleSDK.ccReadObuSystemInfo().getServiceObject()), ServiceObject.class);
callBack.onSuccess(serviceObjectObu.contractNo);
} else {
transCmd(sendCos3, "20", new performCmdCallBack() {
@Override
public void performOnSuccess(String[] strings1) {
ObuReadInfoBean obuReadInfoBean = obuReadInfoParse(strings1);
transCmd(new String[]{OBU_DF01, "00B400000A000000000000000045" + obuReadInfoBean.rand}, "20", new performCmdCallBack() {
@Override
public void performOnSuccess(String[] strings2) {
obuReadInfoBean.cipherData = strings2[1].substring(0, strings2[1].length() - 4);
callBack.onSuccess(obuReadInfoBean.num);
callBack.onSuccessObuBean(obuReadInfoBean);
}
});
}
});
}
}

public static Object readEncryptedInfo(){
return jlBydBleSDK.readObuCarInfo(CardObuCommandManager.getInstance().initJLSdk(jlBydBleSDK).getCarInfoOBURand()).getServiceObject();
/**
* 指令执行
*/
public static void transCmd(String[] cmdArray, String cmdType, performCmdCallBack callBack) {
if (isPlk == ATS) {
artcObuManger.transCommand(cmdType.equals("10") ? 0 : 1, cmdArray, new ArtcInterface.SendDataCallBack() {
@Override
public void onFail(String errMsg) {
Log.e("Ats指令执行transCmd", errMsg);
}

@Override
public void onSuccess(String[] data) {
callBack.performOnSuccess(data);
}
});
} else if (isPlk == JL || isPlk == HS_JL) {
jlBydBleSDK.transCmd(cmdArray, cmdType, new Callback() {
@Override
public void onResult(ResultStatus resultStatus) {
Log.e("聚力读OBU", "读取合同序列号成功:" + JSON.toJSONString(resultStatus.getData()));
callBack.performOnSuccess(resultStatus.getData());
}
});
}
}

/**
* 卡内容解析
*
* @return
*/
private static CardReadInfoBean cardInfoParse(String[] data0015, String[] data0016) {
CardReadInfoBean cardInfoBean = new CardReadInfoBean();
String str = data0015[2].substring(data0015[2].length() - 4, data0015[2].length()); //判断是否为9000
String str3 = data0015[3].substring(data0015[3].length() - 4, data0015[3].length()); //判断是否为9000
Log.e("步骤", "1");
if (str.equals("9000") || str3.equals("9000")) {
Log.e("步骤", "2");
if (data0015[2].length() > 86 || data0015[3].length() >= 12) {
cardInfoBean.cardNo = data0015[2].substring(20, 40);
cardInfoBean.startTime = data0015[2].substring(40, 48);
cardInfoBean.endTime = data0015[2].substring(48, 56);
cardInfoBean.version = Integer.parseInt(data0015[1].substring(18, 19)) >= 4 ? "4x" : "2x";
cardInfoBean.money = data0015[3].substring(0, 8);
cardInfoBean.userType = Integer.parseInt(data0015[2].substring(80, 82), 16);
cardInfoBean.vehiclePlate = HexToStrig(data0015[2].substring(56, 80));
if (Integer.parseInt(data0015[2].substring(18, 19)) >= 4) {
//4x卡
Log.e("type[2]", data0015[2].substring(84, 86));
cardInfoBean.type = Integer.parseInt(data0015[2].substring(84, 86), 16);
cardInfoBean.vehiclePlateColor = Integer.parseInt(data0015[2].substring(82, 84), 16) + "";
} else {
//2x卡--获取车牌颜色
cardInfoBean.vehiclePlateColor = Integer.parseInt(data0015[2].substring(82, 86), 16) + "";
}
}
}
String str2 = data0016[1].substring(data0016[1].length() - 4, data0016[1].length());
if (str2.equals("9000")) {
Log.e("步骤", "3");
if (data0016[1].length() > 108) {
cardInfoBean.userName = HexToStrig(data0016[1].substring(4, 44)); //姓名
}
}
Log.e("步骤", "4");
return cardInfoBean;
}

/**
* OBU内容解析
* data2车辆识读
*
* @return
*/
public static ObuReadInfoBean obuReadInfoParse(String[] data) {
ObuReadInfoBean obuReadInfoBean = new ObuReadInfoBean();
if (data[1].length() > 52) {
obuReadInfoBean.num = data[1].substring(20, 36);
obuReadInfoBean.startTime = data[1].substring(36, 44);
obuReadInfoBean.endTime = data[1].substring(44, 52);
obuReadInfoBean.version = Integer.parseInt(data[1].substring(18, 19)) >= 4 ? "4x" : "2x";
obuReadInfoBean.isJH = "1".equals(data[1].substring(53, 54)) ? "是" : "0".equals(data[1].substring(53, 54)) ?
"否" : "其他:" + data[1].substring(53, 54);
obuReadInfoBean.rand = Integer.parseInt(data[1].substring(18, 20)) > 50 ? "40" : "00";
}
return obuReadInfoBean;
}

public static Object readEncryptedInfo() {
if (isPlk == JL) {
return jlBydBleSDK.readObuCarInfo(CardObuCommandManager.getInstance().initJLSdk(jlBydBleSDK).getCarInfoOBURand()).getServiceObject();
}
return null;
}

public static ServiceObject readServiceObjectCard() {
if (isPlk == JL || isPlk == HS_JL) {
ServiceObject serviceObjectCard = JSON.parseObject(JSON.toJSONString(jlBydBleSDK.ccGetCardInformation().getServiceObject()), ServiceObject.class);
return serviceObjectCard;
}
return null;
}

public static ServiceObject readServiceObjectObu() {
if (isPlk == JL || isPlk == HS_JL) {
ServiceObject serviceObjectObu = JSON.parseObject(JSON.toJSONString(jlBydBleSDK.ccReadObuSystemInfo().getServiceObject()), ServiceObject.class);
return serviceObjectObu;
}
return null;
}
}

public interface performCmdCallBack {
void performOnSuccess(String[] strings);
}

public interface ReadCardCallBack {
void onSuccess(String s);

default void onSuccessCardBean(CardReadInfoBean cardInfoBean) {
}

;

void onFail(String s);
}

public interface ReadObuCallBack {
void onSuccess(String s);

default void onSuccessObuBean(ObuReadInfoBean obuInfoBean) {
}

;

void onFail(String s);
}

/**
* 十六进制转汉字
*
* @param data
* @return
*/
public static String HexToStrig(String data) {
String str = data.substring(data.length() - 2);
while ("00".equals(str)) {
data = data.substring(0, data.length() - 2);
if (data.length() == 0) {
return "";
}
str = data.substring(data.length() - 2);
}
byte[] asd = UtilTool.hexStringToByteArray(data);
try {
str = new String(asd, guessEncoding(asd));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return str;
}

public static String guessEncoding(byte[] bytes) {
String[] encodings = {"UTF-8", "GBK", "ISO-8859-1", "GB2312", "UTF-16BE", "UTF-16LE", "UTF-32BE", "UTF-32LE"};
for (String encoding : encodings) {
try {
String str = new String(bytes, Charset.forName(encoding));
byte[] bytes2 = str.getBytes(Charset.forName(encoding));
if (bytes.length == bytes2.length) {
return encoding;
}
} catch (Exception e) {
}
}
return null;
}
}

+ 1
- 0
app/src/main/java/com/huntersun/vkyes/etcopencard/project/bluetooth/BluetoothLoop.java Просмотреть файл

@@ -66,6 +66,7 @@ public class BluetoothLoop {
bean.setPreBalance(0L); //之前的卡内余额
bean.setTradeType(tradeType); //交易类型
bean.setStaffId(bean.getOpId());
bean.setCardVersion(Integer.parseInt(BoxManagers.mCardInfoBean.getCard_version())>=40 ? "2" : "1");
MyRetrofit.newInstance(mContext, IFCode.IFCODE69, bean, new MyRetrofit.ReturnResult() {
@Override
public void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent) {

+ 139
- 30
app/src/main/java/com/huntersun/vkyes/etcopencard/project/bluetooth/BluetoothReadUtils.java Просмотреть файл

@@ -2,6 +2,10 @@ package com.huntersun.vkyes.etcopencard.project.bluetooth;

import android.util.Log;

import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;

import com.alibaba.fastjson.JSONObject;
import com.blankj.utilcode.util.LogUtils;
import com.google.gson.Gson;
@@ -9,6 +13,7 @@ import com.huntersun.vky.obublelib.bean.CardInfoBean;
import com.huntersun.vky.obublelib.bean.DecryptVehicleApduBean;
import com.huntersun.vky.obublelib.box.BoxManagers;
import com.huntersun.vky.obublelib.util.UtilTool;
import com.huntersun.vkyes.etcopencard.R;
import com.huntersun.vkyes.etcopencard.project.api.Api;
import com.huntersun.vkyes.etcopencard.project.api.Converter;
import com.huntersun.vkyes.etcopencard.project.api.MyRetrofit;
@@ -17,14 +22,20 @@ import com.huntersun.vkyes.etcopencard.project.api.Result;
import com.huntersun.vkyes.etcopencard.project.api.bean.EnumBean;
import com.huntersun.vkyes.etcopencard.project.api.bean.IFCode;
import com.huntersun.vkyes.etcopencard.project.api.bean.ResultBean;
import com.huntersun.vkyes.etcopencard.project.bluetooth.bean.CardReadInfoBean;
import com.huntersun.vkyes.etcopencard.project.bluetooth.bean.ObuReadInfoBean;
import com.huntersun.vkyes.etcopencard.project.tool.Utils;
import com.huntersun.vkyes.etcopencard.project.ui.activity.mail.InfoTabActivity;
import com.huntersun.vkyes.etcopencard.project.view.CommonDividerItemDecoration;
import com.huntersun.vkyes.etcopencard.src.app.AppActivity;
import com.huntersun.vkyes.etcopencard.src.manager.ActivityManager;
import com.huntersun.vkyes.etcopencard.src.ui.activity.LoginActivity;

import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import retrofit2.Response;
@@ -49,42 +60,127 @@ public class BluetoothReadUtils {
cardObuIfoBean.cardPlate = card.getLicense_plate_ID();
cardObuIfoBean.cardPlateColor = EnumBean.backValue(String.valueOf(Integer.valueOf(card.getLicense_plate_color())), EnumBean.VEHICLE_COLOR);
cardObuIfoBean.cardPlateId = card.getLicense_plate_ID() + "_" + (Integer.parseInt(card.getLicense_plate_color()));
Map<String, String> params = new HashMap<>();
params.put("fileData", BoxManagers.mDecryptVehicleApduBean.getEncryptData());
params.put("obuSerailNo", BoxManagers.mDecryptVehicleApduBean.getContractNo());
MyRetrofit.newInstanceGZ(activity, true, IFCode.IFCODE90, params, new MyRetrofit.ReturnResult() {
@Override
public void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent1) {
Log.e("OBU在线解密~~~", JSONObject.toJSONString(resultBean.getData()));
ResultBean.ProductInfo decVehInfo =new Gson().fromJson(String.valueOf(resultBean.getData()), ResultBean.ProductInfo.class);
ResultBean.BizContent data =new Gson().fromJson(new Gson().toJson(decVehInfo.data), ResultBean.BizContent.class);
ResultBean.BizContent bizContent = DecVehInfo(data.getFileData());
cardObuIfoBean.obuId = BoxManagers.mDecryptVehicleApduBean.getContractNo();
cardObuIfoBean.obuPlate = bizContent.getVehiclePlate();
cardObuIfoBean.obuPlateColor = EnumBean.backValue(bizContent.getVehiclePlateColor(), EnumBean.VEHICLE_COLOR);
cardObuIfoBean.obuPlateId = bizContent.getVehiclePlate() + "_" + (Integer.parseInt(bizContent.getVehiclePlateColor()));
Log.e("obuPlateId",cardObuIfoBean.obuPlateId+"");
Log.e("obuPlateId",cardObuIfoBean.cardPlateId+"");

//判断卡和obu是否是配套的
if (!cardObuIfoBean.cardPlateId.equals(cardObuIfoBean.obuPlateId)){
String errorMsg = "卡中读出的车牌编号和obu中车牌编号不一致,请更换成匹配的卡或者obu设备";
if (callback != null){
callback.readResultFail(errorMsg);
String s = writeObu("00A40000023F00,00B0810063");
String [] res = s.split(",");
if (s.split(",")[1].endsWith("9000")) {
Map<String, String> params = new HashMap<>();
params.put("cipherData", BoxManagers.mDecryptVehicleApduBean.getEncryptData());
params.put("contractSN", BoxManagers.mDecryptVehicleApduBean.getContractNo());
params.put("reqType", "00");
params.put("keyIndex", Integer.parseInt(res[1].substring(18, 20)) > 50 ? "40" : "00");
params.put("proviceCode", "5201");
MyRetrofit.newInstanceGZ(activity, IFCode.IFCODE90, params, new MyRetrofit.ReturnResult() {
@Override
public void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent) {
Log.e("OBU在线解密~~~", JSONObject.toJSONString(resultBean.getData()));
// ResultBean.ProductInfo decVehInfo = new Gson().fromJson(String.valueOf(resultBean.getData()), ResultBean.ProductInfo.class);
// ResultBean.BizContent data = new Gson().fromJson(new Gson().toJson(decVehInfo.data), ResultBean.BizContent.class);
// ResultBean.BizContent bizContent = DecVehInfo(data.getFileData());
cardObuIfoBean.obuId = BoxManagers.mDecryptVehicleApduBean.getContractNo();
cardObuIfoBean.obuPlate = bizContent.getVehiclePlate();
cardObuIfoBean.obuPlateColor = EnumBean.backValue(bizContent.getVehiclePlateColor(), EnumBean.VEHICLE_COLOR);
cardObuIfoBean.obuPlateId = bizContent.getVehiclePlate() + "_" + (Integer.parseInt(bizContent.getVehiclePlateColor()));
Log.e("obuPlateId", cardObuIfoBean.obuPlateId + "");
Log.e("obuPlateId", cardObuIfoBean.cardPlateId + "");

//判断卡和obu是否是配套的
if (!cardObuIfoBean.cardPlateId.equals(cardObuIfoBean.obuPlateId)) {
String errorMsg = "卡中读出的车牌编号和obu中车牌编号不一致,请更换成匹配的卡或者obu设备";
if (callback != null) {
callback.readResultFail(errorMsg);
}
new Utils().showMessDialog(activity, errorMsg, dialog -> {
});
return;
}

if (callback != null) {
LogUtils.e("查询卡签信息成功>>>>", cardObuIfoBean.cardPlateId + ":" + cardObuIfoBean.obuPlateId);
callback.readResultSuccess(cardObuIfoBean);
}
new Utils().showMessDialog(activity, errorMsg, dialog -> { });
return;
}

if (callback != null){
LogUtils.e("查询卡签信息成功>>>>",cardObuIfoBean.cardPlateId + ":" + cardObuIfoBean.obuPlateId);
callback.readResultSuccess(cardObuIfoBean);
@Override
public void onError(Response<Result> resp) {
MyRetrofit.ReturnResult.super.onError(resp);
activity.hideDialog();
}
});
}
}

@Override
public void success9901(int isPlk) {
activity.post(new Runnable() {
@Override
public void run() {
activity.showDialog();
}
});
BluetoothDialog.Builder.readCard(new BluetoothDialog.ReadCardCallBack() {
@Override
public void onSuccess(String s) {
Log.e("Ats卡号",s);
}

@Override
public void onError(Response<Result> resp) {
MyRetrofit.ReturnResult.super.onError(resp);
public void onSuccessCardBean(CardReadInfoBean cardInfoBean) {
BluetoothDialog.Builder.readObu(new BluetoothDialog.ReadObuCallBack() {
@Override
public void onSuccess(String s) {
Log.e("AtsObu号",s);
}

@Override
public void onSuccessObuBean(ObuReadInfoBean obuInfoBean) {
activity.hideDialog();
CardObuIfoBean cardObuIfoBean = new CardObuIfoBean();
cardObuIfoBean.cardId = cardInfoBean.cardNo;
cardObuIfoBean.cardPlate = cardInfoBean.vehiclePlate;
cardObuIfoBean.cardPlateColor = cardInfoBean.vehiclePlateColor;
cardObuIfoBean.cardPlateId = cardInfoBean.vehiclePlate+"_"+cardInfoBean.vehiclePlateColor;
cardObuIfoBean.obuId = obuInfoBean.num;
Map<String, String> params = new HashMap<>();
params.put("cipherData", obuInfoBean.cipherData);
params.put("contractSN", obuInfoBean.num);
params.put("reqType", "00");
params.put("keyIndex", obuInfoBean.rand);
params.put("proviceCode", "5201");
MyRetrofit.newInstanceGZ(activity, IFCode.IFCODE90, params, new MyRetrofit.ReturnResult() {
@Override
public void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent) {
Log.e("OBU在线解密~~~", JSONObject.toJSONString(resultBean.getData()));
cardObuIfoBean.obuPlate = bizContent.getVehiclePlate();
cardObuIfoBean.obuPlateColor = bizContent.getVehiclePlateColor();
cardObuIfoBean.obuPlateId = bizContent.getVehiclePlate()+"_"+bizContent.getVehiclePlateColor();
//判断卡和obu是否是配套的
if (!cardObuIfoBean.cardPlateId.equals(cardObuIfoBean.obuPlateId)) {
String errorMsg = "卡中读出的车牌编号和obu中车牌编号不一致,请更换成匹配的卡或者obu设备";
if (callback != null) {
callback.readResultFail(errorMsg);
}
new Utils().showMessDialog(activity, errorMsg, dialog -> {
});
return;
}

if (callback != null) {
LogUtils.e("查询卡签信息成功>>>>", cardObuIfoBean.cardPlateId + ":" + cardObuIfoBean.obuPlateId);
callback.readResultSuccess(cardObuIfoBean);
}
}
});
}

@Override
public void onFail(String s) {
activity.hideDialog();
}
});
}

@Override
public void onFail(String s) {
activity.hideDialog();
}
});
@@ -93,7 +189,6 @@ public class BluetoothReadUtils {
@Override
public void close() {
activity.hideDialog();
//activity.toast("蓝牙已关闭");
}
});
}
@@ -186,6 +281,20 @@ public class BluetoothReadUtils {
//需要其他参数可自己添加
}

//老SDK
@NonNull
private static String writeObu(String cmd) {
StringBuilder buffer = new StringBuilder();
String[] commands_arry = cmd.split(","); //命令排列
for (int i = 0; i < commands_arry.length; i++) {
buffer.append(MethodManager.sendApduEsam(commands_arry[i]).getServiceInfo());
if (i != commands_arry.length - 1) {
buffer.append(",");
}
}
return buffer.toString();
}

public interface INReadResultCallback{
void readResultSuccess(CardObuIfoBean cardObuIfoBean);
default void readResultFail(String msg){};

+ 15
- 0
app/src/main/java/com/huntersun/vkyes/etcopencard/project/bluetooth/bean/CardReadInfoBean.java Просмотреть файл

@@ -0,0 +1,15 @@
package com.huntersun.vkyes.etcopencard.project.bluetooth.bean;
public class CardReadInfoBean {
public String cardNo;
public String startTime;
public String endTime;
public String version;
public String money;
public int userType;
public String vehiclePlate;
public int type;
public String vehiclePlateColor;
public String userName;
public String idNum;
}

+ 22
- 0
app/src/main/java/com/huntersun/vkyes/etcopencard/project/bluetooth/bean/ObuReadInfoBean.java Просмотреть файл

@@ -0,0 +1,22 @@
package com.huntersun.vkyes.etcopencard.project.bluetooth.bean;
public class ObuReadInfoBean {
public String num;
public String startTime;
public String endTime;
public String version;
public String isJH;
public String rand;
public String approvedCount;
public String axleCount;
public String axleDistance;
public String engineNum;
public String type;
public String userType;
public String vehiclePlate;
public String vehiclePlateColor;
public String vin;
public String wheelCount;
public String outsideDimensions;
public String cipherData;
}

+ 1
- 1
app/src/main/java/com/huntersun/vkyes/etcopencard/project/copapply/ObuActivateRequester.java Просмотреть файл

@@ -157,7 +157,7 @@ public class ObuActivateRequester implements ToastAction {
bean.setSensitiveOrderId(obuDetailInfoBean.getOrderId());
}
//写激活信息(普通车)--激活OBU
MyRetrofit.newInstance(context,true, IFCode.IFCODE76, bean, new MyRetrofit.ReturnResult() {
MyRetrofit.newInstanceGZ(context,true, IFCode.IFCODE76, bean, new MyRetrofit.ReturnResult() {
@Override
public void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent) {
ResultBean.BizRemarks data =

+ 2
- 0
app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/activity/after/RechargeRecordActivity.java Просмотреть файл

@@ -272,6 +272,7 @@ public class RechargeRecordActivity extends AppActivity implements OnRefreshLoad
bean.setPreBalance(Long.parseLong(FunHelper.changeY2F(BoxManagers.mCardInfoBean.getMoney() + ""))); //交易前卡内金额
bean.setTradeType("14"); //交易类型
bean.setStaffId(bean.getOpId()); //人
bean.setCardVersion(Integer.parseInt(BoxManagers.mCardInfoBean.getCard_version())>=40 ? "2" : "1");
MyRetrofit.newInstance(getActivity(), IFCode.IFCODE69, bean, new MyRetrofit.ReturnResult() {
@Override
public void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent) {
@@ -308,6 +309,7 @@ public class RechargeRecordActivity extends AppActivity implements OnRefreshLoad
bean.setPreBalance(Long.parseLong(FunHelper.changeY2F(BoxManagers.mCardInfoBean.getMoney() + ""))); //读卡内余额
bean.setTradeType("14"); //交易类型
bean.setStaffId(bean.getOpId()); //人
bean.setCardVersion(Integer.parseInt(BoxManagers.mCardInfoBean.getCard_version())>=40 ? "2" : "1");
MyRetrofit.newInstance(getActivity(), IFCode.IFCODE69, bean, new MyRetrofit.ReturnResult() {
@Override
public void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent) {

+ 1
- 1
app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/activity/after/RechargeRecordContinueStepActivity.java Просмотреть файл

@@ -127,7 +127,7 @@ public class RechargeRecordContinueStepActivity extends AppActivity {
bean2.setChannelType("1");
bean2.setTerminalId("999999999999");
bean2.setStaffId(bean2.getOpId()); //人
bean2.setCardVersion(Integer.parseInt(BoxManagers.mCardInfoBean.getCard_version())>=40 ? "2" : "1");
MyRetrofit.newInstance(RechargeRecordContinueStepActivity.this, IFCode.IFCODE69, bean2, new MyRetrofit.ReturnResult() {
@Override
public void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent1) {

+ 1
- 1
app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/activity/after/TopDefrayActivity.java Просмотреть файл

@@ -144,7 +144,7 @@ public class TopDefrayActivity extends AppActivity implements StatusAction {
bean2.setChannelType("1");
bean2.setTerminalId("999999999999");
bean2.setStaffId(bean2.getOpId()); //人
bean2.setCardVersion(Integer.parseInt(BoxManagers.mCardInfoBean.getCard_version())>=40 ? "2" : "1");
MyRetrofit.newInstance(TopDefrayActivity.this, IFCode.IFCODE69, bean2, new MyRetrofit.ReturnResult() {
@Override
public void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent1) {

+ 25
- 24
app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/activity/after/TopEntrapmentActivity.java Просмотреть файл

@@ -83,11 +83,11 @@ public class TopEntrapmentActivity extends AppActivity implements INRechargeChoo
}

private void checkRecharge() {
HashMap<String,Object> params = new HashMap<>();
params.put("cardId",cardId);
params.put("fee",1L);
params.put("preBalance",0L);
params.put("tradeType",14);
HashMap<String, Object> params = new HashMap<>();
params.put("cardId", cardId);
params.put("fee", 1L);
params.put("preBalance", 0L);
params.put("tradeType", 14);
MyRetrofit.newInstanceGZ(getActivity(), IFCode.IFCODE69, params, new MyRetrofit.ReturnResult() {
@Override
public void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent1) {
@@ -104,8 +104,8 @@ public class TopEntrapmentActivity extends AppActivity implements INRechargeChoo
@Override
public void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent) {
//判断是否有未充值的订单
rechargeOrder = (ResultBean.BizContent) bizContent.getOrders().get(0);
if (bizContent.getOrders() != null && bizContent.getOrders().size() > 0) {
rechargeOrder = (ResultBean.BizContent) bizContent.getOrderDTOs().get(0);
if (bizContent.getOrderDTOs() != null && bizContent.getOrderDTOs().size() > 0) {
new MessageDialog.Builder(TopEntrapmentActivity.this)
.setTitle("提示")
.setMessage("查询存在已支付未充值订单,是否确认前往充值")
@@ -116,12 +116,12 @@ public class TopEntrapmentActivity extends AppActivity implements INRechargeChoo
bluetoothLink(new Currency() {
@Override
public void success() {
HashMap<String,Object> params = new HashMap<>();
params.put("cardId",cardId);
params.put("fee",rechargeOrder.getRechargeMoney());
params.put("preBalance",Long.parseLong(FunHelper.changeY2F(BoxManagers.mCardInfoBean.getMoney() + "")));
params.put("tradeType",14);
// params.put("cardVersion","2");
HashMap<String, Object> params = new HashMap<>();
params.put("cardId", cardId);
params.put("fee", rechargeOrder.getRechargeMoney());
params.put("preBalance", Long.parseLong(FunHelper.changeY2F(BoxManagers.mCardInfoBean.getMoney() + "")));
params.put("tradeType", 14);
params.put("cardVersion", Integer.parseInt(BoxManagers.mCardInfoBean.getCard_version())>=40 ? "2" : "1");
MyRetrofit.newInstanceGZ(getActivity(), IFCode.IFCODE69, params, new MyRetrofit.ReturnResult() {
@Override
public void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent2) {
@@ -233,11 +233,11 @@ public class TopEntrapmentActivity extends AppActivity implements INRechargeChoo
* 调用圈存检测->圈存修复->圈存申请->圈存确认
*/
private void doRecharge() {
HashMap<String,Object> params = new HashMap<>();
params.put("cardId",cardId);
params.put("fee",Long.valueOf(FunHelper.changeY2F(moneyInfo.payMoney)));
params.put("preBalance",0L);
params.put("tradeType",14);
HashMap<String, Object> params = new HashMap<>();
params.put("cardId", cardId);
params.put("fee", Long.valueOf(FunHelper.changeY2F(moneyInfo.payMoney)));
params.put("preBalance", 0L);
params.put("tradeType", 14);
MyRetrofit.newInstanceGZ(getActivity(), IFCode.IFCODE69, params, new MyRetrofit.ReturnResult() {
@Override
public void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent) {
@@ -350,11 +350,12 @@ public class TopEntrapmentActivity extends AppActivity implements INRechargeChoo

//圈存检测
public void inventoryDetection(Callback callback, ResultBean.BizContent bizContent) {
HashMap<String,Object> params = new HashMap<>();
params.put("cardId",cardId);
params.put("fee",bizContent.getRechargeMoney());
params.put("preBalance",Long.parseLong(FunHelper.changeY2F(BoxManagers.mCardInfoBean.getMoney()+"")));
params.put("tradeType",14);
HashMap<String, Object> params = new HashMap<>();
params.put("cardId", cardId);
params.put("fee", bizContent.getRechargeMoney());
params.put("preBalance", Long.parseLong(FunHelper.changeY2F(BoxManagers.mCardInfoBean.getMoney() + "")));
params.put("tradeType", 14);
params.put("cardVersion",Integer.parseInt(BoxManagers.mCardInfoBean.getCard_version())>=40 ? "2" : "1");
// params.put("cardVersion","2");
MyRetrofit.newInstanceGZ(getActivity(), IFCode.IFCODE69, params, new MyRetrofit.ReturnResult() {
@Override
@@ -416,7 +417,7 @@ public class TopEntrapmentActivity extends AppActivity implements INRechargeChoo
SendTheVerificationCodeBean bean = new SendTheVerificationCodeBean();
bean.setCardId(cardId); //卡号
bean.setFee(bizContent.getRechargeMoney()); //充值金额
bean.setPreBalance(Long.parseLong(FunHelper.changeY2F(BoxManagers.mCardInfoBean.getMoney()+""))); //交易前卡额
bean.setPreBalance(Long.parseLong(FunHelper.changeY2F(BoxManagers.mCardInfoBean.getMoney() + ""))); //交易前卡额
bean.setTradeType("14"); //交易类型 4
bean.setRechargeId(bizContent.getRechargeId()); //设置充值Id
bean.setCommand(bizContent.getCommand()); //指令

+ 23
- 5
app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/activity/mail/FormDeliveryActivity.java Просмотреть файл

@@ -76,14 +76,32 @@ public class FormDeliveryActivity extends AppActivity {
}

@Override
public void success9901() {
public void success9901(int isPlk) {
FormDeliveryActivity.this.post(new Runnable() {
@Override
public void run() {
ServiceObject serviceObjectCard = BluetoothDialog.Builder.readCard();
ServiceObject serviceObjectObu = BluetoothDialog.Builder.readObu();
binding.text3.setText(serviceObjectCard.cardId); //卡号
binding.text4.setText(serviceObjectObu.contractNo); //签号
BluetoothDialog.Builder.readCard(new BluetoothDialog.ReadCardCallBack() {
@Override
public void onSuccess(String s) {
binding.text3.setText(s); //卡号
}

@Override
public void onFail(String s) {

}
});
BluetoothDialog.Builder.readObu(new BluetoothDialog.ReadObuCallBack() {
@Override
public void onSuccess(String s) {
binding.text4.setText(s); //签号
}

@Override
public void onFail(String s) {

}
});
binding.lyCardType.setVisibility(View.GONE);
}
});

+ 241
- 115
app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/activity/mail/InfoTabActivity.java Просмотреть файл

@@ -4,6 +4,7 @@ import android.annotation.SuppressLint;
import android.util.Log;
import android.view.View;

import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;

@@ -30,6 +31,9 @@ import com.huntersun.vkyes.etcopencard.project.api.bean.EnumBean;
import com.huntersun.vkyes.etcopencard.project.api.bean.IFCode;
import com.huntersun.vkyes.etcopencard.project.api.bean.ResultBean;
import com.huntersun.vkyes.etcopencard.project.bluetooth.BluetoothDialog;
import com.huntersun.vkyes.etcopencard.project.bluetooth.MethodManager;
import com.huntersun.vkyes.etcopencard.project.bluetooth.bean.CardReadInfoBean;
import com.huntersun.vkyes.etcopencard.project.bluetooth.bean.ObuReadInfoBean;
import com.huntersun.vkyes.etcopencard.project.ui.activity.ydplatform.bluetooth9901.bean.ServiceObject;
import com.huntersun.vkyes.etcopencard.project.ui.activity.ydplatform.manager.CardObuCommandManager;
import com.huntersun.vkyes.etcopencard.project.ui.activity.ydplatform.ydCode.YdCode;
@@ -71,140 +75,180 @@ public class InfoTabActivity extends AppActivity {
CardInfoBean card = BoxManagers.mCardInfoBean;
DecryptVehicleApduBean obu = BoxManagers.mDecryptVehicleApduBean;
//卡信息
//enumBeans.add(new EnumBean("卡内余额", card.getMoney() * 100 + "元"));
enumBeans.add(new EnumBean("卡号", card.getCard_No()));
//enumBeans.add(new EnumBean("发卡方标识", card.getIssuer()));
//储值卡22 记账卡23
enumBeans.add(new EnumBean("卡片类型", Long.valueOf(BoxManagers.mCardInfoBean.getCard_type(), 16) == 23 ? "记账卡" : "储值卡"));
enumBeans.add(new EnumBean("卡版本号", HexToInt(card.getCard_version()) + ""));
//enumBeans.add(new EnumBean("卡表面编号", card.getCard_surface_number() + ""));
enumBeans.add(new EnumBean("有效起始日期", card.getBegin_time() + ""));
enumBeans.add(new EnumBean("有效截止日期", card.getEnd_time() + ""));
enumBeans.add(new EnumBean("车牌号", card.getLicense_plate_ID() + ""));
enumBeans.add(new EnumBean("车牌颜色", EnumBean.backValue(String.valueOf(Integer.valueOf(card.getLicense_plate_color())), EnumBean.VEHICLE_COLOR)));
//enumBeans.add(new EnumBean("用户类型", card.getUser_type() + ""));
//enumBeans.add(new EnumBean("车型", card.getCar_type() + ""));
CommonDividerItemDecoration divider = new CommonDividerItemDecoration(InfoTabActivity.this,RecyclerView.VERTICAL);
divider.setDrawable(ContextCompat.getDrawable(InfoTabActivity.this, R.drawable.divider));
binding.recycler.addItemDecoration(divider);
binding.recycler2.addItemDecoration(divider);
binding.recycler.setAdapter(adapter);
binding.recycler2.setAdapter(adapter2);
// adapter.replaceData(enumBeans);
Map<String, String> params = new HashMap<>();
params.put("fileData", BoxManagers.mDecryptVehicleApduBean.getEncryptData());
params.put("obuSerailNo", BoxManagers.mDecryptVehicleApduBean.getContractNo());
MyRetrofit.newInstanceGZ(InfoTabActivity.this, true, IFCode.IFCODE90, params, new MyRetrofit.ReturnResult() {
@Override
public void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent1) {
Log.e("OBU在线解密~~~", JSONObject.toJSONString(resultBean.getData()));
ResultBean.ProductInfo decVehInfo =
Gson().fromJson(String.valueOf(resultBean.getData()), ResultBean.ProductInfo.class);
ResultBean.BizContent data = Gson().fromJson(Gson().toJson(decVehInfo.data), ResultBean.BizContent.class);
ResultBean.BizContent bizContent = DecVehInfo(data.getFileData());
HashMap<String,String> params4 = new HashMap<>();
params4.put("cardId",card.getCard_No());
params4.put("obuId",BoxManagers.mDecryptVehicleApduBean.getContractNo());
// params4.put("cardId","52011640230209370682");
// params4.put("obuId","5202152508006917");
MyRetrofit.newInstanceGZ(IFCode.IFCODE_QUERYCARDANDOBU, params4, new MyRetrofit.ReturnResult() {
@Override
public void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent3) {
obuBeans.add(new EnumBean("OBU设备号", BoxManagers.mDecryptVehicleApduBean.getContractNo()));
obuBeans.add(new EnumBean("车牌号码", bizContent.getVehiclePlate()));
obuBeans.add(new EnumBean("车牌颜色", EnumBean.backValue(bizContent.getVehiclePlateColor(), EnumBean.VEHICLE_COLOR)));
obuBeans.add(new EnumBean("收费车类型", EnumBean.backValue(bizContent.getType(), EnumBean.POSTCARTYPE)));
obuBeans.add(new EnumBean("用户类型", "0".equals(bizContent.getUserType()) ? "个人用户" : "单位用户"));
// obuBeans.add(new EnumBean("外廓尺寸",bizContent.getOutsideDimensions()));
obuBeans.add(new EnumBean("座位数", bizContent.getApprovedCount()));
obuBeans.add(new EnumBean("车轮数", bizContent.getWheelCount()));
obuBeans.add(new EnumBean("车轴数", bizContent.getAxleCount()));
obuBeans.add(new EnumBean("发动机号码", bizContent.getEngineNum()));
// obuBeans.add(new EnumBean("有效截止日期", bizContent.getEngineNum()));
obuBeans.add(new EnumBean("OBU状态", null==bizContent3.getObuStatus() ? "" : EnumBean.backValue(bizContent3.getObuStatus(),EnumBean.OBU_STATUS)));
enumBeans.add(new EnumBean("卡状态", null==bizContent3.getCardStatus() ? "" : EnumBean.backValue(bizContent3.getCardStatus(),EnumBean.ETC_STATUS)));
adapter.replaceData(enumBeans);
adapter2.replaceData(obuBeans);
}

@Override
public void onError() {
obuBeans.add(new EnumBean("OBU设备号", BoxManagers.mDecryptVehicleApduBean.getContractNo()));
obuBeans.add(new EnumBean("车牌号码", bizContent.getVehiclePlate()));
obuBeans.add(new EnumBean("车牌颜色", EnumBean.backValue(bizContent.getVehiclePlateColor(), EnumBean.VEHICLE_COLOR)));
obuBeans.add(new EnumBean("收费车类型", EnumBean.backValue(bizContent.getType(), EnumBean.POSTCARTYPE)));
obuBeans.add(new EnumBean("用户类型", "1".equals(bizContent.getUserType()) ? "个人用户" : "单位用户"));
// obuBeans.add(new EnumBean("外廓尺寸",bizContent.getOutsideDimensions()));
obuBeans.add(new EnumBean("座位数", bizContent.getApprovedCount()));
obuBeans.add(new EnumBean("车轮数", bizContent.getWheelCount()));
obuBeans.add(new EnumBean("车轴数", bizContent.getAxleCount()));
obuBeans.add(new EnumBean("发动机号码", bizContent.getEngineNum()));
adapter.replaceData(enumBeans);
adapter2.replaceData(obuBeans);
}
});
String s = writeObu("00A40000023F00,00B0810063");
String [] res = s.split(",");
if (s.split(",")[1].endsWith("9000")){
Map<String, String> params = new HashMap<>();
params.put("cipherData", BoxManagers.mDecryptVehicleApduBean.getEncryptData());
params.put("contractSN", BoxManagers.mDecryptVehicleApduBean.getContractNo());
params.put("reqType", "00");
params.put("keyIndex", Integer.parseInt(res[1].substring(18, 20))> 50 ? "40" : "00");
params.put("proviceCode", "5201");
MyRetrofit.newInstanceGZ(InfoTabActivity.this, IFCode.IFCODE90, params, new MyRetrofit.ReturnResult() {
@Override
public void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent) {
Log.e("OBU在线解密~~~", JSONObject.toJSONString(resultBean.getData()));
// ResultBean.ProductInfo decVehInfo =
// Gson().fromJson(String.valueOf(resultBean.getData()), ResultBean.ProductInfo.class);
// ResultBean.BizContent data = Gson().fromJson(Gson().toJson(decVehInfo.data), ResultBean.BizContent.class);
// ResultBean.BizContent bizContent = DecVehInfo(data.getFileData());
HashMap<String,String> params4 = new HashMap<>();
params4.put("cardId",card.getCard_No());
params4.put("obuId",BoxManagers.mDecryptVehicleApduBean.getContractNo());
MyRetrofit.newInstanceGZ(IFCode.IFCODE_QUERYCARDANDOBU, params4, new MyRetrofit.ReturnResult() {
@Override
public void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent3) {
obuBeans.add(new EnumBean("OBU设备号", BoxManagers.mDecryptVehicleApduBean.getContractNo()));
obuBeans.add(new EnumBean("车牌号码", bizContent.getVehiclePlate()));
obuBeans.add(new EnumBean("车牌颜色", EnumBean.backValue(bizContent.getVehiclePlateColor(), EnumBean.VEHICLE_COLOR)));
obuBeans.add(new EnumBean("收费车类型", EnumBean.backValue(bizContent.getType(), EnumBean.POSTCARTYPE)));
obuBeans.add(new EnumBean("用户类型", "0".equals(bizContent.getUserType()) ? "个人用户" : "单位用户"));
obuBeans.add(new EnumBean("座位数", bizContent.getApprovedCount()));
obuBeans.add(new EnumBean("车轮数", bizContent.wheelsCount));
obuBeans.add(new EnumBean("车轴数", bizContent.getAxleCount()));
obuBeans.add(new EnumBean("发动机号码", bizContent.engineNumber));
obuBeans.add(new EnumBean("OBU状态", null==bizContent3.getObuStatus() ? "" : EnumBean.backValue(bizContent3.getObuStatus(),EnumBean.OBU_STATUS)));
enumBeans.add(new EnumBean("卡状态", null==bizContent3.getCardStatus() ? "" : EnumBean.backValue(bizContent3.getCardStatus(),EnumBean.ETC_STATUS)));
adapter.replaceData(enumBeans);
adapter2.replaceData(obuBeans);
}

}
});
@Override
public void onError() {
obuBeans.add(new EnumBean("OBU设备号", BoxManagers.mDecryptVehicleApduBean.getContractNo()));
obuBeans.add(new EnumBean("车牌号码", bizContent.getVehiclePlate()));
obuBeans.add(new EnumBean("车牌颜色", EnumBean.backValue(bizContent.getVehiclePlateColor(), EnumBean.VEHICLE_COLOR)));
obuBeans.add(new EnumBean("收费车类型", EnumBean.backValue(bizContent.getType(), EnumBean.POSTCARTYPE)));
obuBeans.add(new EnumBean("用户类型", "1".equals(bizContent.getUserType()) ? "个人用户" : "单位用户"));
// obuBeans.add(new EnumBean("外廓尺寸",bizContent.getOutsideDimensions()));
obuBeans.add(new EnumBean("座位数", bizContent.getApprovedCount()));
obuBeans.add(new EnumBean("车轮数", bizContent.getWheelCount()));
obuBeans.add(new EnumBean("车轴数", bizContent.getAxleCount()));
obuBeans.add(new EnumBean("发动机号码", bizContent.getEngineNum()));
adapter.replaceData(enumBeans);
adapter2.replaceData(obuBeans);
}
});

}
});
}
}

@Override
public void success9901() {
// //卡信息
ServiceObject serviceObjectCard = BluetoothDialog.Builder.readCard();
ServiceObject serviceObjectObu = BluetoothDialog.Builder.readObu();
Object encryptedInfo = BluetoothDialog.Builder.readEncryptedInfo();
Log.e("encryptedInfo~~~~~~~", encryptedInfo.toString());
InfoTabActivity.this.post(new Runnable() {
@Override
public void run() {
HashMap<String, Object> params = new HashMap<>();
params.put("obuId", serviceObjectObu.contractNo);
params.put("encryptedInfo", encryptedInfo.toString().replace("9000", ""));
params.put("filename", YdCode.YDCODE_OBUPLATEDATA);
MyRetrofit.ydNewInstance(InfoTabActivity.this, "", params, new MyRetrofit.ReturnResult() {
@Override
public void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent) {
InfoTabActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
List<EnumBean> enumBeans9901 = new ArrayList<>();
enumBeans9901.add(new EnumBean("卡号", serviceObjectCard.cardId));
//enumBeans.add(new EnumBean("发卡方标识", card.getIssuer()));
//储值卡22 记账卡23
// enumBeans.add(new EnumBean("卡片类型", Long.valueOf(BoxManagers.mCardInfoBean.getCard_type(), 16) == 23 ? "记账卡" : "储值卡"));
// enumBeans9901.add(new EnumBean("卡版本号", HexToInt(serviceObjectCard.cardVersion) + ""));
//enumBeans.add(new EnumBean("卡表面编号", card.getCard_surface_number() + ""));
enumBeans9901.add(new EnumBean("有效起始日期", serviceObjectCard.signedDate + ""));
enumBeans9901.add(new EnumBean("有效截止日期", serviceObjectCard.expiredDate + ""));
enumBeans9901.add(new EnumBean("车牌号", serviceObjectCard.vehicleNumber + ""));
// enumBeans9901.add(new EnumBean("车牌颜色", EnumBean.backValue(HexToInt(serviceObjectCard.plateColor), EnumBean.VEHICLE_COLOR)));
//enumBeans.add(new EnumBean("用户类型", card.getUser_type() + ""));
//enumBeans.add(new EnumBean("车型", card.getCar_type() + ""));
CommonDividerItemDecoration divider = new CommonDividerItemDecoration(InfoTabActivity.this,RecyclerView.VERTICAL);
divider.setDrawable(ContextCompat.getDrawable(InfoTabActivity.this, R.drawable.divider));
binding.recycler.addItemDecoration(divider);
binding.recycler2.addItemDecoration(divider);
binding.recycler.setAdapter(adapter);
binding.recycler2.setAdapter(adapter2);
LinkedTreeMap<String, Object> linkedTreeMap = JSON.parseObject(bizContent.vehicleInfo, LinkedTreeMap.class);
List<EnumBean> enumBeansObu9901 = new ArrayList<>();
enumBeansObu9901.add(new EnumBean("OBU设备号", serviceObjectObu.contractNo));
enumBeansObu9901.add(new EnumBean("有效起始日期", serviceObjectObu.startDate));
enumBeansObu9901.add(new EnumBean("有效截止日期", serviceObjectObu.endDate));
enumBeansObu9901.add(new EnumBean("车牌号", linkedTreeMap.get("plateNum").toString()));
enumBeansObu9901.add(new EnumBean("车牌颜色", EnumBean.backValue(null != linkedTreeMap.get("plateColor") ? linkedTreeMap.get("plateColor").toString() : "0", EnumBean.VEHICLE_COLOR)));
enumBeansObu9901.add(new EnumBean("收费车型", EnumBean.backValue(null != linkedTreeMap.get("type") ? linkedTreeMap.get("type").toString() : "1", EnumBean.POSTCARTYPE)));
enumBeansObu9901.add(new EnumBean("核定载人数",linkedTreeMap.get("approvedCount").toString()));
adapter.replaceData(enumBeans9901);
adapter2.replaceData(enumBeansObu9901);
}
});
}
});
}
});
public void success9901(int isPlk) {
if (isPlk == BluetoothDialog.Builder.HS_JL){
//卡信息
ServiceObject serviceObjectCard = BluetoothDialog.Builder.readServiceObjectCard();
ServiceObject serviceObjectObu = BluetoothDialog.Builder.readServiceObjectObu();
Object encryptedInfo = BluetoothDialog.Builder.readEncryptedInfo();
Log.e("encryptedInfo~~~~~~~", encryptedInfo.toString());
InfoTabActivity.this.post(new Runnable() {
@Override
public void run() {
HashMap<String, Object> params = new HashMap<>();
params.put("obuId", serviceObjectObu.contractNo);
params.put("encryptedInfo", encryptedInfo.toString().replace("9000", ""));
params.put("filename", YdCode.YDCODE_OBUPLATEDATA);
MyRetrofit.ydNewInstance(InfoTabActivity.this, "", params, new MyRetrofit.ReturnResult() {
@Override
public void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent) {
InfoTabActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
List<EnumBean> enumBeans9901 = new ArrayList<>();
enumBeans9901.add(new EnumBean("卡号", serviceObjectCard.cardId));
enumBeans9901.add(new EnumBean("有效起始日期", serviceObjectCard.signedDate + ""));
enumBeans9901.add(new EnumBean("有效截止日期", serviceObjectCard.expiredDate + ""));
enumBeans9901.add(new EnumBean("车牌号", serviceObjectCard.vehicleNumber + ""));
CommonDividerItemDecoration divider = new CommonDividerItemDecoration(InfoTabActivity.this,RecyclerView.VERTICAL);
divider.setDrawable(ContextCompat.getDrawable(InfoTabActivity.this, R.drawable.divider));
binding.recycler.addItemDecoration(divider);
binding.recycler2.addItemDecoration(divider);
binding.recycler.setAdapter(adapter);
binding.recycler2.setAdapter(adapter2);
LinkedTreeMap<String, Object> linkedTreeMap = JSON.parseObject(bizContent.vehicleInfo, LinkedTreeMap.class);
List<EnumBean> enumBeansObu9901 = new ArrayList<>();
enumBeansObu9901.add(new EnumBean("OBU设备号", serviceObjectObu.contractNo));
enumBeansObu9901.add(new EnumBean("有效起始日期", serviceObjectObu.startDate));
enumBeansObu9901.add(new EnumBean("有效截止日期", serviceObjectObu.endDate));
enumBeansObu9901.add(new EnumBean("车牌号", linkedTreeMap.get("plateNum").toString()));
enumBeansObu9901.add(new EnumBean("车牌颜色", EnumBean.backValue(null != linkedTreeMap.get("plateColor") ? linkedTreeMap.get("plateColor").toString() : "0", EnumBean.VEHICLE_COLOR)));
enumBeansObu9901.add(new EnumBean("收费车型", EnumBean.backValue(null != linkedTreeMap.get("type") ? linkedTreeMap.get("type").toString() : "1", EnumBean.POSTCARTYPE)));
enumBeansObu9901.add(new EnumBean("核定载人数",linkedTreeMap.get("approvedCount").toString()));
adapter.replaceData(enumBeans9901);
adapter2.replaceData(enumBeansObu9901);
}
});
}
});
}
});
}else{
InfoTabActivity.this.post(new Runnable() {
@Override
public void run() {
showDialog();
}
});
BluetoothDialog.Builder.readCard(new BluetoothDialog.ReadCardCallBack() {
@Override
public void onSuccess(String s) {
Log.e("Ats卡号",s);
}

@Override
public void onSuccessCardBean(CardReadInfoBean cardInfoBean) {
InfoTabActivity.this.post(new Runnable() {
@Override
public void run() {
hideDialog();
upDateCard(cardInfoBean);
}
});
BluetoothDialog.Builder.readObu(new BluetoothDialog.ReadObuCallBack() {
@Override
public void onSuccess(String s) {
Log.e("AtsObu号",s);
}

@Override
public void onSuccessObuBean(ObuReadInfoBean obuInfoBean) {
InfoTabActivity.this.post(new Runnable() {
@Override
public void run() {
upDataObu(obuInfoBean, cardInfoBean);
}
});

}

@Override
public void onFail(String s) {
}
});
}

@Override
public void onFail(String s) {
}
});

}
}

@Override
@@ -215,6 +259,75 @@ public class InfoTabActivity extends AppActivity {

}

private void upDataObu(ObuReadInfoBean obuInfoBean, CardReadInfoBean cardInfoBean) {
CommonDividerItemDecoration divider = new CommonDividerItemDecoration(InfoTabActivity.this,RecyclerView.VERTICAL);
divider.setDrawable(ContextCompat.getDrawable(InfoTabActivity.this, R.drawable.divider));
binding.recycler2.addItemDecoration(divider);
binding.recycler2.setAdapter(adapter2);
Map<String, String> params = new HashMap<>();
params.put("cipherData", obuInfoBean.cipherData);
params.put("contractSN", obuInfoBean.num);
params.put("reqType", "00");
params.put("keyIndex", obuInfoBean.rand);
params.put("proviceCode", "5201");
MyRetrofit.newInstanceGZ(InfoTabActivity.this, IFCode.IFCODE90, params, new MyRetrofit.ReturnResult() {
@Override
public void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent) {
Log.e("OBU在线解密~~~", JSONObject.toJSONString(resultBean.getData()));
HashMap<String, String> params4 = new HashMap<>();
params4.put("cardId", cardInfoBean.cardNo);
params4.put("obuId", obuInfoBean.num);
MyRetrofit.newInstanceGZ(IFCode.IFCODE_QUERYCARDANDOBU, params4, new MyRetrofit.ReturnResult() {
@Override
public void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent3) {
List<EnumBean> enumBeansObu9901 = new ArrayList<>();
enumBeansObu9901.add(new EnumBean("OBU设备号", obuInfoBean.num));
enumBeansObu9901.add(new EnumBean("有效起始日期", obuInfoBean.startTime));
enumBeansObu9901.add(new EnumBean("有效截止日期", obuInfoBean.endTime));
enumBeansObu9901.add(new EnumBean("车牌号", bizContent.getVehiclePlate()));
enumBeansObu9901.add(new EnumBean("车牌颜色", EnumBean.backValue(bizContent.getVehiclePlateColor(), EnumBean.VEHICLE_COLOR)));
enumBeansObu9901.add(new EnumBean("收费车型", EnumBean.backValue(bizContent.collectionType, EnumBean.POSTCARTYPE)));
enumBeansObu9901.add(new EnumBean("核定载人数",bizContent.getApprovedCount()));
enumBeansObu9901.add(new EnumBean("OBU状态", null == bizContent3.getObuStatus() ? "" : EnumBean.backValue(bizContent3.getObuStatus(), EnumBean.OBU_STATUS)));
enumBeansObu9901.add(new EnumBean("卡状态", null == bizContent3.getCardStatus() ? "" : EnumBean.backValue(bizContent3.getCardStatus(), EnumBean.ETC_STATUS)));
adapter2.replaceData(enumBeansObu9901);
}

@Override
public void onError() {
List<EnumBean> enumBeansObu9901 = new ArrayList<>();
enumBeansObu9901.add(new EnumBean("OBU设备号", obuInfoBean.num));
enumBeansObu9901.add(new EnumBean("有效起始日期", obuInfoBean.startTime));
enumBeansObu9901.add(new EnumBean("有效截止日期", obuInfoBean.endTime));
enumBeansObu9901.add(new EnumBean("车牌号", bizContent.getVehiclePlate()));
enumBeansObu9901.add(new EnumBean("车牌颜色", EnumBean.backValue(bizContent.getVehiclePlateColor(), EnumBean.VEHICLE_COLOR)));
enumBeansObu9901.add(new EnumBean("收费车型", EnumBean.backValue(bizContent.collectionType, EnumBean.POSTCARTYPE)));
enumBeansObu9901.add(new EnumBean("核定载人数",bizContent.getApprovedCount()));
adapter2.replaceData(enumBeansObu9901);
}
});
}
});
}

private void upDateCard(CardReadInfoBean cardInfoBean) {
Log.e("cardReadBean:::",JSON.toJSONString(cardInfoBean));
List<EnumBean> enumBeans9901 = new ArrayList<>();
enumBeans9901.add(new EnumBean("卡号", cardInfoBean.cardNo));
//储值卡22 记账卡23
enumBeans9901.add(new EnumBean("卡版本号", cardInfoBean.version));
enumBeans9901.add(new EnumBean("有效起始日期", cardInfoBean.startTime));
enumBeans9901.add(new EnumBean("有效截止日期", cardInfoBean.endTime));
enumBeans9901.add(new EnumBean("车牌号", cardInfoBean.vehiclePlate));
enumBeans9901.add(new EnumBean("车牌颜色", EnumBean.backValue(cardInfoBean.vehiclePlateColor+"", EnumBean.VEHICLE_COLOR)));
enumBeans9901.add(new EnumBean("车型", EnumBean.backValue(cardInfoBean.type+"",EnumBean.POSTCARTYPE)));
CommonDividerItemDecoration divider = new CommonDividerItemDecoration(InfoTabActivity.this,RecyclerView.VERTICAL);
divider.setDrawable(ContextCompat.getDrawable(InfoTabActivity.this, R.drawable.divider));
binding.recycler.addItemDecoration(divider);
binding.recycler.setAdapter(adapter);
adapter.replaceData(enumBeans9901);
}

public static String guessEncoding(byte[] bytes) {
String[] encodings = {"UTF-8", "GBK", "ISO-8859-1", "GB2312", "UTF-16BE", "UTF-16LE", "UTF-32BE", "UTF-32LE"};
for (String encoding : encodings) {
@@ -312,6 +425,19 @@ public class InfoTabActivity extends AppActivity {
return str;
}

@NonNull
private String writeObu(String cmd) {
StringBuilder buffer = new StringBuilder();
String[] commands_arry = cmd.split(","); //命令排列
for (int i = 0; i < commands_arry.length; i++) {
buffer.append(MethodManager.sendApduEsam(commands_arry[i]).getServiceInfo());
if (i != commands_arry.length - 1) {
buffer.append(",");
}
}
return buffer.toString();
}

public static byte[] hexStringToByteArray(String text) {
if (text == null)
return null;

+ 59
- 58
app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/activity/obu/ObuActivationBLESearchActivity.java Просмотреть файл

@@ -149,7 +149,7 @@ public class ObuActivationBLESearchActivity extends AppActivity {
params.put("random", BoxManagers.mWriteVehicleInfoBean.getRand());
params.put("sensitiveOrderId", orderNo);
//写激活信息(普通车)--激活OBU
MyRetrofit.newInstanceGZ(ObuActivationBLESearchActivity.this, true, IFCode.IFCODE_VFJ_WRITE_ACTIVATION, params, new MyRetrofit.ReturnResult() {
MyRetrofit.newInstanceGZ(ObuActivationBLESearchActivity.this, true, IFCode.IFCODE76, params, new MyRetrofit.ReturnResult() {
@Override
public void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent) {
ResultBean.BizRemarks data =
@@ -287,47 +287,12 @@ public class ObuActivationBLESearchActivity extends AppActivity {
@SuppressLint("LogNotTimber")
@Override
public void BluetoothLinkIsSuccessful(BoxManagers boxManagers) {
// HashMap<String, String> params = new HashMap<>();
// params.put("orderId", bizContent1.getOrderId());
// MyRetrofit.newInstance(ObuActivationBLESearchActivity.this, IFCode.IFCODE_CANCLE_BY_ORDER, params, new MyRetrofit.ReturnResult() {
// @Override
// public void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent) {
// boolean cardId = TextUtils.isEmpty(bizContent1.getCardId());
// String cardStatus = bizContent1.getCardStatus() == null ? "0" : bizContent1.getCardStatus();
// boolean obuId = TextUtils.isEmpty(bizContent1.getObuId());
// //0 未安装 11 已发行 -> 走激活 9 发行申请 -> 发行
// String obuStatus = bizContent1.getObuStatus() == null ? "9" : bizContent1.getObuStatus();
// //OBU状态为 -> 1 2 3 4 5 6 7(直接走激活) 且卡状态不为 0 9 99
// //卡号 1 2 3 4 5 6(走申请) //签号 0 11 7 8 9 99(反向直接走申请)
// if (cardId && obuId) { //卡号为空
// cardOpeningApplication(bizContent1);
// //走卡发行
// } else if (!cardId && "0".equals(cardStatus) && !obuId && "9".equals(obuStatus)) { //卡号不为空 且状态为 0 (申请)
// //走卡发行
// cardOpeningApplication(bizContent1);
// } else if (cardId || "0".equals(cardStatus)) {
// cardOpeningApplication2(bizContent1);
// } else if (obuId) { //签号为空
// //走OBU发行
// openingApplication(bizContent1);
// } else if (!obuId && "9".equals(obuStatus)) { //签号不为空 且状态为 9 (申请)
// //走OBU发行
// openingApplication(bizContent1);
// } else if (!cardId && !obuId && ("1".equals(obuStatus) || "11".equals(obuStatus) ||
// "0".equals(obuStatus))) {
// //走发行申请
// deviceActivation(bizContent1);
// } else {
// cardOpeningApplication(bizContent1);
// }
activationCardAndObuApply("1", orderId);
// }
//
// @Override
// public void onError(Response<Result> resp) {
//
// }
// });
activationCardAndObuApply("1", orderId, -1);
}

@Override
public void BluetoothLinkIsSuccessful9901(int code, int isPlk) {
activationCardAndObuApply("1", orderId, isPlk);
}
})
.show();
@@ -340,7 +305,7 @@ public class ObuActivationBLESearchActivity extends AppActivity {
* @param orderId
* @return
*/
public void activationCardAndObuApply(String issueType, String orderId) {
public void activationCardAndObuApply(String issueType, String orderId, int isPlk) {
HashMap<String, String> parmas = new HashMap<>();
parmas.put("issueType", issueType);
parmas.put("orderId", orderId);
@@ -349,11 +314,29 @@ public class ObuActivationBLESearchActivity extends AppActivity {
public void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent) {
if (null != bizContent.cmd) {
if ("CARD".equals(bizContent.cmdType)) {
String cmdResult = BluetoothWriteCardWriteTab.writeCard(bizContent.cmd);
activationReCallBack(bizContent.cmd, cmdResult, bizContent.stepNo, bizContent.transOrderId);
if (isPlk != -1) {
BluetoothDialog.Builder.transCmd(bizContent.cmd.split(","), "10", new BluetoothDialog.performCmdCallBack() {
@Override
public void performOnSuccess(String[] strings) {
activationReCallBack(bizContent.cmd, TextUtils.join(",", strings), bizContent.stepNo, bizContent.transOrderId, isPlk);
}
});
} else {
String cmdResult = BluetoothWriteCardWriteTab.writeCard(bizContent.cmd);
activationReCallBack(bizContent.cmd, cmdResult, bizContent.stepNo, bizContent.transOrderId, isPlk);
}
} else {
StringBuilder buffer = writeObu(bizContent.cmd);
activationReCallBack(bizContent.cmd, buffer.toString(), bizContent.stepNo, bizContent.transOrderId);
if (isPlk != -1) {
BluetoothDialog.Builder.transCmd(bizContent.cmd.split(","), "20", new BluetoothDialog.performCmdCallBack() {
@Override
public void performOnSuccess(String[] strings) {
activationReCallBack(bizContent.cmd, TextUtils.join(",", strings), bizContent.stepNo, bizContent.transOrderId, isPlk);
}
});
} else {
StringBuilder buffer = writeObu(bizContent.cmd);
activationReCallBack(bizContent.cmd, buffer.toString(), bizContent.stepNo, bizContent.transOrderId, isPlk);
}
}
} else {
new MessageDialog.Builder(ObuActivationBLESearchActivity.this)
@@ -374,7 +357,7 @@ public class ObuActivationBLESearchActivity extends AppActivity {
* @param transOrderId 二发订单号
* @return
*/
public void activationReCallBack(String cmd, String cmdResult, String stepNo, String transOrderId) {
public void activationReCallBack(String cmd, String cmdResult, String stepNo, String transOrderId, int isPlk) {
HashMap<String, String> params = new HashMap<>();
params.put("transOrderId", transOrderId);
params.put("cmd", cmd);
@@ -391,23 +374,41 @@ public class ObuActivationBLESearchActivity extends AppActivity {
.setMessage("激活成功")
.show();
} else {
if (null != bizContent.cmd) {
if ("CARD".equals(bizContent.cmdType)) {
if (null != bizContent.cmd) {
if ("CARD".equals(bizContent.cmdType)) {
if (isPlk != -1) {
BluetoothDialog.Builder.transCmd(bizContent.cmd.split(","), "10", new BluetoothDialog.performCmdCallBack() {
@Override
public void performOnSuccess(String[] strings) {
activationReCallBack(bizContent.cmd, TextUtils.join(",", strings), bizContent.stepNo, bizContent.transOrderId, isPlk);
}
});
} else {
String cmdResult = BluetoothWriteCardWriteTab.writeCard(bizContent.cmd);
activationReCallBack(bizContent.cmd, cmdResult, bizContent.stepNo, bizContent.transOrderId);
activationReCallBack(bizContent.cmd, cmdResult, bizContent.stepNo, bizContent.transOrderId, isPlk);
}
} else {
if (isPlk != -1) {
BluetoothDialog.Builder.transCmd(bizContent.cmd.split(","), "20", new BluetoothDialog.performCmdCallBack() {
@Override
public void performOnSuccess(String[] strings) {
activationReCallBack(bizContent.cmd, TextUtils.join(",", strings), bizContent.stepNo, bizContent.transOrderId, isPlk);
}
});
} else {
StringBuilder buffer = writeObu(bizContent.cmd);
activationReCallBack(bizContent.cmd, buffer.toString(), bizContent.stepNo, bizContent.transOrderId);
activationReCallBack(bizContent.cmd, buffer.toString(), bizContent.stepNo, bizContent.transOrderId, isPlk);
}
}
}
}
}
}

@Override
public void onError (Response < Result > resp) {
}
});
}
@Override
public void onError(Response<Result> resp) {
}
});
}

@NonNull
private String writeObu2(String cmd) {

+ 53
- 12
app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/activity/order/OrderUtils.java Просмотреть файл

@@ -993,6 +993,11 @@ public class OrderUtils {
// });
versionCheck("", "", "", "1", bizContent1);
}

@Override
public void BluetoothLinkIsSuccessful9901(int code, int isPlk) {
activationCardAndObuApply("1", bizContent1.orderNo,isPlk);
}
})
.show();
}
@@ -1010,7 +1015,7 @@ public class OrderUtils {
// @Override
// public void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent) {
// if ("100".equals(bizContent.stepNo)) {
activationCardAndObuApply("1", bizContent1.orderNo);
activationCardAndObuApply("1", bizContent1.orderNo,-1);
// } else {
// if ("CARD".equals(bizContent.cmdType)) {
// String cmdResult = BluetoothWriteCardWriteTab.writeCard(bizContent.getCommand());
@@ -1031,20 +1036,38 @@ public class OrderUtils {
* @param orderId
* @return
*/
public void activationCardAndObuApply(String issueType, String orderId) {
public void activationCardAndObuApply(String issueType, String orderId,int isPlk) {
HashMap<String, String> parmas = new HashMap<>();
parmas.put("issueType", issueType);
parmas.put("orderId", orderId);
MyRetrofit.newInstanceGZ(context, IFCode.IFCODE_ISSUE_APPLY, parmas, new MyRetrofit.ReturnResult() {
MyRetrofit.newInstanceGZ(IFCode.IFCODE_ISSUE_APPLY, parmas, new MyRetrofit.ReturnResult() {
@Override
public void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent) {
if (null != bizContent.cmd) {
if ("CARD".equals(bizContent.cmdType)) {
String cmdResult = BluetoothWriteCardWriteTab.writeCard(bizContent.cmd);
activationReCallBack(bizContent.cmd, cmdResult, bizContent.stepNo, bizContent.transOrderId);
if (isPlk!=-1){
BluetoothDialog.Builder.transCmd(bizContent.cmd.split(","), "10", new BluetoothDialog.performCmdCallBack() {
@Override
public void performOnSuccess(String[] strings) {
activationReCallBack(bizContent.cmd,TextUtils.join(",",strings), bizContent.stepNo, bizContent.transOrderId,isPlk);
}
});
}else {
String cmdResult = BluetoothWriteCardWriteTab.writeCard(bizContent.cmd);
activationReCallBack(bizContent.cmd, cmdResult, bizContent.stepNo, bizContent.transOrderId,isPlk);
}
} else {
StringBuilder buffer = writeObu(bizContent.cmd);
activationReCallBack(bizContent.cmd, buffer.toString(), bizContent.stepNo, bizContent.transOrderId);
if (isPlk != -1){
BluetoothDialog.Builder.transCmd(bizContent.cmd.split(","), "20", new BluetoothDialog.performCmdCallBack() {
@Override
public void performOnSuccess(String[] strings) {
activationReCallBack(bizContent.cmd, TextUtils.join(",",strings), bizContent.stepNo, bizContent.transOrderId,isPlk);
}
});
}else {
StringBuilder buffer = writeObu(bizContent.cmd);
activationReCallBack(bizContent.cmd, buffer.toString(), bizContent.stepNo, bizContent.transOrderId,isPlk);
}
}
} else {
new MessageDialog.Builder(context)
@@ -1065,7 +1088,7 @@ public class OrderUtils {
* @param transOrderId 二发订单号
* @return
*/
public void activationReCallBack(String cmd, String cmdResult, String stepNo, String transOrderId) {
public void activationReCallBack(String cmd, String cmdResult, String stepNo, String transOrderId,int isPlk) {
HashMap<String, String> params = new HashMap<>();
params.put("transOrderId", transOrderId);
params.put("cmd", cmd);
@@ -1084,11 +1107,29 @@ public class OrderUtils {
} else {
if (null != bizContent.cmd) {
if ("CARD".equals(bizContent.cmdType)) {
String result = BluetoothWriteCardWriteTab.writeCard(bizContent.cmd);
activationReCallBack(bizContent.cmd, result, bizContent.stepNo, bizContent.transOrderId);
if (isPlk!=-1){
BluetoothDialog.Builder.transCmd(bizContent.cmd.split(","), "10", new BluetoothDialog.performCmdCallBack() {
@Override
public void performOnSuccess(String[] strings) {
activationReCallBack(bizContent.cmd,TextUtils.join(",",strings), bizContent.stepNo, bizContent.transOrderId,isPlk);
}
});
}else {
String cmdResult = BluetoothWriteCardWriteTab.writeCard(bizContent.cmd);
activationReCallBack(bizContent.cmd, cmdResult, bizContent.stepNo, bizContent.transOrderId,isPlk);
}
} else {
StringBuilder buffer = writeObu(bizContent.cmd);
activationReCallBack(bizContent.cmd, buffer.toString(), bizContent.stepNo, bizContent.transOrderId);
if (isPlk != -1){
BluetoothDialog.Builder.transCmd(bizContent.cmd.split(","), "20", new BluetoothDialog.performCmdCallBack() {
@Override
public void performOnSuccess(String[] strings) {
activationReCallBack(bizContent.cmd, TextUtils.join(",",strings), bizContent.stepNo, bizContent.transOrderId,isPlk);
}
});
}else {
StringBuilder buffer = writeObu(bizContent.cmd);
activationReCallBack(bizContent.cmd, buffer.toString(), bizContent.stepNo, bizContent.transOrderId,isPlk);
}
}
}
}

+ 3
- 3
app/src/main/java/com/huntersun/vkyes/etcopencard/src/app/AppActivity.java Просмотреть файл

@@ -343,7 +343,7 @@ public abstract class AppActivity extends BaseActivity

public interface Currency {
void success();
default void success9901(){
default void success9901(int isPlk){

}
default void close() {
@@ -386,9 +386,9 @@ public abstract class AppActivity extends BaseActivity
* 9901蓝牙链接成功
*/
@Override
public void BluetoothLinkIsSuccessful9901(int code) {
public void BluetoothLinkIsSuccessful9901(int code,int isPlk) {
if (code==0){
currency.success9901();
currency.success9901(isPlk);
}else {
currency.close();
}

+ 2
- 0
app/src/main/res/layout/login_activity.xml Просмотреть файл

@@ -74,6 +74,7 @@
android:background="@null"
android:hint="@string/common_phone_input_hint"
android:inputType="phone"
android:text="15329905570"
tools:text="15764350434"
app:regexType="mobile" />

@@ -105,6 +106,7 @@
android:imeOptions="actionDone"
android:maxLength="20"
android:singleLine="true"
android:text="Ll11223344@"
tools:text="Huting123*"
android:visibility="visible" />


+ 2
- 2
common.gradle Просмотреть файл

@@ -9,8 +9,8 @@ android {
// 目标适配版本
//noinspection ExpiredTargetSdkVersion,OldTargetApi
targetSdkVersion 30
versionName '1.0.1'
versionCode 2
versionName '1.3.3'
versionCode 1
//当前线上版本 103 5
}


+ 5
- 1
library/obublelib/src/main/java/com/huntersun/vky/obublelib/box/BoxManagers.java Просмотреть файл

@@ -165,7 +165,7 @@ public class BoxManagers implements ResponseListener {
* 0:中交;1:聚力;2:中交新版SDK,调试时间2017.09.14
* 3:金益,调试日期20180920
*/
private int isPlk;
private int isPlk = -1;
/**
* 中交新版蓝牙盒子在链接成功后需要做设备验证,所以需要记录下当前链接的设备
*/
@@ -404,6 +404,9 @@ public class BoxManagers implements ResponseListener {
}
});
}
if (isPlk!=-1){
ReadCard();
}
return null;
}

@@ -991,6 +994,7 @@ public class BoxManagers implements ResponseListener {
* @return 成功返回字符串0,失败返回错误吗
*/
public String ReadCard() {

ServiceStatus ss = null;
ss = resetICC();
if (null != ss && 0 != ss.getServiceCode()) {

Загрузка…
Отмена
Сохранить