package com.dayu.recharge.acitivity; import android.app.Dialog; import android.app.ProgressDialog; import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import com.dayu.recharge.MyApplication; import com.dayu.recharge.card.UserCard; import com.dayu.recharge.databinding.ActivityNewCardBinding; import com.dayu.recharge.dbBean.AdminDataBean; import com.dayu.recharge.dbBean.ElectricPriceBean; import com.dayu.recharge.dbBean.IpBean; import com.dayu.recharge.dbBean.UserCardBean; import com.dayu.recharge.net.SocketCallBack; import com.dayu.recharge.net.SocketData; import com.dayu.recharge.net.SocketNet; import com.dayu.recharge.socketBean.InitCardRequestBean; import com.dayu.recharge.tools.BcdUtil; import com.dayu.recharge.tools.HexUtil; import com.dayu.recharge.tools.Utils; import com.dayu.recharge.utils.CRC8; import com.dayu.recharge.utils.SocketUtil; import com.dayu.recharge.utils.ToastUtil; import com.dayu.recharge.utils.WSHelper; import java.sql.Date; import java.util.Arrays; /** * Copyright (C), 2023, * Author: zuo * Date: 2023-11-10 19:52 * Description: 新卡注册 */ public class NewCardActivity extends BaseNfcActivity { UserCardBean userCardBean; Dialog dialog; ActivityNewCardBinding newCardBinding; AdminDataBean adminData; static NewCardActivity newCardActivity; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); newCardActivity = this; newCardBinding = ActivityNewCardBinding.inflate(LayoutInflater.from(this)); setContentView(newCardBinding.getRoot()); setData(); initView(); } private void initView() { newCardBinding.newCardRegistBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String userName = newCardBinding.newCardName.getText().toString(); long date = System.currentTimeMillis(); String phone = newCardBinding.newCardPhone.getText().toString(); String userID = newCardBinding.newCardId.getText().toString().toUpperCase(); if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(phone) && !TextUtils.isEmpty(userID) ) { if (userName.length() <= 1 || !validateName(userName)) { ToastUtil.show(NewCardActivity.this, "请输入正确姓名"); return; } else if (phone.length() < 11) { ToastUtil.show(NewCardActivity.this, "请输入正确手机号"); return; } else if (!Utils.check(userID)) { ToastUtil.show(NewCardActivity.this, "请输入正确身份证号"); return; } else { dialog = ProgressDialog.show(NewCardActivity.this, "", "正在通信请稍后", true, true); userCardBean = new UserCardBean(); userCardBean.setUserName(userName); userCardBean.setDate(date); userCardBean.setSerial(adminData.getSerial()); userCardBean.setPhone(phone); userCardBean.setUserID(userID); initCard(); } } else { ToastUtil.show(NewCardActivity.this, "请输入完整内容"); } } }); } private void setData() { try { adminData = baseDao.adminDao().findFirst(); newCardBinding.newCardVillageNum.setText(adminData.getSerial()); } catch (Exception e) { e.printStackTrace(); } } /** * 开卡报文 */ private void initCard() { String initCode = WSHelper.getInstance(this).get("initCode", ""); if (TextUtils.isEmpty(initCode)) { ToastUtil.show(this, "设备注册号为空,请先设置IP和管理员地址"); IpBean ipBean = baseDao.ipDao().findFirst(); if (ipBean != null && adminData != null) { MyApplication.myApplication.initMachineRequestBean(ipBean.getIp(), ipBean.getPort(), adminData.getAddressCode()); } return; } InitCardRequestBean initCardRequestBean = new InitCardRequestBean(); initCardRequestBean.setControl("01"); initCardRequestBean.setInitCode(initCode); initCardRequestBean.setMachineCode(SocketUtil.getXuLie(this)); initCardRequestBean.setAFN("93"); initCardRequestBean.setOrderId(SocketUtil.getOrderId(NewCardActivity.this)); String userName = userCardBean.getUserName(); initCardRequestBean.setName(SocketUtil.str2HexStr(userName)); String phone = userCardBean.getPhone(); StringBuffer phoneBuffer = new StringBuffer(phone); for (int i = 0; i < 12 - phone.length(); i++) { phoneBuffer.insert(0, "0"); } initCardRequestBean.setPhone(phoneBuffer.toString()); String userId = userCardBean.getUserID(); initCardRequestBean.setIdCard(SocketUtil.str2HexStr(userId)); SocketNet.getInstance().sendTestMessage(initCardRequestBean.pack(), new SocketCallBack() { @Override public void onSocketResponse(SocketData readData) { dialog.dismiss(); if (CRC8.isCRC8(readData.getOriginDataBytes())) { String state = BcdUtil.bcdToStr(readData.getBodyBytes()[26]); //BCD码00成功01身份证已注册02其他原因失败 if (state.equalsIgnoreCase("00")) { String initPeasantCode = HexUtil.bytesToHex(Arrays.copyOfRange(readData.getBodyBytes(), 10, 26)); String serial = baseDao.adminDao().findFirst().getSerial(); UserCard userCard = new UserCard(); userCard.setRechargeTimes(0); ElectricPriceBean electricPriceBean = baseDao.electricPriceDao().findFirst(); if (electricPriceBean != null) { userCard.setElectricityPrice(electricPriceBean.getPrice()); } userCard.setState("00"); userCard.setBalance(0); userCard.setAddressCode(adminData.getAddressCode()); userCard.setInitPeasantCode(initPeasantCode); userCardBean.setSerial(serial); userCardBean.setInitPeasantCode(initPeasantCode); userCardBean.setUserName(newCardBinding.newCardName.getText().toString()); userCardBean.setPhone(newCardBinding.newCardPhone.getText().toString()); userCardBean.setUserID(newCardBinding.newCardId.getText().toString()); userCardBean.setDate(System.currentTimeMillis()); Intent intent = new Intent(NewCardActivity.this, NFCWreatActivity.class); intent.putExtra("userCard", userCard); intent.putExtra("dbUserCard", userCardBean); startActivity(intent); } else if (state.equalsIgnoreCase("01")) { ToastUtil.show(NewCardActivity.this, "开卡报文--身份证已注册"); } else if (state.equalsIgnoreCase("02")) { ToastUtil.show(NewCardActivity.this, "开卡报文--其他原因失败"); } } else { //校验CRC错误 ToastUtil.show(NewCardActivity.this, "开卡报文校验CRC错误"); } } @Override public void onSocketError(int code, String msg) { dialog.dismiss(); ToastUtil.show(NewCardActivity.this, msg); } }); } public boolean validateName(String name) { // 使用正则表达式匹配姓名 String regex = "^[\\u4e00-\\u9fa5]+$"; // 只允许中文字符 return name.matches(regex); } }