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