|  |  | 
 |  |  | import android.view.LayoutInflater; | 
 |  |  | import android.view.View; | 
 |  |  |  | 
 |  |  | import com.dayu.baselibrary.tools.HexUtil; | 
 |  |  | import com.dayu.baselibrary.net.subscribers.SubscriberListener; | 
 |  |  | import com.dayu.baselibrary.utils.MornyUtil; | 
 |  |  | import com.dayu.baselibrary.utils.TipUtil; | 
 |  |  | import com.dayu.baselibrary.view.ConfirmDialog; | 
 |  |  | import com.dayu.qiheonlinelibrary.bean.CardInfoResult; | 
 |  |  | import com.dayu.qiheonlinelibrary.card.BlackCard; | 
 |  |  | import com.dayu.qiheonlinelibrary.card.ConfigurationPowerCard; | 
 |  |  | import com.dayu.qiheonlinelibrary.card.DomainCard; | 
 |  |  | import com.dayu.qiheonlinelibrary.card.ElectricPriceCard; | 
 |  |  | import com.dayu.qiheonlinelibrary.card.ManageCard; | 
 |  |  | import com.dayu.qiheonlinelibrary.card.ManagerToUserCard; | 
 |  |  | import com.dayu.qiheonlinelibrary.card.RegionCard; | 
 |  |  | import com.dayu.qiheonlinelibrary.card.UserCard; | 
 |  |  | import com.dayu.qiheonlinelibrary.databinding.ActivityRedCardQhlBinding; | 
 |  |  | import com.dayu.qiheonlinelibrary.dbBean.AdminDataBean; | 
 |  |  | import com.dayu.qiheonlinelibrary.dbBean.UserCardBean; | 
 |  |  | import com.dayu.qiheonlinelibrary.tools.NFCWriteHelper; | 
 |  |  | import com.dayu.qiheonlinelibrary.net.ApiManager; | 
 |  |  | import com.dayu.qiheonlinelibrary.net.BaseResponse; | 
 |  |  | import com.dayu.qiheonlinelibrary.tools.NfcReadHelper; | 
 |  |  | import com.dayu.qiheonlinelibrary.utils.CardCommon; | 
 |  |  | import com.dayu.qiheonlinelibrary.view.ProgressDialog; | 
 |  |  |  | 
 |  |  |  | 
 |  |  | import java.util.Calendar; | 
 |  |  | import java.util.HashMap; | 
 |  |  | import java.util.List; | 
 |  |  | import java.util.Map; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  |  * Copyright (C), 2023, | 
 |  |  | 
 |  |  |  * Date: 2023-11-10 19:52 | 
 |  |  |  * Description: 读卡界面 | 
 |  |  |  */ | 
 |  |  | public class ReadCardAcitivy extends BaseNfcActivity { | 
 |  |  | public class ReadCardAcitivy extends QHOlineBaseNfcActivity { | 
 |  |  |  | 
 |  |  |     volatile UserCard userCard; | 
 |  |  |     ActivityRedCardQhlBinding redCardBinding; | 
 |  |  | 
 |  |  |     AdminDataBean adminData; | 
 |  |  |     String cardNumber; | 
 |  |  |     String userCardStr; | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     protected void onCreate(Bundle savedInstanceState) { | 
 |  |  |         super.onCreate(savedInstanceState); | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     private void setUserData(String userName, String statu, String cardNumber) { | 
 |  |  |         viweGone(true); | 
 |  |  |         redCardBinding.redName.setText("用户姓名:" + userName); | 
 |  |  |         redCardBinding.redStatu.setText("卡状态:" + statu); | 
 |  |  |         if (userCard != null) { | 
 |  |  |             Calendar calendar = userCard.getRechargeDate(); | 
 |  |  |             if (calendar != null) { | 
 |  |  |                 int year = calendar.get(Calendar.YEAR); | 
 |  |  |                 int month = calendar.get(Calendar.MONTH); // 月份从0开始,所以需要加1 | 
 |  |  |                 int day = calendar.get(Calendar.DAY_OF_MONTH); | 
 |  |  |                 redCardBinding.redRechargeDate.setText("本卡最后购水日期:" + year + "年" + month + "月" + day + "日"); | 
 |  |  |             } else { | 
 |  |  |                 redCardBinding.redRechargeDate.setText("本卡最后购水日期:无"); | 
 |  |  |             } | 
 |  |  |             redCardBinding.redInitCode.setText(cardNumber); | 
 |  |  |             redCardBinding.redRechargeNumber.setText("本卡充值次数:" + userCard.getRechargeTimes() + " 次"); | 
 |  |  | //            redCardBinding.redTotalWater.setText("总用水量:" + MornyUtil.changeF2Y(userCard.getTotalWater()) + " 吨"); | 
 |  |  | //            redCardBinding.redTotalPower.setText("总用电量:" + MornyUtil.changeF2Y(userCard.getTotalElectric()) + " 度"); | 
 |  |  |             redCardBinding.redRemainderBlance.setText("剩余金额:" + MornyUtil.changeF2Y(userCard.getBalance()) + " 元"); | 
 |  |  | //            redCardBinding.redRemainderWater.setText("剩余水量:" + MornyUtil.changeF2Y(userCard.getSurplusWater()) + " 吨"); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public void onNewIntent(Intent intent) { | 
 |  |  |     public void onNfcBack(Intent intent) { | 
 |  |  |         this.intent = intent; | 
 |  |  |         ProgressDialog.show(this); | 
 |  |  |         if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) { | 
 |  |  |             readAllData(intent); | 
 |  |  |         } | 
 |  |  |         super.onNewIntent(intent); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  | 
 |  |  |         String[] cardTypes = cardType.split(","); | 
 |  |  |         if (cardTypes != null && cardTypes.length == 2) { | 
 |  |  |             cardNumber = cardType.split(",")[0]; | 
 |  |  |             cardNumber = HexUtil.spaceHex(cardNumber); | 
 |  |  |             cardNumber = HexUtil.HighLowHex(cardNumber); | 
 |  |  |             cardType = cardType.split(",")[1]; | 
 |  |  |         } | 
 |  |  |         List<byte[]> data = NfcReadHelper.getInstence(intent, this).getOnesectorData(); | 
 |  |  | 
 |  |  |  | 
 |  |  |                 if (!data.isEmpty()) { | 
 |  |  |                     if (!TextUtils.isEmpty(cardNumber)) { | 
 |  |  |                         userCard = UserCard.getBean(data); | 
 |  |  |                         List<UserCardBean> userCardBeans = baseDao.userCardDao().findUserName(cardNumber); | 
 |  |  |                         if (userCardBeans != null && !userCardBeans.isEmpty()) { | 
 |  |  |                             UserCardBean userName = userCardBeans.get(0); | 
 |  |  |                             setUserData(userName.getUserName(), state, cardNumber); | 
 |  |  |                         } else { | 
 |  |  |                             setUserData("未查询到用户名", state, cardNumber); | 
 |  |  |                         } | 
 |  |  |                         userCard = new UserCard().getBean(data); | 
 |  |  |                         getUserInfoAndCardInfo(cardNumber,userCard.getMyUserCode()); | 
 |  |  |                     } else { | 
 |  |  |  | 
 |  |  |                     } | 
 |  |  | 
 |  |  |                 break; | 
 |  |  |             case CardCommon.MANAGE_CRAD://管理卡 | 
 |  |  |                 ManageCard manageCard = ManageCard.getBean(data); | 
 |  |  |                 viweGone(false); | 
 |  |  |                  userCardStr = manageCard.getUserCard().toUpperCase(); | 
 |  |  |                 userCardStr = HexUtil.spaceHex(userCardStr); | 
 |  |  |                 userCardStr = HexUtil.HighLowHex(userCardStr); | 
 |  |  |                 redCardBinding.readCardTypeTV.setText("当前为管理卡" + "\n\n" | 
 |  |  |                         + "原始卡号:" + userCardStr); | 
 |  |  |                 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()); | 
 |  |  |                                 if (nfcWriteHelper.writeData(managerToUserCard.getZeroBytes(),1,0)){ | 
 |  |  |                                     TipUtil.show(ReadCardAcitivy.this, "补卡成功", () -> ReadCardAcitivy.this.finish()); | 
 |  |  |                                 }else { | 
 |  |  |                                     TipUtil.show(ReadCardAcitivy.this, "补卡失败,请重新刷卡", () -> ReadCardAcitivy.this.finish()); | 
 |  |  |                                 } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |                             } catch (Exception e) { | 
 |  |  |                                e.printStackTrace(); | 
 |  |  |                             } | 
 |  |  |                             stopAnim(); | 
 |  |  |                         } | 
 |  |  |                     }); | 
 |  |  |                     confirmDialog.show(); | 
 |  |  |                 if (manageCard != null) { | 
 |  |  |                     viweGone(false); | 
 |  |  |                     userCardStr = manageCard.getUserCard().toUpperCase(); | 
 |  |  |                     redCardBinding.readCardTypeTV.setText("当前为管理卡" + "\n\n" | 
 |  |  |                             + "原始卡号:" + userCardStr); | 
 |  |  |                 } | 
 |  |  |                 break; | 
 |  |  |             case CardCommon.CLEAN_CARD_TYPE: | 
 |  |  | 
 |  |  |                 if (!data.isEmpty()) { | 
 |  |  |                     RegionCard regionCard = RegionCard.getBean(data); | 
 |  |  |                     StringBuilder stringBuilder = new StringBuilder(); | 
 |  |  |                     stringBuilder.append("区域地址:").append(regionCard.getRegion()).append("\n"); | 
 |  |  |                     stringBuilder.append("控制器编号:").append(regionCard.getControllerCodel()).append("\n"); | 
 |  |  |                     stringBuilder.append("区域号:").append(regionCard.getArerNumber()); | 
 |  |  |                     redCardBinding.readCardDataTV.setText(stringBuilder.toString()); | 
 |  |  |                 } else { | 
 |  |  |                     TipUtil.show("卡片识别错误,请重试!"); | 
 |  |  | 
 |  |  |         // or avi.smoothToHide(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 获取卡信息和用户信息 | 
 |  |  |      * | 
 |  |  |      * @param iccardCode | 
 |  |  |      */ | 
 |  |  |     public void getUserInfoAndCardInfo(String iccardNum,String iccardCode) { | 
 |  |  |         Map<String, Object> data = new HashMap<>(); | 
 |  |  |         //ic卡信息id | 
 |  |  |         data.put("iccardNum", iccardNum); | 
 |  |  |         data.put("iccardCode", iccardCode); | 
 |  |  |         ApiManager.getInstance().requestPostLoading(this, "iccard/peasant/getIccardInfoVoByCardCode", CardInfoResult.class, data, new SubscriberListener<BaseResponse<CardInfoResult>>() { | 
 |  |  |             @Override | 
 |  |  |             public void onNext(BaseResponse<CardInfoResult> t) { | 
 |  |  |                 String state = ""; | 
 |  |  |                 if (t.isSuccess() && t.getData() instanceof CardInfoResult) { | 
 |  |  |                     setUserData(t.getData()); | 
 |  |  |                 } else { | 
 |  |  |                     TipUtil.show(ReadCardAcitivy.this, "从获取平台卡信息失败!"); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private void setUserData(CardInfoResult cardInfoResult) { | 
 |  |  |         viweGone(true); | 
 |  |  |         if (cardInfoResult != null) { | 
 |  |  |             redCardBinding.redName.setText(cardInfoResult.getPeasantName()); | 
 |  |  |             redCardBinding.redCardCode.setText(cardNumber); | 
 |  |  |             redCardBinding.redUserCode.setText(cardInfoResult.getIccardCode()); | 
 |  |  |             redCardBinding.redBlance.setText(MornyUtil.changeF2Y(userCard.getBalance()) + "元"); | 
 |  |  |             redCardBinding.redElectric.setText(MornyUtil.changeF2Y(userCard.getSurplusElecticity()) + "度"); | 
 |  |  |             redCardBinding.redTotalMorny.setText(cardInfoResult.getTotalRechargeMoney() + "元"); | 
 |  |  |             redCardBinding.redPhone.setText(cardInfoResult.getPeasantPhone()); | 
 |  |  |             redCardBinding.redCodeId.setText(cardInfoResult.getPeasantIdNumber()); | 
 |  |  |             if (cardInfoResult.getIccardStatus() == 0) { | 
 |  |  |                 redCardBinding.redStatu.setText("正常"); | 
 |  |  |             } else if (cardInfoResult.getIccardStatus() == 1) { | 
 |  |  |                 redCardBinding.redStatu.setText("已注销"); | 
 |  |  |             } else { | 
 |  |  |                 redCardBinding.redStatu.setText("已挂失"); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | } |