| | |
| | | import android.content.Intent; |
| | | import android.nfc.NfcAdapter; |
| | | import android.os.Bundle; |
| | | import android.os.Handler; |
| | | import android.os.Message; |
| | | import android.text.TextUtils; |
| | | import android.view.LayoutInflater; |
| | | 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; |
| | | 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.tools.BcdUtil; |
| | | import com.dayu.recharge.tools.HexUtil; |
| | | import com.dayu.recharge.tools.NfcReadHelper; |
| | | import com.dayu.recharge.tools.WriteCardUtils; |
| | | import com.dayu.recharge.utils.CRC8; |
| | | import com.dayu.recharge.utils.DeviceNumberUtils; |
| | | 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 com.dayu.recharge.utils.TipUtil; |
| | | import com.dayu.recharge.view.ProgressDialog; |
| | | |
| | | import java.util.Arrays; |
| | | import java.util.Calendar; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | |
| | | |
| | | 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; |
| | | |
| | | Intent intent; |
| | | |
| | | @Override |
| | | protected void onCreate(Bundle savedInstanceState) { |
| | |
| | | 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() + ""); |
| | | } |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public void onNewIntent(Intent intent) { |
| | | startAnim(); |
| | | this.intent = intent; |
| | | ProgressDialog.show(this); |
| | | if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) { |
| | | readAllData(intent); |
| | | } |
| | | super.onNewIntent(intent); |
| | | } |
| | | |
| | | /** |
| | | * 读取全部数据 |
| | | */ |
| | | private void readAllData(Intent intent) { |
| | | |
| | | public void readAllData(Intent intent) { |
| | | NfcReadHelper.getInstence(intent) |
| | | .getAllData(new NfcReadHelper.NFCCallListback() { |
| | | .getOneSectorData(new NfcReadHelper.NFCCallListback() { |
| | | @Override |
| | | public void callBack(Map<String, List<byte[]>> data) { |
| | | Message message = new Message(); |
| | | public void callBack(List<byte[]> data) { |
| | | //获取1扇区数据 |
| | | List<byte[]> oneSector = data.get("1"); |
| | | if (oneSector != null && oneSector.size() > 0) { |
| | | byte cardType = oneSector.get(0)[0]; |
| | | if (data != null && data.size() > 0) { |
| | | byte cardType = data.get(0)[0]; |
| | | String cardTypeStr = HexUtil.byteToHex(cardType); |
| | | // switch (cardTypeStr){ |
| | | // case |
| | | // } |
| | | userCard = UserCard.getBean(oneSector); |
| | | message.what = USER_CRAD; |
| | | switch (cardTypeStr) { |
| | | case MyCommon.USER_CARD_TYPE_1: |
| | | case MyCommon.USER_CARD_TYPE_2: |
| | | case MyCommon.USER_CARD_TYPE_3: |
| | | userCard = UserCard.getBean(data); |
| | | selectBalance(userCard.getInitPeasantCode()); |
| | | break; |
| | | case MyCommon.MANAGE_CRAD: |
| | | viweGone(false); |
| | | redCardBinding.readCardTypeTV.setText("当前为管理卡"); |
| | | stopAnim(); |
| | | break; |
| | | case MyCommon.CLEAN_CARD_TYPE: |
| | | viweGone(false); |
| | | redCardBinding.readCardTypeTV.setText("当前为清零卡"); |
| | | stopAnim(); |
| | | break; |
| | | case MyCommon.REGISTERED_CARD_TYPE: |
| | | viweGone(false); |
| | | redCardBinding.readCardTypeTV.setText("当前为重新注册设备卡"); |
| | | stopAnim(); |
| | | |
| | | break; |
| | | case MyCommon.CLEAN_ALL_USER_CARD_TYPE: |
| | | viweGone(false); |
| | | redCardBinding.readCardTypeTV.setText("当前为删除全部用户卡"); |
| | | stopAnim(); |
| | | break; |
| | | case MyCommon.DOMAIN_CARD_TYPE: |
| | | viweGone(false); |
| | | redCardBinding.readCardTypeTV.setText("当前为设置域名卡"); |
| | | DomainCard domainCard = DomainCard.toBean(data); |
| | | redCardBinding.readCardDataTV.setText("序号:" + domainCard.getDomainNumber() + "\n" + "域名:" + domainCard.getDomainName() + "\n" + "端口号:" + domainCard.getPort()); |
| | | stopAnim(); |
| | | break; |
| | | case MyCommon.TEST_CARD_TYPE: |
| | | viweGone(false); |
| | | redCardBinding.readCardTypeTV.setText("当前为测试卡"); |
| | | stopAnim(); |
| | | break; |
| | | case MyCommon.CONFIGURATION_CARD_TYPE: |
| | | viweGone(false); |
| | | redCardBinding.readCardTypeTV.setText("当前为配置设备注册信息卡"); |
| | | stopAnim(); |
| | | break; |
| | | case MyCommon.CONFIGURATION_POWER_CARD_TYPE: |
| | | viweGone(false); |
| | | redCardBinding.readCardTypeTV.setText("当前配置水泵功率卡"); |
| | | ConfigurationPowerCard powerCard = ConfigurationPowerCard.toBean(data.get(0)); |
| | | redCardBinding.readCardDataTV.setText(powerCard.getPower()); |
| | | stopAnim(); |
| | | break; |
| | | default: |
| | | TipUtil.show(ReadCardAcitivy.this, "卡片无法识别"); |
| | | stopAnim(); |
| | | break; |
| | | } |
| | | |
| | | } else { |
| | | message.what = ERROR; |
| | | TipUtil.show(ReadCardAcitivy.this, "卡片无法识别"); |
| | | stopAnim(); |
| | | } |
| | | handler.sendMessage(message); |
| | | |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public void error() { |
| | | Message message = new Message(); |
| | | message.what = ERROR; |
| | | handler.sendMessage(message); |
| | | public void error(int code) { |
| | | switch (code) { |
| | | case MyCommon.ERROR_MOVE: |
| | | stopAnim(); |
| | | TipUtil.show("连接中断,请重新贴合卡片"); |
| | | break; |
| | | default: |
| | | stopAnim(); |
| | | TipUtil.show("卡片识别错误,请重试!"); |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | |
| | | Handler handler = new Handler(new Handler.Callback() { |
| | | @Override |
| | | 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()); |
| | | 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); |
| | | 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); |
| | | 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); |
| | | 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("当前为行政区域卡"); |
| | | 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("当前为设备序号卡"); |
| | | stopAnim(); |
| | | break; |
| | | default: |
| | | ToastUtil.show(ReadCardAcitivy.this, "卡片未注册"); |
| | | stopAnim(); |
| | | } |
| | | |
| | | 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); |
| | | redCardBinding.avi.show(); |
| | | // or avi.smoothToShow(); |
| | | } |
| | | |
| | | |
| | | void stopAnim() { |
| | | redCardBinding.avi.hide(); |
| | | ProgressDialog.dismiss(); |
| | | // or avi.smoothToHide(); |
| | | } |
| | | |
| | |
| | | * @param initPeasantCode 农户注册编号 |
| | | */ |
| | | private void selectBalance(String initPeasantCode) { |
| | | |
| | | BalanceSelecteRequestBean requestBean = new BalanceSelecteRequestBean(); |
| | | requestBean.setAFN("94"); |
| | | requestBean.setControl("01"); |
| | | String initCode = WSHelper.getInstance(this).get("initCode", ""); |
| | | String initCode = DeviceNumberUtils.getDeviceNumber(); |
| | | requestBean.setInitCode(initCode); |
| | | requestBean.setInitPeasantCode(initPeasantCode); |
| | | requestBean.setXuLie(SocketUtil.getXuLie(this)); |
| | |
| | | |
| | | try { |
| | | stateText = new StringBuffer(); |
| | | // stateText.append("状 态:"); |
| | | int balance = 0; |
| | | String name = null; |
| | | try { |
| | | //金额 |
| | | byte[] blanceByte = Arrays.copyOfRange(readData.getBodyBytes(), 3, 7); |
| | | balance = SocketUtil.get16to10LowHigh(blanceByte); |
| | | //姓名 |
| | | byte[] nameByte = Arrays.copyOfRange(readData.getBodyBytes(), 7, 19); |
| | | name = SocketUtil.fromHexString(SocketUtil.bytesToHexClean0(nameByte)); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | String state = BcdUtil.bcdToStr(readData.getBodyBytes()[2]); //BCD码00启用 01禁用 02隶属信息不符 03无此卡信息 04其它s |
| | | if ("00".equals(state)) { |
| | | userCard.setBalance(balance); |
| | | userCard.setState("00"); |
| | | |
| | | WriteCardUtils.setUser(intent, userCard); |
| | | stateText.append("启用"); |
| | | } else if ("01".equals(state)) { |
| | | userCard.setBalance(balance); |
| | | userCard.setState("01"); |
| | | WriteCardUtils.setUser(intent, userCard); |
| | | stateText.append("禁用"); |
| | | } else if ("02".equals(state)) { |
| | | stateText.append("隶属信息不符"); |
| | |
| | | } else if ("04".equals(state)) { |
| | | stateText.append("其它"); |
| | | } |
| | | //金额 |
| | | byte[] blanceByte = Arrays.copyOfRange(readData.getBodyBytes(), 3, 7); |
| | | int balance = SocketUtil.get16to10LowHigh(blanceByte); |
| | | //姓名 |
| | | byte[] nameByte = Arrays.copyOfRange(readData.getBodyBytes(), 7, 19); |
| | | 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(); |
| | | } |
| | | } else { |
| | | //校验CRC错误 |
| | | ToastUtil.show(ReadCardAcitivy.this, "开卡报文校验CRC错误"); |
| | | TipUtil.show(ReadCardAcitivy.this, "开卡报文校验CRC错误"); |
| | | } |
| | | stopAnim(); |
| | | } |
| | | |
| | | @Override |
| | | public void onSocketError(int code, String msg) { |
| | | ToastUtil.show(ReadCardAcitivy.this, msg); |
| | | TipUtil.show(ReadCardAcitivy.this, msg); |
| | | } |
| | | }); |
| | | |