左晓为主开发手持机充值管理机
zuoxiao
2024-03-22 e8232424de65da0254ce9637e19af9a4a6527964
app/src/main/java/com/dayu/recharge/activity/NFCWreatActivity.java
@@ -1,15 +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.view.View;
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;
@@ -31,7 +31,6 @@
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;
@@ -40,8 +39,10 @@
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.TipUtil;
import com.dayu.recharge.view.ProgressDialog;
import com.tencent.bugly.crashreport.CrashReport;
import java.util.Arrays;
@@ -54,7 +55,7 @@
 * Description: nfc写卡界面
 */
public class NFCWreatActivity extends BaseNfcActivity {
    public static String TAG = "NFCWreatActivity";
    boolean cleanFlag = false;
    boolean userFlag = false;
@@ -72,7 +73,6 @@
    boolean configPowerFlag = false;
    UserCardBean userCardBean;
    String morny;
    String userName;
@@ -112,7 +112,6 @@
        try {
            binding = ActivityWriteTextBinding.inflate(LayoutInflater.from(this));
            setContentView(binding.getRoot());
            initView();
            nfcWreatActivity = this;
            getData();
            baseApp = (MyApplication) getApplication();
@@ -122,32 +121,8 @@
        }
    }
    private void initView() {
        handler = new Handler(new Handler.Callback() {
            @Override
            public boolean handleMessage(Message msg) {
                switch (msg.what) {
                    case HAS_USER://判断已写入用户
                        binding.textView.setText("该卡已经写入用户信息,请更换卡片");
                        binding.textView.setTextColor(getResources().getColor(R.color.red));
                        stopAnim();
                        break;
                    case NO_USER://没有写过用户继续保存
                        saveData();
                        break;
                    default:
                        stopAnim();
                        TipUtil.show(NFCWreatActivity.this, "卡片读取失败");
                        break;
                }
                return false;
            }
        });
    }
    @SuppressLint("SetTextI18n")
    private void getData() {
        try {
            if (this.getIntent().hasExtra("userCard")) {
@@ -196,7 +171,7 @@
                userName = this.getIntent().getStringExtra("userName");
                binding.cardData.setText("充值金额:" + morny + "元");
                // 充值逻辑
                recharge(userCard.getInitPeasantCode(), userName, "启用");
                recharge(userCard.getInitPeasantCode(), userName);
            }
            try {
@@ -215,37 +190,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(int code) {
                            Message message = new Message();
                            message.what = code;
                            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();
    }
@@ -258,7 +219,8 @@
                    || configureDeviceRegistrationCrad != null
                    || configurationPowerCard != null) {
                if (userCard != null && TextUtils.isEmpty(morny)) {
                    userFlag = WriteCardUtils.setUser(intent, userCard);
                    userFlag = WriteCardUtils.setUser(intent, userCard, this);
                }
                if (cleanCard != null) {
                    setClean(intent, cleanCard);
@@ -290,11 +252,9 @@
                            //用户卡
                            startDetailActivity(userCardBean.getUserName(), "启用");
                        } else if (!TextUtils.isEmpty(morny)) {
                            NFCWreatActivity.this.finish();
                            TipUtil.show("充值成功");
                            TipUtil.show(NFCWreatActivity.this, "充值成功", NFCWreatActivity.this::finish);
                        } else {
                            NFCWreatActivity.this.finish();
                            TipUtil.show("写卡成功");
                            TipUtil.show(NFCWreatActivity.this, "写卡成功", NFCWreatActivity.this::finish);
                        }
                    } catch (Exception e) {
@@ -302,14 +262,10 @@
                        CrashReport.postCatchedException(e);
                    }
                } else {
                    TipUtil.show("写卡失败");
                    TipUtil.show(NFCWreatActivity.this, "写卡失败");
                }
                stopAnim();
            }
//            else if (!TextUtils.isEmpty(morny)) {
//
//            }
            else if (userCard == null && userCardBean != null) {
            } else if (userCard == null && userCardBean != null) {
                //补卡逻辑
                selectBalance(userCardBean.getInitPeasantCode());
            } else {
@@ -328,6 +284,7 @@
        try {
            this.intent = intent;
            startAnim();
            Log.i("NFCWreatActivity", "isUser:" + isUser);
            if (isUser) {
                checkHasUser();
            } else if (isRecharge) {
@@ -357,13 +314,13 @@
            StringBuffer data = new StringBuffer();
            if (rechargeBean != null) {
                data.append("*****************************" + "\n");
                data.append(getResources().getString(R.string.login_title) + "\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("*****************************");
            }
@@ -379,6 +336,7 @@
    }
    void startAnim() {
        binding.avi.setVisibility(View.VISIBLE);
        binding.avi.show();
        // or avi.smoothToShow();
    }
@@ -390,7 +348,7 @@
    //充值上传(Socket)
    private void recharge(String initPeasantCode, String name, String statu) {
    private void recharge(String initPeasantCode, String name) {
        try {
            RechargeRequestBean rechargeRequestBean = new RechargeRequestBean();
            rechargeRequestBean.setControl("01");
@@ -428,7 +386,8 @@
                            rechargeBean.setSerial(adminData.getSerial());
                            userCard.setRechargeDate(Calendar.getInstance());
                            rechargeBean.setBalance(MornyUtil.changeF2Y(balance + MornyUtil.changeY2F(morny)) + "");
                            userCard.setBalance(balance);
                            rechargeBean.setBalance(MornyUtil.changeF2Y(balance));
                            rechargeBean.setInitPeasantCode(initPeasantCode);
                            rechargeBean.setOrderID(orderId);
                            try {
@@ -439,7 +398,7 @@
                            userCard.setRechargeTimes(userCard.getRechargeTimes() + 1);
                        } else if ("01".equalsIgnoreCase(state)) {
                            userCard.setState("01");
                            userFlag = WriteCardUtils.setUser(intent, userCard);
                            userFlag = WriteCardUtils.setUser(intent, userCard, NFCWreatActivity.this);
                            NFCWreatActivity.this.finish();
                            TipUtil.show("充值报文错误-禁用");
                        } else if ("02".equalsIgnoreCase(state)) {
@@ -475,12 +434,12 @@
    //往卡内写充值后的数据
    private void rechargeWrratCard() {
        UserCard userCardold = NfcReadHelper.getInstence(intent).getUserCardData();
        UserCard userCardold = NfcReadHelper.getInstence(intent, this).getUserCardData();
        if (userCardold != null) {
            //判断是否充值的是一个卡
            if (userCard.getInitPeasantCode().equals(userCardold.getInitPeasantCode())) {
                userCard.setState("00");
                userFlag = WriteCardUtils.setUser(intent, userCard);
                userFlag = WriteCardUtils.setUser(intent, userCard, this);
                //   打印相关
                if (userFlag) {
                    setPrinterData(rechargeBean);
@@ -491,13 +450,11 @@
            } else {
                TipUtil.show(NFCWreatActivity.this, "读取的卡和充值的卡不一致");
            }
        } else {
        }
    }
    private void setmanageCard(Intent intent, final ManageCard manageCard) {
        manageCardFlag = NFCWriteHelper.getInstence(intent).writeData(manageCard.toZeroByte(), 1, 0);
        manageCardFlag = NFCWriteHelper.getInstence(intent, this).writeData(manageCard.toZeroByte(baseDao), 1, 0);
    }
    /**
@@ -507,7 +464,7 @@
     * @param clearOrInitCard
     */
    private void setClean(Intent intent, final CleanCard clearOrInitCard) {
        cleanFlag = NFCWriteHelper.getInstence(intent).writeData(clearOrInitCard.toByte(), 1, 0);
        cleanFlag = NFCWriteHelper.getInstence(intent, this).writeData(clearOrInitCard.toByte(baseDao), 1, 0);
    }
@@ -518,7 +475,7 @@
     * @param registeredCard
     */
    private void setRegisteredCard(Intent intent, RegisteredCard registeredCard) {
        registeredFlag = NFCWriteHelper.getInstence(intent).writeData(registeredCard.toByte(), 1, 0);
        registeredFlag = NFCWriteHelper.getInstence(intent, this).writeData(registeredCard.toByte(baseDao), 1, 0);
    }
    /**
@@ -528,7 +485,7 @@
     * @param cleanUserCard
     */
    private void setCleanUserCard(Intent intent, CleanUserCard cleanUserCard) {
        cleanUserCardFlag = NFCWriteHelper.getInstence(intent).writeData(cleanUserCard.toByte(), 1, 0);
        cleanUserCardFlag = NFCWriteHelper.getInstence(intent, this).writeData(cleanUserCard.toByte(baseDao), 1, 0);
    }
    /**
@@ -539,15 +496,15 @@
     */
    private void setDomainCard(Intent intent, DomainCard domainCard) {
        try {
            domainCrdFlag = NFCWriteHelper.getInstence(intent).writeData(domainCard.getZeroByte(), 1, 0);
            domainCrdFlag = NFCWriteHelper.getInstence(intent, this).writeData(domainCard.getZeroByte(), 1, 0);
            if (!domainCrdFlag) {
                return;
            }
            domainCrdFlag = NFCWriteHelper.getInstence(intent).writeData(domainCard.getOneByte(), 1, 1);
            domainCrdFlag = NFCWriteHelper.getInstence(intent, this).writeData(domainCard.getOneByte(), 1, 1);
            if (!domainCrdFlag) {
                return;
            }
            domainCrdFlag = NFCWriteHelper.getInstence(intent).writeData(domainCard.getTwoByte(), 1, 2);
            domainCrdFlag = NFCWriteHelper.getInstence(intent, this).writeData(domainCard.getTwoByte(), 1, 2);
        } catch (Exception e) {
            domainCrdFlag = false;
            throw new RuntimeException(e);
@@ -555,17 +512,17 @@
    }
    private void setTestCard(Intent intent, TestCard testCard) {
        testCardFlag = NFCWriteHelper.getInstence(intent).writeData(testCard.toByte(), 1, 0);
        testCardFlag = NFCWriteHelper.getInstence(intent, this).writeData(testCard.toByte(baseDao), 1, 0);
    }
    private void setConfigDeviceRegiest(Intent intent, ConfigureDeviceRegistrationCrad configureDeviceRegistrationCrad) {
        configDeviceRegiestFlag = NFCWriteHelper.getInstence(intent).writeData(configureDeviceRegistrationCrad.toByte(), 1, 0);
        configDeviceRegiestFlag = NFCWriteHelper.getInstence(intent, this).writeData(configureDeviceRegistrationCrad.toByte(baseDao), 1, 0);
    }
    private void setConfigurationPower(Intent intent, ConfigurationPowerCard configurationPowerCard) {
        try {
            configPowerFlag = NFCWriteHelper.getInstence(intent).writeData(configurationPowerCard.toByte(), 1, 0);
            configPowerFlag = NFCWriteHelper.getInstence(intent, this).writeData(configurationPowerCard.toByte(baseDao), 1, 0);
        } catch (Exception e) {
            configPowerFlag = false;
            throw new RuntimeException(e);
@@ -597,8 +554,9 @@
     * @param initPeasantCode 农户注册编号
     */
    private void selectBalance(String initPeasantCode) {
        Log.i(TAG, "补卡查询余额:农户注册编号 " + initPeasantCode);
        try {
            startAnim();
            BalanceSelecteRequestBean requestBean = new BalanceSelecteRequestBean();
            requestBean.setAFN("94");
            requestBean.setControl("01");
@@ -610,16 +568,13 @@
                @Override
                public void onSocketResponse(SocketData readData) {
                    if (CRC8.isCRC8(readData.getOriginDataBytes())) {
                        StringBuffer stateText = null;
                        try {
                            stateText = new StringBuffer();
                            String state = BcdUtil.bcdToStr(readData.getBodyBytes()[2]);  //BCD码00启用 01禁用 02隶属信息不符 03无此卡信息 04其它s
                            if (userCard == null) {
                                userCard = new UserCard();
                                userCard.setRechargeTimes(0);
                                ElectricPriceBean electricPriceBean = baseDao.electricPriceDao().findFirst();
                                if (electricPriceBean != null) {
                                    userCard.setElectricityPrice(electricPriceBean.getPrice());
@@ -645,18 +600,21 @@
                                userCard.setBalance(balance);
                                userCard.setState("00");
                                //补卡逻辑
                                userFlag = WriteCardUtils.setUser(intent, userCard);
                                userFlag = WriteCardUtils.setUser(intent, userCard, NFCWreatActivity.this);
                                if (userFlag) {
                                    NFCWreatActivity.this.finish();
                                    TipUtil.show(NFCWreatActivity.this, "补卡成功");
                                    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");
                                userCard.setBalance(balance);
                                userFlag = WriteCardUtils.setUser(intent, userCard);
                                userFlag = WriteCardUtils.setUser(intent, userCard, NFCWreatActivity.this);
                                startDetailActivity(name, stateText.toString());
                            } else if ("02".equals(state)) {
@@ -677,19 +635,28 @@
                        //校验CRC错误
                        TipUtil.show(NFCWreatActivity.this, "开卡报文校验CRC错误");
                    }
                    stopAnim();
                }
                @Override
                public void onSocketError(int code, String msg) {
                    stopAnim();
                    TipUtil.show(NFCWreatActivity.this, msg);
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
            CrashReport.postCatchedException(e);
            stopAnim();
            ProgressDialog.dismiss();
        }
    }
    protected void onDestroy() {
        super.onDestroy();
        nfcWreatActivity = null;
    }
}