app/src/main/java/com/dayu/recharge/activity/DomainActivity.java
@@ -25,19 +25,19 @@ super.onCreate(savedInstanceState); binding = ActivityDomainBinding.inflate(LayoutInflater.from(this)); setContentView(binding.getRoot()); domainBean = baseDao.domainPortDao().findFirst(); if (domainBean != null) { binding.domainOldTV.setText(domainBean.getDomain() + ":" + domainBean.getPort()); }else { domainBean=new DomainBean(); } initData(); binding.electricOk.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String domain = binding.domain.getText().toString(); String port = binding.port.getText().toString(); int portInt = Integer.valueOf(port); int portInt = 0; if (TextUtils.isEmpty(port)) { ToastUtil.show("请输入正确的端口号"); } else { portInt = Integer.valueOf(port); } if (TextUtils.isEmpty(domain)) { ToastUtil.show("请输入域名"); return; @@ -45,14 +45,24 @@ ToastUtil.show("请输入正确的端口号"); return; } domainBean.setDomain(domain); domainBean.setPort(portInt); baseDao.domainPortDao().insert(domainBean); ToastUtil.show("保存成功"); initData(); } }); initData(); } private void initData() { domainBean = baseDao.domainPortDao().findFirst(); if (domainBean != null) { binding.domainOldTV.setText(domainBean.getDomain() + ":" + domainBean.getPort()); } else { domainBean = new DomainBean(); } } app/src/main/java/com/dayu/recharge/activity/NFCWreatActivity.java
@@ -11,8 +11,12 @@ import com.dayu.recharge.card.CleanCard; import com.dayu.recharge.card.CleanUserCard; import com.dayu.recharge.card.ConfigurationPowerCard; import com.dayu.recharge.card.ConfigureDeviceRegistrationCrad; import com.dayu.recharge.card.DomainCard; import com.dayu.recharge.card.ManageCard; import com.dayu.recharge.card.RegisteredCard; import com.dayu.recharge.card.TestCard; import com.dayu.recharge.card.UserCard; import com.dayu.recharge.databinding.ActivityWriteTextBinding; import com.dayu.recharge.dbBean.AdminDataBean; @@ -65,12 +69,18 @@ boolean registeredFlag = false; boolean administrativeCardFlag = false; boolean cleanUserCardFlag = false; volatile UserCard userCard; ManageCard manageCard; boolean domainCrdFlag = false; boolean testCardFlag = false; boolean configDeviceRegiestFlag = false; boolean configPowerFlag = false; UserCardBean userCardBean; CleanCard cleanCard; String morny; AdminDataBean adminData; RechargeBean rechargeBean; @@ -79,7 +89,15 @@ RegisteredCard registeredCard; CleanUserCard cleanUserCard; volatile UserCard userCard; ManageCard manageCard; DomainCard domainCard; CleanCard cleanCard; ConfigureDeviceRegistrationCrad configureDeviceRegistrationCrad; TestCard testCard; ConfigurationPowerCard configurationPowerCard; //打印 MyApplication baseApp; @@ -128,6 +146,19 @@ if (this.getIntent().hasExtra("cleanUserCard")) { cleanUserCard = (CleanUserCard) this.getIntent().getSerializableExtra("cleanUserCard"); } if (this.getIntent().hasExtra("domainCard")) { domainCard = (DomainCard) this.getIntent().getSerializableExtra("domainCard"); } if (this.getIntent().hasExtra("testCard")) { testCard = (TestCard) this.getIntent().getSerializableExtra("testCard"); } if (this.getIntent().hasExtra("configureDeviceRegistrationCrad")) { configureDeviceRegistrationCrad = (ConfigureDeviceRegistrationCrad) this.getIntent().getSerializableExtra("configureDeviceRegistrationCrad"); } if (this.getIntent().hasExtra("configurationPowerCard")) { configurationPowerCard = (ConfigurationPowerCard) this.getIntent().getSerializableExtra("configurationPowerCard"); } morny = this.getIntent().getStringExtra("morny"); try { adminData = baseDao.adminDao().findFirst(); @@ -182,7 +213,11 @@ private void saveData() { try { startAnim(); if (userCard != null || cleanCard != null || manageCard != null || registeredCard != null || cleanUserCard != null) { if (userCard != null || cleanCard != null || manageCard != null || registeredCard != null || cleanUserCard != null || domainCard != null || testCard != null || configureDeviceRegistrationCrad != null || configurationPowerCard != null) { if (userCard != null) { setUser(intent, userCard); } @@ -198,8 +233,19 @@ if (cleanUserCard != null) { setCleanUserCard(intent, cleanUserCard); } if ((userFlag || cleanFlag || manageCardFlag || registeredFlag || administrativeCardFlag)) { if (domainCard != null) { setDomainCard(intent, domainCard); } if (testCard != null) { setTestCard(intent, testCard); } if (configureDeviceRegistrationCrad != null) { setConfigDeviceRegiest(intent, configureDeviceRegistrationCrad); } if (configurationPowerCard != null) { setConfigurationPower(intent, configurationPowerCard); } if ((configPowerFlag || configDeviceRegiestFlag || testCardFlag || domainCrdFlag || userFlag || cleanFlag || manageCardFlag || registeredFlag || administrativeCardFlag || cleanUserCardFlag)) { try { if (userFlag && userCardBean != null) { baseDao.userCardDao().insert(userCardBean); @@ -456,12 +502,18 @@ userFlag = flag; } }); if (!userFlag) { return; } NFCWriteHelper.getInstence(intent).writeData(userCard.getOneBytes(), 1, 1, new NFCWriteHelper.NFCCallback() { @Override public void isSusses(boolean flag) { userFlag = flag; } }); if (!userFlag) { return; } NFCWriteHelper.getInstence(intent).writeData(userCard.getTwoBytes(), 1, 2, new NFCWriteHelper.NFCCallback() { @Override public void isSusses(boolean flag) { @@ -485,6 +537,12 @@ }); } /** * 删除全部用户卡 * * @param intent * @param cleanUserCard */ private void setCleanUserCard(Intent intent, CleanUserCard cleanUserCard) { NFCWriteHelper.getInstence(intent).writeData(cleanUserCard.toByte(), 1, 0, new NFCWriteHelper.NFCCallback() { @Override @@ -495,6 +553,78 @@ } /** * 设置域名卡 * * @param intent * @param domainCard */ private void setDomainCard(Intent intent, DomainCard domainCard) { try { NFCWriteHelper.getInstence(intent).writeData(domainCard.getZeroByte(), 1, 0, new NFCWriteHelper.NFCCallback() { @Override public void isSusses(boolean flag) { domainCrdFlag = flag; } }); if (!domainCrdFlag) { return; } NFCWriteHelper.getInstence(intent).writeData(domainCard.getOneByte(), 1, 1, new NFCWriteHelper.NFCCallback() { @Override public void isSusses(boolean flag) { domainCrdFlag = flag; } }); if (!domainCrdFlag) { return; } NFCWriteHelper.getInstence(intent).writeData(domainCard.getTwoByte(), 1, 2, new NFCWriteHelper.NFCCallback() { @Override public void isSusses(boolean flag) { domainCrdFlag = flag; } }); } catch (Exception e) { domainCrdFlag = false; throw new RuntimeException(e); } } private void setTestCard(Intent intent, TestCard testCard) { NFCWriteHelper.getInstence(intent).writeData(testCard.toByte(), 1, 0, new NFCWriteHelper.NFCCallback() { @Override public void isSusses(boolean flag) { testCardFlag = flag; } }); } private void setConfigDeviceRegiest(Intent intent, ConfigureDeviceRegistrationCrad configureDeviceRegistrationCrad) { NFCWriteHelper.getInstence(intent).writeData(configureDeviceRegistrationCrad.toByte(), 1, 0, new NFCWriteHelper.NFCCallback() { @Override public void isSusses(boolean flag) { configDeviceRegiestFlag = flag; } }); } private void setConfigurationPower(Intent intent, ConfigurationPowerCard configurationPowerCard) { try { NFCWriteHelper.getInstence(intent).writeData(configurationPowerCard.toByte(), 1, 0, new NFCWriteHelper.NFCCallback() { @Override public void isSusses(boolean flag) { configPowerFlag = flag; } }); } catch (Exception e) { configPowerFlag = false; throw new RuntimeException(e); } } /** * @param initPeasantCode 农户注册编号 */ private void selectBalance(String initPeasantCode) { app/src/main/java/com/dayu/recharge/activity/ParameterActivity.java
@@ -33,5 +33,13 @@ startActivity(intent); } }); binding.parameterPower.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(ParameterActivity.this, PowerActivity.class); startActivity(intent); } }); } } app/src/main/java/com/dayu/recharge/activity/PowerActivity.java
@@ -17,14 +17,23 @@ */ public class PowerActivity extends BaseActivity { ActivityPowerBinding powerBinding; PowerBean powerBean = new PowerBean(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); powerBinding = ActivityPowerBinding.inflate(LayoutInflater.from(this)); setContentView(powerBinding.getRoot()); initData(); initView(); } private void initData() { PowerBean powerBean = baseDao.powerDao().findFirst(); if (powerBean != null) { this.powerBean = powerBean; powerBinding.villageOldNumber.setText(powerBean.getPower()); } } private void initView() { @@ -33,7 +42,6 @@ public void onClick(View v) { String data = powerBinding.villageNewNum.getText().toString(); if (!TextUtils.isEmpty(data)) { PowerBean powerBean = new PowerBean(); powerBean.setPower(data); baseDao.powerDao().insert(powerBean); ToastUtil.show("保存成功"); app/src/main/java/com/dayu/recharge/activity/SysActivity.java
@@ -7,10 +7,16 @@ import com.dayu.recharge.card.CleanCard; import com.dayu.recharge.card.CleanUserCard; import com.dayu.recharge.card.ConfigurationPowerCard; import com.dayu.recharge.card.ConfigureDeviceRegistrationCrad; import com.dayu.recharge.card.DomainCard; import com.dayu.recharge.card.ManageCard; import com.dayu.recharge.card.RegisteredCard; import com.dayu.recharge.card.TestCard; import com.dayu.recharge.databinding.ActivityAdminBinding; import com.dayu.recharge.dbBean.DomainBean; import com.dayu.recharge.dbBean.PowerBean; import com.dayu.recharge.utils.ToastUtil; /** * Copyright (C), 2023, @@ -31,12 +37,14 @@ initView(); } private void initView() { Intent intent = new Intent(this, NFCWreatActivity.class); 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); @@ -46,6 +54,7 @@ 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); @@ -54,6 +63,7 @@ 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); @@ -63,6 +73,7 @@ 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); @@ -72,11 +83,56 @@ adminBinding.adminDomain.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DomainCard domainCard = new DomainCard(); intent.putExtra("domainCard", domainCard); Intent intent = new Intent(SysActivity.this, NFCWreatActivity.class); DomainBean domainBean = baseDao.domainPortDao().findFirst(); if (domainBean != null) { DomainCard domainCard = new DomainCard(); domainCard.setDomainName(domainBean.getDomain()); domainCard.setPort(domainBean.getPort()); intent.putExtra("domainCard", domainCard); startActivity(intent); } else { ToastUtil.show("请先设置域名"); } } }); 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.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.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 { ToastUtil.show("请先设置水泵功率"); } } }); } app/src/main/java/com/dayu/recharge/card/ConfigurationPowerCard.java
@@ -2,6 +2,8 @@ import com.dayu.recharge.tools.HexUtil; import java.io.Serializable; /** * Copyright (C), 2023, * Author: zuo @@ -11,7 +13,7 @@ * 为方便现场更换设备时重新注册的问题,配置设备信息卡,首先刷卡,把原设备的注册号和ID号读到卡内, * 同时卡状态则00修改为FF,再新设备上刷此卡时,注册号和ID号自动写到控制器内,可以直接刷卡使用 */ public class ConfigurationPowerCard { public class ConfigurationPowerCard implements Serializable { public String cardType = "BD";//卡类型 @@ -19,20 +21,37 @@ public String power;//功率 public String getPower() { return power; } public void setPower(String power) { this.power = power; } 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]; } float floatPower = Float.parseFloat(power); int intPower = (int) Math.ceil(floatPower); // 将浮点数向上取整并转换为整数 String hexPower = HexUtil.get10to16(intPower); byte bytePower = HexUtil.hexToByte(hexPower); data[5] = bytePower; if (power != null) { float floatPower = Float.parseFloat(power); int intPower = (int) Math.ceil(floatPower); // 将浮点数向上取整并转换为整数 String hexPower = HexUtil.get10to16(intPower); byte bytePower = HexUtil.hexToByte(hexPower); data[5] = bytePower; } data[15] = getByteSum(data); return data; } } app/src/main/java/com/dayu/recharge/card/ConfigureDeviceRegistrationCrad.java
@@ -2,35 +2,37 @@ import com.dayu.recharge.tools.HexUtil; import java.io.Serializable; /** * Created by Android Studio. * author: zuo * Date: 2023-11-13 * Time: 18:11 * 备注:配置设备注册信息卡 * * <p> * 为方便现场更换设备时重新注册的问题,配置设备信息卡,首先刷卡,把原设备的注册号和ID号读到卡内,同时卡状态则00修改为FF,再新设备上刷此卡时,注册号和ID号自动写到控制器内,可以直接刷卡使用 */ public class ConfigureDeviceRegistrationCrad { public class ConfigureDeviceRegistrationCrad implements Serializable { public String cardType = "BC";//卡类型 public String cardData = "A0B1C289";//标识码 public String power;//功率 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]; } float floatPower = Float.parseFloat(power); int intPower = (int) Math.ceil(floatPower); // 将浮点数向上取整并转换为整数 String hexPower = HexUtil.get10to16(intPower); byte bytePower = HexUtil.hexToByte(hexPower); data[5] = bytePower; data[15] = getByteSum(data); return data; } } app/src/main/java/com/dayu/recharge/card/DomainCard.java
@@ -23,7 +23,24 @@ //端口号为5个字节,不足5位高位补0。端口号与域名之间用”,”隔开。端口号最后以”#”结束 public String domainName;//域名 public String port;//端口 public int port;//端口 public String getDomainName() { return domainName; } public void setDomainName(String domainName) { this.domainName = domainName; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } private byte[] asciiByte;//当前域名和端口号数组 @@ -50,10 +67,18 @@ public byte[] toByte() { byte[] data = new byte[16]; data[0] = HexUtil.hexToByte(cardType); byte[] domainNumbers = BcdUtil.strToBcd(domainNumber); data[1] = domainNumbers[0]; if (domainNumber != null) { byte[] domainNumbers = BcdUtil.strToBcd(domainNumber); data[1] = domainNumbers[0]; } domainLength = domainName.length(); data[2] = HexUtil.hexToByte(HexUtil.get10to16(domainLength)); String ascii = IDN.toASCII(domainName + "," + port + "#"); String portStr = String.valueOf(port); int lenght = portStr.length(); for (int i = 0; i < 5 - lenght; i++) { portStr = "0" + portStr; } String ascii = IDN.toASCII(domainName + "," + portStr + "#"); asciiByte = ascii.getBytes(); if (asciiByte.length < 12) { System.arraycopy(asciiByte, 0, data, 3, asciiByte.length); @@ -75,9 +100,9 @@ byte[] data = new byte[16]; if (asciiByte.length > 12) { if (asciiByte.length - 12 < 15) { System.arraycopy(asciiByte, 12, data, 3, asciiByte.length - 12); System.arraycopy(asciiByte, 12, data, 0, asciiByte.length - 12); } else { System.arraycopy(asciiByte, 12, data, 3, 15); System.arraycopy(asciiByte, 12, data, 0, 15); } } data[15] = getByteSum(data); @@ -95,9 +120,9 @@ byte[] data = new byte[16]; if (asciiByte.length > (12 + 15)) { if (asciiByte.length - (12 + 15) < 15) { System.arraycopy(asciiByte, 12, data, 3, asciiByte.length - (12 + 15)); System.arraycopy(asciiByte, 12, data, 0, asciiByte.length - (12 + 15)); } else { System.arraycopy(asciiByte, 12, data, 3, 15); System.arraycopy(asciiByte, 12, data, 0, 15); } } data[15] = getByteSum(data); app/src/main/java/com/dayu/recharge/card/TestCard.java
@@ -2,18 +2,25 @@ import com.dayu.recharge.tools.HexUtil; import java.io.Serializable; /** * Copyright (C), 2023, * Author: zuo * Date: 2023-11-08 13:23 * Description: 测试卡 */ public class TestCard { public class TestCard implements Serializable { public String cardType = "A4";//卡类型 public String cardData = "A0B1C289";//标识码 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); @@ -21,6 +28,7 @@ data[i + 1] = cardDatas[i]; } data[15] = getByteSum(data); return data; } } app/src/main/res/layout/activity_admin.xml
@@ -27,7 +27,8 @@ android:id="@+id/admin_admin" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="20dp" android:layout_marginLeft="20dp" android:layout_marginTop="20dp" android:padding="5dp" android:text="制作管理卡" android:textSize="@dimen/text_size" /> @@ -36,7 +37,8 @@ android:id="@+id/admin_cleanZero" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="20dp" android:layout_marginLeft="20dp" android:layout_marginTop="20dp" android:padding="5dp" android:text="制作清零卡" android:textSize="@dimen/text_size" /> @@ -45,7 +47,8 @@ android:id="@+id/admin_registered" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="20dp" android:layout_marginLeft="20dp" android:layout_marginTop="20dp" android:padding="5dp" android:text="制作重新注册设备卡" android:textSize="@dimen/text_size" /> @@ -54,7 +57,8 @@ android:id="@+id/admin_CleanUser" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="20dp" android:layout_marginLeft="20dp" android:layout_marginTop="20dp" android:padding="5dp" android:text="制作删除全部用户卡" android:textSize="@dimen/text_size" /> @@ -63,15 +67,42 @@ android:id="@+id/admin_domain" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="20dp" android:layout_marginLeft="20dp" android:layout_marginTop="20dp" android:padding="5dp" android:text="制作设置域名卡" android:textSize="@dimen/text_size" /> <TextView android:id="@+id/admin_test" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_marginTop="20dp" android:padding="5dp" android:text="制作测试卡" android:textSize="@dimen/text_size" /> <TextView android:id="@+id/admin_configDeviceRegistration" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_marginTop="20dp" android:padding="5dp" android:text="制作配置设备信息卡" android:textSize="@dimen/text_size" /> <TextView android:id="@+id/admin_configPower" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_marginTop="20dp" android:padding="5dp" android:text="制作配置水泵功率卡" android:textSize="@dimen/text_size" /> </LinearLayout> app/src/main/res/layout/activity_parameter.xml
@@ -17,18 +17,29 @@ android:id="@+id/parameter_domain" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="20dp" android:layout_marginLeft="20dp" android:layout_marginTop="20dp" android:padding="5dp" android:text="域名卡设置" android:textSize="@dimen/text_size" /> <TextView android:id="@+id/parameter_power" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_marginTop="20dp" android:padding="5dp" android:text="水泵功率卡设置" android:textSize="@dimen/text_size" /> <TextView android:id="@+id/parameter_electricPrice" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="20dp" android:layout_marginLeft="20dp" android:layout_marginTop="20dp" android:padding="5dp" android:text="电量单价" android:textSize="@dimen/text_size"