左晓为主开发手持机充值管理机
zuoxiao
2024-07-13 d08a5a6d062f1568aaeb14d2d72357826291ef97
添加齐河管理卡相关逻辑
修复bug
11个文件已修改
1个文件已添加
229 ■■■■ 已修改文件
local.properties 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/activity/ManagerListActivity.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/activity/NFCWreatActivity.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/activity/ReadCardAcitivy.java 53 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/activity/RechargeActivity.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/adapter/RechargeAdapter.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/card/ManageCard.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/card/ManagerToUserCard.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/tools/BaseNFCHelper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/view/AdminCardDialog.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
qihealonelibrary/src/main/res/layout/activity_admin_qha.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
qihealonelibrary/src/main/res/layout/qihe_item_recharge.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
local.properties
@@ -4,5 +4,5 @@
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
#Fri May 17 09:12:28 CST 2024
sdk.dir=D\:\\android\\sdk
#Sat Jul 13 14:35:23 CST 2024
sdk.dir=D\:\\AndroidStudio\\sdk
qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/activity/ManagerListActivity.java
@@ -67,7 +67,7 @@
        manageCard.setUserCard(hex);
        Intent intent = new Intent(ManagerListActivity.this, NFCWreatActivity.class);
        intent.putExtra("manageCard", manageCard);
        intent.putExtra("cardNumber", cardNumber);
//        intent.putExtra("cardNumber", cardNumber);
        intent.putExtra("userCardBean_manager", userCardBean);
        startActivity(intent);
        this.finish();
qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/activity/NFCWreatActivity.java
@@ -278,11 +278,11 @@
                }
                if (manageCard != null) {
                    setmanageCard(intent, manageCard);
                    if (manageCardFlag && userCardBeanByManager != null) {
                        //修改用户表信息修改成新卡卡号
                        userCardBeanByManager.setCardNumber(cardNumber);
                        baseDao.userCardDao().update(userCardBeanByManager);
                    }
//                    if (manageCardFlag && userCardBeanByManager != null) {
//                        //修改用户表信息修改成新卡卡号
//                        userCardBeanByManager.setCardNumber(cardNumber);
//                        baseDao.userCardDao().update(userCardBeanByManager);
//                    }
                }
                if (registeredCard != null) {
                    setRegisteredCard(intent, registeredCard);
@@ -372,9 +372,9 @@
                data.append("用户名:" + rechargeBean.getUserName() + "\n");
                data.append("卡  号:" + rechargeBean.getCardNumber() + "\n");
                data.append("充值金额:" + rechargeBean.getMorny() + " 元" + "\n");
//                data.append("卡内余额:" + rechargeBean.getBalance() + " 元" + "\n");
                data.append("充值水量:" + rechargeBean.getRechargeWater() + " 吨" + "\n");
                data.append("剩余水量:" + rechargeBean.getSurplusWater() + " 吨" + "\n");
                data.append("卡内余额:" + rechargeBean.getBalance() + " 元" + "\n");
//                data.append("充值水量:" + rechargeBean.getRechargeWater() + " 吨" + "\n");
//                data.append("剩余水量:" + rechargeBean.getSurplusWater() + " 吨" + "\n");
                data.append("日  期:" + DateUtil.dateToStamp(rechargeBean.getDate(), DateUtil.type2) + "\n\n");
                data.append("*****************************");
            }
qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/activity/ReadCardAcitivy.java
@@ -10,15 +10,19 @@
import com.dayu.baselibrary.tools.HexUtil;
import com.dayu.baselibrary.utils.MornyUtil;
import com.dayu.baselibrary.utils.TipUtil;
import com.dayu.baselibrary.view.ConfirmDialog;
import com.dayu.qihealonelibrary.card.BlackCard;
import com.dayu.qihealonelibrary.card.ConfigurationPowerCard;
import com.dayu.qihealonelibrary.card.DomainCard;
import com.dayu.qihealonelibrary.card.ElectricPriceCard;
import com.dayu.qihealonelibrary.card.ManageCard;
import com.dayu.qihealonelibrary.card.ManagerToUserCard;
import com.dayu.qihealonelibrary.card.RegionCard;
import com.dayu.qihealonelibrary.card.UserCard;
import com.dayu.qihealonelibrary.databinding.ActivityRedCardQhaBinding;
import com.dayu.qihealonelibrary.dbBean.AdminDataBean;
import com.dayu.qihealonelibrary.dbBean.UserCardBean;
import com.dayu.qihealonelibrary.tools.NFCWriteHelper;
import com.dayu.qihealonelibrary.tools.NfcReadHelper;
import com.dayu.qihealonelibrary.utils.CardCommon;
import com.dayu.qihealonelibrary.view.ProgressDialog;
@@ -39,7 +43,10 @@
    Intent intent;
    ConfirmDialog confirmDialog;
    AdminDataBean adminData;
    String cardNumber;
    String userCardStr;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
@@ -90,7 +97,7 @@
        String cardType = NfcReadHelper.getInstence(intent, this).getCradTypeAndCardNumber();
        String cardNumber = null;
        String[] cardTypes = cardType.split(",");
        if (cardTypes != null && cardTypes.length == 2) {
            cardNumber = cardType.split(",")[0];
@@ -130,14 +137,46 @@
                }
                break;
            case CardCommon.MANAGE_CRAD:
            case CardCommon.MANAGE_CRAD://管理卡
                ManageCard manageCard = ManageCard.getBean(data);
                viweGone(false);
                String hex = manageCard.getUserCard().toUpperCase();
                hex = HexUtil.spaceHex(hex);
                hex = HexUtil.HighLowHex(hex);
                 userCardStr = manageCard.getUserCard().toUpperCase();
                userCardStr = HexUtil.spaceHex(userCardStr);
                userCardStr = HexUtil.HighLowHex(userCardStr);
                redCardBinding.readCardTypeTV.setText("当前为管理卡" + "\n\n"
                        + "原始卡号:" + hex);
                        + "原始卡号:" + userCard);
                if (manageCard.getType()==(byte) 1){
                    //当01时将1扇区0块原管理卡信息改成用户卡内容
                     confirmDialog=new ConfirmDialog(this, "是否确认补卡,该卡将成为新用户卡?并且不要移动卡片", new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            ProgressDialog.show(ReadCardAcitivy.this);
                            try {
                                confirmDialog.dismiss();
                                List<UserCardBean> userCardBeans = baseDao.userCardDao().findUserName(userCardStr);
                                if (userCardBeans != null && !userCardBeans.isEmpty()) {
                                    UserCardBean userName = userCardBeans.get(0);
                                    userName.setCardNumber(cardNumber);
                                    baseDao.userCardDao().update(userName);
                                }
                                NFCWriteHelper nfcWriteHelper=   NFCWriteHelper.getInstence(intent,ReadCardAcitivy.this);
                                adminData = baseDao.adminDao().findFirst();
                                ManagerToUserCard managerToUserCard=new ManagerToUserCard();
                                managerToUserCard.setArerNumber(Integer.valueOf(adminData.getSerial()));
                                managerToUserCard.setDeviceNumberl(Integer.valueOf(adminData.getAddressCode()));
                                managerToUserCard.setTotalElectric(manageCard.getTotalElectric());
                                nfcWriteHelper.writeData(managerToUserCard.getZeroBytes(),1,0);
                                TipUtil.show(ReadCardAcitivy.this, "补卡成功", () -> ReadCardAcitivy.this.finish());
                            } catch (Exception e) {
                               e.printStackTrace();
                            }
                            stopAnim();
                        }
                    });
                    confirmDialog.show();
                }
                break;
            case CardCommon.CLEAN_CARD_TYPE:
                viweGone(false);
qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/activity/RechargeActivity.java
@@ -112,10 +112,11 @@
        String state = "";
        if (cardType.equalsIgnoreCase(CardCommon.USER_CARD_TYPE_1)) {
            state = "终端写卡";
            binding.rechargeLL.setVisibility(View.VISIBLE);
            binding.rechargeRegistBtn.setVisibility(View.VISIBLE);
            binding.redStatu.setTextColor(R.color.black);
        } else if (cardType.equalsIgnoreCase(CardCommon.USER_CARD_TYPE_2)) {
            state = "刷卡开泵后,当前状态不能充值";
            state = "未刷卡关泵,当前不可充值";
            binding.rechargeLL.setVisibility(View.GONE);
            binding.rechargeRegistBtn.setVisibility(View.GONE);
            binding.redStatu.setTextColor(com.dayu.baselibrary.R.color.red);
qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/adapter/RechargeAdapter.java
@@ -55,9 +55,9 @@
                ((ViewHolder) holder).getBinding().userName.setText("姓名:" + rechargeList.get(position).getUserName());
                ((ViewHolder) holder).getBinding().userNo.setText("卡号:" + rechargeList.get(position).getCardNumber());
                ((ViewHolder) holder).getBinding().morny.setText("充值金额:" + rechargeList.get(position).getMorny() + " 元");
                ((ViewHolder) holder).getBinding().rachagerWater.setText("充值水量:" + rechargeList.get(position).getRechargeWater() + " 吨");
//                ((ViewHolder) holder).getBinding().balance.setText("余额:" + rechargeList.get(position).getBalance() + " 元");
                ((ViewHolder) holder).getBinding().surplusWater.setText("剩余水量:" + rechargeList.get(position).getSurplusWater()  + " 吨");
//                ((ViewHolder) holder).getBinding().rachagerWater.setText("充值水量:" + rechargeList.get(position).getRechargeWater() + " 吨");
                ((ViewHolder) holder).getBinding().balance.setText("充值时余额:" + rechargeList.get(position).getBalance() + " 元");
//                ((ViewHolder) holder).getBinding().surplusWater.setText("剩余水量:" + rechargeList.get(position).getSurplusWater()  + " 吨");
                ((ViewHolder) holder).getBinding().date.setText("日期:" + DateUtil.dateToStamp(rechargeList.get(position).getDate(), DateUtil.type1));
            }
        }
qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/card/ManageCard.java
@@ -26,6 +26,22 @@
     */
    public String userCard; //用户卡号
    public byte type;//当前状态 00:充值管理机写 01:控制器反写的  当01时将1扇区0块原管理卡信息改成用户卡内容
    public int totalElectric;//总用电量位 底位在前,高位在后  1位小数点  含1位小数点的整数
    public int getTotalElectric() {
        return totalElectric;
    }
    public byte getType() {
        return type;
    }
    public void setType(byte type) {
        this.type = type;
    }
    public String getUserCard() {
        return userCard;
    }
@@ -38,13 +54,17 @@
    public static ManageCard getBean(List<byte[]> data) {
        if (data != null) {
            ManageCard passWordCard = new ManageCard();
            ManageCard manageCard = new ManageCard();
            byte[] zero = data.get(0);
            byte[] passWordByte = new byte[4];
            System.arraycopy(zero, 5, passWordByte, 0, passWordByte.length);
            passWordCard.setUserCard(HexUtil.bytesToHex(passWordByte));
            return passWordCard;
            manageCard.setUserCard(HexUtil.bytesToHex(passWordByte));
            manageCard.setType(zero[9]);
            byte[] totalElectricByte = new byte[4];
            System.arraycopy(zero, 10, totalElectricByte, 0, totalElectricByte.length);
            manageCard.totalElectric = HexUtil.get16To10LowHightByBytes(totalElectricByte);
            return manageCard;
        }
        return null;
    }
qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/card/ManagerToUserCard.java
New file
@@ -0,0 +1,104 @@
package com.dayu.qihealonelibrary.card;
import com.dayu.baselibrary.tools.HexUtil;
import com.dayu.qihealonelibrary.utils.CardCommon;
import java.io.Serializable;
/**
 * Created by Android Studio.
 * author: zuo
 * Date: 2024-07-13
 * Time: 15:47
 * 备注:
 */
public class ManagerToUserCard extends BaseCard implements Serializable {
    public String cardType = CardCommon.USER_CARD_TYPE_1;//写卡标志 A1刷卡开泵前 A8刷卡开泵后  A2叠加充值
    public int arerNumber;//区域号(底位在前高位在后)
    public int deviceNumberl;//设备编号(底位在前高位在后)
    public short rechargeTimes;//充值次数
    public int totalWater;//用户总用水量  底位在前,高位在后2位小数点  含两个小数点的整数
    public int totalElectric;//总用电量位 底位在前,高位在后  1位小数点  含1位小数点的整数
    /**
     * 用户卡0块
     */
    public class Zero extends BaseCard {
        public byte[] toByte() {
            try {
                byte[] data = new byte[16];
                data[0] = HexUtil.hexToByte(cardType);
                //区域号
                byte[] arerNumberBytes = new byte[2];
                byte[] arerNumberDatas = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(arerNumber));
                System.arraycopy(arerNumberDatas, 0, arerNumberBytes, 0, arerNumberDatas.length);
                if (arerNumberBytes != null) {
                    System.arraycopy(arerNumberBytes, 0, data, 1, arerNumberBytes.length);
                }
                //设备编号
                byte[] deviceNumberlBytes = new byte[2];
                byte[] deviceNumberlDatas = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(deviceNumberl));
                System.arraycopy(deviceNumberlDatas, 0, deviceNumberlBytes, 0, deviceNumberlDatas.length);
                if (deviceNumberlBytes != null) {
                    System.arraycopy(deviceNumberlBytes, 0, data, 3, deviceNumberlBytes.length);
                }
                //充值次数
                byte rechargeTimesByte = HexUtil.hexToByte(HexUtil.get10to16(rechargeTimes));
                data[5] = rechargeTimesByte;
                //用户总用水量
                byte[] totalWaterBytes = new byte[4];
                byte[] totalWaterDatas = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(totalWater));
                System.arraycopy(totalWaterDatas, 0, totalWaterBytes, 0, totalWaterDatas.length);
                if (totalWaterBytes != null) {
                    System.arraycopy(totalWaterBytes, 0, data, 6, totalWaterBytes.length);
                }
                //总用电量位
                byte[] totalElectricBytes = new byte[4];
                byte[] totalElectricDatas = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(totalElectric));
                System.arraycopy(totalElectricDatas, 0, totalElectricBytes, 0, totalElectricDatas.length);
                if (totalElectricBytes != null) {
                    System.arraycopy(totalElectricBytes, 0, data, 10, totalElectricBytes.length);
                }
                data[15] = getByteSum(data);
                return data;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    }
    public void setArerNumber(int arerNumber) {
        this.arerNumber = arerNumber;
    }
    public void setDeviceNumberl(int deviceNumberl) {
        this.deviceNumberl = deviceNumberl;
    }
    public void setRechargeTimes(short rechargeTimes) {
        this.rechargeTimes = rechargeTimes;
    }
    public void setTotalWater(int totalWater) {
        this.totalWater = totalWater;
    }
    public void setTotalElectric(int totalElectric) {
        this.totalElectric = totalElectric;
    }
    public byte[] getZeroBytes() {
        ManagerToUserCard.Zero zero = new ManagerToUserCard.Zero();
        return zero.toByte();
    }
}
qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/tools/BaseNFCHelper.java
@@ -58,7 +58,8 @@
            defauleKey = HexUtil.hexToByteArray(decryptedText);
            //初始密码
//             byte[] encryptedBytes2 = Base64.decode("aYC9feYEOFOQHuzflLIXSw==", Base64.DEFAULT);
            byte[] encryptedBytes2 = Base64.decode("qeg4DUWf0ni9JfRWtD2krA==", Base64.DEFAULT);
            //010203:qeg4DUWf0ni9JfRWtD2krA==
            byte[] encryptedBytes2 = Base64.decode("Zro4j8QP6yjYEA6HtSSNOw==", Base64.DEFAULT);
            byte[] decryptedBytes2 = cipher.doFinal(encryptedBytes2);
            //decryptedBytes2 对应010203040506
            companyKeyA = new String(decryptedBytes2, StandardCharsets.UTF_8);
qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/view/AdminCardDialog.java
@@ -21,6 +21,7 @@
import com.dayu.baselibrary.view.LibraryDialog;
import com.dayu.qihealonelibrary.R;
import com.dayu.qihealonelibrary.activity.BaseActivity;
import com.dayu.qihealonelibrary.activity.ManagerListActivity;
import com.dayu.qihealonelibrary.activity.ManagerReadActivity;
import com.dayu.qihealonelibrary.activity.NFCWreatActivity;
import com.dayu.qihealonelibrary.card.ManageCard;
@@ -65,7 +66,8 @@
        okBtn.setOnClickListener(v -> {
            if (ischose) {
                if (type == 0) {
                    Intent intent = new Intent(mContext, ManagerReadActivity.class);
                    Intent intent = new Intent(mContext, ManagerListActivity.class);
//                    intent.putExtra("cardNumber", cardNumber);
                    mContext.startActivity(intent);
                    AdminCardDialog.this.dismiss();
                } else {
qihealonelibrary/src/main/res/layout/activity_admin_qha.xml
@@ -42,6 +42,7 @@
                android:layout_marginTop="20dp"
                android:padding="5dp"
                android:text="制作清零卡"
                android:visibility="gone"
                android:textColor="@color/text_selecter"
                android:textSize="@dimen/text_size" />
qihealonelibrary/src/main/res/layout/qihe_item_recharge.xml
@@ -36,14 +36,14 @@
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="金额:"
                android:text="充值金额:"
                android:textSize="14sp" />
            <TextView
                android:id="@+id/rachagerWater"
                android:id="@+id/balance"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="充值水量:"
                android:text="剩余金额:"
                android:textSize="14sp" />
<!--            <TextView-->
@@ -59,6 +59,7 @@
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="剩余水量:"
                android:visibility="gone"
                android:textSize="14sp" />
            <TextView