package com.dayu.recharge.acitivity;
|
|
import android.content.Intent;
|
import android.os.Bundle;
|
import android.os.Handler;
|
import android.os.Message;
|
import android.text.TextUtils;
|
import android.view.LayoutInflater;
|
|
import com.dayu.recharge.MyApplication;
|
|
import com.dayu.recharge.card.CleanCard;
|
import com.dayu.recharge.card.CleanUserCard;
|
import com.dayu.recharge.card.ManageCard;
|
import com.dayu.recharge.card.RegisteredCard;
|
import com.dayu.recharge.card.UserCard;
|
import com.dayu.recharge.databinding.ActivityWriteTextBinding;
|
import com.dayu.recharge.dbBean.AdminDataBean;
|
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.socketBean.RechargeRequestBean;
|
import com.dayu.recharge.tools.BcdUtil;
|
import com.dayu.recharge.tools.HexUtil;
|
import com.dayu.recharge.tools.NFCWriteHelper;
|
import com.dayu.recharge.tools.NfcReadHelper;
|
import com.dayu.recharge.utils.AidlUtil;
|
import com.dayu.recharge.utils.CRC8;
|
import com.dayu.recharge.utils.DateUtil;
|
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 com.tencent.bugly.crashreport.CrashReport;
|
|
import java.util.Arrays;
|
import java.util.Calendar;
|
import java.util.List;
|
import java.util.Map;
|
|
public class NFCWreatActivity extends BaseNfcActivity {
|
|
|
/**
|
* 该卡已写入用户信息
|
*/
|
public final static int HAS_USER = 1;
|
/**
|
* 该卡未写入用户信息
|
*/
|
public final static int NO_USER = 2;
|
/**
|
* 充值
|
*/
|
public final static int RECHARGE = 3;
|
|
public final static int ERROR = -1;
|
|
boolean cleanFlag = false;
|
boolean userFlag = false;
|
boolean manageCardFlag = false;
|
boolean registeredFlag = false;
|
boolean administrativeCardFlag = false;
|
boolean cleanUserCardFlag = false;
|
volatile UserCard userCard;
|
|
ManageCard manageCard;
|
UserCardBean userCardBean;
|
|
CleanCard cleanCard;
|
String morny;
|
AdminDataBean adminData;
|
RechargeBean rechargeBean;
|
Intent intent;
|
|
|
RegisteredCard registeredCard;
|
CleanUserCard cleanUserCard;
|
|
//打印
|
MyApplication baseApp;
|
|
public static NFCWreatActivity nfcWreatActivity;
|
/**
|
* 是否是用户卡,假如是用户卡的话需要检测卡片是否已经开过户,假如已开户则报错不能再写卡
|
*/
|
boolean isUser = false;//
|
ActivityWriteTextBinding binding;
|
|
@Override
|
protected void onCreate(Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
try {
|
binding = ActivityWriteTextBinding.inflate(LayoutInflater.from(this));
|
setContentView(binding.getRoot());
|
|
nfcWreatActivity = this;
|
getData();
|
baseApp = (MyApplication) getApplication();
|
} catch (Exception e) {
|
e.printStackTrace();
|
CrashReport.postCatchedException(e);
|
}
|
}
|
|
|
private void getData() {
|
try {
|
if (this.getIntent().hasExtra("userCard")) {
|
userCard = (UserCard) this.getIntent().getSerializableExtra("userCard");
|
isUser = true;
|
}
|
if (this.getIntent().hasExtra("cleanCard")) {
|
cleanCard = (CleanCard) this.getIntent().getSerializableExtra("cleanCard");
|
}
|
if (this.getIntent().hasExtra("manageCard")) {
|
manageCard = (ManageCard) this.getIntent().getSerializableExtra("manageCard");
|
}
|
if (this.getIntent().hasExtra("registeredCard")) {
|
registeredCard = (RegisteredCard) this.getIntent().getSerializableExtra("registeredCard");
|
}
|
if (this.getIntent().hasExtra("dbUserCard")) {
|
userCardBean = (UserCardBean) this.getIntent().getSerializableExtra("dbUserCard");
|
}
|
if (this.getIntent().hasExtra("cleanUserCard")) {
|
cleanUserCard = (CleanUserCard) this.getIntent().getSerializableExtra("cleanUserCard");
|
}
|
morny = this.getIntent().getStringExtra("morny");
|
try {
|
adminData = baseDao.adminDao().findFirst();
|
} catch (Exception e) {
|
e.printStackTrace();
|
CrashReport.postCatchedException(e);
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
CrashReport.postCatchedException(e);
|
}
|
}
|
|
/**
|
* 检测是否是用户卡,假如是用户卡的话需要检测卡片是否已经开过户,假如已开户则报错不能再写卡假如是用户卡需要
|
*/
|
private void checkHasUser() {
|
try {
|
NfcReadHelper.getInstence(intent)
|
.getData(1, 0, new NfcReadHelper.NFCCallByteback() {
|
@Override
|
public void callBack(byte[] data) {
|
Message message = new Message();
|
String type = HexUtil.byteToHex(data[0]).toUpperCase();
|
switch (type) {
|
case "A1":
|
case "A8":
|
case "A2":
|
message.what = HAS_USER;
|
break;
|
default:
|
message.what = NO_USER;
|
break;
|
}
|
handler.sendMessage(message);
|
}
|
|
@Override
|
public void error() {
|
Message message = new Message();
|
message.what = ERROR;
|
handler.sendMessage(message);
|
}
|
});
|
} catch (Exception e) {
|
e.printStackTrace();
|
CrashReport.postCatchedException(e);
|
}
|
}
|
|
|
private void saveData() {
|
try {
|
startAnim();
|
if (userCard != null || cleanCard != null || manageCard != null || registeredCard != null || cleanUserCard != null) {
|
if (userCard != null) {
|
setUser(intent, userCard);
|
}
|
if (cleanCard != null) {
|
setClean(intent, cleanCard);
|
}
|
if (manageCard != null) {
|
setmanageCard(intent, manageCard);
|
}
|
if (registeredCard != null) {
|
setRegisteredCard(intent, registeredCard);
|
}
|
if (cleanUserCard != null) {
|
setCleanUserCard(intent, cleanUserCard);
|
}
|
|
if ((userFlag || cleanFlag || manageCardFlag || registeredFlag || administrativeCardFlag)) {
|
try {
|
if (userFlag && userCardBean != null) {
|
baseDao.userCardDao().insert(userCardBean);
|
ToastUtil.show(this, "注册成功");
|
NFCWreatActivity.this.finish();
|
if (NewCardActivity.newCardActivity != null) {
|
NewCardActivity.newCardActivity.finish();
|
}
|
|
} else if (!TextUtils.isEmpty(morny)) {
|
NFCWreatActivity.this.finish();
|
ToastUtil.show(this, "充值成功");
|
} else {
|
NFCWreatActivity.this.finish();
|
ToastUtil.show(this, "写卡成功");
|
}
|
|
} catch (Exception e) {
|
e.printStackTrace();
|
CrashReport.postCatchedException(e);
|
}
|
} else {
|
ToastUtil.show(this, "写卡失败");
|
}
|
stopAnim();
|
} else if (!TextUtils.isEmpty(morny)) {
|
readAllData(intent);
|
} else {
|
stopAnim();
|
ToastUtil.show(this, "参数错误");
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
CrashReport.postCatchedException(e);
|
}
|
}
|
|
@Override
|
public void onNewIntent(Intent intent) {
|
try {
|
this.intent = intent;
|
startAnim();
|
if (isUser) {
|
checkHasUser();
|
} else {
|
saveData();
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
CrashReport.postCatchedException(e);
|
}
|
}
|
|
|
/**
|
* 读取全部数据
|
*/
|
private void readAllData(Intent intent) {
|
try {
|
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) {
|
userCard = UserCard.getBean(oneSector);
|
message.what = RECHARGE;
|
} else {
|
message.what = ERROR;
|
}
|
handler.sendMessage(message);
|
}
|
|
@Override
|
public void error() {
|
Message message = new Message();
|
message.what = ERROR;
|
handler.sendMessage(message);
|
}
|
});
|
} catch (Exception e) {
|
e.printStackTrace();
|
CrashReport.postCatchedException(e);
|
}
|
}
|
|
Handler handler = new Handler(new Handler.Callback() {
|
@Override
|
public boolean handleMessage(Message msg) {
|
switch (msg.what) {
|
|
case HAS_USER://判断已写入用户
|
ToastUtil.show(NFCWreatActivity.this, "该卡已经写入用户信息,请更换卡片");
|
break;
|
case NO_USER://没有写过用户继续保存
|
saveData();
|
break;
|
case RECHARGE://充值流程
|
selectBalance(userCard.getInitPeasantCode());
|
break;
|
default:
|
stopAnim();
|
ToastUtil.show(NFCWreatActivity.this, "卡片读取失败");
|
break;
|
|
}
|
return false;
|
}
|
});
|
|
|
/**
|
* 打印机相关信息
|
*
|
* @param rechargeBean
|
*/
|
private void setPrinterData(RechargeBean rechargeBean) {
|
try {
|
StringBuffer data = new StringBuffer();
|
if (rechargeBean != null) {
|
data.append("*****************************" + "\n");
|
data.append(" 农业水价综合改革充值系统\n\n");
|
data.append("设备序列号:" + rechargeBean.getSerial() + "\n");
|
data.append("用户名:" + rechargeBean.getUserName() + "\n");
|
// data.append("户 号:" + rechargeBean.getUserNum() + "\n");
|
data.append("充值金额:" + rechargeBean.getMorny() + "元" + "\n");
|
data.append("卡内余额:" + rechargeBean.getBalance() + "元" + "\n");
|
data.append("日 期:" + DateUtil.dateToStamp(rechargeBean.getDate(), DateUtil.type2) + "\n\n");
|
data.append("*****************************");
|
}
|
|
float size = 26;
|
if (baseApp.isAidl()) {
|
AidlUtil.getInstance().printText(data.toString(), size, true, false);
|
AidlUtil.getInstance().print3Line();
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
CrashReport.postCatchedException(e);
|
}
|
}
|
|
void startAnim() {
|
binding.avi.show();
|
// or avi.smoothToShow();
|
}
|
|
void stopAnim() {
|
binding.avi.hide();
|
// or avi.smoothToHide();
|
}
|
|
|
//充值上传(Socket)
|
private void recharge(String initPeasantCode) {
|
try {
|
RechargeRequestBean rechargeRequestBean = new RechargeRequestBean();
|
rechargeRequestBean.setControl("01");
|
String initCode = WSHelper.getInstance(this).get("initCode", "");
|
rechargeRequestBean.setInitCode(initCode);
|
rechargeRequestBean.setXuLie(SocketUtil.getXuLie(this));
|
rechargeRequestBean.setAFN("95");
|
rechargeRequestBean.setInitPeasantCode(initPeasantCode);
|
rechargeRequestBean.setBalance(morny);
|
rechargeRequestBean.setOrderId(SocketUtil.getOrderId(NFCWreatActivity.this));
|
SocketNet.getInstance().sendTestMessage(rechargeRequestBean.pack(), new SocketCallBack() {
|
|
@Override
|
public void onSocketResponse(SocketData readData) {
|
|
if (CRC8.isCRC8(readData.getOriginDataBytes())) {
|
String state = BcdUtil.bcdToStr(readData.getBodyBytes()[2]);
|
//00启用01禁用02隶属信息不符03无此卡信息04其它
|
if ("00".equalsIgnoreCase(state)) {
|
try {
|
baseDao.rechargeDao().insert(rechargeBean);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
userCard.setRechargeTimes(userCard.getRechargeTimes() + 1);
|
setUser(intent, userCard);
|
// 打印相关
|
setPrinterData(rechargeBean);
|
ToastUtil.show(NFCWreatActivity.this, "写卡成功");
|
RechargeActivity.rechargeActivity.finish();
|
NFCWreatActivity.nfcWreatActivity.finish();
|
} else if ("01".equalsIgnoreCase(state)) {
|
NFCWreatActivity.this.finish();
|
ToastUtil.show(NFCWreatActivity.this, "充值报文错误-禁用");
|
} else if ("02".equalsIgnoreCase(state)) {
|
ToastUtil.show(NFCWreatActivity.this, "充值报文错误-隶属信息不符");
|
NFCWreatActivity.this.finish();
|
} else if ("03".equalsIgnoreCase(state)) {
|
ToastUtil.show(NFCWreatActivity.this, "充值报文错误-无此卡信息");
|
NFCWreatActivity.this.finish();
|
} else {
|
ToastUtil.show(NFCWreatActivity.this, "充值报文错误-其它");
|
NFCWreatActivity.this.finish();
|
}
|
|
|
} else {
|
//校验CRC错误
|
ToastUtil.show(NFCWreatActivity.this, "充值报文错误校验CRC错误");
|
NFCWreatActivity.this.finish();
|
}
|
stopAnim();
|
}
|
|
@Override
|
public void onSocketError(int code, String msg) {
|
stopAnim();
|
ToastUtil.show(NFCWreatActivity.this, msg);
|
}
|
});
|
} catch (Exception e) {
|
e.printStackTrace();
|
CrashReport.postCatchedException(e);
|
}
|
|
}
|
|
private void setmanageCard(Intent intent, final ManageCard manageCard) {
|
NFCWriteHelper.getInstence(intent).writeData(manageCard.toZeroByte(), 1, 0, new NFCWriteHelper.NFCCallback() {
|
@Override
|
public void isSusses(boolean flag) {
|
manageCardFlag = flag;
|
}
|
});
|
}
|
|
/**
|
* 制作清零卡
|
*
|
* @param intent
|
* @param clearOrInitCard
|
*/
|
private void setClean(Intent intent, final CleanCard clearOrInitCard) {
|
NFCWriteHelper.getInstence(intent).writeData(clearOrInitCard.toByte(), 1, 0, new NFCWriteHelper.NFCCallback() {
|
@Override
|
public void isSusses(boolean flag) {
|
cleanFlag = flag;
|
}
|
});
|
}
|
|
//向卡写入用户信息
|
private void setUser(Intent intent, UserCard userCard) {
|
NFCWriteHelper.getInstence(intent).writeData(userCard.getZeroBytes(), 1, 0, new NFCWriteHelper.NFCCallback() {
|
@Override
|
public void isSusses(boolean flag) {
|
userFlag = flag;
|
}
|
});
|
NFCWriteHelper.getInstence(intent).writeData(userCard.getOneBytes(), 1, 1, new NFCWriteHelper.NFCCallback() {
|
@Override
|
public void isSusses(boolean flag) {
|
userFlag = flag;
|
}
|
});
|
NFCWriteHelper.getInstence(intent).writeData(userCard.getTwoBytes(), 1, 2, new NFCWriteHelper.NFCCallback() {
|
@Override
|
public void isSusses(boolean flag) {
|
userFlag = flag;
|
}
|
});
|
}
|
|
/**
|
* 重新注册设备卡
|
*
|
* @param intent
|
* @param registeredCard
|
*/
|
private void setRegisteredCard(Intent intent, RegisteredCard registeredCard) {
|
NFCWriteHelper.getInstence(intent).writeData(registeredCard.toByte(), 1, 0, new NFCWriteHelper.NFCCallback() {
|
@Override
|
public void isSusses(boolean flag) {
|
registeredFlag = flag;
|
}
|
});
|
}
|
|
private void setCleanUserCard(Intent intent, CleanUserCard cleanUserCard) {
|
NFCWriteHelper.getInstence(intent).writeData(cleanUserCard.toByte(), 1, 0, new NFCWriteHelper.NFCCallback() {
|
@Override
|
public void isSusses(boolean flag) {
|
cleanUserCardFlag = flag;
|
}
|
});
|
}
|
|
/**
|
* @param initPeasantCode 农户注册编号
|
*/
|
private void selectBalance(String initPeasantCode) {
|
|
try {
|
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)) {
|
//只有启动状态才能充值
|
//金额
|
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.setMorny(morny);
|
if (userCardBean != null) {
|
rechargeBean.setUserName(userCardBean.getUserName());
|
} else {
|
rechargeBean.setUserName(name);
|
}
|
List<UserCardBean> userCardBeans = baseDao.userCardDao().findAll();
|
String userId = "";
|
if (userCardBeans != null) {
|
for (int i = 0; i < userCardBeans.size(); i++) {
|
if (initPeasantCode.equalsIgnoreCase(userCardBeans.get(i).getInitPeasantCode())) {
|
userId = userCardBeans.get(i).getUserID();
|
}
|
}
|
}
|
rechargeBean.setSerial(adminData.getSerial());
|
userCard.setBalance(balance);
|
userCard.setRechargeDate(Calendar.getInstance());
|
rechargeBean.setBalance(MornyUtil.changeF2Y(balance) + "");
|
rechargeBean.setUserId(userId);
|
//与socket服务器通信后进行后续操作
|
recharge(initPeasantCode);
|
stateText.append("启用");
|
return;
|
} else if ("01".equals(state)) {
|
stateText.append("禁用");
|
userCard.setState("01");
|
setUser(intent, userCard);
|
} else if ("02".equals(state)) {
|
stateText.append("隶属信息不符");
|
} else if ("03".equals(state)) {
|
stateText.append("无此卡信息");
|
} else if ("04".equals(state)) {
|
stateText.append("其它");
|
}
|
ToastUtil.show(NFCWreatActivity.this, stateText.toString());
|
} catch (Exception e) {
|
e.printStackTrace();
|
stopAnim();
|
}
|
} else {
|
//校验CRC错误
|
ToastUtil.show(NFCWreatActivity.this, "开卡报文校验CRC错误");
|
}
|
}
|
|
@Override
|
public void onSocketError(int code, String msg) {
|
stopAnim();
|
ToastUtil.show(NFCWreatActivity.this, msg);
|
}
|
});
|
} catch (Exception e) {
|
e.printStackTrace();
|
CrashReport.postCatchedException(e);
|
}
|
|
}
|
|
}
|