package com.dayu.qihealonelibrary.activity; 
 | 
  
 | 
import android.content.Intent; 
 | 
import android.nfc.NfcAdapter; 
 | 
import android.os.Bundle; 
 | 
import android.text.TextUtils; 
 | 
import android.view.LayoutInflater; 
 | 
import android.view.View; 
 | 
  
 | 
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; 
 | 
  
 | 
import java.util.Calendar; 
 | 
import java.util.List; 
 | 
  
 | 
/** 
 | 
 * Copyright (C), 2023, 
 | 
 * Author: zuo 
 | 
 * Date: 2023-11-10 19:52 
 | 
 * Description: 读卡界面 
 | 
 */ 
 | 
public class ReadCardAcitivy extends BaseNfcActivity { 
 | 
  
 | 
    volatile UserCard userCard; 
 | 
    ActivityRedCardQhaBinding redCardBinding; 
 | 
  
 | 
  
 | 
    Intent intent; 
 | 
    ConfirmDialog confirmDialog; 
 | 
    AdminDataBean adminData; 
 | 
    String cardNumber; 
 | 
    String userCardStr; 
 | 
    @Override 
 | 
    protected void onCreate(Bundle savedInstanceState) { 
 | 
        super.onCreate(savedInstanceState); 
 | 
        redCardBinding = ActivityRedCardQhaBinding.inflate(LayoutInflater.from(this)); 
 | 
        setContentView(redCardBinding.getRoot()); 
 | 
    } 
 | 
  
 | 
  
 | 
    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) { 
 | 
        this.intent = intent; 
 | 
        ProgressDialog.show(this); 
 | 
        if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) { 
 | 
            readAllData(intent); 
 | 
        } 
 | 
        super.onNewIntent(intent); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 读取全部数据 
 | 
     */ 
 | 
  
 | 
    public void readAllData(Intent intent) { 
 | 
  
 | 
  
 | 
        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(); 
 | 
        String state = ""; 
 | 
        if (cardType.equalsIgnoreCase(CardCommon.USER_CARD_TYPE_1)) { 
 | 
            state = "终端写卡"; 
 | 
        } else if (cardType.equalsIgnoreCase(CardCommon.USER_CARD_TYPE_2)) { 
 | 
            state = "刷卡开泵后"; 
 | 
        } else if (cardType.equalsIgnoreCase(CardCommon.USER_CARD_TYPE_3)) { 
 | 
            state = "叠加充值"; 
 | 
        } 
 | 
        switch (cardType) { 
 | 
            case CardCommon.USER_CARD_TYPE_1: 
 | 
            case CardCommon.USER_CARD_TYPE_2: 
 | 
            case CardCommon.USER_CARD_TYPE_3: 
 | 
  
 | 
                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); 
 | 
                        } 
 | 
                    } else { 
 | 
  
 | 
                    } 
 | 
                } else { 
 | 
                    TipUtil.show("卡片识别错误,请重试!"); 
 | 
                } 
 | 
  
 | 
                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(); 
 | 
                } 
 | 
                break; 
 | 
            case CardCommon.CLEAN_CARD_TYPE: 
 | 
                viweGone(false); 
 | 
                redCardBinding.readCardTypeTV.setText("当前为清零卡"); 
 | 
                break; 
 | 
            case CardCommon.REGISTERED_CARD_TYPE: 
 | 
                viweGone(false); 
 | 
                redCardBinding.readCardTypeTV.setText("当前为重新注册设备卡"); 
 | 
                break; 
 | 
            case CardCommon.CLEAN_ALL_USER_CARD_TYPE: 
 | 
                viweGone(false); 
 | 
                redCardBinding.readCardTypeTV.setText("当前为删除全部用户卡"); 
 | 
                break; 
 | 
            case CardCommon.DOMAIN_CARD_TYPE: 
 | 
                viweGone(false); 
 | 
                redCardBinding.readCardTypeTV.setText("当前为设置域名卡"); 
 | 
                if (!data.isEmpty()) { 
 | 
                    DomainCard domainCard = DomainCard.toBean(data); 
 | 
                    assert domainCard != null; 
 | 
                    redCardBinding.readCardDataTV.setText("序号:" + domainCard.getDomainNumber() + "\n" + "域名:" + domainCard.getDomainName() + "\n" + "端口号:" + domainCard.getPort()); 
 | 
                } else { 
 | 
                    TipUtil.show("卡片识别错误,请重试!"); 
 | 
                } 
 | 
                break; 
 | 
            case CardCommon.TEST_CARD_TYPE: 
 | 
                viweGone(false); 
 | 
                redCardBinding.readCardTypeTV.setText("当前为测试卡"); 
 | 
                break; 
 | 
            case CardCommon.CONFIGURATION_CARD_TYPE: 
 | 
                viweGone(false); 
 | 
                redCardBinding.readCardTypeTV.setText("当前为配置设备注册信息卡"); 
 | 
                break; 
 | 
            case CardCommon.CONFIGURATION_POWER_CARD_TYPE: 
 | 
                viweGone(false); 
 | 
                redCardBinding.readCardTypeTV.setText("当前配置水泵功率卡"); 
 | 
                if (!data.isEmpty()) { 
 | 
                    ConfigurationPowerCard powerCard = ConfigurationPowerCard.toBean(data.get(0)); 
 | 
                    redCardBinding.readCardDataTV.setText(powerCard.getPower()); 
 | 
                } else { 
 | 
                    TipUtil.show("卡片识别错误,请重试!"); 
 | 
                } 
 | 
                break; 
 | 
            case CardCommon.BLACK: 
 | 
                viweGone(false); 
 | 
                redCardBinding.readCardTypeTV.setText("当前为黑卡"); 
 | 
                BlackCard blackCard = BlackCard.getBean(data); 
 | 
                redCardBinding.readCardDataTV.setText("当前黑卡用户号为:" + blackCard.getBlackCard()); 
 | 
                break; 
 | 
            case CardCommon.REGION: 
 | 
                viweGone(false); 
 | 
                redCardBinding.readCardTypeTV.setText("当前为区域表号卡"); 
 | 
                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"); 
 | 
                    redCardBinding.readCardDataTV.setText(stringBuilder.toString()); 
 | 
                } else { 
 | 
                    TipUtil.show("卡片识别错误,请重试!"); 
 | 
                } 
 | 
  
 | 
                break; 
 | 
            case CardCommon.ELECTRIC_PRICE: 
 | 
                viweGone(false); 
 | 
                redCardBinding.readCardTypeTV.setText("当前为电量单价卡"); 
 | 
                if (!data.isEmpty()) { 
 | 
                    ElectricPriceCard electricPriceCard = ElectricPriceCard.getBean(data); 
 | 
                    StringBuilder electricPriceBuilder = new StringBuilder(); 
 | 
                    electricPriceBuilder.append("电量单价:").append(electricPriceCard.getElectricPrice()); 
 | 
                    electricPriceBuilder.append("元"); 
 | 
                    redCardBinding.readCardDataTV.setText(electricPriceBuilder.toString()); 
 | 
                } else { 
 | 
                    TipUtil.show("卡片识别错误,请重试!"); 
 | 
                } 
 | 
                break; 
 | 
            default: 
 | 
                TipUtil.show(ReadCardAcitivy.this, "卡片无法识别"); 
 | 
                break; 
 | 
        } 
 | 
        stopAnim(); 
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
    private void viweGone(boolean isUSerCard) { 
 | 
        redCardBinding.readImgLL.setVisibility(View.GONE); 
 | 
        if (isUSerCard) { 
 | 
            redCardBinding.readCardTypeLL.setVisibility(View.GONE); 
 | 
            redCardBinding.readUserLL.setVisibility(View.VISIBLE); 
 | 
        } else { 
 | 
            redCardBinding.readCardTypeLL.setVisibility(View.VISIBLE); 
 | 
            redCardBinding.readUserLL.setVisibility(View.GONE); 
 | 
        } 
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
    void stopAnim() { 
 | 
        ProgressDialog.dismiss(); 
 | 
        // or avi.smoothToHide(); 
 | 
    } 
 | 
  
 | 
  
 | 
} 
 |