package com.dayu.qiheonlinelibrary.activity; import android.content.Intent; import android.os.Bundle; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.View; import android.widget.EditText; import com.dayu.baselibrary.utils.DeviceUtils; import com.dayu.baselibrary.utils.MornyUtil; import com.dayu.baselibrary.utils.TipUtil; import com.dayu.qiheonlinelibrary.QHOnLineApplication; import com.dayu.qiheonlinelibrary.R; import com.dayu.qiheonlinelibrary.bean.CardInfoResult; import com.dayu.qiheonlinelibrary.bean.RechargeResult; import com.dayu.qiheonlinelibrary.card.UserCard; import com.dayu.qiheonlinelibrary.databinding.ActivityRechargeQhlBinding; import com.dayu.qiheonlinelibrary.dbBean.RechargeBean; import com.dayu.qiheonlinelibrary.net.ApiManager; import com.dayu.qiheonlinelibrary.net.BaseResponse; import com.dayu.qiheonlinelibrary.net.subscribers.SubscriberListener; import com.dayu.qiheonlinelibrary.tools.NfcReadHelper; import com.dayu.qiheonlinelibrary.utils.CardCommon; import com.tencent.bugly.crashreport.CrashReport; import java.util.Calendar; import java.util.HashMap; import java.util.Map; /** * Copyright (C), 2023, * Author: zuo * Date: 2023-11-5 09:52 * Description: 充值界面 */ public class RechargeActivity extends BaseNfcActivity { Intent intent; ActivityRechargeQhlBinding binding; public static RechargeActivity rechargeActivity; String cardNumber = null;//实体卡号 RechargeBean rechargeBean; String rechageWater;//充值的水量 String cardType;//卡状态 CardInfoResult cardInfoResult; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); try { binding = ActivityRechargeQhlBinding.inflate(LayoutInflater.from(this)); setContentView(binding.getRoot()); setPricePoint(binding.rechargeWater); rechargeActivity = this; initView(); } catch (Exception e) { e.printStackTrace(); CrashReport.postCatchedException(e); } } public void onNewIntent(Intent intent) { this.intent = intent; try { readAllData(); } catch (Exception e) { e.printStackTrace(); CrashReport.postCatchedException(e); } super.onNewIntent(intent); } private void readAllData() { cardType = NfcReadHelper.getInstence(intent, this).getCradTypeAndCardNumber(); String[] cardTypes = cardType.split(","); if (cardTypes != null && cardTypes.length == 2) { cardNumber = cardType.split(",")[0]; cardType = cardType.split(",")[1]; } //获取卡内信息 userCard = NfcReadHelper.getInstence(intent, this).getUserCardData(); if (userCard != null) { try { getUserInfoAndCardInfo(cardNumber, userCard.getMyUserCode()); } catch (Exception e) { e.printStackTrace(); CrashReport.postCatchedException(e); TipUtil.show(this, "读卡失败,请刷卡后不要立即移开"); } } else { TipUtil.show(this, "读卡失败,请刷卡后不要立即移开"); } } private void setUserData(String cardNumber, String userName, String lastRechargeTime) { if (cardType.equalsIgnoreCase(CardCommon.USER_CARD_TYPE_1)) { setCardState("终端写卡"); binding.rechargeLL.setVisibility(View.VISIBLE); binding.rechargeRegistBtn.setVisibility(View.VISIBLE); binding.redStatu.setTextColor(this.getResources().getColor(R.color.black)); } else if (cardType.equalsIgnoreCase(CardCommon.USER_CARD_TYPE_2)) { setCardState("未刷卡关泵,当前不可充值"); TipUtil.show(RechargeActivity.this, "未刷卡关泵,当前不可充值"); } else if (cardType.equalsIgnoreCase(CardCommon.USER_CARD_TYPE_3)) { setCardState("叠加充值"); } else { TipUtil.show(this, "非用户卡,不能充值"); return; } if (userCard != null) { try { if (Integer.valueOf(QHOnLineApplication.getInstance().arerNumber) == userCard.getArerNumber()) { binding.rechargeReadLL.setVisibility(View.GONE); binding.rechargeTextLL.setVisibility(View.VISIBLE); binding.userName.setText(userName); binding.redInitCode.setText(cardNumber); binding.redRechargeDate.setText("本卡最后购水日期:\n\n" + lastRechargeTime); binding.redUserCode.setText(cardInfoResult.getIccardCode()); if (userCard != null) { binding.redRemainderBlance.setText(MornyUtil.changeF2Y(userCard.getBalance()) + " 元"); binding.redBalanceElectric.setText("充值后剩余电量:" + MornyUtil.changeF2Y(userCard.getSurplusElecticity()) + " 度"); } binding.redRechargeElectric.setText("电量单价:" + QHOnLineApplication.getInstance().electriclePriceStr + "元/度"); } else { TipUtil.show(this, "非本区域卡\n不能充值!!!"); } } catch (Exception e) { e.printStackTrace(); CrashReport.postCatchedException(e); TipUtil.show(this, "读卡失败,请刷卡后不要立即移开"); } } else { TipUtil.show(this, "读卡失败,请刷卡后不要立即移开"); } } private void initView() { binding.rechargeRegistBtn.setOnClickListener(v -> { String morny = binding.rechargeWater.getText().toString(); if (!TextUtils.isEmpty(morny)) { rechaege(morny); } else { TipUtil.show(RechargeActivity.this, "请输入充值金额"); } }); } //校验金额 public void setPricePoint(final EditText editText) { editText.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (s.toString().contains(".")) { if (s.length() - 1 - s.toString().indexOf(".") > 2) { s = s.toString().subSequence(0, s.toString().indexOf(".") + 3); editText.setText(s); editText.setSelection(s.length()); } } if (s.toString().trim().substring(0).equals(".")) { s = "0" + s; editText.setText(s); editText.setSelection(2); } if (s.toString().startsWith("0") && s.toString().trim().length() > 1) { if (!s.toString().substring(1, 2).equals(".")) { editText.setText(s.subSequence(0, 1)); editText.setSelection(1); } } String morny = editText.getText().toString(); if (!TextUtils.isEmpty(morny)) { // rechageWater = MornyUtil.intDiv(MornyUtil.changeY2F(editText.getText().toString()), waterPrice); // binding.redRechargeWater.setText("充值水量:" + rechageWater + " 立方米(吨)"); } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub } }); } protected void onDestroy() { super.onDestroy(); rechargeActivity = null; } private void startNfcActivity(String morny, String balance, float rechargeElectric, float iccardBalanceElectric, float totalMorny, String iccardRechargeRecordId) { //先处理补扣 //充值补扣金额=充值金额+充值前读取的卡内余额-充值回调返回卡内余额 int deductionMorny = MornyUtil.changeY2F(morny) + userCard.getBalance() - MornyUtil.changeY2F(balance); if (MornyUtil.changeY2F(morny) < deductionMorny) { TipUtil.show(RechargeActivity.this, "当前充值金额小于补扣金额,补扣金额为" + MornyUtil.changeF2Y(deductionMorny) + "元,充值金额应大于补扣金额!"); return; } //添加充值信息 rechargeBean = new RechargeBean(); rechargeBean.setCardNumber(cardNumber); rechargeBean.setUserCode(userCard.getUserCode() + userCard.getUserCodeNumber()); rechargeBean.setUserName(cardInfoResult.getPeasantName()); rechargeBean.setPersonId(cardInfoResult.getPeasantId()); rechargeBean.setSerial(DeviceUtils.getSN()); rechargeBean.setArerNumber(QHOnLineApplication.getInstance().arerNumber); rechargeBean.setMorny(morny); rechargeBean.setBalance(balance); rechargeBean.setRechargeElectric(String.valueOf(rechargeElectric)); rechargeBean.setPrice(QHOnLineApplication.getInstance().electriclePriceStr); rechargeBean.setSurplusElectic(String.valueOf(iccardBalanceElectric)); long time = System.currentTimeMillis(); rechargeBean.setRechargeDate(time); rechargeBean.setUserId(""); rechargeBean.setTotalMorny(String.valueOf(totalMorny)); rechargeBean.setState(1); rechargeBean.setOrderId(iccardRechargeRecordId); rechargeBean.setDeductionMorny(MornyUtil.changeF2Y(deductionMorny)); rechargeBean.setAdminId(QHOnLineApplication.getInstance().adminId); userCard.setCardWriteState(0); userCard.setCardState(1); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(time); userCard.setBalance(MornyUtil.changeY2F(String.valueOf(balance))); userCard.setSurplusElecticity(MornyUtil.changeY2F(String.valueOf(iccardBalanceElectric))); userCard.setTotalMorny(MornyUtil.changeY2F(String.valueOf(totalMorny))); userCard.setRechargeDate(calendar); userCard.setElectricPrice(Float.valueOf(QHOnLineApplication.getInstance().electriclePriceStr)); if (deductionMorny == 0) { Intent intent = new Intent(RechargeActivity.this, NFCWreatActivity.class); intent.putExtra("morny", morny); intent.putExtra("userCard", userCard); intent.putExtra("rechargeBean", rechargeBean); startActivity(intent); } else { TipUtil.show(RechargeActivity.this, "挂失卡后有补交金额!补交金额为:" + MornyUtil.changeF2Y(deductionMorny) + "元,详情可在平台查询。", new TipUtil.TipListener() { @Override public void onCancle() { Intent intent = new Intent(RechargeActivity.this, NFCWreatActivity.class); intent.putExtra("morny", morny); intent.putExtra("userCard", userCard); intent.putExtra("rechargeBean", rechargeBean); startActivity(intent); } }); } } /** * IC卡充值 * * @param morny */ public void rechaege(String morny) { Map data = new HashMap<>(); //终端设备号 data.put("equipCode", DeviceUtils.getSN()); //ic卡信息id data.put("iccardNum", cardNumber); //交易水费金额(元) data.put("rechargeWaterMoney", morny); //卡内剩余金额(元) data.put("iccardBalanceMoney", MornyUtil.changeF2Y(userCard.getBalance())); //卡内剩余水量(m³) data.put("iccardBalanceAmonunt", "0"); //卡内剩余电量 data.put("iccardBalanceElectric", MornyUtil.changeF2Y(userCard.getSurplusElecticity())); ApiManager.getInstance().requestPostLoading(this, "iccard/recharge/rechargeCard", RechargeResult.class, data, new SubscriberListener>() { @Override public void onNext(BaseResponse t) { if (t.isSuccess()) { if (t.getData() != null) { RechargeResult rechargeResult = t.getData(); startNfcActivity(morny, rechargeResult.getIccardBalanceMoney(), rechargeResult.getRechargeElectricAmount(), rechargeResult.getIccardBalanceElectric(), rechargeResult.getTotalRechargeMoney(), rechargeResult.getIccardRechargeRecordId()); } else { TipUtil.show(RechargeActivity.this, "充值失败请重试!"); } } else { TipUtil.show(RechargeActivity.this, t.getMsg()); } } }); } /** * 获取卡信息和用户信息 * * @param iccardCode */ public void getUserInfoAndCardInfo(String iccardNum, String iccardCode) { Map 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>() { @Override public void onNext(BaseResponse t) { String state = ""; if (t.isSuccess()) { if (t.getData() != null) { //ic卡状态 0 正常 1 已注销 2 已挂失 if (t.getData().getIccardStatus() == 0) { // List data = NfcReadHelper.getInstence(intent, RechargeActivity.this).getOnesectorData(); if (!data.isEmpty()) { if (!TextUtils.isEmpty(cardNumber)) { cardInfoResult = t.getData(); setUserData(cardNumber, cardInfoResult.getPeasantName(), cardInfoResult.getLastRechargeTime()); } else { TipUtil.show(RechargeActivity.this, "读取卡片失败,请重新贴卡"); } } else { TipUtil.show(RechargeActivity.this, "卡片识别错误,请重试!"); } } else if (t.getData().getIccardStatus() == 1) { TipUtil.show(RechargeActivity.this, "当前卡已注销"); } else { TipUtil.show(RechargeActivity.this, "当前卡已挂失"); } } else { TipUtil.show(RechargeActivity.this, "当前卡片错误,未能查到该卡信息!"); } } else { TipUtil.show(RechargeActivity.this, t.getMsg()); } } }); } private void setCardState(String state) { binding.rechargeLL.setVisibility(View.GONE); binding.rechargeRegistBtn.setVisibility(View.GONE); binding.redStatu.setTextColor(RechargeActivity.this.getResources().getColor(com.dayu.baselibrary.R.color.red)); binding.redStatu.setText(state); } }