左晓为主开发手持机充值管理机
zuoxiao
2023-11-15 3502384043c282226c0dbc90a191806e007f1d17
app/src/main/java/com/dayu/recharge/activity/ReadCardAcitivy.java
@@ -10,6 +10,8 @@
import android.view.View;
import com.dayu.recharge.card.ConfigurationPowerCard;
import com.dayu.recharge.card.DomainCard;
import com.dayu.recharge.card.UserCard;
import com.dayu.recharge.databinding.ActivityRedCardBinding;
import com.dayu.recharge.dbBean.RechargeBean;
@@ -23,11 +25,13 @@
import com.dayu.recharge.tools.NfcReadHelper;
import com.dayu.recharge.utils.CRC8;
import com.dayu.recharge.utils.MornyUtil;
import com.dayu.recharge.utils.MyCommon;
import com.dayu.recharge.utils.SocketUtil;
import com.dayu.recharge.utils.ToastUtil;
import com.dayu.recharge.utils.WSHelper;
import java.util.Arrays;
import java.util.Calendar;
import java.util.List;
import java.util.Map;
@@ -41,13 +45,19 @@
    private static final int USER_CRAD = 1;
    private static final int MANAGE_CRAD = 2;
    private static final int CLEAN_CARD = 3;
    private static final int REGISTERED_CARD = 4;
    private static final int CLEAN_ALL_USER = 5;
    private static final int DOMAIN_CARD = 6;
    private static final int TEST_CARD = 7;
    private static final int CONFIGURATION_CARD = 8;
    private static final int CONFIGURATION_POWER_CARD = 9;
    private static final int PASS_WORD_CRAD = 10;
    private static final int ERROR = -1;
    UserCard userCard;
    UserCardBean waterCard;
    RechargeBean rechargeBean;
    //    农户注册编号
    volatile UserCard userCard;
    ActivityRedCardBinding redCardBinding;
    @Override
@@ -57,17 +67,29 @@
        setContentView(redCardBinding.getRoot());
    }
    private void setData(String statu) {
        String initCode = WSHelper.getInstance(this).get("initCode", "");
        if (TextUtils.isEmpty(initCode)) {
            ToastUtil.show(this, "设备注册号为空,请先设置IP和管理员地址");
            return;
        }
//        redCardBinding.redVillageNum.setText("设备序列号:" + initS.getANo() + "");
        redCardBinding.redName.setText("用 户 名:" + rechargeBean.getUserName());
        redCardBinding.redRemainderMorny.setText("剩余金额:" + rechargeBean.getBalance() + "" + "元");
        redCardBinding.redStatu.setText("状    态:" + statu);
    private void setUserData(String userName, int blance, String statu) {
        viweGone(true);
        redCardBinding.redName.setText("用户姓名:" + userName);
        redCardBinding.redRemainderBlance.setText("剩余金额:" + MornyUtil.changeF2Y(blance) + "元");
        redCardBinding.redStatu.setText("卡状态:" + statu);
        if (userCard != null) {
            redCardBinding.redInitCode.setText("用户注册编号:" + userCard.getInitPeasantCode());
            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);
                int hour = calendar.get(Calendar.HOUR_OF_DAY);
                int minute = calendar.get(Calendar.MINUTE);
                int second = calendar.get(Calendar.SECOND);
                redCardBinding.redRechargeDate.setText("本卡最后购水日期:" + year + month + day + " " + hour + ":" + minute + ":" + second);
            } else {
                redCardBinding.redRechargeDate.setText("本卡最后购水日期:无");
            }
            redCardBinding.redRechargeNumber.setText("本卡充值次数:" + userCard.getRechargeTimes() + "");
        }
    }
@@ -93,22 +115,52 @@
                        if (oneSector != null && oneSector.size() > 0) {
                            byte cardType = oneSector.get(0)[0];
                            String cardTypeStr = HexUtil.byteToHex(cardType);
//                            switch (cardTypeStr){
//                                case
//                            }
                            switch (cardTypeStr) {
                                case MyCommon.USER_CARD_TYPE_1:
                                case MyCommon.USER_CARD_TYPE_2:
                                case MyCommon.USER_CARD_TYPE_3:
                                    userCard = UserCard.getBean(oneSector);
                            message.what = USER_CRAD;
                                    message.what = USER_CRAD;
                                    break;
                                case MyCommon.MANAGE_CRAD:
                                    message.what = MANAGE_CRAD;
                                    break;
                                case MyCommon.CLEAN_CARD_TYPE:
                                    message.what = CLEAN_CARD;
                                    break;
                                case MyCommon.REGISTERED_CARD_TYPE:
                                    message.what = REGISTERED_CARD;
                                    break;
                                case MyCommon.CLEAN_ALL_USER_CARD_TYPE:
                                    message.what = CLEAN_ALL_USER;
                                    break;
                                case MyCommon.DOMAIN_CARD_TYPE:
                                    message.what = DOMAIN_CARD;
                                    message.obj = oneSector;
                                    break;
                                case MyCommon.TEST_CARD_TYPE:
                                    message.what = TEST_CARD;
                                    break;
                                case MyCommon.CONFIGURATION_CARD_TYPE:
                                    message.what = CONFIGURATION_CARD;
                                    break;
                                case MyCommon.CONFIGURATION_POWER_CARD_TYPE:
                                    message.what = CONFIGURATION_POWER_CARD;
                                    message.obj = oneSector.get(0);
                                    break;
                            }
                        } else {
                            message.what = ERROR;
                            message.what = MyCommon.ERROR;
                        }
                        handler.sendMessage(message);
                    }
                    @Override
                    public void error() {
                    public void error(int code) {
                        Message message = new Message();
                        message.what = ERROR;
                        message.what = code;
                        handler.sendMessage(message);
                    }
                });
@@ -119,63 +171,83 @@
        public boolean handleMessage(Message msg) {
            switch (msg.what) {
                case USER_CRAD:
                    redCardBinding.readImgLL.setVisibility(View.GONE);
                    redCardBinding.readUserLL.setVisibility(View.VISIBLE);
                    redCardBinding.readSysLL.setVisibility(View.GONE);
                    redCardBinding.readCleanLL.setVisibility(View.GONE);
                    redCardBinding.readInitLL.setVisibility(View.GONE);
//                    selectBalance(newUserCard.getPeasantCode());
                    selectBalance(userCard.getInitPeasantCode());
                    break;
                case MANAGE_CRAD:
                    redCardBinding.readImgLL.setVisibility(View.GONE);
                    redCardBinding.readUserLL.setVisibility(View.GONE);
                    redCardBinding.readSysLL.setVisibility(View.VISIBLE);
                    redCardBinding.readCleanLL.setVisibility(View.GONE);
                    redCardBinding.readInitLL.setVisibility(View.GONE);
                    viweGone(false);
                    redCardBinding.readCardTypeTV.setText("当前为管理卡");
                    stopAnim();
                    break;
                case 3:
                    redCardBinding.readImgLL.setVisibility(View.GONE);
                    redCardBinding.readUserLL.setVisibility(View.GONE);
                    redCardBinding.readSysLL.setVisibility(View.GONE);
                    redCardBinding.readCleanLL.setVisibility(View.VISIBLE);
                    redCardBinding.readInitLL.setVisibility(View.GONE);
                case CLEAN_CARD:
                    viweGone(false);
                    redCardBinding.readCardTypeTV.setText("当前为清零卡");
                    stopAnim();
                    break;
                case 4:
                    redCardBinding.readImgLL.setVisibility(View.GONE);
                    redCardBinding.readUserLL.setVisibility(View.GONE);
                    redCardBinding.readSysLL.setVisibility(View.GONE);
                    redCardBinding.readCleanLL.setVisibility(View.GONE);
                    redCardBinding.readInitLL.setVisibility(View.VISIBLE);
                case REGISTERED_CARD:
                    viweGone(false);
                    redCardBinding.readCardTypeTV.setText("当前为重新注册设备卡");
                    stopAnim();
                    break;
                case 5:
                    redCardBinding.readImgLL.setVisibility(View.GONE);
                    redCardBinding.readUserLL.setVisibility(View.GONE);
                    redCardBinding.readSysLL.setVisibility(View.GONE);
                    redCardBinding.readCleanLL.setVisibility(View.GONE);
                    redCardBinding.readInitLL.setVisibility(View.VISIBLE);
                    redCardBinding.readInitLL.setText("当前为行政区域卡");
                case CLEAN_ALL_USER:
                    viweGone(false);
                    redCardBinding.readCardTypeTV.setText("当前为删除全部用户卡");
                    stopAnim();
                    break;
                case 6:
                    redCardBinding.readImgLL.setVisibility(View.GONE);
                    redCardBinding.readUserLL.setVisibility(View.GONE);
                    redCardBinding.readSysLL.setVisibility(View.GONE);
                    redCardBinding.readCleanLL.setVisibility(View.GONE);
                    redCardBinding.readInitLL.setVisibility(View.VISIBLE);
                    redCardBinding.readInitLL.setText("当前为设备序号卡");
                case DOMAIN_CARD:
                    viweGone(false);
                    redCardBinding.readCardTypeTV.setText("当前为设置域名卡");
                    List<byte[]> data = (List<byte[]>) msg.obj;
                    DomainCard domainCard = DomainCard.toBean(data);
                    redCardBinding.readCardDataTV.setText("序号:" + domainCard.getDomainNumber() + "\n" + "域名:" + domainCard.getDomainName() + "\n" + "端口号:" + domainCard.getPort());
                    stopAnim();
                    break;
                case TEST_CARD:
                    viweGone(false);
                    redCardBinding.readCardTypeTV.setText("当前为测试卡");
                    stopAnim();
                    break;
                case CONFIGURATION_CARD:
                    viweGone(false);
                    redCardBinding.readCardTypeTV.setText("当前为配置设备注册信息卡");
                    stopAnim();
                    break;
                case CONFIGURATION_POWER_CARD:
                    viweGone(false);
                    redCardBinding.readCardTypeTV.setText("当前配置水泵功率卡");
                    byte[] powerData = (byte[]) msg.obj;
                    ConfigurationPowerCard powerCard = ConfigurationPowerCard.toBean(powerData);
                    redCardBinding.readCardDataTV.setText(powerCard.getPower());
                    stopAnim();
                    break;
                case PASS_WORD_CRAD:
                    viweGone(false);
                    redCardBinding.readCardTypeTV.setText("当前为密码卡");
                    stopAnim();
                    break;
                case MyCommon.ERROR_MOVE:
                    stopAnim();
                    ToastUtil.show("连接中断,请重新贴合卡片");
                    break;
                default:
                    ToastUtil.show(ReadCardAcitivy.this, "卡片未注册");
                    ToastUtil.show(ReadCardAcitivy.this, "卡片无法识别");
                    stopAnim();
                    break;
            }
            return false;
        }
    });
    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 startAnim() {
        redCardBinding.avi.setVisibility(View.VISIBLE);
@@ -192,7 +264,6 @@
     * @param initPeasantCode 农户注册编号
     */
    private void selectBalance(String initPeasantCode) {
        BalanceSelecteRequestBean requestBean = new BalanceSelecteRequestBean();
        requestBean.setAFN("94");
        requestBean.setControl("01");
@@ -230,12 +301,7 @@
                        String name = SocketUtil.fromHexString(SocketUtil.bytesToHexClean0(nameByte));
                        rechargeBean = new RechargeBean();
                        rechargeBean.setDate(System.currentTimeMillis());
                        rechargeBean.setUserName(name);
                        rechargeBean.setBalance(MornyUtil.changeF2Y(balance) + "");
//                        rechargeBean.setTotal_morn(ArithUtil.changeF2Y(userCard.getValue() + ""));
                        setData(stateText.toString());
                        setUserData(name, balance, stateText.toString());
                        stopAnim();
                    } catch (Exception e) {
                        e.printStackTrace();