package com.dayu.recharge.activity;
|
|
import android.content.Intent;
|
import android.nfc.NfcAdapter;
|
import android.os.Bundle;
|
import android.text.TextUtils;
|
import android.view.LayoutInflater;
|
import android.view.View;
|
|
import com.dayu.recharge.card.ConfigurationPowerCard;
|
import com.dayu.recharge.card.DomainCard;
|
import com.dayu.recharge.card.UserCard;
|
import com.dayu.recharge.databinding.ActivityRedCardBinding;
|
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.tools.WriteCardUtils;
|
import com.dayu.recharge.utils.CRC8;
|
import com.dayu.recharge.utils.DeviceNumberUtils;
|
import com.dayu.recharge.utils.MornyUtil;
|
import com.dayu.recharge.utils.MyCommon;
|
import com.dayu.recharge.utils.SocketUtil;
|
import com.dayu.recharge.utils.TipUtil;
|
import com.dayu.recharge.view.ProgressDialog;
|
|
import java.util.Arrays;
|
import java.util.Calendar;
|
import java.util.List;
|
|
/**
|
* 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 CLEAN_CARD = 3;
|
private static final int REGISTERED_CARD = 4;
|
private static final int CLEAN_ALL_USER = 5;
|
private static final int DOMAIN_CARD = 6;
|
private static final int TEST_CARD = 7;
|
|
private static final int CONFIGURATION_CARD = 8;
|
|
private static final int CONFIGURATION_POWER_CARD = 9;
|
private static final int PASS_WORD_CRAD = 10;
|
|
|
volatile UserCard userCard;
|
ActivityRedCardBinding redCardBinding;
|
|
Intent intent;
|
|
@Override
|
protected void onCreate(Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
redCardBinding = ActivityRedCardBinding.inflate(LayoutInflater.from(this));
|
setContentView(redCardBinding.getRoot());
|
}
|
|
|
private void setUserData(String userName, int blance, String statu) {
|
viweGone(true);
|
redCardBinding.redName.setText("用户姓名:" + userName);
|
redCardBinding.redRemainderBlance.setText("剩余金额:" + MornyUtil.changeF2Y(blance) + "元");
|
redCardBinding.redStatu.setText("卡状态:" + statu);
|
if (userCard != null) {
|
|
Calendar calendar = userCard.getRechargeDate();
|
if (calendar != null) {
|
int year = calendar.get(Calendar.YEAR);
|
int month = calendar.get(Calendar.MONTH); // 月份从0开始,所以需要加1
|
int day = calendar.get(Calendar.DAY_OF_MONTH);
|
int hour = calendar.get(Calendar.HOUR_OF_DAY);
|
int minute = calendar.get(Calendar.MINUTE);
|
int second = calendar.get(Calendar.SECOND);
|
redCardBinding.redRechargeDate.setText("本卡最后购水日期:" + year + month + day + " " + hour + ":" + minute + ":" + second);
|
} else {
|
redCardBinding.redRechargeDate.setText("本卡最后购水日期:无");
|
}
|
|
redCardBinding.redRechargeNumber.setText("本卡充值次数:" + userCard.getRechargeTimes() + "");
|
}
|
}
|
|
|
@Override
|
public void onNewIntent(Intent intent) {
|
this.intent = intent;
|
ProgressDialog.show(this);
|
if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) {
|
readAllData(intent);
|
}
|
super.onNewIntent(intent);
|
}
|
|
/**
|
* 读取全部数据
|
*/
|
|
public void readAllData(Intent intent) {
|
NfcReadHelper.getInstence(intent, this)
|
.getOneSectorData(new NfcReadHelper.NFCCallListback() {
|
@Override
|
public void callBack(List<byte[]> data) {
|
//获取1扇区数据
|
if (data != null && data.size() > 0) {
|
byte cardType = data.get(0)[0];
|
String cardTypeStr = HexUtil.byteToHex(cardType);
|
switch (cardTypeStr) {
|
case MyCommon.USER_CARD_TYPE_1:
|
case MyCommon.USER_CARD_TYPE_2:
|
case MyCommon.USER_CARD_TYPE_3:
|
userCard = UserCard.getBean(data);
|
// selectBalance(userCard.getInitPeasantCode());
|
break;
|
case MyCommon.MANAGE_CRAD:
|
viweGone(false);
|
redCardBinding.readCardTypeTV.setText("当前为管理卡");
|
stopAnim();
|
break;
|
case MyCommon.CLEAN_CARD_TYPE:
|
viweGone(false);
|
redCardBinding.readCardTypeTV.setText("当前为清零卡");
|
stopAnim();
|
break;
|
case MyCommon.REGISTERED_CARD_TYPE:
|
viweGone(false);
|
redCardBinding.readCardTypeTV.setText("当前为重新注册设备卡");
|
stopAnim();
|
|
break;
|
case MyCommon.CLEAN_ALL_USER_CARD_TYPE:
|
viweGone(false);
|
redCardBinding.readCardTypeTV.setText("当前为删除全部用户卡");
|
stopAnim();
|
break;
|
case MyCommon.DOMAIN_CARD_TYPE:
|
viweGone(false);
|
redCardBinding.readCardTypeTV.setText("当前为设置域名卡");
|
DomainCard domainCard = DomainCard.toBean(data);
|
redCardBinding.readCardDataTV.setText("序号:" + domainCard.getDomainNumber() + "\n" + "域名:" + domainCard.getDomainName() + "\n" + "端口号:" + domainCard.getPort());
|
stopAnim();
|
break;
|
case MyCommon.TEST_CARD_TYPE:
|
viweGone(false);
|
redCardBinding.readCardTypeTV.setText("当前为测试卡");
|
stopAnim();
|
break;
|
case MyCommon.CONFIGURATION_CARD_TYPE:
|
viweGone(false);
|
redCardBinding.readCardTypeTV.setText("当前为配置设备注册信息卡");
|
stopAnim();
|
break;
|
case MyCommon.CONFIGURATION_POWER_CARD_TYPE:
|
viweGone(false);
|
redCardBinding.readCardTypeTV.setText("当前配置水泵功率卡");
|
ConfigurationPowerCard powerCard = ConfigurationPowerCard.toBean(data.get(0));
|
redCardBinding.readCardDataTV.setText(powerCard.getPower());
|
stopAnim();
|
break;
|
default:
|
TipUtil.show(ReadCardAcitivy.this, "卡片无法识别");
|
stopAnim();
|
break;
|
}
|
|
} else {
|
TipUtil.show(ReadCardAcitivy.this, "卡片无法识别");
|
stopAnim();
|
}
|
|
}
|
|
@Override
|
public void error(int code) {
|
switch (code) {
|
case MyCommon.ERROR_MOVE:
|
stopAnim();
|
TipUtil.show("连接中断,请重新贴合卡片");
|
break;
|
default:
|
stopAnim();
|
TipUtil.show("卡片识别错误,请重试!");
|
}
|
}
|
});
|
}
|
|
|
private void viweGone(boolean isUSerCard) {
|
redCardBinding.readImgLL.setVisibility(View.GONE);
|
if (isUSerCard) {
|
redCardBinding.readCardTypeLL.setVisibility(View.GONE);
|
redCardBinding.readUserLL.setVisibility(View.VISIBLE);
|
} else {
|
redCardBinding.readCardTypeLL.setVisibility(View.VISIBLE);
|
redCardBinding.readUserLL.setVisibility(View.GONE);
|
}
|
|
}
|
|
|
void stopAnim() {
|
ProgressDialog.dismiss();
|
// or avi.smoothToHide();
|
}
|
|
/**
|
* @param initPeasantCode 农户注册编号
|
*/
|
private void selectBalance(String initPeasantCode) {
|
String initCode = DeviceNumberUtils.getDeviceNumber();
|
if (TextUtils.isEmpty(initCode)) {
|
TipUtil.show("设备未注册");
|
return;
|
}
|
BalanceSelecteRequestBean requestBean = new BalanceSelecteRequestBean();
|
requestBean.setAFN("94");
|
requestBean.setControl("01");
|
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();
|
int balance = 0;
|
String name = null;
|
try {
|
//金额
|
byte[] blanceByte = Arrays.copyOfRange(readData.getBodyBytes(), 3, 7);
|
balance = SocketUtil.get16to10LowHigh(blanceByte);
|
//姓名
|
byte[] nameByte = Arrays.copyOfRange(readData.getBodyBytes(), 7, 19);
|
name = SocketUtil.fromHexString(SocketUtil.bytesToHexClean0(nameByte));
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
String state = BcdUtil.bcdToStr(readData.getBodyBytes()[2]); //BCD码00启用 01禁用 02隶属信息不符 03无此卡信息 04其它s
|
if ("00".equals(state)) {
|
userCard.setBalance(balance);
|
// userCard.setState("00");
|
|
WriteCardUtils.setUser(intent, userCard, ReadCardAcitivy.this);
|
stateText.append("启用");
|
} else if ("01".equals(state)) {
|
userCard.setBalance(balance);
|
// userCard.setState("01");
|
WriteCardUtils.setUser(intent, userCard, ReadCardAcitivy.this);
|
stateText.append("禁用");
|
} else if ("02".equals(state)) {
|
stateText.append("隶属信息不符");
|
} else if ("03".equals(state)) {
|
stateText.append("无此卡信息");
|
} else if ("04".equals(state)) {
|
stateText.append("其它");
|
}
|
|
setUserData(name, balance, stateText.toString());
|
stopAnim();
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
} else {
|
//校验CRC错误
|
TipUtil.show(ReadCardAcitivy.this, "开卡报文校验CRC错误");
|
}
|
stopAnim();
|
}
|
|
@Override
|
public void onSocketError(int code, String msg) {
|
TipUtil.show(ReadCardAcitivy.this, msg);
|
}
|
});
|
}
|
|
}
|