@@ -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" | |||
} | |||
] | |||
} |
@@ -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")){ |
@@ -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) { |
@@ -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";//设备质检回传 |
@@ -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; |
@@ -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; | |||
} | |||
} |
@@ -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) { |
@@ -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){}; |
@@ -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; | |||
} |
@@ -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; | |||
} |
@@ -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 = |
@@ -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) { |
@@ -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) { |
@@ -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) { |
@@ -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()); //指令 |
@@ -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); | |||
} | |||
}); |
@@ -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; |
@@ -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) { |
@@ -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); | |||
} | |||
} | |||
} | |||
} |
@@ -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(); | |||
} |
@@ -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" /> | |||
@@ -9,8 +9,8 @@ android { | |||
// 目标适配版本 | |||
//noinspection ExpiredTargetSdkVersion,OldTargetApi | |||
targetSdkVersion 30 | |||
versionName '1.0.1' | |||
versionCode 2 | |||
versionName '1.3.3' | |||
versionCode 1 | |||
//当前线上版本 103 5 | |||
} | |||
@@ -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()) { |