package com.dayu.qiheonlinelibrary.card;
|
|
import com.dayu.baselibrary.tools.HexUtil;
|
|
import com.dayu.qiheonlinelibrary.utils.CardCommon;
|
import com.tencent.bugly.crashreport.CrashReport;
|
|
import java.io.Serializable;
|
import java.util.Calendar;
|
import java.util.List;
|
|
/**
|
* Copyright (C), 2023,
|
* Author: zuo
|
* Date: 2023-11-07 9:37
|
* Description: 齐河项目用户卡结构
|
*/
|
public class UserCard 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位小数点的整数
|
|
public int balance;//剩余金额 底位在前 2位小数点,单位分
|
|
public int surplusWater;//剩余水量 底位在前 2位小数点 单位立方米 (跟价格一样先乘以100)
|
|
public Calendar rechargeDate;// 购水时间 BCD
|
|
|
/**
|
* 通过byte转bean
|
*
|
* @param data
|
*/
|
public static UserCard getBean(List<byte[]> data) {
|
try {
|
UserCard userCard = new UserCard();
|
//第0块解析
|
byte[] zero = data.get(0);
|
|
userCard.cardType = HexUtil.byteToHex(zero[0]);
|
|
byte[] arerNumberByte = new byte[2];
|
System.arraycopy(zero, 1, arerNumberByte, 0, arerNumberByte.length);
|
userCard.arerNumber = HexUtil.get16To10LowHightByBytes(arerNumberByte);
|
|
byte[] deviceNumberlByte = new byte[2];
|
System.arraycopy(zero, 3, deviceNumberlByte, 0, deviceNumberlByte.length);
|
userCard.deviceNumberl = HexUtil.get16To10LowHightByBytes(deviceNumberlByte);
|
|
userCard.rechargeTimes = HexUtil.hexToByte(HexUtil.byteToHex(zero[5]));
|
|
byte[] totalWaterByte = new byte[4];
|
System.arraycopy(zero, 6, totalWaterByte, 0, totalWaterByte.length);
|
userCard.totalWater = HexUtil.get16To10LowHightByBytes(totalWaterByte);
|
|
byte[] totalElectricByte = new byte[4];
|
System.arraycopy(zero, 10, totalElectricByte, 0, totalElectricByte.length);
|
userCard.totalElectric = HexUtil.get16To10LowHightByBytes(totalElectricByte);
|
|
//第1块解析
|
byte[] one = data.get(1);
|
byte[] balanceByte = new byte[4];
|
System.arraycopy(one, 0, balanceByte, 0, balanceByte.length);
|
userCard.balance =HexUtil.get16To10LowHightByBytes(balanceByte);
|
|
byte[] surplusWaterByte = new byte[4];
|
System.arraycopy(one, 4, surplusWaterByte, 0, surplusWaterByte.length);
|
userCard.surplusWater = HexUtil.get16To10LowHightByBytes(surplusWaterByte);
|
|
byte[] rechargeDateByte = new byte[3];
|
System.arraycopy(one, 12, rechargeDateByte, 0, rechargeDateByte.length);
|
|
int year = HexUtil.getBcdToInt(one[12]);
|
int month = HexUtil.getBcdToInt(one[13]);
|
int day = HexUtil.getBcdToInt(one[14]);
|
|
Calendar calendar = Calendar.getInstance();
|
calendar.set(2000 + year, month, day, 0, 0, 0);
|
userCard.rechargeDate = calendar;
|
|
return userCard;
|
|
} catch (Exception e) {
|
e.printStackTrace();
|
return null;
|
}
|
|
}
|
|
|
/**
|
* 用户卡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;
|
}
|
|
}
|
|
/**
|
* 用户卡1块
|
*/
|
public class One extends BaseCard {
|
|
public byte[] toBytes() {
|
byte[] data = new byte[16];
|
|
|
try {
|
byte[] balanceBytes = new byte[4];
|
byte[] balanceDatas = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(balance));
|
System.arraycopy(balanceDatas, 0, balanceBytes, 0, balanceDatas.length);
|
if (balanceBytes != null) {
|
System.arraycopy(balanceBytes, 0, data, 0, balanceBytes.length);
|
}
|
|
byte[] surplusWaterBytes = new byte[4];
|
byte[] surplusWaterDatas = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(surplusWater));
|
System.arraycopy(surplusWaterDatas, 0, surplusWaterBytes, 0, surplusWaterDatas.length);
|
if (surplusWaterBytes != null) {
|
System.arraycopy(surplusWaterBytes, 0, data, 4, surplusWaterBytes.length);
|
}
|
|
if (rechargeDate != null) {
|
// 获取年、月、日、时、分、秒
|
int year = (rechargeDate.get(Calendar.YEAR)) % 1000;
|
int month = rechargeDate.get(Calendar.MONTH) + 1; // 月份从0开始,所以需要加1
|
int day = rechargeDate.get(Calendar.DAY_OF_MONTH);
|
byte bcdYear = HexUtil.getIntToBCD(year)[0];
|
byte bcdMonth = HexUtil.getIntToBCD(month)[0];
|
byte bcdDay = HexUtil.getIntToBCD(day)[0];
|
data[12] = bcdYear;
|
data[13] = bcdMonth;
|
data[14] = bcdDay;
|
}
|
|
data[15] = getByteSum(data);
|
} catch (Exception e) {
|
e.printStackTrace();
|
CrashReport.postCatchedException(e);
|
}
|
return data;
|
}
|
|
|
}
|
|
/**
|
* 用户卡2块
|
*/
|
public class Two extends BaseCard {
|
public byte[] toBytes() {
|
byte[] data = new byte[16];
|
|
try {
|
byte[] balanceBytes = new byte[4];
|
byte[] balanceDatas = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(balance));
|
System.arraycopy(balanceDatas, 0, balanceBytes, 0, balanceDatas.length);
|
if (balanceBytes != null) {
|
System.arraycopy(balanceBytes, 0, data, 0, balanceBytes.length);
|
}
|
|
byte[] surplusWaterBytes = new byte[4];
|
byte[] surplusWaterDatas = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(surplusWater));
|
System.arraycopy(surplusWaterDatas, 0, surplusWaterBytes, 0, surplusWaterDatas.length);
|
if (surplusWaterBytes != null) {
|
System.arraycopy(surplusWaterBytes, 0, data, 4, surplusWaterBytes.length);
|
}
|
|
if (rechargeDate != null) {
|
// 获取年、月、日、时、分、秒
|
int year = (rechargeDate.get(Calendar.YEAR)) % 1000;
|
int month = rechargeDate.get(Calendar.MONTH) + 1; // 月份从0开始,所以需要加1
|
int day = rechargeDate.get(Calendar.DAY_OF_MONTH);
|
byte bcdYear = HexUtil.getIntToBCD(year)[0];
|
byte bcdMonth = HexUtil.getIntToBCD(month)[0];
|
byte bcdDay = HexUtil.getIntToBCD(day)[0];
|
data[12] = bcdYear;
|
data[13] = bcdMonth;
|
data[14] = bcdDay;
|
}
|
|
data[15] = getByteSum(data);
|
} catch (Exception e) {
|
e.printStackTrace();
|
CrashReport.postCatchedException(e);
|
}
|
return data;
|
}
|
}
|
|
public byte[] getZeroBytes() {
|
Zero zero = new Zero();
|
return zero.toByte();
|
}
|
|
public byte[] getOneBytes() {
|
One zero = new One();
|
return zero.toBytes();
|
}
|
|
public byte[] getTwoBytes() {
|
Two zero = new Two();
|
return zero.toBytes();
|
}
|
|
|
public String getCardType() {
|
return cardType;
|
}
|
|
public void setCardType(String cardType) {
|
this.cardType = cardType;
|
}
|
|
public int getArerNumber() {
|
return arerNumber;
|
}
|
|
public void setArerNumber(int arerNumber) {
|
this.arerNumber = arerNumber;
|
}
|
|
public int getDeviceNumberl() {
|
return deviceNumberl;
|
}
|
|
public void setDeviceNumberl(int deviceNumberl) {
|
this.deviceNumberl = deviceNumberl;
|
}
|
|
public short getRechargeTimes() {
|
return rechargeTimes;
|
}
|
|
public void setRechargeTimes(short rechargeTimes) {
|
this.rechargeTimes = rechargeTimes;
|
}
|
|
public int getTotalWater() {
|
return totalWater;
|
}
|
|
public void setTotalWater(int totalWater) {
|
this.totalWater = totalWater;
|
}
|
|
public int getTotalElectric() {
|
return totalElectric;
|
}
|
|
public void setTotalElectric(int totalElectric) {
|
this.totalElectric = totalElectric;
|
}
|
|
public int getBalance() {
|
return balance;
|
}
|
|
public void setBalance(int balance) {
|
this.balance = balance;
|
}
|
|
public int getSurplusWater() {
|
return surplusWater;
|
}
|
|
public void setSurplusWater(int surplusWater) {
|
this.surplusWater = surplusWater;
|
}
|
|
public Calendar getRechargeDate() {
|
return rechargeDate;
|
}
|
|
public void setRechargeDate(Calendar rechargeDate) {
|
this.rechargeDate = rechargeDate;
|
}
|
|
|
}
|