左晓为主开发手持机充值管理机
zuoxiao
2024-07-13 d08a5a6d062f1568aaeb14d2d72357826291ef97
qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/activity/RechargeActivity.java
New file
@@ -0,0 +1,267 @@
package com.dayu.qihealonelibrary.activity;
import android.annotation.SuppressLint;
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.tools.HexUtil;
import com.dayu.baselibrary.utils.MornyUtil;
import com.dayu.baselibrary.utils.TipUtil;
import com.dayu.qihealonelibrary.R;
import com.dayu.qihealonelibrary.card.UserCard;
import com.dayu.qihealonelibrary.databinding.ActivityRechargeQhaBinding;
import com.dayu.qihealonelibrary.dbBean.AdminDataBean;
import com.dayu.qihealonelibrary.dbBean.ElectricPriceBean;
import com.dayu.qihealonelibrary.dbBean.UserCardBean;
import com.dayu.qihealonelibrary.tools.NfcReadHelper;
import com.dayu.qihealonelibrary.utils.CardCommon;
import com.dayu.qihealonelibrary.utils.DeviceNumberUtils;
import com.dayu.qihealonelibrary.view.ProgressDialog;
import com.tencent.bugly.crashreport.CrashReport;
import java.util.Calendar;
import java.util.List;
/**
 * Copyright (C), 2023,
 * Author: zuo
 * Date: 2023-11-5 09:52
 * Description: 充值界面
 */
public class RechargeActivity extends BaseNfcActivity {
    Intent intent;
    ActivityRechargeQhaBinding binding;
    public static RechargeActivity rechargeActivity;
    AdminDataBean adminData;
    String userName;
    String cardNumber = null;
    UserCardBean userCardBean;
    int waterPrice;
    String rechageWater;//充值的水量
    ElectricPriceBean priceBean;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        try {
            binding = ActivityRechargeQhaBinding.inflate(LayoutInflater.from(this));
            setContentView(binding.getRoot());
            setPricePoint(binding.rechargeWater);
            rechargeActivity = this;
            waterPrice = baseDao.adminDao().findFirst().getWaterPrice();
            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() {
        String cardType = NfcReadHelper.getInstence(intent, this).getCradTypeAndCardNumber();
        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)) {
                setUserData(cardType, cardNumber, data);
                if(priceBean!=null){
                    binding.redRechargeElectric.setText("电量单价:"+priceBean.getPrice()+"元/度");
                }
            } else {
                TipUtil.show(this, "读取卡片失败,请重新贴卡");
            }
        } else {
            TipUtil.show(this, "卡片识别错误,请重试!");
        }
    }
    @SuppressLint("ResourceAsColor")
    private void setUserData(String cardType, String cardNumber, List<byte[]> data) {
        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 = "未刷卡关泵,当前不可充值";
            binding.rechargeLL.setVisibility(View.GONE);
            binding.rechargeRegistBtn.setVisibility(View.GONE);
            binding.redStatu.setTextColor(com.dayu.baselibrary.R.color.red);
        } else if (cardType.equalsIgnoreCase(CardCommon.USER_CARD_TYPE_3)) {
            state = "叠加充值";
            binding.rechargeLL.setVisibility(View.GONE);
            binding.rechargeRegistBtn.setVisibility(View.GONE);
        } else {
            TipUtil.show(this, "非用户卡,不能充值");
            return;
        }
        userCard = UserCard.getBean(data);
        List<UserCardBean> userCardBeans = baseDao.userCardDao().findUserName(cardNumber);
        AdminDataBean adminDataBean = baseDao.adminDao().findFirst();
        if (Integer.valueOf(adminDataBean.getAddressCode()) == userCard.getArerNumber()) {
            if (!userCardBeans.isEmpty()) {
                userCardBean = userCardBeans.get(0);
                this.userName = userCardBean.getUserName();
            } else {
                userCardBean = new UserCardBean();
                userCardBean.setCardNumber(cardNumber);
                userCardBean.setUserName("未知用户");
                userCardBean.setPhone("未知");
                userCardBean.setUserID("未知");
                userCardBean.setAddressCode(String.valueOf(userCard.getArerNumber()));
                userCardBean.setSerial(String.valueOf(userCard.getArerNumber()));
                this.userName = "未知用户";
            }
            binding.rechargeReadLL.setVisibility(View.GONE);
            binding.rechargeTextLL.setVisibility(View.VISIBLE);
            binding.userName.setText(userName);
            binding.redStatu.setText(state);
            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);
                    binding.redRechargeDate.setText("本卡最后购水日期:" + year + "年" + month + "月" + day + "日");
                } else {
                    binding.redRechargeDate.setText("本卡最后购水日期:无");
                }
                binding.redInitCode.setText(cardNumber);
//                binding.redRechargeNumber.setText("本卡充值次数:" + userCard.getRechargeTimes() + " 次");
//                binding.redTotalWater.setText("总用水量:" + MornyUtil.changeF2Y(userCard.getTotalWater()) + " 吨");
//                binding.redTotalPower.setText("总用电量:" + MornyUtil.changeF2Y(userCard.getTotalElectric()) + " 度");
                binding.redRemainderBlance.setText(MornyUtil.changeF2Y(userCard.getBalance()) + " 元");
                binding.redRemainderWater.setText("剩余水量:" + MornyUtil.changeF2Y(userCard.getSurplusWater()) + " 吨");
//                binding.redWaterPrice.setText("每立方米水价格:" + MornyUtil.changeF2Y(adminData.getWaterPrice()) + " 元");
            }
        } else {
            TipUtil.show(this, "非本区域卡\n不能充值!!!");
        }
    }
    private void initView() {
        try {
            adminData = baseDao.adminDao().findFirst();
            priceBean = baseDao.electricPriceDao().findFirst();
        } catch (Exception e) {
            e.printStackTrace();
            CrashReport.postCatchedException(e);
        }
        binding.rechargeRegistBtn.setOnClickListener(v -> {
            String morny = binding.rechargeWater.getText().toString();
            if (!TextUtils.isEmpty(morny)) {
                Intent intent = new Intent(RechargeActivity.this, NFCWreatActivity.class);
                //当前金额单位为元
                intent.putExtra("morny", morny);
                intent.putExtra("userName", userName);
                intent.putExtra("cardNumber", cardNumber);
                intent.putExtra("userCard", userCard);
                intent.putExtra("userCardBean", userCardBean);
//                intent.putExtra("rechageWater", rechageWater);
                startActivity(intent);
            } 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;
    }
}