package com.dayu.recharge.activity;
|
|
import android.content.Intent;
|
import android.nfc.NfcAdapter;
|
import android.os.Bundle;
|
import android.os.Handler;
|
import android.os.Message;
|
import android.text.TextUtils;
|
import android.view.LayoutInflater;
|
import android.view.View;
|
|
|
import com.dayu.recharge.card.UserCard;
|
import com.dayu.recharge.databinding.ActivityRedCardBinding;
|
import com.dayu.recharge.dbBean.RechargeBean;
|
import com.dayu.recharge.dbBean.UserCardBean;
|
import com.dayu.recharge.net.SocketCallBack;
|
import com.dayu.recharge.net.SocketData;
|
import com.dayu.recharge.net.SocketNet;
|
import com.dayu.recharge.socketBean.BalanceSelecteRequestBean;
|
import com.dayu.recharge.tools.BcdUtil;
|
import com.dayu.recharge.tools.HexUtil;
|
import com.dayu.recharge.tools.NfcReadHelper;
|
import com.dayu.recharge.utils.CRC8;
|
import com.dayu.recharge.utils.MornyUtil;
|
import com.dayu.recharge.utils.SocketUtil;
|
import com.dayu.recharge.utils.ToastUtil;
|
import com.dayu.recharge.utils.WSHelper;
|
|
import java.util.Arrays;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* Copyright (C), 2023,
|
* Author: zuo
|
* Date: 2023-11-10 19:52
|
* Description: 读卡界面
|
*/
|
public class ReadCardAcitivy extends BaseNfcActivity {
|
|
private static final int USER_CRAD = 1;
|
private static final int MANAGE_CRAD = 2;
|
|
|
private static final int ERROR = -1;
|
UserCard userCard;
|
UserCardBean waterCard;
|
RechargeBean rechargeBean;
|
// 农户注册编号
|
ActivityRedCardBinding redCardBinding;
|
|
@Override
|
protected void onCreate(Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
redCardBinding = ActivityRedCardBinding.inflate(LayoutInflater.from(this));
|
setContentView(redCardBinding.getRoot());
|
}
|
|
private void setData(String statu) {
|
String initCode = WSHelper.getInstance(this).get("initCode", "");
|
if (TextUtils.isEmpty(initCode)) {
|
ToastUtil.show(this, "设备注册号为空,请先设置IP和管理员地址");
|
return;
|
}
|
// redCardBinding.redVillageNum.setText("设备序列号:" + initS.getANo() + "");
|
redCardBinding.redName.setText("用 户 名:" + rechargeBean.getUserName());
|
redCardBinding.redRemainderMorny.setText("剩余金额:" + rechargeBean.getBalance() + "" + "元");
|
redCardBinding.redStatu.setText("状 态:" + statu);
|
|
}
|
|
|
@Override
|
public void onNewIntent(Intent intent) {
|
startAnim();
|
if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) {
|
readAllData(intent);
|
}
|
}
|
|
/**
|
* 读取全部数据
|
*/
|
private void readAllData(Intent intent) {
|
NfcReadHelper.getInstence(intent)
|
.getAllData(new NfcReadHelper.NFCCallListback() {
|
@Override
|
public void callBack(Map<String, List<byte[]>> data) {
|
Message message = new Message();
|
//获取1扇区数据
|
List<byte[]> oneSector = data.get("1");
|
if (oneSector != null && oneSector.size() > 0) {
|
byte cardType = oneSector.get(0)[0];
|
String cardTypeStr = HexUtil.byteToHex(cardType);
|
// switch (cardTypeStr){
|
// case
|
// }
|
userCard = UserCard.getBean(oneSector);
|
message.what = USER_CRAD;
|
} else {
|
message.what = ERROR;
|
}
|
handler.sendMessage(message);
|
}
|
|
|
@Override
|
public void error() {
|
Message message = new Message();
|
message.what = ERROR;
|
handler.sendMessage(message);
|
}
|
});
|
}
|
|
Handler handler = new Handler(new Handler.Callback() {
|
@Override
|
public boolean handleMessage(Message msg) {
|
switch (msg.what) {
|
case USER_CRAD:
|
redCardBinding.readImgLL.setVisibility(View.GONE);
|
redCardBinding.readUserLL.setVisibility(View.VISIBLE);
|
redCardBinding.readSysLL.setVisibility(View.GONE);
|
redCardBinding.readCleanLL.setVisibility(View.GONE);
|
redCardBinding.readInitLL.setVisibility(View.GONE);
|
// selectBalance(newUserCard.getPeasantCode());
|
break;
|
case MANAGE_CRAD:
|
redCardBinding.readImgLL.setVisibility(View.GONE);
|
redCardBinding.readUserLL.setVisibility(View.GONE);
|
redCardBinding.readSysLL.setVisibility(View.VISIBLE);
|
redCardBinding.readCleanLL.setVisibility(View.GONE);
|
redCardBinding.readInitLL.setVisibility(View.GONE);
|
stopAnim();
|
break;
|
case 3:
|
redCardBinding.readImgLL.setVisibility(View.GONE);
|
redCardBinding.readUserLL.setVisibility(View.GONE);
|
redCardBinding.readSysLL.setVisibility(View.GONE);
|
redCardBinding.readCleanLL.setVisibility(View.VISIBLE);
|
redCardBinding.readInitLL.setVisibility(View.GONE);
|
stopAnim();
|
break;
|
case 4:
|
redCardBinding.readImgLL.setVisibility(View.GONE);
|
redCardBinding.readUserLL.setVisibility(View.GONE);
|
redCardBinding.readSysLL.setVisibility(View.GONE);
|
redCardBinding.readCleanLL.setVisibility(View.GONE);
|
redCardBinding.readInitLL.setVisibility(View.VISIBLE);
|
stopAnim();
|
break;
|
case 5:
|
redCardBinding.readImgLL.setVisibility(View.GONE);
|
redCardBinding.readUserLL.setVisibility(View.GONE);
|
redCardBinding.readSysLL.setVisibility(View.GONE);
|
redCardBinding.readCleanLL.setVisibility(View.GONE);
|
redCardBinding.readInitLL.setVisibility(View.VISIBLE);
|
redCardBinding.readInitLL.setText("当前为行政区域卡");
|
stopAnim();
|
break;
|
case 6:
|
redCardBinding.readImgLL.setVisibility(View.GONE);
|
redCardBinding.readUserLL.setVisibility(View.GONE);
|
redCardBinding.readSysLL.setVisibility(View.GONE);
|
redCardBinding.readCleanLL.setVisibility(View.GONE);
|
redCardBinding.readInitLL.setVisibility(View.VISIBLE);
|
redCardBinding.readInitLL.setText("当前为设备序号卡");
|
stopAnim();
|
break;
|
default:
|
ToastUtil.show(ReadCardAcitivy.this, "卡片未注册");
|
stopAnim();
|
}
|
|
return false;
|
}
|
});
|
|
void startAnim() {
|
redCardBinding.avi.setVisibility(View.VISIBLE);
|
redCardBinding.avi.show();
|
// or avi.smoothToShow();
|
}
|
|
void stopAnim() {
|
redCardBinding.avi.hide();
|
// or avi.smoothToHide();
|
}
|
|
/**
|
* @param initPeasantCode 农户注册编号
|
*/
|
private void selectBalance(String initPeasantCode) {
|
|
BalanceSelecteRequestBean requestBean = new BalanceSelecteRequestBean();
|
requestBean.setAFN("94");
|
requestBean.setControl("01");
|
String initCode = WSHelper.getInstance(this).get("initCode", "");
|
requestBean.setInitCode(initCode);
|
requestBean.setInitPeasantCode(initPeasantCode);
|
requestBean.setXuLie(SocketUtil.getXuLie(this));
|
SocketNet.getInstance().sendTestMessage(requestBean.pack(), new SocketCallBack() {
|
@Override
|
public void onSocketResponse(SocketData readData) {
|
if (CRC8.isCRC8(readData.getOriginDataBytes())) {
|
|
StringBuffer stateText = null;
|
|
try {
|
stateText = new StringBuffer();
|
// stateText.append("状 态:");
|
String state = BcdUtil.bcdToStr(readData.getBodyBytes()[2]); //BCD码00启用 01禁用 02隶属信息不符 03无此卡信息 04其它s
|
if ("00".equals(state)) {
|
stateText.append("启用");
|
} else if ("01".equals(state)) {
|
stateText.append("禁用");
|
} else if ("02".equals(state)) {
|
stateText.append("隶属信息不符");
|
} else if ("03".equals(state)) {
|
stateText.append("无此卡信息");
|
} else if ("04".equals(state)) {
|
stateText.append("其它");
|
}
|
//金额
|
byte[] blanceByte = Arrays.copyOfRange(readData.getBodyBytes(), 3, 7);
|
int balance = SocketUtil.get16to10LowHigh(blanceByte);
|
//姓名
|
byte[] nameByte = Arrays.copyOfRange(readData.getBodyBytes(), 7, 19);
|
String name = SocketUtil.fromHexString(SocketUtil.bytesToHexClean0(nameByte));
|
|
|
rechargeBean = new RechargeBean();
|
rechargeBean.setDate(System.currentTimeMillis());
|
rechargeBean.setUserName(name);
|
rechargeBean.setBalance(MornyUtil.changeF2Y(balance) + "");
|
// rechargeBean.setTotal_morn(ArithUtil.changeF2Y(userCard.getValue() + ""));
|
setData(stateText.toString());
|
stopAnim();
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
} else {
|
//校验CRC错误
|
ToastUtil.show(ReadCardAcitivy.this, "开卡报文校验CRC错误");
|
}
|
stopAnim();
|
}
|
|
@Override
|
public void onSocketError(int code, String msg) {
|
ToastUtil.show(ReadCardAcitivy.this, msg);
|
}
|
});
|
|
}
|
|
}
|