左晓为主开发手持机充值管理机
zuoxiao
2025-02-28 765d5165b18938eaefbd5b3af00e8775bfb1a91f
qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/ReadCardAcitivy.java
@@ -7,29 +7,29 @@
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,
@@ -37,7 +37,7 @@
 * Date: 2023-11-10 19:52
 * Description: 读卡界面
 */
public class ReadCardAcitivy extends BaseNfcActivity {
public class ReadCardAcitivy extends QHOlineBaseNfcActivity {
    volatile UserCard userCard;
    ActivityRedCardQhlBinding redCardBinding;
@@ -48,6 +48,7 @@
    AdminDataBean adminData;
    String cardNumber;
    String userCardStr;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
@@ -56,38 +57,14 @@
    }
    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);
    }
    /**
@@ -102,8 +79,6 @@
        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();
@@ -122,14 +97,8 @@
                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 {
                    }
@@ -140,48 +109,11 @@
                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:
@@ -237,8 +169,7 @@
                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("卡片识别错误,请重试!");
@@ -285,5 +216,51 @@
        // 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("已挂失");
            }
        }
    }
}