From a9c1231be4e3c1c5bd5e9fc61489d55363090407 Mon Sep 17 00:00:00 2001 From: zuoxiao <470321431@qq.com> Date: 星期一, 04 三月 2024 15:26:22 +0800 Subject: [PATCH] 齐河项目相关修改 --- app/src/main/res/layout/activity_password_card.xml | 62 ++++++++ app/src/main/java/com/dayu/recharge/card/ElectricPriceCard.java | 60 ++++++++ app/src/main/java/com/dayu/recharge/dbBean/PassWordCardBean.java | 36 +++++ app/src/main/java/com/dayu/recharge/tools/HexUtil.java | 43 +++++ app/src/main/java/com/dayu/recharge/card/PassWordCard.java | 41 +++++ app/src/main/java/com/dayu/recharge/dao/LoginPsDao.java | 2 app/src/main/java/com/dayu/recharge/dao/PowerDao.java | 2 app/src/main/java/com/dayu/recharge/card/RegionCard.java | 14 + app/src/main/java/com/dayu/recharge/card/ManageCard.java | 27 +++ app/src/main/java/com/dayu/recharge/dao/AppDatabase.java | 5 app/src/main/java/com/dayu/recharge/dbBean/PassWordBean.java | 5 app/src/main/java/com/dayu/recharge/activity/PasswordCardActivity.java | 64 +++++++++ app/src/main/java/com/dayu/recharge/dao/PassWordCardDao.java | 31 ++++ 13 files changed, 377 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/dayu/recharge/activity/PasswordCardActivity.java b/app/src/main/java/com/dayu/recharge/activity/PasswordCardActivity.java new file mode 100644 index 0000000..4ae1047 --- /dev/null +++ b/app/src/main/java/com/dayu/recharge/activity/PasswordCardActivity.java @@ -0,0 +1,64 @@ +package com.dayu.recharge.activity; + +import android.os.Bundle; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; + +import com.dayu.recharge.databinding.ActivityPasswordCardBinding; +import com.dayu.recharge.dbBean.PassWordCardBean; +import com.dayu.recharge.dbBean.PowerBean; +import com.dayu.recharge.utils.TipUtil; + +/** + * author: zuo + * Date: 2024-03-01 + * Time: 16:21 + * 澶囨敞锛氬瘑鐮佸崱璁剧疆鐣岄潰 + */ +public class PasswordCardActivity extends BaseActivity { + + ActivityPasswordCardBinding binding; + + PassWordCardBean cardBean; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding = ActivityPasswordCardBinding.inflate(LayoutInflater.from(this)); + setContentView(binding.getRoot()); + } + + + private void initData() { + PassWordCardBean powerBean = baseDao.passWordCardDao().findFirst(); + if (powerBean != null) { + this.cardBean = powerBean; + binding.villageOldNumber.setText(powerBean.getPassWord()); + } + } + + private void initView() { + binding.villageOk.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String data = binding.villageNewNum.getText().toString(); + if (!TextUtils.isEmpty(data)) { + if (data.length()==12){ + cardBean.setPassWord(data); + baseDao.passWordCardDao().insert(cardBean); + TipUtil.show("淇濆瓨鎴愬姛"); + initData(); + }else { + TipUtil.show("璇疯緭鍏ユ纭殑12浣嶅瓧绗︾殑16杩涘埗鍗″瘑鐮�"); + } + + } else { + TipUtil.show("璇疯緭鍏ヨ璁剧疆鐨勫崱瀵嗙爜"); + } + } + }); + } + + + +} diff --git a/app/src/main/java/com/dayu/recharge/card/ElectricPriceCard.java b/app/src/main/java/com/dayu/recharge/card/ElectricPriceCard.java index f25ac50..f6a671a 100644 --- a/app/src/main/java/com/dayu/recharge/card/ElectricPriceCard.java +++ b/app/src/main/java/com/dayu/recharge/card/ElectricPriceCard.java @@ -1,8 +1,10 @@ package com.dayu.recharge.card; +import com.dayu.recharge.tools.HexUtil; import com.dayu.recharge.utils.MyCommon; import java.io.Serializable; +import java.util.List; /** * author: zuo @@ -13,6 +15,64 @@ public class ElectricPriceCard implements Serializable { public String cardType = MyCommon.ELECTRIC_PRICE; + public String cardData = "A0B1C289";//1-4涓嬫爣鍥哄畾鍊� + + public Float electricPrice;// 鐢甸噺鍗曚环(浣�)鍗曚綅鏄厓锛�3浣嶅皬鏁扮偣 + + + + + + + public byte[] toByte() { + ElectricPriceCard.Zero zero = new ElectricPriceCard.Zero(); + return zero.toByte(); + } + + + + public static ElectricPriceCard getBean(List<byte[]> data){ + ElectricPriceCard regionCard=new ElectricPriceCard(); + byte[] zero=data.get(0); + regionCard.cardType= HexUtil.byteToHex(zero[0]); + + byte[] cardDataByte = new byte[4]; + System.arraycopy(zero, 1, cardDataByte, 0, cardDataByte.length); + regionCard.cardData = HexUtil.bytesToHex(cardDataByte); + + + byte[] electricPriceByte = new byte[4]; + System.arraycopy(zero, 5, electricPriceByte, 0, electricPriceByte.length); + regionCard.electricPrice = HexUtil.bytesToFloat(electricPriceByte); + + + return regionCard; + } + + + /** + * 绗�1鎵囧尯0鍧� 瀛樺偍鐨勬暟鎹� + */ + public class Zero extends BaseCard { + public byte[] toByte() { + byte[] data = new byte[16]; + data[0] = HexUtil.hexToByte(cardType); + + byte[] regionBytes = HexUtil.hexToByteArray(cardData); + if (regionBytes != null) { + System.arraycopy(regionBytes, 0, data, 1, regionBytes.length); + } + + byte[] controllerCodelBytes = HexUtil.folatToByte(electricPrice); + if (controllerCodelBytes != null) { + System.arraycopy(controllerCodelBytes, 0, data, 5, controllerCodelBytes.length); + } + + data[15] = getByteSum(data); + return data; + } + + } } diff --git a/app/src/main/java/com/dayu/recharge/card/ManageCard.java b/app/src/main/java/com/dayu/recharge/card/ManageCard.java index 4bea602..241150a 100644 --- a/app/src/main/java/com/dayu/recharge/card/ManageCard.java +++ b/app/src/main/java/com/dayu/recharge/card/ManageCard.java @@ -13,7 +13,20 @@ */ public class ManageCard implements Serializable { public String cardType = MyCommon.MANAGE_CRAD;//鍗$被鍨� - public String cardData = "3668F7A30119";//鏍囪瘑鐮� + public String cardData = "A0B1C289";//鏍囪瘑鐮� + + + /** + * M1鍗$殑0鎵囧尯0鍧楅�氬父鐢ㄤ簬瀛樺偍涓�浜涘熀鏈殑鍗$墖淇℃伅 + * 绗�0瀛楄妭锛氬崱鐗囩被鍨嬶紙M1鍗′负0x08锛� + * 绗�1瀛楄妭锛氬崱鐗囧湴鍧�锛堥�氬父涓�0x00锛� + * 绗�2-5瀛楄妭锛氬崱鐗囧簭鍒楀彿锛�4瀛楄妭锛� + * 绗�6-8瀛楄妭锛氬崱鐗囧埗閫犲晢浠g爜锛�3瀛楄妭锛� + * 绗�9瀛楄妭锛氬崱鐗囩増鏈� + * 绗�10-15瀛楄妭锛氶鐣欏尯鍩� + */ + public byte[] userCard; //鐢ㄦ埛鍗″彿 + public String getCardData() { return cardData; @@ -28,10 +41,16 @@ 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]; + + byte[] cardDataByte = HexUtil.hexToByteArray(cardData); + if (cardDataByte != null) { + System.arraycopy(cardDataByte, 0, data, 1, cardDataByte.length); } + + if (userCard!=null){ + System.arraycopy(userCard, 0, data, 5, userCard.length); + } + data[15] = getByteSum(data); return data; } diff --git a/app/src/main/java/com/dayu/recharge/card/PassWordCard.java b/app/src/main/java/com/dayu/recharge/card/PassWordCard.java index ff1e78f..40d038b 100644 --- a/app/src/main/java/com/dayu/recharge/card/PassWordCard.java +++ b/app/src/main/java/com/dayu/recharge/card/PassWordCard.java @@ -3,6 +3,8 @@ import com.dayu.recharge.tools.HexUtil; import com.dayu.recharge.utils.MyCommon; +import java.util.List; + /** * Copyright (C), 2023, * Author: zuo @@ -12,16 +14,49 @@ public class PassWordCard { public String cardType = MyCommon.PASS_WORD_CRAD_TYPE;//鍗$被鍨� public String cardData = "A0B1C289";//鏍囪瘑鐮� + public String passWord;//鍏綅鐨勫瘑鐮� + + + + public static PassWordCard getBean(List<byte[]> data){ + + if (data!=null){ + PassWordCard passWordCard=new PassWordCard(); + + byte[] zero=data.get(0); + byte[] passWordByte=new byte[6]; + System.arraycopy(zero, 5, passWordByte, 0, passWordByte.length); + passWordCard.passWord = HexUtil.bytesToHex(passWordByte); + return passWordCard; + } + return null; + + + } + + + public byte[] toByte() { + Zero zero = new Zero(); + return zero.toByte(); + } + public class Zero extends BaseCard { - public void toByte() { + 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]; + if (cardDatas != null) { + System.arraycopy(cardDatas, 0, data, 1, cardDatas.length); } + + byte[] passWordBytes = HexUtil.hexToByteArray(passWord); + if (passWordBytes != null) { + System.arraycopy(passWordBytes, 0, data, 5, passWordBytes.length); + } + data[15] = getByteSum(data); + return data; } } diff --git a/app/src/main/java/com/dayu/recharge/card/RegionCard.java b/app/src/main/java/com/dayu/recharge/card/RegionCard.java index 0db3780..8656269 100644 --- a/app/src/main/java/com/dayu/recharge/card/RegionCard.java +++ b/app/src/main/java/com/dayu/recharge/card/RegionCard.java @@ -34,11 +34,23 @@ byte[] zero=data.get(0); regionCard.cardType=HexUtil.byteToHex(zero[0]); + byte[] regionByte = new byte[2]; + System.arraycopy(zero, 1, regionByte, 0, regionByte.length); + regionCard.region = (short) HexUtil.get16to10LowHigh(HexUtil.bytesToHex(regionByte)); + + + byte[] controllerCodelByte = new byte[2]; + System.arraycopy(zero, 3, controllerCodelByte, 0, controllerCodelByte.length); + regionCard.controllerCodel = (short) HexUtil.get16to10LowHigh(HexUtil.bytesToHex(controllerCodelByte)); + + return regionCard; } - + /** + * 绗�1鎵囧尯0鍧� 瀛樺偍鐨勬暟鎹� + */ public class Zero extends BaseCard { public byte[] toByte() { byte[] data = new byte[16]; diff --git a/app/src/main/java/com/dayu/recharge/dao/AppDatabase.java b/app/src/main/java/com/dayu/recharge/dao/AppDatabase.java index e00689d..86ee82b 100644 --- a/app/src/main/java/com/dayu/recharge/dao/AppDatabase.java +++ b/app/src/main/java/com/dayu/recharge/dao/AppDatabase.java @@ -11,6 +11,7 @@ import com.dayu.recharge.dbBean.IdentityBean; import com.dayu.recharge.dbBean.IpBean; import com.dayu.recharge.dbBean.PassWordBean; +import com.dayu.recharge.dbBean.PassWordCardBean; import com.dayu.recharge.dbBean.PowerBean; import com.dayu.recharge.dbBean.RechargeBean; import com.dayu.recharge.dbBean.UserCardBean; @@ -21,7 +22,7 @@ * Date: 2023-11-05 16:23 * Description: */ -@Database(entities = {CardData.class, DeviceNumber.class, IdentityBean.class, DomainBean.class, ElectricPriceBean.class, IpBean.class, AdminDataBean.class, PassWordBean.class, UserCardBean.class, RechargeBean.class, PowerBean.class}, version = 2, exportSchema = false) +@Database(entities = {PassWordCardBean.class,CardData.class, DeviceNumber.class, IdentityBean.class, DomainBean.class, ElectricPriceBean.class, IpBean.class, AdminDataBean.class, PassWordBean.class, UserCardBean.class, RechargeBean.class, PowerBean.class}, version = 3, exportSchema = false) public abstract class AppDatabase extends RoomDatabase { @@ -46,4 +47,6 @@ public abstract DeviceNumberDao deviceNumberDao(); public abstract CardDataDao cardDataDao(); + + public abstract PassWordCardDao passWordCardDao(); } diff --git a/app/src/main/java/com/dayu/recharge/dao/LoginPsDao.java b/app/src/main/java/com/dayu/recharge/dao/LoginPsDao.java index aee6da5..ce398f0 100644 --- a/app/src/main/java/com/dayu/recharge/dao/LoginPsDao.java +++ b/app/src/main/java/com/dayu/recharge/dao/LoginPsDao.java @@ -13,7 +13,7 @@ * Copyright (C), 2023, * Author: zuo * Date: 2023-11-06 20:27 - * Description: + * Description: 鐧诲綍瀵嗙爜淇濆瓨 */ @Dao public interface LoginPsDao { diff --git a/app/src/main/java/com/dayu/recharge/dao/PassWordCardDao.java b/app/src/main/java/com/dayu/recharge/dao/PassWordCardDao.java new file mode 100644 index 0000000..22256d2 --- /dev/null +++ b/app/src/main/java/com/dayu/recharge/dao/PassWordCardDao.java @@ -0,0 +1,31 @@ +package com.dayu.recharge.dao; + +import androidx.room.Dao; +import androidx.room.Delete; +import androidx.room.Insert; +import androidx.room.OnConflictStrategy; +import androidx.room.Query; +import androidx.room.Update; + +import com.dayu.recharge.dbBean.PassWordCardBean; + +/** + * Copyright (C), 2023, + * Author: zuo + * Date: 2023-11-08 21:27 + * Description: 瀵嗙爜鍗� + */ +@Dao +public interface PassWordCardDao { + @Insert(onConflict = OnConflictStrategy.REPLACE) + void insert(PassWordCardBean passWordBean); + + @Update + void update(PassWordCardBean passWordBean); + + @Delete + void delete(PassWordCardBean passWordBean); + + @Query("select * from PassWordCardBean limit 1") + PassWordCardBean findFirst(); +} diff --git a/app/src/main/java/com/dayu/recharge/dao/PowerDao.java b/app/src/main/java/com/dayu/recharge/dao/PowerDao.java index f90e2d6..c34007e 100644 --- a/app/src/main/java/com/dayu/recharge/dao/PowerDao.java +++ b/app/src/main/java/com/dayu/recharge/dao/PowerDao.java @@ -13,7 +13,7 @@ * Copyright (C), 2023, * Author: zuo * Date: 2023-11-08 21:27 - * Description: 閰嶇疆姘存车鍔熺巼 + * Description: */ @Dao public interface PowerDao { diff --git a/app/src/main/java/com/dayu/recharge/dbBean/PassWordBean.java b/app/src/main/java/com/dayu/recharge/dbBean/PassWordBean.java index 75d8245..9e5c80b 100644 --- a/app/src/main/java/com/dayu/recharge/dbBean/PassWordBean.java +++ b/app/src/main/java/com/dayu/recharge/dbBean/PassWordBean.java @@ -2,6 +2,11 @@ import androidx.room.Entity; import androidx.room.PrimaryKey; + + +/** + * 鐢ㄦ埛鐧诲綍瀵嗙爜 + */ @Entity public class PassWordBean { diff --git a/app/src/main/java/com/dayu/recharge/dbBean/PassWordCardBean.java b/app/src/main/java/com/dayu/recharge/dbBean/PassWordCardBean.java new file mode 100644 index 0000000..22a9b0a --- /dev/null +++ b/app/src/main/java/com/dayu/recharge/dbBean/PassWordCardBean.java @@ -0,0 +1,36 @@ +package com.dayu.recharge.dbBean; + +import androidx.room.Entity; +import androidx.room.PrimaryKey; + +/** + * author: zuo + * Date: 2024-03-01 + * Time: 17:56 + * 澶囨敞锛氬瘑鐮佸崱瀵嗙爜 + */ +@Entity +public class PassWordCardBean { + + @PrimaryKey(autoGenerate = true) + public long id; + private String passWord = ""; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getPassWord() { + return passWord; + } + + public void setPassWord(String passWord) { + this.passWord = passWord; + } + + +} diff --git a/app/src/main/java/com/dayu/recharge/tools/HexUtil.java b/app/src/main/java/com/dayu/recharge/tools/HexUtil.java index a00b073..79176a6 100644 --- a/app/src/main/java/com/dayu/recharge/tools/HexUtil.java +++ b/app/src/main/java/com/dayu/recharge/tools/HexUtil.java @@ -1,6 +1,8 @@ package com.dayu.recharge.tools; import java.math.BigInteger; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -139,6 +141,38 @@ return Integer.toHexString(Float.floatToIntBits(value)); } + + /** + * 灏嗗甫绗﹀彿鐨�32浣嶆诞鐐规暟瑁呮崲byte鏁扮粍 + * 浣庝綅鍦ㄥ墠楂樹綅鍦ㄥ悗 + * + * @param value + * @return + */ + public static byte[] folatToByte(Float value) { + ByteBuffer buffer = ByteBuffer.allocate(4); // 4涓瓧鑺� + buffer.order(ByteOrder.LITTLE_ENDIAN); + buffer.putFloat(value); + byte[] byteArray = buffer.array(); + return byteArray; + } + + /** + * 灏哹yte鏁扮粍杞崲涓哄甫绗﹀彿鐨�32浣嶆诞鐐规暟 + * + * 浣庝綅鍦ㄥ墠楂樹綅鍦ㄥ悗 + * + * @param value + * @return + */ + public static Float bytesToFloat(byte[] value) { + ByteBuffer bufferLittleEndian = ByteBuffer.wrap(value); + bufferLittleEndian.order(ByteOrder.LITTLE_ENDIAN); + return bufferLittleEndian.getFloat(); + + } + + /** * 鍗佽繘鍒惰浆16杩涘埗 * @@ -167,6 +201,7 @@ /** * short10杩涘埗杞�16杩涘埗 浣庝綅鍦ㄥ墠楂樹綅鍦ㄥ悗 + * * @param number * @return */ @@ -186,9 +221,9 @@ } - /** * short10杩涘埗杞�16杩涘埗 浣庝綅鍦ㄥ墠楂樹綅鍦ㄥ悗 + * * @param number * @return */ @@ -202,20 +237,20 @@ } - /** * short16杩涘埗杞�10杩涘埗 浣庝綅鍦ㄥ墠楂樹綅鍦ㄥ悗 + * * @param hex * @return */ - public static short getShort10To16LowHigh(String hex){ + public static short getShort10To16LowHigh(String hex) { try { String str = ""; str = spaceHex(hex); str = HighLowHex(str); return (short) Integer.parseInt(str, 16); } catch (NumberFormatException e) { - e.printStackTrace(); + e.printStackTrace(); } return 0; } diff --git a/app/src/main/res/layout/activity_password_card.xml b/app/src/main/res/layout/activity_password_card.xml new file mode 100644 index 0000000..dc0f7e2 --- /dev/null +++ b/app/src/main/res/layout/activity_password_card.xml @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="utf-8"?> +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + + <com.dayu.recharge.view.TitleBar + android:id="@+id/titleBar" + android:layout_width="match_parent" + android:layout_height="@dimen/dimen_title_height" + android:background="@drawable/title_bar_bg" + app:centerText="閰嶇疆鍗″瘑鐮�" + app:leftImage="@mipmap/icon_back" /> + + <LinearLayout + android:id="@+id/village_ll" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_below="@id/titleBar" + android:layout_margin="20dp" + android:orientation="horizontal"> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="褰撳墠瀵嗙爜" + android:textSize="@dimen/text_size" /> + + <TextView + android:id="@+id/village_oldNumber" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:textSize="@dimen/text_size" /> + + </LinearLayout> + + + <EditText + android:id="@+id/village_newNum" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_below="@+id/village_ll" + android:layout_alignParentStart="true" + android:layout_marginStart="20dp" + android:layout_marginTop="20dp" + android:layout_marginEnd="20dp" + android:layout_marginBottom="20dp" + android:hint="璇疯緭鍏ユ柊璁剧疆鐨�12浣�16杩涘埗鍗″瘑鐮�" + android:inputType="number|numberDecimal" + android:digits="0123456789." /> + + <TextView + android:id="@+id/village_ok" + android:layout_width="match_parent" + android:layout_height="50dp" + android:layout_alignParentBottom="true" + android:background="@color/title_bg" + android:gravity="center" + android:text="纭� 瀹�" + android:textSize="@dimen/text_size" /> +</RelativeLayout> \ No newline at end of file -- Gitblit v1.8.0