|  |  |  | 
|---|
|  |  |  | import com.dayu.qihealonelibrary.utils.CardCommon; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.io.Serializable; | 
|---|
|  |  |  | import java.util.List; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * Copyright (C), 2023, | 
|---|
|  |  |  | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public class ManageCard extends BaseCard implements Serializable { | 
|---|
|  |  |  | public String cardType = CardCommon.MANAGE_CRAD;//卡类型 | 
|---|
|  |  |  | //    public String cardData = "A0B1C289";//标识码 | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * M1卡的0扇区0块通常用于存储一些基本的卡片信息 | 
|---|
|  |  |  | * 第0字节:卡片类型(M1卡为0x08) | 
|---|
|  |  |  | * 第1字节:卡片地址(通常为0x00) | 
|---|
|  |  |  | * 第2-5字节:卡片序列号(4字节) | 
|---|
|  |  |  | * 第6-8字节:卡片制造商代码(3字节) | 
|---|
|  |  |  | * 第9字节:卡片版本 | 
|---|
|  |  |  | * 第10-15字节:预留区域 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public byte[] userCard; //用户卡号 | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public String getCardData() { | 
|---|
|  |  |  | return cardData; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public byte[] toZeroByte(QHAloneAppDatabase QHAloneAppDatabase) { | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * M1卡的0扇区0块通常用于存储一些基本的卡片信息 | 
|---|
|  |  |  | * 0-4字节是卡号 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public void setUserCard(String userCard) { | 
|---|
|  |  |  | this.userCard = userCard; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static ManageCard getBean(List<byte[]> data) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (data != null) { | 
|---|
|  |  |  | ManageCard manageCard = new ManageCard(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | byte[] zero = data.get(0); | 
|---|
|  |  |  | byte[] passWordByte = new byte[4]; | 
|---|
|  |  |  | System.arraycopy(zero, 5, passWordByte, 0, passWordByte.length); | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public byte[] toByte(QHAloneAppDatabase QHAloneAppDatabase) { | 
|---|
|  |  |  | setCardData(QHAloneAppDatabase, cardType); | 
|---|
|  |  |  | Zero zero = new Zero(); | 
|---|
|  |  |  | return zero.toByte(); | 
|---|
|  |  |  | 
|---|
|  |  |  | byte[] cardDataByte = HexUtil.hexToByteArray(cardData); | 
|---|
|  |  |  | System.arraycopy(cardDataByte, 0, data, 1, cardDataByte.length); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | byte[] userCardByts = HexUtil.hexToByteArray(userCard); | 
|---|
|  |  |  | if (userCard != null) { | 
|---|
|  |  |  | System.arraycopy(userCard, 0, data, 5, userCard.length); | 
|---|
|  |  |  | System.arraycopy(userCardByts, 0, data, 5, userCardByts.length); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | data[15] = getByteSum(data); | 
|---|