左晓为主开发手持机充值管理机
zuoxiao
2024-03-05 88c82455871cd03e0a0b6f32591f9bee74a2dc34
1.修改卡标识的bug
2.优化卡结构的代码
16个文件已修改
493 ■■■■ 已修改文件
app/build.gradle 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/activity/IdentifyingActivity.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/activity/NFCWreatActivity.java 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/activity/SysActivity.java 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/card/BaseCard.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/card/CleanCard.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/card/CleanUserCard.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/card/ConfigurationPowerCard.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/card/ConfigureDeviceRegistrationCrad.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/card/ManageCard.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/card/PassWordCard.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/card/RegisteredCard.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/card/TestCard.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/card/UserCard.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/utils/MyCommon.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_identyfying.xml 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/build.gradle
@@ -76,7 +76,8 @@
    //地址选择
    implementation project(':pickerviewlibrary')
    implementation project(':easysocket')
    implementation 'com.tencent.bugly:crashreport:latest.release'
    implementation 'com.tencent.bugly:crashreport:4.1.9.3'
//    处理图片
//    implementation (name: 'ocr-library', ext: 'aar')
    //权限申请
app/src/main/java/com/dayu/recharge/activity/IdentifyingActivity.java
@@ -3,17 +3,9 @@
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import com.dayu.recharge.card.CleanCard;
import com.dayu.recharge.card.ConfigurationPowerCard;
import com.dayu.recharge.card.ConfigureDeviceRegistrationCrad;
import com.dayu.recharge.card.ManageCard;
import com.dayu.recharge.card.RegisteredCard;
import com.dayu.recharge.card.TestCard;
import com.dayu.recharge.databinding.ActivityIdentyfyingBinding;
import com.dayu.recharge.dbBean.CardData;
import com.dayu.recharge.dbBean.IdentityBean;
import com.dayu.recharge.utils.MyCommon;
import com.dayu.recharge.utils.TipUtil;
import com.dayu.recharge.view.ChooseView;
@@ -45,31 +37,20 @@
        super.onCreate(savedInstanceState);
        binding = ActivityIdentyfyingBinding.inflate(LayoutInflater.from(this));
        setContentView(binding.getRoot());
        binding.chooseCardType.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ChooseView.getIntence(IdentifyingActivity.this, Arrays.asList(nianfen.clone()), new ChooseView.ChooseCallBack() {
                    @Override
                    public void onOptionsSelect(int options1) {
                        chooseData(nianfen[options1]);
                        binding.chooseCardTypeText.setText(nianfen[options1]);
                    }
                }).show();
        binding.chooseCardType.setOnClickListener(v ->
                ChooseView.getIntence(IdentifyingActivity.this, Arrays.asList(nianfen.clone()), options1 -> {
                    chooseData(nianfen[options1]);
                    binding.chooseCardTypeText.setText(nianfen[options1]);
                }).show());
        binding.electricOk.setOnClickListener(v -> {
            if (TextUtils.isEmpty(cardType)) {
                TipUtil.show("请选择卡类型");
                return;
            }
        });
        IdentityBean identityBean = baseDao.identityDao().findFirst();
        binding.electricOk.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (TextUtils.isEmpty(cardType)) {
                    TipUtil.show("请选择卡类型");
                    return;
                }
                String data = binding.electricOldNumber.getText().toString();
                if (!TextUtils.isEmpty(data)) {
            String data = binding.electricNewNum.getText().toString();
            if (!TextUtils.isEmpty(data)) {
                if (data.length() % 2 == 0) {
                    if (cardData == null) {
                        cardData = new CardData();
                        cardData.setCardType(cardType);
@@ -78,8 +59,11 @@
                    baseDao.cardDataDao().insert(cardData);
                    TipUtil.show("保存成功");
                } else {
                    TipUtil.show("请输入卡标识");
                    TipUtil.show("请输入正确的16进制字符串");
                }
            } else {
                TipUtil.show("请输入卡标识");
            }
        });
    }
@@ -94,7 +78,7 @@
                if (cardData != null) {
                    setData(cardData);
                } else {
                    binding.electricOldNumber.setText(new ManageCard().getCardData());
                    binding.electricOldNumber.setText(MyCommon.getDefaultCardData(cardType));
                }
                break;
            case "清零卡":
@@ -103,7 +87,7 @@
                if (cardData != null) {
                    setData(cardData);
                } else {
                    binding.electricOldNumber.setText(new CleanCard().getCardData());
                    binding.electricOldNumber.setText(MyCommon.getDefaultCardData(cardType));
                }
                break;
            case "重新注册设备卡":
@@ -112,7 +96,7 @@
                if (cardData != null) {
                    setData(cardData);
                } else {
                    binding.electricOldNumber.setText(new RegisteredCard().getCardData());
                    binding.electricOldNumber.setText(MyCommon.getDefaultCardData(cardType));
                }
                break;
            case "删除全部用户卡":
@@ -121,7 +105,7 @@
                if (cardData != null) {
                    setData(cardData);
                } else {
                    binding.electricOldNumber.setText(new RegisteredCard().getCardData());
                    binding.electricOldNumber.setText(MyCommon.getDefaultCardData(cardType));
                }
                break;
            case "测试卡":
@@ -130,7 +114,7 @@
                if (cardData != null) {
                    setData(cardData);
                } else {
                    binding.electricOldNumber.setText(new TestCard().getCardData());
                    binding.electricOldNumber.setText(MyCommon.getDefaultCardData(cardType));
                }
                break;
            case "设备信息卡":
@@ -139,7 +123,7 @@
                if (cardData != null) {
                    setData(cardData);
                } else {
                    binding.electricOldNumber.setText(new ConfigureDeviceRegistrationCrad().getCardData());
                    binding.electricOldNumber.setText(MyCommon.getDefaultCardData(cardType));
                }
                break;
            case "水泵功率卡":
@@ -148,7 +132,7 @@
                if (cardData != null) {
                    setData(cardData);
                } else {
                    binding.electricOldNumber.setText(new ConfigurationPowerCard().getCardData());
                    binding.electricOldNumber.setText(MyCommon.getDefaultCardData(cardType));
                }
                break;
        }
app/src/main/java/com/dayu/recharge/activity/NFCWreatActivity.java
@@ -1,5 +1,6 @@
package com.dayu.recharge.activity;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
@@ -70,7 +71,6 @@
    boolean configPowerFlag = false;
    UserCardBean userCardBean;
    UserCard olduserCard;
    String morny;
    String userName;
@@ -120,6 +120,7 @@
    }
    @SuppressLint("SetTextI18n")
    private void getData() {
        try {
            if (this.getIntent().hasExtra("userCard")) {
@@ -168,7 +169,7 @@
                userName = this.getIntent().getStringExtra("userName");
                binding.cardData.setText("充值金额:" + morny + "元");
                // 充值逻辑
                recharge(userCard.getInitPeasantCode(), userName, "启用");
                recharge(userCard.getInitPeasantCode(), userName);
            }
            try {
@@ -249,9 +250,9 @@
                            //用户卡
                            startDetailActivity(userCardBean.getUserName(), "启用");
                        } else if (!TextUtils.isEmpty(morny)) {
                            TipUtil.show(NFCWreatActivity.this, "充值成功", () -> NFCWreatActivity.this.finish());
                            TipUtil.show(NFCWreatActivity.this, "充值成功", NFCWreatActivity.this::finish);
                        } else {
                            TipUtil.show(NFCWreatActivity.this, "写卡成功", () -> NFCWreatActivity.this.finish());
                            TipUtil.show(NFCWreatActivity.this, "写卡成功", NFCWreatActivity.this::finish);
                        }
                    } catch (Exception e) {
@@ -311,13 +312,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("*****************************");
            }
@@ -344,7 +345,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");
@@ -445,13 +446,11 @@
            } else {
                TipUtil.show(NFCWreatActivity.this, "读取的卡和充值的卡不一致");
            }
        } else {
        }
    }
    private void setmanageCard(Intent intent, final ManageCard manageCard) {
        manageCardFlag = NFCWriteHelper.getInstence(intent, this).writeData(manageCard.toZeroByte(), 1, 0);
        manageCardFlag = NFCWriteHelper.getInstence(intent, this).writeData(manageCard.toZeroByte(baseDao), 1, 0);
    }
    /**
@@ -461,7 +460,7 @@
     * @param clearOrInitCard
     */
    private void setClean(Intent intent, final CleanCard clearOrInitCard) {
        cleanFlag = NFCWriteHelper.getInstence(intent, this).writeData(clearOrInitCard.toByte(), 1, 0);
        cleanFlag = NFCWriteHelper.getInstence(intent, this).writeData(clearOrInitCard.toByte(baseDao), 1, 0);
    }
@@ -472,7 +471,7 @@
     * @param registeredCard
     */
    private void setRegisteredCard(Intent intent, RegisteredCard registeredCard) {
        registeredFlag = NFCWriteHelper.getInstence(intent, this).writeData(registeredCard.toByte(), 1, 0);
        registeredFlag = NFCWriteHelper.getInstence(intent, this).writeData(registeredCard.toByte(baseDao), 1, 0);
    }
    /**
@@ -482,7 +481,7 @@
     * @param cleanUserCard
     */
    private void setCleanUserCard(Intent intent, CleanUserCard cleanUserCard) {
        cleanUserCardFlag = NFCWriteHelper.getInstence(intent, this).writeData(cleanUserCard.toByte(), 1, 0);
        cleanUserCardFlag = NFCWriteHelper.getInstence(intent, this).writeData(cleanUserCard.toByte(baseDao), 1, 0);
    }
    /**
@@ -509,17 +508,17 @@
    }
    private void setTestCard(Intent intent, TestCard testCard) {
        testCardFlag = NFCWriteHelper.getInstence(intent, this).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, this).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, this).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);
app/src/main/java/com/dayu/recharge/activity/SysActivity.java
@@ -3,7 +3,6 @@
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import com.dayu.recharge.card.CleanCard;
import com.dayu.recharge.card.CleanUserCard;
@@ -40,99 +39,77 @@
    private void initView() {
       //制作管理卡
        adminBinding.adminAdmin.setOnClickListener(v -> {
            Intent intent = new Intent(SysActivity.this, NFCWreatActivity.class);
            ManageCard manageCard = new ManageCard();
        adminBinding.adminAdmin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(SysActivity.this, NFCWreatActivity.class);
                ManageCard manageCard = new ManageCard();
                intent.putExtra("manageCard", manageCard);
                startActivity(intent);
            }
            intent.putExtra("manageCard", manageCard);
            startActivity(intent);
        });
        //制作清零卡
        adminBinding.adminCleanZero.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(SysActivity.this, NFCWreatActivity.class);
                CleanCard cleanCard = new CleanCard();
                intent.putExtra("cleanCard", cleanCard);
                startActivity(intent);
            }
        adminBinding.adminCleanZero.setOnClickListener(v -> {
            Intent intent = new Intent(SysActivity.this, NFCWreatActivity.class);
            CleanCard cleanCard = new CleanCard();
            intent.putExtra("cleanCard", cleanCard);
            startActivity(intent);
        });
        adminBinding.adminRegistered.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(SysActivity.this, NFCWreatActivity.class);
                RegisteredCard registeredCard = new RegisteredCard();
                intent.putExtra("registeredCard", registeredCard);
                startActivity(intent);
            }
        adminBinding.adminRegistered.setOnClickListener(v -> {
            Intent intent = new Intent(SysActivity.this, NFCWreatActivity.class);
            RegisteredCard registeredCard = new RegisteredCard();
            intent.putExtra("registeredCard", registeredCard);
            startActivity(intent);
        });
        //删除全部用户
        adminBinding.adminCleanUser.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(SysActivity.this, NFCWreatActivity.class);
                CleanUserCard cleanUserCard = new CleanUserCard();
                intent.putExtra("cleanUserCard", cleanUserCard);
                startActivity(intent);
            }
        adminBinding.adminCleanUser.setOnClickListener(v -> {
            Intent intent = new Intent(SysActivity.this, NFCWreatActivity.class);
            CleanUserCard cleanUserCard = new CleanUserCard();
            intent.putExtra("cleanUserCard", cleanUserCard);
            startActivity(intent);
        });
//        设置域名卡
        adminBinding.adminDomain.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(SysActivity.this, NFCWreatActivity.class);
                DomainBean domainBean = baseDao.domainPortDao().findFirst();
                DomainCard domainCard = new DomainCard();
                if (domainBean != null) {
                    domainCard.setDomainNumber(domainBean.getDomainNumber());
                    domainCard.setDomainName(domainBean.getDomain());
                    domainCard.setPort(domainBean.getPort());
                } else {
                    domainCard.setDomainNumber("1");
                    domainCard.setDomainName("dayuyanjiuyuan.top");
                    domainCard.setPort(8888);
                }
                intent.putExtra("domainCard", domainCard);
                startActivity(intent);
        adminBinding.adminDomain.setOnClickListener(v -> {
            Intent intent = new Intent(SysActivity.this, NFCWreatActivity.class);
            DomainBean domainBean = baseDao.domainPortDao().findFirst();
            DomainCard domainCard = new DomainCard();
            if (domainBean != null) {
                domainCard.setDomainNumber(domainBean.getDomainNumber());
                domainCard.setDomainName(domainBean.getDomain());
                domainCard.setPort(domainBean.getPort());
            } else {
                domainCard.setDomainNumber("1");
                domainCard.setDomainName("dayuyanjiuyuan.top");
                domainCard.setPort(8888);
            }
            intent.putExtra("domainCard", domainCard);
            startActivity(intent);
        });
        adminBinding.adminTest.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(SysActivity.this, NFCWreatActivity.class);
                TestCard testCard = new TestCard();
                intent.putExtra("testCard", testCard);
                startActivity(intent);
            }
        adminBinding.adminTest.setOnClickListener(v -> {
            Intent intent = new Intent(SysActivity.this, NFCWreatActivity.class);
            TestCard testCard = new TestCard();
            intent.putExtra("testCard", testCard);
            startActivity(intent);
        });
        adminBinding.adminConfigDeviceRegistration.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(SysActivity.this, NFCWreatActivity.class);
                ConfigureDeviceRegistrationCrad configureDeviceRegistrationCrad = new ConfigureDeviceRegistrationCrad();
                intent.putExtra("configureDeviceRegistrationCrad", configureDeviceRegistrationCrad);
                startActivity(intent);
            }
        adminBinding.adminConfigDeviceRegistration.setOnClickListener(v -> {
            Intent intent = new Intent(SysActivity.this, NFCWreatActivity.class);
            ConfigureDeviceRegistrationCrad configureDeviceRegistrationCrad = new ConfigureDeviceRegistrationCrad();
            intent.putExtra("configureDeviceRegistrationCrad", configureDeviceRegistrationCrad);
            startActivity(intent);
        });
        adminBinding.adminConfigPower.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                PowerBean powerBean = baseDao.powerDao().findFirst();
                if (powerBean != null) {
                    Intent intent = new Intent(SysActivity.this, NFCWreatActivity.class);
                    ConfigurationPowerCard configurationPowerCard = new ConfigurationPowerCard();
                    configurationPowerCard.setPower(powerBean.getPower());
                    intent.putExtra("configurationPowerCard", configurationPowerCard);
                    startActivity(intent);
                } else {
                    TipUtil.show("请先设置水泵功率");
                }
        //设置水泵功率
        adminBinding.adminConfigPower.setOnClickListener(v -> {
            PowerBean powerBean = baseDao.powerDao().findFirst();
            if (powerBean != null) {
                Intent intent = new Intent(SysActivity.this, NFCWreatActivity.class);
                ConfigurationPowerCard configurationPowerCard = new ConfigurationPowerCard();
                configurationPowerCard.setPower(powerBean.getPower());
                intent.putExtra("configurationPowerCard", configurationPowerCard);
                startActivity(intent);
            } else {
                TipUtil.show("请先设置水泵功率");
            }
        });
    }
app/src/main/java/com/dayu/recharge/card/BaseCard.java
@@ -1,6 +1,10 @@
package com.dayu.recharge.card;
import com.dayu.recharge.dao.AppDatabase;
import com.dayu.recharge.dbBean.CardData;
import com.dayu.recharge.tools.HexUtil;
import com.dayu.recharge.utils.MyCommon;
import com.tencent.bugly.crashreport.CrashReport;
import java.io.Serializable;
@@ -11,11 +15,26 @@
 * Description:所有卡结构的父类
 */
public class BaseCard implements Serializable {
    public String cardData;//标识码
    public void setCardData(AppDatabase baseDao, String cardType) {
        try {
            CardData cardDataBean = baseDao.cardDataDao().findFirst(cardType);
            if (cardDataBean != null) {
                cardData = cardDataBean.getCardIdentifying();
            } else {
                cardData=MyCommon.getDefaultCardData(cardType);
            }
        } catch (Exception e) {
            CrashReport.postCatchedException(e);
        }
    }
    /**
     * 前15个字节算术累加和 不含进位
     *
     * @param data
     * @param data 源数据
     * @return 16进制
     */
    public byte getByteSum(byte[] data) {
app/src/main/java/com/dayu/recharge/card/CleanCard.java
@@ -1,5 +1,6 @@
package com.dayu.recharge.card;
import com.dayu.recharge.dao.AppDatabase;
import com.dayu.recharge.tools.HexUtil;
import com.dayu.recharge.utils.MyCommon;
@@ -11,29 +12,26 @@
 * Date: 2023-11-08 10:57
 * Description:清零卡
 */
public class CleanCard implements Serializable {
public class CleanCard extends BaseCard implements Serializable {
    public String cardType = MyCommon.CLEAN_CARD_TYPE;//卡类型
    public String cardData = "3668F7A30119";//标识码
    public String getCardData() {
        return cardData;
    }
    public byte[] toByte() {
    public byte[] toByte(AppDatabase appDatabase) {
        setCardData(appDatabase, cardType);
        Zero zero = new Zero();
        return zero.toByte();
    }
    public class Zero extends BaseCard {
    public class Zero {
        public byte[] toByte() {
            byte[] data = new byte[16];
            data[0] = HexUtil.hexToByte(cardType);
            byte[] cardDatas = HexUtil.hexToByteArray(cardData);
            for (int i = 0; i < 6; i++) {
                data[i + 1] = cardDatas[i];
            }
            System.arraycopy(cardDatas, 0, data, 1, cardDatas.length);
            data[15] = getByteSum(data);
            return data;
        }
app/src/main/java/com/dayu/recharge/card/CleanUserCard.java
@@ -1,5 +1,6 @@
package com.dayu.recharge.card;
import com.dayu.recharge.dao.AppDatabase;
import com.dayu.recharge.tools.HexUtil;
import com.dayu.recharge.utils.MyCommon;
@@ -11,23 +12,21 @@
 * Date: 2023-11-08 11:39
 * Description:删除全部用户卡
 */
public class CleanUserCard implements Serializable {
public class CleanUserCard extends BaseCard implements Serializable {
    public String cardType = MyCommon.CLEAN_ALL_USER_CARD_TYPE;//卡类型
    public String cardData = "A0B1C289";//标识码
    public byte[] toByte() {
    public byte[] toByte(AppDatabase appDatabase) {
        setCardData(appDatabase, cardType);
        Zero zero = new Zero();
        return zero.toByte();
    }
    public class Zero extends BaseCard {
    public class Zero {
        public byte[] toByte() {
            byte[] data = new byte[16];
            data[0] = HexUtil.hexToByte(cardType);
            byte[] cardDatas = HexUtil.hexToByteArray(cardData);
            for (int i = 0; i < 4; i++) {
                data[i + 1] = cardDatas[i];
            }
            System.arraycopy(cardDatas, 0, data, 1, cardDatas.length);
            data[15] = getByteSum(data);
            return data;
        }
app/src/main/java/com/dayu/recharge/card/ConfigurationPowerCard.java
@@ -1,5 +1,6 @@
package com.dayu.recharge.card;
import com.dayu.recharge.dao.AppDatabase;
import com.dayu.recharge.tools.HexUtil;
import com.dayu.recharge.utils.MyCommon;
import com.tencent.bugly.crashreport.CrashReport;
@@ -15,11 +16,10 @@
 * 为方便现场更换设备时重新注册的问题,配置设备信息卡,首先刷卡,把原设备的注册号和ID号读到卡内,
 * 同时卡状态则00修改为FF,再新设备上刷此卡时,注册号和ID号自动写到控制器内,可以直接刷卡使用
 */
public class ConfigurationPowerCard implements Serializable {
public class ConfigurationPowerCard extends BaseCard implements Serializable {
    public String cardType = MyCommon.CONFIGURATION_POWER_CARD_TYPE;//卡类型
    public String cardData = "A0B1C289";//标识码
    public String getCardData() {
        return cardData;
@@ -49,19 +49,18 @@
        }
    }
    public byte[] toByte() {
    public byte[] toByte(AppDatabase appDatabase) {
        setCardData(appDatabase,cardType);
        Zero zero = new Zero();
        return zero.toByte();
    }
    public class Zero extends BaseCard {
    public class Zero  {
        public byte[] toByte() {
            byte[] data = new byte[16];
            data[0] = HexUtil.hexToByte(cardType);
            byte[] cardDatas = HexUtil.hexToByteArray(cardData);
            for (int i = 0; i < 4; i++) {
                data[i + 1] = cardDatas[i];
            }
                System.arraycopy(cardDatas, 0, data, 1, cardDatas.length);
            if (power != null) {
                float floatPower = Float.parseFloat(power);
                int intPower = (int) Math.ceil(floatPower); // 将浮点数向上取整并转换为整数
app/src/main/java/com/dayu/recharge/card/ConfigureDeviceRegistrationCrad.java
@@ -1,5 +1,6 @@
package com.dayu.recharge.card;
import com.dayu.recharge.dao.AppDatabase;
import com.dayu.recharge.tools.HexUtil;
import com.dayu.recharge.utils.MyCommon;
@@ -14,7 +15,7 @@
 * <p>
 * 为方便现场更换设备时重新注册的问题,配置设备信息卡,首先刷卡,把原设备的注册号和ID号读到卡内,同时卡状态则00修改为FF,再新设备上刷此卡时,注册号和ID号自动写到控制器内,可以直接刷卡使用
 */
public class ConfigureDeviceRegistrationCrad implements Serializable {
public class ConfigureDeviceRegistrationCrad extends BaseCard implements Serializable {
    public String cardType = MyCommon.CONFIGURATION_CARD_TYPE;//卡类型
    public String cardData = "A0B1C289";//标识码
@@ -22,20 +23,18 @@
        return cardData;
    }
    public byte[] toByte() {
    public byte[] toByte(AppDatabase appDatabase) {
        setCardData(appDatabase, cardType);
        Zero zero = new Zero();
        return zero.toByte();
    }
    public class Zero extends BaseCard {
    public class Zero  {
        public byte[] toByte() {
            byte[] data = new byte[16];
            data[0] = HexUtil.hexToByte(cardType);
            byte[] cardDatas = HexUtil.hexToByteArray(cardData);
            for (int i = 0; i < 4; i++) {
                data[i + 1] = cardDatas[i];
            }
                System.arraycopy(cardDatas, 0, data, 1, cardDatas.length);
            data[15] = getByteSum(data);
            return data;
        }
app/src/main/java/com/dayu/recharge/card/ManageCard.java
@@ -1,5 +1,6 @@
package com.dayu.recharge.card;
import com.dayu.recharge.dao.AppDatabase;
import com.dayu.recharge.tools.HexUtil;
import com.dayu.recharge.utils.MyCommon;
@@ -11,27 +12,27 @@
 * Date: 2023-11-08 10:19
 * Description: 管理卡  第1扇区 0块
 */
public class ManageCard implements Serializable {
public class ManageCard extends BaseCard implements Serializable {
    public String cardType = MyCommon.MANAGE_CRAD;//卡类型
    public String cardData = "3668F7A30119";//标识码
//    public String cardData = "3668F7A30119";//标识码
    public String getCardData() {
        return cardData;
    }
    public byte[] toZeroByte() {
    public byte[] toZeroByte(AppDatabase appDatabase) {
        setCardData(appDatabase, cardType);
        Zero zero = new Zero();
        return zero.toByte();
    }
    public class Zero extends BaseCard {
    public class Zero {
        public byte[] toByte() {
            byte[] data = new byte[16];
            data[0] = HexUtil.hexToByte(cardType);
            byte[] cardDatas = HexUtil.hexToByteArray(cardData);
            for (int i = 0; i < 6; i++) {
                data[i + 1] = cardDatas[i];
            }
            System.arraycopy(cardDatas, 0, data, 1, cardDatas.length);
            data[15] = getByteSum(data);
            return data;
        }
app/src/main/java/com/dayu/recharge/card/PassWordCard.java
@@ -1,7 +1,10 @@
package com.dayu.recharge.card;
import com.dayu.recharge.dao.AppDatabase;
import com.dayu.recharge.tools.HexUtil;
import com.dayu.recharge.utils.MyCommon;
import java.io.Serializable;
/**
 * Copyright (C), 2023,
@@ -9,19 +12,23 @@
 * Date: 2023-11-08 11:22
 * Description:密码卡
 */
public class PassWordCard {
public class PassWordCard extends BaseCard implements Serializable {
    public String cardType = MyCommon.PASS_WORD_CRAD_TYPE;//卡类型
    public String cardData = "A0B1C289";//标识码
    public class Zero extends BaseCard {
        public void toByte() {
    public byte[] toByte(AppDatabase appDatabase) {
        setCardData(appDatabase, cardType);
        PassWordCard.Zero zero = new PassWordCard.Zero();
        return zero.toByte();
    }
    public class Zero {
        public byte[] toByte() {
            byte[] data = new byte[16];
            data[0] = HexUtil.hexToByte(cardType);
            byte[] cardDatas = HexUtil.hexToByteArray(cardData);
            for (int i = 0; i < 4; i++) {
                data[i + 1] = cardDatas[i];
            }
            System.arraycopy(cardDatas, 0, data, 1, cardDatas.length);
            data[15] = getByteSum(data);
            return data;
        }
    }
app/src/main/java/com/dayu/recharge/card/RegisteredCard.java
@@ -1,5 +1,6 @@
package com.dayu.recharge.card;
import com.dayu.recharge.dao.AppDatabase;
import com.dayu.recharge.tools.HexUtil;
import com.dayu.recharge.utils.MyCommon;
@@ -11,27 +12,25 @@
 * Date: 2023-11-08 11:36
 * Description:重新注册设备卡:用于写用户注册号
 */
public class RegisteredCard implements Serializable {
public class RegisteredCard extends BaseCard implements Serializable {
    public String cardType = MyCommon.REGISTERED_CARD_TYPE;//卡类型
    public String cardData = "A0B1C289";//标识码
    public String getCardData() {
        return cardData;
    }
    public byte[] toByte() {
    public byte[] toByte(AppDatabase appDatabase) {
        setCardData(appDatabase, cardType);
        Zero zero = new Zero();
        return zero.toByte();
    }
    public class Zero extends BaseCard {
    public class Zero {
        public byte[] toByte() {
            byte[] data = new byte[16];
            data[0] = HexUtil.hexToByte(cardType);
            byte[] cardDatas = HexUtil.hexToByteArray(cardData);
            for (int i = 0; i < 4; i++) {
                data[i + 1] = cardDatas[i];
            }
            System.arraycopy(cardDatas, 0, data, 1, cardDatas.length);
            data[15] = getByteSum(data);
            return data;
        }
app/src/main/java/com/dayu/recharge/card/TestCard.java
@@ -1,5 +1,6 @@
package com.dayu.recharge.card;
import com.dayu.recharge.dao.AppDatabase;
import com.dayu.recharge.tools.HexUtil;
import com.dayu.recharge.utils.MyCommon;
@@ -11,27 +12,25 @@
 * Date: 2023-11-08 13:23
 * Description: 测试卡
 */
public class TestCard implements Serializable {
public class TestCard extends BaseCard implements Serializable {
    public String cardType = MyCommon.TEST_CARD_TYPE;//卡类型
    public String cardData = "A0B1C289";//标识码
    public String getCardData() {
        return cardData;
    }
    public byte[] toByte() {
    public byte[] toByte(AppDatabase appDatabase) {
        setCardData(appDatabase, cardType);
        Zero zero = new Zero();
        return zero.toByte();
    }
    public class Zero extends BaseCard {
    public class Zero {
        public byte[] toByte() {
            byte[] data = new byte[16];
            data[0] = HexUtil.hexToByte(cardType);
            byte[] cardDatas = HexUtil.hexToByteArray(cardData);
            for (int i = 0; i < 4; i++) {
                data[i + 1] = cardDatas[i];
            }
            System.arraycopy(cardDatas, 0, data, 1, cardDatas.length);
            data[15] = getByteSum(data);
            return data;
        }
app/src/main/java/com/dayu/recharge/card/UserCard.java
@@ -2,7 +2,6 @@
import com.dayu.recharge.tools.BcdUtil;
import com.dayu.recharge.tools.HexUtil;
import com.dayu.recharge.utils.MornyUtil;
import com.dayu.recharge.utils.MyCommon;
import java.io.Serializable;
@@ -15,7 +14,7 @@
 * Date: 2023-11-07 9:37
 * Description: 用户卡结构
 */
public class UserCard implements Serializable {
public class UserCard extends BaseCard implements Serializable {
    public String cardType = MyCommon.USER_CARD_TYPE_1;//写卡标志 A1刷卡开泵前 A8刷卡开泵后  A2叠加充值
    public int rechargeTimes;//充值次数
@@ -53,7 +52,7 @@
    /**
     * 通过byte转bean
     *
     * @param data
     * @param data 读卡的数据
     */
    public static UserCard getBean(List<byte[]> data) {
        try {
@@ -65,29 +64,22 @@
                userCard.cardType = HexUtil.byteToHex(zero[0]);
                userCard.rechargeTimes = HexUtil.get16to10(HexUtil.byteToHex(zero[1]));
                byte[] swipeNumberBytes = new byte[2];
                swipeNumberBytes[0] = zero[2];
                swipeNumberBytes[1] = zero[3];
                System.arraycopy(zero,2,swipeNumberBytes,0,swipeNumberBytes.length);
                String swipeNumberHex = HexUtil.bytesToHex(swipeNumberBytes);
                userCard.swipeNumber = (short) HexUtil.get16to10(swipeNumberHex);
                byte[] electricityPriceBytes = new byte[4];
                for (int i = 0; i < 4; i++) {
                    electricityPriceBytes[i] = zero[i + 4];
                }
                System.arraycopy(zero,4,electricityPriceBytes,0,electricityPriceBytes.length);
                userCard.electricityPrice = HexUtil.hexToFloat(HexUtil.bytesToHex(electricityPriceBytes));
                userCard.state = BcdUtil.bcdToStr(zero[8]);
                byte[] balanceBytes = new byte[4];
                for (int i = 0; i < 4; i++) {
                    balanceBytes[i] = zero[i + 9];
                }
                System.arraycopy(zero,9,balanceBytes,0,balanceBytes.length);
                userCard.balance = HexUtil.get16to10LowHigh(HexUtil.bytesToHex(balanceBytes));
                byte[] addressCodeBytes = new byte[6];
                addressCodeBytes[0] = zero[13];
                addressCodeBytes[1] = zero[14];
                addressCodeBytes[2] = two[11];
                addressCodeBytes[3] = two[12];
                addressCodeBytes[4] = two[13];
                addressCodeBytes[5] = two[14];
                System.arraycopy(zero,13,addressCodeBytes,0,2);
                System.arraycopy(two,11,addressCodeBytes,0,4);
                userCard.addressCode = BcdUtil.bcdToStr(addressCodeBytes);
                int year = 0;
@@ -122,22 +114,8 @@
                Calendar calendar = Calendar.getInstance();
                calendar.set(2000 + year, month, day, hour, minute, second);
                byte[] initPeasantCodeBytes = new byte[16];
                initPeasantCodeBytes[0] = one[10];
                initPeasantCodeBytes[1] = one[11];
                initPeasantCodeBytes[2] = one[12];
                initPeasantCodeBytes[3] = one[13];
                initPeasantCodeBytes[4] = one[14];
                initPeasantCodeBytes[5] = two[0];
                initPeasantCodeBytes[6] = two[1];
                initPeasantCodeBytes[7] = two[2];
                initPeasantCodeBytes[8] = two[3];
                initPeasantCodeBytes[9] = two[4];
                initPeasantCodeBytes[10] = two[5];
                initPeasantCodeBytes[11] = two[6];
                initPeasantCodeBytes[12] = two[7];
                initPeasantCodeBytes[13] = two[8];
                initPeasantCodeBytes[14] = two[9];
                initPeasantCodeBytes[15] = two[10];
                System.arraycopy(one,10,initPeasantCodeBytes,0,5);
                System.arraycopy(two,0,initPeasantCodeBytes,0,11);
                userCard.initPeasantCode = HexUtil.bytesToHex(initPeasantCodeBytes);
                return userCard;
            }
@@ -157,7 +135,7 @@
    /**
     * 用户卡0块
     */
    public class Zero extends BaseCard {
    public class Zero  {
        public byte[] toByte() {
            byte[] data = new byte[16];
            data[0] = HexUtil.hexToByte(cardType);
@@ -167,25 +145,22 @@
                e.printStackTrace();
            }
            byte[] swipeNumbers = HexUtil.hexToByteArray(HexUtil.get10to16(swipeNumber));
            for (int i = 0; i < swipeNumbers.length; i++) {
                data[i + 2] = swipeNumbers[i];
            }
            System.arraycopy(swipeNumbers, 0, data, 2, swipeNumbers.length);
            byte[] electricityPrices = HexUtil.hexToByteArray(HexUtil.folatToHexString(electricityPrice));
            for (int i = 0; i < electricityPrices.length; i++) {
                data[i + 4] = electricityPrices[i];
            }
            System.arraycopy(electricityPrices, 0, data, 4, electricityPrices.length);
            try {
                data[8] = BcdUtil.strToBcd(state)[0];
            } catch (Exception e) {
                e.printStackTrace();
            }
            byte[] balances = HexUtil.hexToByteArray(HexUtil.get10to16LowHigh(balance, 8));
            for (int i = 0; i < balances.length; i++) {
                data[i + 9] = balances[i];
            }
            System.arraycopy(balances, 0, data, 9, balances.length);
            byte[] addresscodes = BcdUtil.strToBcd(addressCode);
            data[13] = addresscodes[0];
            data[14] = addresscodes[1];
            System.arraycopy(addresscodes, 0, data, 13, 2);
            data[15] = getByteSum(data);
            return data;
        }
@@ -195,14 +170,12 @@
    /**
     * 用户卡1块
     */
    public class One extends BaseCard {
    public class One  {
        public byte[] toBytes() {
            byte[] data = new byte[16];
            byte[] balances = HexUtil.hexToByteArray(HexUtil.get10to16LowHigh(balance, 8));
            for (int i = 0; i < balances.length; i++) {
                data[i] = balances[i];
            }
            System.arraycopy(balances, 0, data, 0, balances.length);
            if (rechargeDate != null) {
                // 获取年、月、日、时、分、秒
@@ -221,6 +194,7 @@
                byte bcdHour = (byte) ((hour / 10) << 4 | (hour % 10));
                byte bcdMinute = (byte) ((minute / 10) << 4 | (minute % 10));
                byte bcdSecond = (byte) ((second / 10) << 4 | (second % 10));
                data[4] = bcdYear;
                data[5] = bcdMonth;
                data[6] = bcdDay;
@@ -229,9 +203,7 @@
                data[9] = bcdSecond;
            }
            byte[] initPeasantCodes = HexUtil.hexToByteArray(initPeasantCode);
            for (int i = 0; i < 5; i++) {
                data[i + 10] = initPeasantCodes[i];
            }
            System.arraycopy(initPeasantCodes, 5, data, 0, 5);
            data[15] = getByteSum(data);
            return data;
        }
@@ -242,13 +214,11 @@
    /**
     * 用户卡2块
     */
    public class Two extends BaseCard {
    public class Two  {
        public byte[] toBytes() {
            byte[] data = new byte[16];
            byte[] initPeasantCodes = HexUtil.hexToByteArray(initPeasantCode);
            for (int i = 5; i < 16; i++) {
                data[i - 5] = initPeasantCodes[i];
            }
            System.arraycopy(initPeasantCodes, 5, data, 0, 11);
            byte[] addresscodes = BcdUtil.strToBcd(addressCode);
            data[11] = addresscodes[2];
            data[12] = addresscodes[3];
app/src/main/java/com/dayu/recharge/utils/MyCommon.java
@@ -69,4 +69,31 @@
     */
    public static final String PASS_WORD_CRAD_TYPE = "B3";
    /**
     * 获取默认的卡标识
     *
     * @param cardType 卡片类型
     * @return 卡内容
     */
    public static String getDefaultCardData(String cardType) {
        String cardData = "";
        switch (cardType) {
            case MANAGE_CRAD:
            case CLEAN_CARD_TYPE:
                cardData = "3668F7A30119";
                break;
            case REGISTERED_CARD_TYPE:
            case CLEAN_ALL_USER_CARD_TYPE:
            case TEST_CARD_TYPE:
            case CONFIGURATION_CARD_TYPE:
            case CONFIGURATION_POWER_CARD_TYPE:
            case PASS_WORD_CRAD_TYPE:
                cardData = "A0B1C289";
                break;
        }
        return cardData;
    }
}
app/src/main/res/layout/activity_identyfying.xml
@@ -74,7 +74,10 @@
        android:layout_height="wrap_content"
        android:layout_below="@+id/electric_ll"
        android:layout_alignParentStart="true"
        android:layout_margin="20dp"
        android:layout_marginStart="20dp"
        android:layout_marginTop="20dp"
        android:layout_marginEnd="20dp"
        android:layout_marginBottom="20dp"
        android:hint="请输入新的卡标识"
        android:inputType="number" />