左晓为主开发手持机充值管理机
zuoxiao
2024-03-15 0fe9cc9142484ea3818340ca709886c126faf986
app/src/main/java/com/dayu/recharge/activity/NFCWreatActivity.java
@@ -1,14 +1,15 @@
package com.dayu.recharge.activity;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.widget.Toast;
import com.dayu.recharge.MyApplication;
import com.dayu.recharge.R;
import com.dayu.recharge.card.CleanCard;
import com.dayu.recharge.card.CleanUserCard;
import com.dayu.recharge.card.ConfigurationPowerCard;
@@ -20,6 +21,7 @@
import com.dayu.recharge.card.UserCard;
import com.dayu.recharge.databinding.ActivityWriteTextBinding;
import com.dayu.recharge.dbBean.AdminDataBean;
import com.dayu.recharge.dbBean.ElectricPriceBean;
import com.dayu.recharge.dbBean.RechargeBean;
import com.dayu.recharge.dbBean.UserCardBean;
import com.dayu.recharge.net.SocketCallBack;
@@ -28,40 +30,30 @@
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.tools.WriteCardUtils;
import com.dayu.recharge.utils.AidlUtil;
import com.dayu.recharge.utils.CRC8;
import com.dayu.recharge.utils.DateUtil;
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.ToastUtil;
import com.dayu.recharge.utils.WSHelper;
import com.dayu.recharge.utils.TipUtil;
import com.tencent.bugly.crashreport.CrashReport;
import java.util.Arrays;
import java.util.Calendar;
import java.util.List;
import java.util.Map;
/**
 * Copyright (C), 2023,
 * Author: zuo
 * Date: 2023-11-08 21:19
 * Description: nfc写卡界面
 */
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;
@@ -80,8 +72,8 @@
    UserCardBean userCardBean;
    String morny;
    String userName;
    AdminDataBean adminData;
    RechargeBean rechargeBean;
    Intent intent;
@@ -89,7 +81,6 @@
    RegisteredCard registeredCard;
    CleanUserCard cleanUserCard;
    volatile UserCard userCard;
    ManageCard manageCard;
    DomainCard domainCard;
@@ -106,6 +97,11 @@
     * 是否是用户卡,假如是用户卡的话需要检测卡片是否已经开过户,假如已开户则报错不能再写卡
     */
    boolean isUser = false;//
    //是否是充值过程
    boolean isRecharge = false;
    //充值通信是否完成
    boolean rechargeIsOk = false;
    ActivityWriteTextBinding binding;
    @Override
@@ -114,7 +110,6 @@
        try {
            binding = ActivityWriteTextBinding.inflate(LayoutInflater.from(this));
            setContentView(binding.getRoot());
            nfcWreatActivity = this;
            getData();
            baseApp = (MyApplication) getApplication();
@@ -125,41 +120,58 @@
    }
    @SuppressLint("SetTextI18n")
    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");
                binding.cardData.setText("制作清零卡");
            }
            if (this.getIntent().hasExtra("manageCard")) {
                manageCard = (ManageCard) this.getIntent().getSerializableExtra("manageCard");
                binding.cardData.setText("制作管理卡");
            }
            if (this.getIntent().hasExtra("registeredCard")) {
                registeredCard = (RegisteredCard) this.getIntent().getSerializableExtra("registeredCard");
                binding.cardData.setText("制作重新注册设备卡");
            }
            if (this.getIntent().hasExtra("dbUserCard")) {
                userCardBean = (UserCardBean) this.getIntent().getSerializableExtra("dbUserCard");
                isUser = true;
            }
            if (this.getIntent().hasExtra("cleanUserCard")) {
                cleanUserCard = (CleanUserCard) this.getIntent().getSerializableExtra("cleanUserCard");
                binding.cardData.setText("制作删除全部用户卡");
            }
            if (this.getIntent().hasExtra("domainCard")) {
                domainCard = (DomainCard) this.getIntent().getSerializableExtra("domainCard");
                binding.cardData.setText("制作设置域名卡");
            }
            if (this.getIntent().hasExtra("testCard")) {
                testCard = (TestCard) this.getIntent().getSerializableExtra("testCard");
                binding.cardData.setText("制作测试卡");
            }
            if (this.getIntent().hasExtra("configureDeviceRegistrationCrad")) {
                configureDeviceRegistrationCrad = (ConfigureDeviceRegistrationCrad) this.getIntent().getSerializableExtra("configureDeviceRegistrationCrad");
                binding.cardData.setText("制作配置设备注册信息卡");
            }
            if (this.getIntent().hasExtra("configurationPowerCard")) {
                configurationPowerCard = (ConfigurationPowerCard) this.getIntent().getSerializableExtra("configurationPowerCard");
                binding.cardData.setText("制作配置水泵功率卡");
            }
            if (this.getIntent().hasExtra("morny")) {
                startAnim();
                isRecharge = true;
                morny = this.getIntent().getStringExtra("morny");
                userName = this.getIntent().getStringExtra("userName");
                binding.cardData.setText("充值金额:" + morny + "元");
                // 充值逻辑
                recharge(userCard.getInitPeasantCode(), userName);
            }
            morny = this.getIntent().getStringExtra("morny");
            try {
                adminData = baseDao.adminDao().findFirst();
            } catch (Exception e) {
@@ -176,37 +188,23 @@
     * 检测是否是用户卡,假如是用户卡的话需要检测卡片是否已经开过户,假如已开户则报错不能再写卡假如是用户卡需要
     */
    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);
        String cardType = NfcReadHelper.getInstence(intent, this).getCradType();
        Log.i("NFCWreatActivity", "cardType=" + cardType);
        if (cardType.equals(MyCommon.USER_CARD_TYPE_1) ||
                cardType.equals(MyCommon.USER_CARD_TYPE_2) ||
                cardType.equals(MyCommon.USER_CARD_TYPE_3)
        ) {
            binding.textView.setText("该卡已经写入用户信息,请更换卡片");
            binding.textView.setTextColor(getResources().getColor(R.color.red));
        } else if (cardType.equals("-1")) {
            TipUtil.show(NFCWreatActivity.this, "请勿移动卡片,读卡失败请重试!!");
        } else {
            Log.i("NFCWreatActivity", "olduserCard!=null  saveData");
            saveData();
        }
        stopAnim();
    }
@@ -218,8 +216,9 @@
                    || domainCard != null || testCard != null
                    || configureDeviceRegistrationCrad != null
                    || configurationPowerCard != null) {
                if (userCard != null) {
                    setUser(intent, userCard);
                if (userCard != null && TextUtils.isEmpty(morny)) {
                    userFlag = WriteCardUtils.setUser(intent, userCard, this);
                }
                if (cleanCard != null) {
                    setClean(intent, cleanCard);
@@ -248,19 +247,12 @@
                if ((configPowerFlag || configDeviceRegiestFlag || testCardFlag || domainCrdFlag || userFlag || cleanFlag || manageCardFlag || registeredFlag || administrativeCardFlag || cleanUserCardFlag)) {
                    try {
                        if (userFlag && userCardBean != null) {
                            baseDao.userCardDao().insert(userCardBean);
                            ToastUtil.show(this, "注册成功");
                            NFCWreatActivity.this.finish();
                            if (NewCardActivity.newCardActivity != null) {
                                NewCardActivity.newCardActivity.finish();
                            }
                            //用户卡
                            startDetailActivity(userCardBean.getUserName(), "启用");
                        } else if (!TextUtils.isEmpty(morny)) {
                            NFCWreatActivity.this.finish();
                            ToastUtil.show(this, "充值成功");
                            TipUtil.show(NFCWreatActivity.this, "充值成功", NFCWreatActivity.this::finish);
                        } else {
                            NFCWreatActivity.this.finish();
                            ToastUtil.show(this, "写卡成功");
                            TipUtil.show(NFCWreatActivity.this, "写卡成功", NFCWreatActivity.this::finish);
                        }
                    } catch (Exception e) {
@@ -268,14 +260,15 @@
                        CrashReport.postCatchedException(e);
                    }
                } else {
                    ToastUtil.show(this, "写卡失败");
                    TipUtil.show(NFCWreatActivity.this, "写卡失败");
                }
                stopAnim();
            } else if (!TextUtils.isEmpty(morny)) {
                readAllData(intent);
            } else if (userCard == null && userCardBean != null) {
                //补卡逻辑
                selectBalance(userCardBean.getInitPeasantCode());
            } else {
                stopAnim();
                ToastUtil.show(this, "参数错误");
                TipUtil.show(this, "参数错误");
            }
        } catch (Exception e) {
            e.printStackTrace();
@@ -285,11 +278,20 @@
    @Override
    public void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        try {
            this.intent = intent;
            startAnim();
            Log.i("NFCWreatActivity", "isUser:" + isUser);
            if (isUser) {
                checkHasUser();
            } else if (isRecharge) {
                if (rechargeIsOk) {
                    rechargeWrratCard();
                } else {
                    Toast.makeText(this, "正在通信请稍后", Toast.LENGTH_SHORT).show();
                }
            } else {
                saveData();
            }
@@ -298,65 +300,6 @@
            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;
        }
    });
    /**
@@ -369,13 +312,13 @@
            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(getResources().getString(R.string.login_title)).append("\n");
                data.append("设备序列号:").append(rechargeBean.getSerial()).append("\n");
                data.append("用户名:").append(rechargeBean.getUserName()).append("\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("充值金额:").append(rechargeBean.getMorny()).append("元").append("\n");
                data.append("卡内余额:").append(rechargeBean.getBalance()).append("元").append("\n");
                data.append("日  期:").append(DateUtil.dateToStamp(rechargeBean.getDate(), DateUtil.type2)).append("\n\n");
                data.append("*****************************");
            }
@@ -402,56 +345,72 @@
    //充值上传(Socket)
    private void recharge(String initPeasantCode) {
    private void recharge(String initPeasantCode, String name) {
        try {
            RechargeRequestBean rechargeRequestBean = new RechargeRequestBean();
            rechargeRequestBean.setControl("01");
            String initCode = WSHelper.getInstance(this).get("initCode", "");
            String initCode = DeviceNumberUtils.getDeviceNumber();
            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) {
                    //金额
                    byte[] blanceByte = Arrays.copyOfRange(readData.getBodyBytes(), 3, 7);
                    int balance = SocketUtil.get16to10LowHigh(blanceByte);
                    //姓名
                    byte[] nameByte = Arrays.copyOfRange(readData.getBodyBytes(), 7, 19);
                    userName = SocketUtil.fromHexString(SocketUtil.bytesToHexClean0(nameByte));
                    byte[] orderByte = Arrays.copyOfRange(readData.getBodyBytes(), 19, 27);
                    String orderId = BcdUtil.bcdToStr(orderByte);
                    if (CRC8.isCRC8(readData.getOriginDataBytes())) {
                        String state = BcdUtil.bcdToStr(readData.getBodyBytes()[2]);
                        //00启用01禁用02隶属信息不符03无此卡信息04其它
                        if ("00".equalsIgnoreCase(state)) {
                            rechargeIsOk = true;
                            binding.cardData.setText("充值通信完成,请帖卡充值");
                            rechargeBean = new RechargeBean();
                            rechargeBean.setDate(System.currentTimeMillis());
                            rechargeBean.setMorny(morny);
                            rechargeBean.setUserName(name);
                            rechargeBean.setSerial(adminData.getSerial());
                            userCard.setRechargeDate(Calendar.getInstance());
                            userCard.setBalance(balance);
                            rechargeBean.setBalance(MornyUtil.changeF2Y(balance));
                            rechargeBean.setInitPeasantCode(initPeasantCode);
                            rechargeBean.setOrderID(orderId);
                            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)) {
                            userCard.setState("01");
                            userFlag = WriteCardUtils.setUser(intent, userCard, NFCWreatActivity.this);
                            NFCWreatActivity.this.finish();
                            ToastUtil.show(NFCWreatActivity.this, "充值报文错误-禁用");
                            TipUtil.show("充值报文错误-禁用");
                        } else if ("02".equalsIgnoreCase(state)) {
                            ToastUtil.show(NFCWreatActivity.this, "充值报文错误-隶属信息不符");
                            TipUtil.show("充值报文错误-隶属信息不符");
                            NFCWreatActivity.this.finish();
                        } else if ("03".equalsIgnoreCase(state)) {
                            ToastUtil.show(NFCWreatActivity.this, "充值报文错误-无此卡信息");
                            TipUtil.show("充值报文错误-无此卡信息");
                            NFCWreatActivity.this.finish();
                        } else {
                            ToastUtil.show(NFCWreatActivity.this, "充值报文错误-其它");
                            TipUtil.show("充值报文错误-其它");
                            NFCWreatActivity.this.finish();
                        }
                    } else {
                        //校验CRC错误
                        ToastUtil.show(NFCWreatActivity.this, "充值报文错误校验CRC错误");
                        TipUtil.show(NFCWreatActivity.this, "充值报文错误校验CRC错误");
                        NFCWreatActivity.this.finish();
                    }
                    stopAnim();
@@ -460,7 +419,7 @@
                @Override
                public void onSocketError(int code, String msg) {
                    stopAnim();
                    ToastUtil.show(NFCWreatActivity.this, msg);
                    TipUtil.show(NFCWreatActivity.this, msg);
                }
            });
        } catch (Exception e) {
@@ -470,13 +429,29 @@
    }
    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;
    //往卡内写充值后的数据
    private void rechargeWrratCard() {
        UserCard userCardold = NfcReadHelper.getInstence(intent, this).getUserCardData();
        if (userCardold != null) {
            //判断是否充值的是一个卡
            if (userCard.getInitPeasantCode().equals(userCardold.getInitPeasantCode())) {
                userCard.setState("00");
                userFlag = WriteCardUtils.setUser(intent, userCard, this);
                //   打印相关
                if (userFlag) {
                    setPrinterData(rechargeBean);
                    startDetailActivity(userName, "启用");
                } else {
                    TipUtil.show(NFCWreatActivity.this, "写卡失败,请重新再试");
                }
            } else {
                TipUtil.show(NFCWreatActivity.this, "读取的卡和充值的卡不一致");
            }
        });
        }
    }
    private void setmanageCard(Intent intent, final ManageCard manageCard) {
        manageCardFlag = NFCWriteHelper.getInstence(intent, this).writeData(manageCard.toZeroByte(baseDao), 1, 0);
    }
    /**
@@ -486,41 +461,9 @@
     * @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;
            }
        });
        cleanFlag = NFCWriteHelper.getInstence(intent, this).writeData(clearOrInitCard.toByte(baseDao), 1, 0);
    }
    //向卡写入用户信息
    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;
            }
        });
        if (!userFlag) {
            return;
        }
        NFCWriteHelper.getInstence(intent).writeData(userCard.getOneBytes(), 1, 1, new NFCWriteHelper.NFCCallback() {
            @Override
            public void isSusses(boolean flag) {
                userFlag = flag;
            }
        });
        if (!userFlag) {
            return;
        }
        NFCWriteHelper.getInstence(intent).writeData(userCard.getTwoBytes(), 1, 2, new NFCWriteHelper.NFCCallback() {
            @Override
            public void isSusses(boolean flag) {
                userFlag = flag;
            }
        });
    }
    /**
     * 重新注册设备卡
@@ -529,12 +472,7 @@
     * @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;
            }
        });
        registeredFlag = NFCWriteHelper.getInstence(intent, this).writeData(registeredCard.toByte(baseDao), 1, 0);
    }
    /**
@@ -544,12 +482,7 @@
     * @param cleanUserCard
     */
    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;
            }
        });
        cleanUserCardFlag = NFCWriteHelper.getInstence(intent, this).writeData(cleanUserCard.toByte(baseDao), 1, 0);
    }
    /**
@@ -560,30 +493,15 @@
     */
    private void setDomainCard(Intent intent, DomainCard domainCard) {
        try {
            NFCWriteHelper.getInstence(intent).writeData(domainCard.getZeroByte(), 1, 0, new NFCWriteHelper.NFCCallback() {
                @Override
                public void isSusses(boolean flag) {
                    domainCrdFlag = flag;
                }
            });
            domainCrdFlag = NFCWriteHelper.getInstence(intent, this).writeData(domainCard.getZeroByte(), 1, 0);
            if (!domainCrdFlag) {
                return;
            }
            NFCWriteHelper.getInstence(intent).writeData(domainCard.getOneByte(), 1, 1, new NFCWriteHelper.NFCCallback() {
                @Override
                public void isSusses(boolean flag) {
                    domainCrdFlag = flag;
                }
            });
            domainCrdFlag = NFCWriteHelper.getInstence(intent, this).writeData(domainCard.getOneByte(), 1, 1);
            if (!domainCrdFlag) {
                return;
            }
            NFCWriteHelper.getInstence(intent).writeData(domainCard.getTwoByte(), 1, 2, new NFCWriteHelper.NFCCallback() {
                @Override
                public void isSusses(boolean flag) {
                    domainCrdFlag = flag;
                }
            });
            domainCrdFlag = NFCWriteHelper.getInstence(intent, this).writeData(domainCard.getTwoByte(), 1, 2);
        } catch (Exception e) {
            domainCrdFlag = false;
            throw new RuntimeException(e);
@@ -591,32 +509,17 @@
    }
    private void setTestCard(Intent intent, TestCard testCard) {
        NFCWriteHelper.getInstence(intent).writeData(testCard.toByte(), 1, 0, new NFCWriteHelper.NFCCallback() {
            @Override
            public void isSusses(boolean flag) {
                testCardFlag = flag;
            }
        });
        testCardFlag = NFCWriteHelper.getInstence(intent, this).writeData(testCard.toByte(baseDao), 1, 0);
    }
    private void setConfigDeviceRegiest(Intent intent, ConfigureDeviceRegistrationCrad configureDeviceRegistrationCrad) {
        NFCWriteHelper.getInstence(intent).writeData(configureDeviceRegistrationCrad.toByte(), 1, 0, new NFCWriteHelper.NFCCallback() {
            @Override
            public void isSusses(boolean flag) {
                configDeviceRegiestFlag = flag;
            }
        });
        configDeviceRegiestFlag = NFCWriteHelper.getInstence(intent, this).writeData(configureDeviceRegistrationCrad.toByte(baseDao), 1, 0);
    }
    private void setConfigurationPower(Intent intent, ConfigurationPowerCard configurationPowerCard) {
        try {
            NFCWriteHelper.getInstence(intent).writeData(configurationPowerCard.toByte(), 1, 0, new NFCWriteHelper.NFCCallback() {
                @Override
                public void isSusses(boolean flag) {
                    configPowerFlag = flag;
                }
            });
            configPowerFlag = NFCWriteHelper.getInstence(intent, this).writeData(configurationPowerCard.toByte(baseDao), 1, 0);
        } catch (Exception e) {
            configPowerFlag = false;
            throw new RuntimeException(e);
@@ -624,7 +527,27 @@
    }
    private void startDetailActivity(String userName, String statu) {
        Intent detail = new Intent(this, RechargeDetail.class);
        detail.putExtra("userName", userName);
        detail.putExtra("statu", statu);
        detail.putExtra("userCard", userCard);
        if (!TextUtils.isEmpty(morny)) {
            detail.putExtra("morny", morny);
        }
        startActivity(detail);
        if (NewCardActivity.newCardActivity != null) {
            NewCardActivity.newCardActivity.finish();
        }
        if (RechargeActivity.rechargeActivity != null) {
            RechargeActivity.rechargeActivity.finish();
        }
        NFCWreatActivity.nfcWreatActivity.finish();
    }
    /**
     * 查询余额
     *
     * @param initPeasantCode 农户注册编号
     */
    private void selectBalance(String initPeasantCode) {
@@ -633,7 +556,7 @@
            BalanceSelecteRequestBean requestBean = new BalanceSelecteRequestBean();
            requestBean.setAFN("94");
            requestBean.setControl("01");
            String initCode = WSHelper.getInstance(this).get("initCode", "");
            String initCode = DeviceNumberUtils.getDeviceNumber();
            requestBean.setInitCode(initCode);
            requestBean.setInitPeasantCode(initPeasantCode);
            requestBean.setXuLie(SocketUtil.getXuLie(this));
@@ -641,51 +564,55 @@
                @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());
                            if (userCard == null) {
                                userCard = new UserCard();
                                userCard.setRechargeTimes(0);
                                ElectricPriceBean electricPriceBean = baseDao.electricPriceDao().findFirst();
                                if (electricPriceBean != null) {
                                    userCard.setElectricityPrice(electricPriceBean.getPrice());
                                } else {
                                    rechargeBean.setUserName(name);
                                    //默认是1元
                                    userCard.setElectricityPrice(1.000f);
                                }
                                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);
                                userCard.setSwipeNumber((short) 0);
                                userCard.setState("00");
                                userCard.setBalance(0);
                                userCard.setAddressCode(adminData.getAddressCode());
                                userCard.setInitPeasantCode(initPeasantCode);
                            }
                            //只有启动状态才能充值
                            //金额
                            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));
                            if ("00".equals(state)) {
                                stateText.append("启用");
                                userCard.setBalance(balance);
                                userCard.setState("00");
                                //补卡逻辑
                                userFlag = WriteCardUtils.setUser(intent, userCard, NFCWreatActivity.this);
                                if (userFlag) {
                                    TipUtil.show(NFCWreatActivity.this, "补卡成功", new TipUtil.TipListener() {
                                        @Override
                                        public void onCancle() {
                                            NFCWreatActivity.this.finish();
                                        }
                                    });
                                }
                                return;
                            } else if ("01".equals(state)) {
                                stateText.append("禁用");
                                userCard.setState("01");
                                setUser(intent, userCard);
                                userCard.setBalance(balance);
                                userFlag = WriteCardUtils.setUser(intent, userCard, NFCWreatActivity.this);
                                startDetailActivity(name, stateText.toString());
                            } else if ("02".equals(state)) {
                                stateText.append("隶属信息不符");
                            } else if ("03".equals(state)) {
@@ -693,21 +620,23 @@
                            } else if ("04".equals(state)) {
                                stateText.append("其它");
                            }
                            ToastUtil.show(NFCWreatActivity.this, stateText.toString());
                            stopAnim();
                            binding.cardData.setText(stateText);
                            TipUtil.show(NFCWreatActivity.this, stateText.toString());
                        } catch (Exception e) {
                            e.printStackTrace();
                            stopAnim();
                        }
                    } else {
                        //校验CRC错误
                        ToastUtil.show(NFCWreatActivity.this, "开卡报文校验CRC错误");
                        TipUtil.show(NFCWreatActivity.this, "开卡报文校验CRC错误");
                    }
                }
                @Override
                public void onSocketError(int code, String msg) {
                    stopAnim();
                    ToastUtil.show(NFCWreatActivity.this, msg);
                    TipUtil.show(NFCWreatActivity.this, msg);
                }
            });
        } catch (Exception e) {
@@ -717,4 +646,8 @@
    }
    protected void onDestroy() {
        super.onDestroy();
        nfcWreatActivity = null;
    }
}