app/src/main/AndroidManifest.xml
@@ -78,7 +78,14 @@ <activity android:name=".activity.PassWordActivity" /> <activity android:name=".activity.MyActivity" /> <activity android:name=".activity.RechargeActivity" /> <activity android:name=".activity.RechargeActivity" android:launchMode="singleTop"> <intent-filter> <action android:name="android.nfc.action.TAG_DISCOVERED" /> <data android:mimeType="text/plain" /> </intent-filter> </activity> <activity android:name=".activity.ReadCardAcitivy" @@ -106,7 +113,8 @@ <activity android:name=".activity.DomainActivity" /> <activity android:name=".activity.ElectricPriceActivity" /> <activity android:name=".activity.IdentifyingActivity" /> <activity android:name=".activity.ReplacementActivity"/> <activity android:name=".activity.ReplacementActivity" /> <activity android:name=".activity.RechargeDetail" /> <meta-data app/src/main/java/com/dayu/recharge/MyApplication.java
@@ -9,9 +9,9 @@ import com.dayu.recharge.dao.BaseDaoSingleton; import com.dayu.recharge.dbBean.DeviceNumber; import com.dayu.recharge.dbBean.IpBean; import com.dayu.recharge.utils.ToastUtil; import com.easysocket.EasySocket; import com.easysocket.config.EasySocketOptions; import com.easysocket.connection.action.SocketStatus; import com.easysocket.entity.SocketAddress; import com.tencent.bugly.crashreport.CrashReport; import com.dayu.recharge.net.ScoketMessageProtocol; @@ -26,8 +26,7 @@ import com.dayu.recharge.utils.AidlUtil; 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 com.dayu.recharge.utils.TipUtil; import java.util.Arrays; @@ -100,7 +99,7 @@ createSocket(msg.obj + "", ipBean.getPort()); break; case 2: ToastUtil.show(MyApplication.this, "DNS解析失败"); ToastUtil.show("DNS解析失败"); break; } @@ -186,14 +185,14 @@ BaseDaoSingleton.getInstance(MyApplication.myApplication).deviceNumberDao().insert(deviceNumber); // WSHelper.getInstance(MyApplication.this).put("initCode", initCode); ToastUtil.show(MyApplication.this, "充值管理注册报文获取成功"); ToastUtil.show("充值管理注册报文获取成功"); } else { //校验CRC错误 ToastUtil.show(MyApplication.this, "确认收到注册报文状态失败"); ToastUtil.show("确认收到注册报文状态失败"); } } else { //校验CRC错误 ToastUtil.show(MyApplication.this, "确认收到注册报文校验CRC错误"); ToastUtil.show("确认收到注册报文校验CRC错误"); } } @@ -203,7 +202,7 @@ } }); } else {//校验CRC错误 ToastUtil.show(MyApplication.this, "充值管理注册报文校验CRC错误"); ToastUtil.show("充值管理注册报文校验CRC错误"); } } app/src/main/java/com/dayu/recharge/activity/AdminSetupActivity.java
@@ -12,7 +12,7 @@ import com.dayu.recharge.databinding.ActivityAdminSetupBinding; import com.dayu.recharge.dbBean.AdminDataBean; import com.dayu.recharge.dbBean.IpBean; import com.dayu.recharge.utils.ToastUtil; import com.dayu.recharge.utils.TipUtil; import com.example.pickerviewlibrary.picker.TeaPickerView; import com.example.pickerviewlibrary.picker.entity.PickerData; import com.example.pickerviewlibrary.picker.listener.OnPickerClickListener; @@ -54,19 +54,21 @@ adminBinding.setupOk.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (!TextUtils.isEmpty(adminBinding.adminName.getText().toString()) && !TextUtils.isEmpty(adminBinding.adminPhone.getText().toString()) && !TextUtils.isEmpty(adminData.getCun()) if (!TextUtils.isEmpty(adminData.getCun()) && !TextUtils.isEmpty(adminBinding.adminSerial.getText().toString()) ) { if (Integer.valueOf(adminBinding.adminSerial.getText().toString()) <= 16777215) { adminData.setName(adminBinding.adminName.getText().toString()); adminData.setPhone(adminBinding.adminPhone.getText().toString()); adminBinding.adminAddressCode.setText(adminData.getAddressCode()); adminData.setSerial(adminBinding.adminSerial.getText().toString()); baseDao.adminDao().insert(adminData); MyApplication.myApplication.initEasySocket(false, null); ToastUtil.show(AdminSetupActivity.this, "设置成功"); TipUtil.show(AdminSetupActivity.this, "设置成功", new TipUtil.TipListener() { @Override public void onCancle() { AdminSetupActivity.this.finish(); } }); setData(); IpBean ipBean = baseDao.ipDao().findFirst(); if (ipBean != null) { @@ -74,10 +76,10 @@ } } else { ToastUtil.show(AdminSetupActivity.this, "输入的数字不能超过16777215"); TipUtil.show(AdminSetupActivity.this, "输入的数字不能超过16777215"); } } else { ToastUtil.show(AdminSetupActivity.this, "请输入完整内容"); TipUtil.show(AdminSetupActivity.this, "请输入完整内容"); } } }); @@ -108,8 +110,7 @@ if (adminData != null) { this.adminData = adminData; adminBinding.adminSerial.setText(adminData.getSerial()); adminBinding.adminPhone.setText(adminData.getPhone()); adminBinding.adminName.setText(adminData.getName()); adminBinding.adminAddressCode.setText(adminData.getAddressCode()); adminBinding.adminAddress.setText(adminData.getSheng() + adminData.getShi() + adminData.getXian() + adminData.getZhen() + adminData.getCun()); } else { adminBinding.adminSerial.setText("12" + generateUniqueNumber(getSN())); @@ -151,6 +152,7 @@ adminData.setAddressCode(pickerData.getSecondText().getCode()); } adminBinding.adminAddress.setText(adminData.getSheng() + adminData.getShi() + adminData.getXian() + adminData.getZhen() + adminData.getCun()); adminBinding.adminAddressCode.setText(adminData.getAddressCode()); pickerView.dismiss(); } }); app/src/main/java/com/dayu/recharge/activity/BaseNfcActivity.java
@@ -9,8 +9,16 @@ import android.content.Context; import android.content.Intent; import android.nfc.NfcAdapter; import android.os.Handler; import android.os.Message; import com.dayu.recharge.utils.ToastUtil; import com.dayu.recharge.card.UserCard; import com.dayu.recharge.tools.NfcReadHelper; import com.dayu.recharge.utils.TipUtil; import com.tencent.bugly.crashreport.CrashReport; import java.util.List; import java.util.Map; /** * Author:Created by Ricky on 2017/8/25. @@ -22,8 +30,27 @@ * 将NFC标签卡靠近手机后部(NFC标签卡可网上自行购买) */ public class BaseNfcActivity extends BaseActivity { /** * 该卡已写入用户信息 */ public final static int HAS_USER = 1; /** * 该卡未写入用户信息 */ public final static int NO_USER = 2; /** * 充值 */ public final static int RECHARGE = 3; public final static int ERROR = -1; protected NfcAdapter mNfcAdapter; private PendingIntent mPendingIntent; volatile UserCard userCard; Handler handler; /** * onCreat->onStart->onResume->onPause->onStop->onDestroy @@ -71,13 +98,51 @@ */ protected Boolean ifNFCUse(Context context) { if (mNfcAdapter == null) { ToastUtil.show(context, "设备不支持NFC!"); TipUtil.show(context, "设备不支持NFC!"); return false; } if (mNfcAdapter != null && !mNfcAdapter.isEnabled()) { ToastUtil.show(context, "请在系统设置中先启用NFC功能!"); TipUtil.show(context, "请在系统设置中先启用NFC功能!"); return false; } return true; } /** * 读取全部数据 */ public void readAllData(Intent intent) { try { NfcReadHelper.getInstence(intent) .getAllData(new NfcReadHelper.NFCCallListback() { @Override public void callBack(Map<String, List<byte[]>> data) { Message message = new Message(); // 获取1扇区数据 List<byte[]> oneSector = data.get("1"); if (oneSector != null && oneSector.size() > 0) { userCard = UserCard.getBean(oneSector); message.what = RECHARGE; } else { message.what = ERROR; } if (handler != null) { handler.sendMessage(message); } } @Override public void error(int code) { if (handler != null) { Message message = new Message(); message.what = ERROR; handler.sendMessage(message); } } }); } catch (Exception e) { e.printStackTrace(); CrashReport.postCatchedException(e); } } } app/src/main/java/com/dayu/recharge/activity/DomainActivity.java
@@ -7,7 +7,7 @@ import com.dayu.recharge.databinding.ActivityDomainBinding; import com.dayu.recharge.dbBean.DomainBean; import com.dayu.recharge.utils.ToastUtil; import com.dayu.recharge.utils.TipUtil; /** * Created by Android Studio. @@ -34,27 +34,27 @@ String port = binding.port.getText().toString(); int portInt = 0; if (TextUtils.isEmpty(domainNumber)) { ToastUtil.show("请输入正确的域名序号"); TipUtil.show("请输入正确的域名序号"); return; } if (TextUtils.isEmpty(port)) { ToastUtil.show("请输入正确的端口号"); TipUtil.show("请输入正确的端口号"); return; } else { portInt = Integer.valueOf(port); } if (TextUtils.isEmpty(domain)) { ToastUtil.show("请输入域名"); TipUtil.show("请输入域名"); return; } else if (portInt <= 0 || portInt > 65535) { ToastUtil.show("请输入正确的端口号"); TipUtil.show("请输入正确的端口号"); return; } domainBean.setDomainNumber(domainNumber); domainBean.setDomain(domain); domainBean.setPort(portInt); baseDao.domainPortDao().insert(domainBean); ToastUtil.show("保存成功"); TipUtil.show("保存成功"); initData(); } }); app/src/main/java/com/dayu/recharge/activity/ElectricPriceActivity.java
@@ -7,7 +7,7 @@ import com.dayu.recharge.databinding.ActivityElectricPriceBinding; import com.dayu.recharge.dbBean.ElectricPriceBean; import com.dayu.recharge.utils.ToastUtil; import com.dayu.recharge.utils.TipUtil; /** * Copyright (C), 2023, @@ -33,10 +33,10 @@ if (!TextUtils.isEmpty(electricPriceBinding.electricNewNum.getText())) { electricPriceBean.setPrice(Float.parseFloat(electricPriceBinding.electricNewNum.getText().toString())); baseDao.electricPriceDao().insert(electricPriceBean); ToastUtil.show("保存成功"); TipUtil.show("保存成功"); initData(); } else { ToastUtil.show("请输入正确金额"); TipUtil.show("请输入正确金额"); } } }); app/src/main/java/com/dayu/recharge/activity/HomeActivity.java
@@ -8,7 +8,7 @@ import com.dayu.recharge.databinding.ActivityHomeBinding; import com.dayu.recharge.dbBean.AdminDataBean; import com.dayu.recharge.utils.ToastUtil; import com.dayu.recharge.utils.TipUtil; import com.permissionx.guolindev.PermissionX; @@ -20,12 +20,13 @@ */ public class HomeActivity extends BaseActivity { public static HomeActivity homeActivity; ActivityHomeBinding homeBinding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); homeActivity = this; homeBinding = ActivityHomeBinding.inflate(LayoutInflater.from(this)); setContentView(homeBinding.getRoot()); initView(); @@ -52,11 +53,11 @@ homeBinding.homeNewCard.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AdminDataBean adminData= baseDao.adminDao().findFirst(); if (adminData!=null){ AdminDataBean adminData = baseDao.adminDao().findFirst(); if (adminData != null) { startActivity(new Intent(HomeActivity.this, NewCardActivity.class)); }else { ToastUtil.show("请先设置管理员信息"); } else { TipUtil.show("请先设置管理员信息"); } } @@ -64,7 +65,13 @@ homeBinding.homeRecharge.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(HomeActivity.this, RechargeActivity.class)); AdminDataBean adminData = baseDao.adminDao().findFirst(); if (adminData != null) { startActivity(new Intent(HomeActivity.this, RechargeActivity.class)); } else { TipUtil.show("请先设置管理员信息"); } } }); homeBinding.homeRedCard.setOnClickListener(new View.OnClickListener() { app/src/main/java/com/dayu/recharge/activity/IdentifyingActivity.java
@@ -7,7 +7,7 @@ import com.dayu.recharge.databinding.ActivityIdentyfyingBinding; import com.dayu.recharge.dbBean.IdentityBean; import com.dayu.recharge.utils.ToastUtil; import com.dayu.recharge.utils.TipUtil; /** * Created by Android Studio. @@ -41,9 +41,9 @@ if (!TextUtils.isEmpty(data)){ myIdentityBean.setIdentity(binding.electricOldNumber.getText().toString()); baseDao.identityDao().insert(myIdentityBean); ToastUtil.show("保存成功"); TipUtil.show("保存成功"); }else { ToastUtil.show("请输入卡标识"); TipUtil.show("请输入卡标识"); } } app/src/main/java/com/dayu/recharge/activity/MyActivity.java
@@ -16,8 +16,7 @@ import com.dayu.recharge.net.SocketNet; import com.dayu.recharge.utils.DeviceNumberUtils; import com.dayu.recharge.utils.ExcelUtil; import com.dayu.recharge.utils.ToastUtil; import com.dayu.recharge.utils.WSHelper; import com.dayu.recharge.utils.TipUtil; import com.dayu.recharge.view.PassWordDialog; import com.dayu.recharge.view.datepicker.CustomDatePicker; import com.dayu.recharge.view.datepicker.DateFormatUtils; @@ -143,7 +142,7 @@ String[] title; String fileName; if (listData == null || listData.size() == 0) { ToastUtil.show(MyActivity.this, "记录为空"); TipUtil.show(MyActivity.this, "记录为空"); return; } if (isRechargeList) { @@ -180,11 +179,11 @@ try { adminData = baseDao.adminDao().findFirst(); if (adminData != null) { myBinding.myAdminName.setText(adminData.getName()); myBinding.myAdminName.setText(adminData.getSheng() + adminData.getShi() + adminData.getXian() + adminData.getZhen() + adminData.getCun()); myBinding.myVillageNum.setText(adminData.getSerial()); } else { myBinding.myAdminName.setText("请点击管理员设置"); myBinding.myVillageNum.setText("请点击管理员设置"); myBinding.myAdminName.setText("请点击地址信息设置"); myBinding.myVillageNum.setText("请点击地址信息设置"); } StringBuilder msgData = new StringBuilder(); if (MyApplication.myApplication.isConncet) { @@ -239,7 +238,7 @@ public void onTimeSelected(long timestamp) { endTime = timestamp; if ((endTime < beginTime) && endTime != beginTime) { ToastUtil.show(MyActivity.this, "结束时间不能晚于开始时间"); TipUtil.show(MyActivity.this, "结束时间不能晚于开始时间"); } else { try { endTime = endTime + (1000 * 60 * 60 * 24) - 1; app/src/main/java/com/dayu/recharge/activity/NFCWreatActivity.java
@@ -6,6 +6,7 @@ import android.os.Message; import android.text.TextUtils; import android.view.LayoutInflater; import android.widget.Toast; import com.dayu.recharge.MyApplication; @@ -21,7 +22,6 @@ import com.dayu.recharge.card.UserCard; import com.dayu.recharge.databinding.ActivityWriteTextBinding; import com.dayu.recharge.dbBean.AdminDataBean; import com.dayu.recharge.dbBean.DeviceNumber; import com.dayu.recharge.dbBean.ElectricPriceBean; import com.dayu.recharge.dbBean.RechargeBean; import com.dayu.recharge.dbBean.UserCardBean; @@ -34,20 +34,18 @@ import com.dayu.recharge.tools.HexUtil; import com.dayu.recharge.tools.NFCWriteHelper; import com.dayu.recharge.tools.NfcReadHelper; import com.dayu.recharge.tools.WriteCardUtils; import com.dayu.recharge.utils.AidlUtil; import com.dayu.recharge.utils.CRC8; import com.dayu.recharge.utils.DateUtil; import com.dayu.recharge.utils.DeviceNumberUtils; import com.dayu.recharge.utils.MornyUtil; 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.tencent.bugly.crashreport.CrashReport; import java.util.Arrays; import java.util.Calendar; import java.util.List; import java.util.Map; /** * Copyright (C), 2023, @@ -57,21 +55,6 @@ */ public class NFCWreatActivity extends BaseNfcActivity { /** * 该卡已写入用户信息 */ public final static int HAS_USER = 1; /** * 该卡未写入用户信息 */ public final static int NO_USER = 2; /** * 充值 */ public final static int RECHARGE = 3; public final static int ERROR = -1; boolean cleanFlag = false; boolean userFlag = false; @@ -92,6 +75,7 @@ String morny; String userName; AdminDataBean adminData; RechargeBean rechargeBean; Intent intent; @@ -99,7 +83,6 @@ RegisteredCard registeredCard; CleanUserCard cleanUserCard; volatile UserCard userCard; ManageCard manageCard; DomainCard domainCard; @@ -116,6 +99,11 @@ * 是否是用户卡,假如是用户卡的话需要检测卡片是否已经开过户,假如已开户则报错不能再写卡 */ boolean isUser = false;// //是否是充值过程 boolean isRecharge = false; //充值通信是否完成 boolean rechargeIsOk = false; ActivityWriteTextBinding binding; @Override @@ -124,7 +112,7 @@ try { binding = ActivityWriteTextBinding.inflate(LayoutInflater.from(this)); setContentView(binding.getRoot()); initView(); nfcWreatActivity = this; getData(); baseApp = (MyApplication) getApplication(); @@ -134,12 +122,36 @@ } } private void initView() { handler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { switch (msg.what) { case HAS_USER://判断已写入用户 binding.textView.setText("该卡已经写入用户信息,请更换卡片"); binding.textView.setTextColor(getResources().getColor(R.color.red)); stopAnim(); break; case NO_USER://没有写过用户继续保存 saveData(); break; default: stopAnim(); TipUtil.show(NFCWreatActivity.this, "卡片读取失败"); break; } return false; } }); } private void getData() { try { if (this.getIntent().hasExtra("userCard")) { userCard = (UserCard) this.getIntent().getSerializableExtra("userCard"); isUser = true; } if (this.getIntent().hasExtra("cleanCard")) { cleanCard = (CleanCard) this.getIntent().getSerializableExtra("cleanCard"); @@ -155,6 +167,7 @@ } if (this.getIntent().hasExtra("dbUserCard")) { userCardBean = (UserCardBean) this.getIntent().getSerializableExtra("dbUserCard"); isUser = true; } if (this.getIntent().hasExtra("cleanUserCard")) { cleanUserCard = (CleanUserCard) this.getIntent().getSerializableExtra("cleanUserCard"); @@ -177,8 +190,13 @@ binding.cardData.setText("制作配置水泵功率卡"); } if (this.getIntent().hasExtra("morny")) { startAnim(); isRecharge = true; morny = this.getIntent().getStringExtra("morny"); userName = this.getIntent().getStringExtra("userName"); binding.cardData.setText("充值金额:" + morny + "元"); // 充值逻辑 recharge(userCard.getInitPeasantCode(), userName, "启用"); } try { @@ -239,8 +257,8 @@ || domainCard != null || testCard != null || configureDeviceRegistrationCrad != null || configurationPowerCard != null) { if (userCard != null) { setUser(intent, userCard); if (userCard != null && TextUtils.isEmpty(morny)) { userFlag = WriteCardUtils.setUser(intent, userCard); } if (cleanCard != null) { setClean(intent, cleanCard); @@ -269,19 +287,14 @@ if ((configPowerFlag || configDeviceRegiestFlag || testCardFlag || domainCrdFlag || userFlag || cleanFlag || manageCardFlag || registeredFlag || administrativeCardFlag || cleanUserCardFlag)) { try { if (userFlag && userCardBean != null) { ToastUtil.show(this, "注册成功"); NFCWreatActivity.this.finish(); if (NewCardActivity.newCardActivity != null) { NewCardActivity.newCardActivity.finish(); } //用户卡 startDetailActivity(userCardBean.getUserName(), "启用"); } else if (!TextUtils.isEmpty(morny)) { NFCWreatActivity.this.finish(); ToastUtil.show(this, "充值成功"); TipUtil.show("充值成功"); } else { NFCWreatActivity.this.finish(); ToastUtil.show(this, "写卡成功"); TipUtil.show("写卡成功"); } } catch (Exception e) { @@ -289,17 +302,19 @@ CrashReport.postCatchedException(e); } } else { ToastUtil.show(this, "写卡失败"); TipUtil.show("写卡失败"); } stopAnim(); } else if (!TextUtils.isEmpty(morny)) { readAllData(intent); } else if (userCard == null && userCardBean != null) { } // else if (!TextUtils.isEmpty(morny)) { // // } else if (userCard == null && userCardBean != null) { //补卡逻辑 selectBalance(userCardBean.getInitPeasantCode()); } else { stopAnim(); ToastUtil.show(this, "参数错误"); TipUtil.show(this, "参数错误"); } } catch (Exception e) { e.printStackTrace(); @@ -309,11 +324,19 @@ @Override public void onNewIntent(Intent intent) { super.onNewIntent(intent); try { this.intent = intent; startAnim(); if (isUser) { checkHasUser(); } else if (isRecharge) { if (rechargeIsOk) { rechargeWrratCard(); } else { Toast.makeText(this, "正在通信请稍后", Toast.LENGTH_SHORT).show(); } } else { saveData(); } @@ -322,65 +345,6 @@ CrashReport.postCatchedException(e); } } /** * 读取全部数据 */ private void readAllData(Intent intent) { try { NfcReadHelper.getInstence(intent) .getAllData(new NfcReadHelper.NFCCallListback() { @Override public void callBack(Map<String, List<byte[]>> data) { Message message = new Message(); // 获取1扇区数据 List<byte[]> oneSector = data.get("1"); if (oneSector != null && oneSector.size() > 0) { userCard = UserCard.getBean(oneSector); message.what = RECHARGE; } else { message.what = ERROR; } handler.sendMessage(message); } @Override public void error(int code) { Message message = new Message(); message.what = ERROR; handler.sendMessage(message); } }); } catch (Exception e) { e.printStackTrace(); CrashReport.postCatchedException(e); } } Handler handler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { switch (msg.what) { case HAS_USER://判断已写入用户 ToastUtil.show(NFCWreatActivity.this, "该卡已经写入用户信息,请更换卡片"); break; case NO_USER://没有写过用户继续保存 saveData(); break; case RECHARGE://充值流程 selectBalance(userCard.getInitPeasantCode()); break; default: stopAnim(); ToastUtil.show(NFCWreatActivity.this, "卡片读取失败"); break; } return false; } }); /** @@ -426,7 +390,7 @@ //充值上传(Socket) private void recharge(String initPeasantCode) { private void recharge(String initPeasantCode, String name, String statu) { try { RechargeRequestBean rechargeRequestBean = new RechargeRequestBean(); rechargeRequestBean.setControl("01"); @@ -436,46 +400,61 @@ rechargeRequestBean.setAFN("95"); rechargeRequestBean.setInitPeasantCode(initPeasantCode); rechargeRequestBean.setBalance(morny); rechargeRequestBean.setOrderId(SocketUtil.getOrderId(NFCWreatActivity.this)); SocketNet.getInstance().sendTestMessage(rechargeRequestBean.pack(), new SocketCallBack() { @Override public void onSocketResponse(SocketData readData) { //金额 byte[] blanceByte = Arrays.copyOfRange(readData.getBodyBytes(), 3, 7); int balance = SocketUtil.get16to10LowHigh(blanceByte); //姓名 byte[] nameByte = Arrays.copyOfRange(readData.getBodyBytes(), 7, 19); userName = SocketUtil.fromHexString(SocketUtil.bytesToHexClean0(nameByte)); byte[] orderByte = Arrays.copyOfRange(readData.getBodyBytes(), 19, 27); String orderId = BcdUtil.bcdToStr(orderByte); if (CRC8.isCRC8(readData.getOriginDataBytes())) { String state = BcdUtil.bcdToStr(readData.getBodyBytes()[2]); //00启用01禁用02隶属信息不符03无此卡信息04其它 if ("00".equalsIgnoreCase(state)) { rechargeIsOk = true; binding.cardData.setText("充值通信完成,请帖卡充值"); rechargeBean = new RechargeBean(); rechargeBean.setDate(System.currentTimeMillis()); rechargeBean.setMorny(morny); rechargeBean.setUserName(name); rechargeBean.setSerial(adminData.getSerial()); userCard.setRechargeDate(Calendar.getInstance()); rechargeBean.setBalance(MornyUtil.changeF2Y(balance + MornyUtil.changeY2F(morny)) + ""); rechargeBean.setInitPeasantCode(initPeasantCode); rechargeBean.setOrderID(orderId); try { baseDao.rechargeDao().insert(rechargeBean); } catch (Exception e) { e.printStackTrace(); } userCard.setRechargeTimes(userCard.getRechargeTimes() + 1); setUser(intent, userCard); // 打印相关 setPrinterData(rechargeBean); ToastUtil.show(NFCWreatActivity.this, "写卡成功"); RechargeActivity.rechargeActivity.finish(); NFCWreatActivity.nfcWreatActivity.finish(); } else if ("01".equalsIgnoreCase(state)) { userCard.setState("01"); userFlag = WriteCardUtils.setUser(intent, userCard); NFCWreatActivity.this.finish(); ToastUtil.show(NFCWreatActivity.this, "充值报文错误-禁用"); TipUtil.show("充值报文错误-禁用"); } else if ("02".equalsIgnoreCase(state)) { ToastUtil.show(NFCWreatActivity.this, "充值报文错误-隶属信息不符"); TipUtil.show("充值报文错误-隶属信息不符"); NFCWreatActivity.this.finish(); } else if ("03".equalsIgnoreCase(state)) { ToastUtil.show(NFCWreatActivity.this, "充值报文错误-无此卡信息"); TipUtil.show("充值报文错误-无此卡信息"); NFCWreatActivity.this.finish(); } else { ToastUtil.show(NFCWreatActivity.this, "充值报文错误-其它"); TipUtil.show("充值报文错误-其它"); NFCWreatActivity.this.finish(); } } else { //校验CRC错误 ToastUtil.show(NFCWreatActivity.this, "充值报文错误校验CRC错误"); TipUtil.show(NFCWreatActivity.this, "充值报文错误校验CRC错误"); NFCWreatActivity.this.finish(); } stopAnim(); @@ -484,7 +463,7 @@ @Override public void onSocketError(int code, String msg) { stopAnim(); ToastUtil.show(NFCWreatActivity.this, msg); TipUtil.show(NFCWreatActivity.this, msg); } }); } catch (Exception e) { @@ -494,13 +473,31 @@ } private void setmanageCard(Intent intent, final ManageCard manageCard) { NFCWriteHelper.getInstence(intent).writeData(manageCard.toZeroByte(), 1, 0, new NFCWriteHelper.NFCCallback() { @Override public void isSusses(boolean flag) { manageCardFlag = flag; //往卡内写充值后的数据 private void rechargeWrratCard() { UserCard userCardold = NfcReadHelper.getInstence(intent).getUserCardData(); if (userCardold != null) { //判断是否充值的是一个卡 if (userCard.getInitPeasantCode().equals(userCardold.getInitPeasantCode())) { userCard.setState("00"); userFlag = WriteCardUtils.setUser(intent, userCard); // 打印相关 if (userFlag) { setPrinterData(rechargeBean); startDetailActivity(userName, "启用"); } else { TipUtil.show(NFCWreatActivity.this, "写卡失败,请重新再试"); } } else { TipUtil.show(NFCWreatActivity.this, "读取的卡和充值的卡不一致"); } }); } else { } } private void setmanageCard(Intent intent, final ManageCard manageCard) { manageCardFlag = NFCWriteHelper.getInstence(intent).writeData(manageCard.toZeroByte(), 1, 0); } /** @@ -510,41 +507,9 @@ * @param clearOrInitCard */ private void setClean(Intent intent, final CleanCard clearOrInitCard) { NFCWriteHelper.getInstence(intent).writeData(clearOrInitCard.toByte(), 1, 0, new NFCWriteHelper.NFCCallback() { @Override public void isSusses(boolean flag) { cleanFlag = flag; } }); cleanFlag = NFCWriteHelper.getInstence(intent).writeData(clearOrInitCard.toByte(), 1, 0); } //向卡写入用户信息 private void setUser(Intent intent, UserCard userCard) { NFCWriteHelper.getInstence(intent).writeData(userCard.getZeroBytes(), 1, 0, new NFCWriteHelper.NFCCallback() { @Override public void isSusses(boolean flag) { userFlag = flag; } }); if (!userFlag) { return; } NFCWriteHelper.getInstence(intent).writeData(userCard.getOneBytes(), 1, 1, new NFCWriteHelper.NFCCallback() { @Override public void isSusses(boolean flag) { userFlag = flag; } }); if (!userFlag) { return; } NFCWriteHelper.getInstence(intent).writeData(userCard.getTwoBytes(), 1, 2, new NFCWriteHelper.NFCCallback() { @Override public void isSusses(boolean flag) { userFlag = flag; } }); } /** * 重新注册设备卡 @@ -553,12 +518,7 @@ * @param registeredCard */ private void setRegisteredCard(Intent intent, RegisteredCard registeredCard) { NFCWriteHelper.getInstence(intent).writeData(registeredCard.toByte(), 1, 0, new NFCWriteHelper.NFCCallback() { @Override public void isSusses(boolean flag) { registeredFlag = flag; } }); registeredFlag = NFCWriteHelper.getInstence(intent).writeData(registeredCard.toByte(), 1, 0); } /** @@ -568,12 +528,7 @@ * @param cleanUserCard */ private void setCleanUserCard(Intent intent, CleanUserCard cleanUserCard) { NFCWriteHelper.getInstence(intent).writeData(cleanUserCard.toByte(), 1, 0, new NFCWriteHelper.NFCCallback() { @Override public void isSusses(boolean flag) { cleanUserCardFlag = flag; } }); cleanUserCardFlag = NFCWriteHelper.getInstence(intent).writeData(cleanUserCard.toByte(), 1, 0); } /** @@ -584,30 +539,15 @@ */ private void setDomainCard(Intent intent, DomainCard domainCard) { try { NFCWriteHelper.getInstence(intent).writeData(domainCard.getZeroByte(), 1, 0, new NFCWriteHelper.NFCCallback() { @Override public void isSusses(boolean flag) { domainCrdFlag = flag; } }); domainCrdFlag = NFCWriteHelper.getInstence(intent).writeData(domainCard.getZeroByte(), 1, 0); if (!domainCrdFlag) { return; } NFCWriteHelper.getInstence(intent).writeData(domainCard.getOneByte(), 1, 1, new NFCWriteHelper.NFCCallback() { @Override public void isSusses(boolean flag) { domainCrdFlag = flag; } }); domainCrdFlag = NFCWriteHelper.getInstence(intent).writeData(domainCard.getOneByte(), 1, 1); if (!domainCrdFlag) { return; } NFCWriteHelper.getInstence(intent).writeData(domainCard.getTwoByte(), 1, 2, new NFCWriteHelper.NFCCallback() { @Override public void isSusses(boolean flag) { domainCrdFlag = flag; } }); domainCrdFlag = NFCWriteHelper.getInstence(intent).writeData(domainCard.getTwoByte(), 1, 2); } catch (Exception e) { domainCrdFlag = false; throw new RuntimeException(e); @@ -615,38 +555,41 @@ } private void setTestCard(Intent intent, TestCard testCard) { NFCWriteHelper.getInstence(intent).writeData(testCard.toByte(), 1, 0, new NFCWriteHelper.NFCCallback() { @Override public void isSusses(boolean flag) { testCardFlag = flag; } }); testCardFlag = NFCWriteHelper.getInstence(intent).writeData(testCard.toByte(), 1, 0); } private void setConfigDeviceRegiest(Intent intent, ConfigureDeviceRegistrationCrad configureDeviceRegistrationCrad) { NFCWriteHelper.getInstence(intent).writeData(configureDeviceRegistrationCrad.toByte(), 1, 0, new NFCWriteHelper.NFCCallback() { @Override public void isSusses(boolean flag) { configDeviceRegiestFlag = flag; } }); configDeviceRegiestFlag = NFCWriteHelper.getInstence(intent).writeData(configureDeviceRegistrationCrad.toByte(), 1, 0); } private void setConfigurationPower(Intent intent, ConfigurationPowerCard configurationPowerCard) { try { NFCWriteHelper.getInstence(intent).writeData(configurationPowerCard.toByte(), 1, 0, new NFCWriteHelper.NFCCallback() { @Override public void isSusses(boolean flag) { configPowerFlag = flag; } }); configPowerFlag = NFCWriteHelper.getInstence(intent).writeData(configurationPowerCard.toByte(), 1, 0); } catch (Exception e) { configPowerFlag = false; throw new RuntimeException(e); } } private void startDetailActivity(String userName, String statu) { Intent detail = new Intent(this, RechargeDetail.class); detail.putExtra("userName", userName); detail.putExtra("statu", statu); detail.putExtra("userCard", userCard); if (!TextUtils.isEmpty(morny)) { detail.putExtra("morny", morny); } startActivity(detail); if (NewCardActivity.newCardActivity != null) { NewCardActivity.newCardActivity.finish(); } if (RechargeActivity.rechargeActivity != null) { RechargeActivity.rechargeActivity.finish(); } NFCWreatActivity.nfcWreatActivity.finish(); } /** * 查询余额 @@ -672,7 +615,6 @@ try { stateText = new StringBuffer(); stateText.append("状 态:"); String state = BcdUtil.bcdToStr(readData.getBodyBytes()[2]); //BCD码00启用 01禁用 02隶属信息不符 03无此卡信息 04其它s if (userCard == null) { userCard = new UserCard(); @@ -691,57 +633,32 @@ userCard.setAddressCode(adminData.getAddressCode()); userCard.setInitPeasantCode(initPeasantCode); } //只有启动状态才能充值 //金额 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)); if ("00".equals(state)) { //只有启动状态才能充值 //金额 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)); userCard.setBalance(balance); //与socket服务器通信后进行后续操作 if (!TextUtils.isEmpty(morny)) { //充值 rechargeBean = new RechargeBean(); rechargeBean.setDate(System.currentTimeMillis()); rechargeBean.setMorny(morny); if (userCardBean != null) { rechargeBean.setUserName(userCardBean.getUserName()); } else { rechargeBean.setUserName(name); } List<UserCardBean> userCardBeans = baseDao.userCardDao().findAll(); String userId = ""; if (userCardBeans != null) { for (int i = 0; i < userCardBeans.size(); i++) { if (initPeasantCode.equalsIgnoreCase(userCardBeans.get(i).getInitPeasantCode())) { userId = userCardBeans.get(i).getUserID(); } } } rechargeBean.setSerial(adminData.getSerial()); userCard.setRechargeDate(Calendar.getInstance()); rechargeBean.setBalance(MornyUtil.changeF2Y(balance + MornyUtil.changeY2F(morny)) + ""); rechargeBean.setUserId(userId); recharge(initPeasantCode); } else { //补卡逻辑 setUser(intent, userCard); if (userFlag) { NFCWreatActivity.this.finish(); ToastUtil.show(NFCWreatActivity.this, "补卡成功"); } } stateText.append("启用"); userCard.setBalance(balance); userCard.setState("00"); //补卡逻辑 userFlag = WriteCardUtils.setUser(intent, userCard); if (userFlag) { NFCWreatActivity.this.finish(); TipUtil.show(NFCWreatActivity.this, "补卡成功"); } return; } else if ("01".equals(state)) { stateText.append("禁用"); userCard.setState("01"); setUser(intent, userCard); userCard.setBalance(balance); userFlag = WriteCardUtils.setUser(intent, userCard); startDetailActivity(name, stateText.toString()); } else if ("02".equals(state)) { stateText.append("隶属信息不符"); } else if ("03".equals(state)) { @@ -749,21 +666,23 @@ } else if ("04".equals(state)) { stateText.append("其它"); } ToastUtil.show(NFCWreatActivity.this, stateText.toString()); stopAnim(); binding.cardData.setText(stateText); TipUtil.show(NFCWreatActivity.this, stateText.toString()); } catch (Exception e) { e.printStackTrace(); stopAnim(); } } else { //校验CRC错误 ToastUtil.show(NFCWreatActivity.this, "开卡报文校验CRC错误"); TipUtil.show(NFCWreatActivity.this, "开卡报文校验CRC错误"); } } @Override public void onSocketError(int code, String msg) { stopAnim(); ToastUtil.show(NFCWreatActivity.this, msg); TipUtil.show(NFCWreatActivity.this, msg); } }); } catch (Exception e) { app/src/main/java/com/dayu/recharge/activity/NewCardActivity.java
@@ -29,8 +29,7 @@ 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 com.dayu.recharge.utils.TipUtil; import com.permissionx.guolindev.PermissionX; import org.json.JSONException; @@ -67,7 +66,8 @@ } private void initView() { newCardBinding.newCardId.setFilters(new InputFilter[] { new AlphaNumericXFilter(),new InputFilter.LengthFilter(18) }); newCardBinding.newCardName.setFilters(new InputFilter[]{new ChineseInputFilter()}); newCardBinding.newCardId.setFilters(new InputFilter[]{new AlphaNumericXFilter(), new InputFilter.LengthFilter(18)}); //身份证识别 newCardBinding.newCardScanBtn.setOnClickListener(new View.OnClickListener() { @Override @@ -91,13 +91,13 @@ && !TextUtils.isEmpty(phone) && !TextUtils.isEmpty(userID) ) { if (userName.length() <= 1 || !validateName(userName)) { ToastUtil.show(NewCardActivity.this, "请输入正确姓名"); TipUtil.show(NewCardActivity.this, "请输入正确姓名"); return; } else if (phone.length() < 11) { ToastUtil.show(NewCardActivity.this, "请输入正确手机号"); TipUtil.show(NewCardActivity.this, "请输入正确手机号"); return; } else if (!Utils.check(userID)) { ToastUtil.show(NewCardActivity.this, "请输入正确身份证号"); TipUtil.show(NewCardActivity.this, "请输入正确身份证号"); return; } else { dialog = ProgressDialog.show(NewCardActivity.this, "", "正在通信请稍后", true, true); @@ -111,7 +111,7 @@ } } else { ToastUtil.show(NewCardActivity.this, "请输入完整内容"); TipUtil.show(NewCardActivity.this, "请输入完整内容"); } } }); @@ -146,7 +146,7 @@ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK){ if (resultCode == RESULT_OK) { switch (requestCode) { case SCAN_IDCARD_REQUEST: String result = data.getStringExtra("OCRResult"); @@ -197,7 +197,7 @@ String initCode = DeviceNumberUtils.getDeviceNumber(); if (TextUtils.isEmpty(initCode)) { ToastUtil.show(this, "设备注册号为空,请先设置IP和管理员地址"); TipUtil.show(this, "设备注册号为空,请先设置IP和管理员地址"); IpBean ipBean = baseDao.ipDao().findFirst(); if (ipBean != null && adminData != null) { MyApplication.myApplication.initMachineRequestBean(ipBean.getIp(), ipBean.getPort(), adminData.getAddressCode()); @@ -259,21 +259,21 @@ intent.putExtra("dbUserCard", userCardBean); startActivity(intent); } else if (state.equalsIgnoreCase("01")) { ToastUtil.show(NewCardActivity.this, "开卡报文--身份证已注册"); TipUtil.show(NewCardActivity.this, "开卡报文--身份证已注册"); } else if (state.equalsIgnoreCase("02")) { ToastUtil.show(NewCardActivity.this, "开卡报文--其他原因失败"); TipUtil.show(NewCardActivity.this, "开卡报文--其他原因失败"); } } else { //校验CRC错误 ToastUtil.show(NewCardActivity.this, "开卡报文校验CRC错误"); TipUtil.show(NewCardActivity.this, "开卡报文校验CRC错误"); } } @Override public void onSocketError(int code, String msg) { dialog.dismiss(); ToastUtil.show(NewCardActivity.this, msg); TipUtil.show(NewCardActivity.this, msg); } }); @@ -300,4 +300,27 @@ return null; // 允许输入字符 } } public class ChineseInputFilter implements InputFilter { @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { StringBuilder builder = new StringBuilder(); for (int i = start; i < end; i++) { char currentChar = source.charAt(i); // 只允许汉字 if (isChineseCharacter(currentChar)) { builder.append(currentChar); } } return builder.toString(); } private boolean isChineseCharacter(char c) { // 这里使用Unicode范围判断是否为汉字 // 汉字的Unicode范围是:0x4e00 - 0x9fa5 return (c >= 0x4e00 && c <= 0x9fa5); } } } app/src/main/java/com/dayu/recharge/activity/NewCardListActivity.java
@@ -5,12 +5,11 @@ import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.widget.AdapterView; import com.dayu.recharge.adapter.NewCardAdapter; import com.dayu.recharge.databinding.ActivityNewcardListBinding; import com.dayu.recharge.dbBean.UserCardBean; import com.dayu.recharge.utils.ToastUtil; import com.dayu.recharge.utils.TipUtil; import com.dayu.recharge.view.datepicker.CustomDatePicker; import com.dayu.recharge.view.datepicker.DateFormatUtils; @@ -90,7 +89,7 @@ public void onTimeSelected(long timestamp) { endTime = timestamp; if ((endTime < beginTime) && endTime != beginTime) { ToastUtil.show(NewCardListActivity.this, "结束时间不能晚于开始时间"); TipUtil.show(NewCardListActivity.this, "结束时间不能晚于开始时间"); } else { try { endTime = endTime + (1000 * 60 * 60 * 24) - 1; app/src/main/java/com/dayu/recharge/activity/PassWordActivity.java
@@ -7,7 +7,7 @@ import com.dayu.recharge.databinding.ActivityPswBinding; import com.dayu.recharge.dbBean.PassWordBean; import com.dayu.recharge.utils.ToastUtil; import com.dayu.recharge.utils.TipUtil; import com.dayu.recharge.utils.WSMD5; /** @@ -44,16 +44,16 @@ if (pswBinding.pswNew.getText().toString().equals(pswBinding.pswNewAgin.getText().toString())) { passWordBean.setPassWord(pswBinding.pswNewAgin.getText().toString()); baseDao.loginPsDao().insert(passWordBean); ToastUtil.show(PassWordActivity.this, "密码修改完成"); TipUtil.show(PassWordActivity.this, "密码修改完成"); PassWordActivity.this.finish(); } else { ToastUtil.show(PassWordActivity.this, "两次输入的密码不一致"); TipUtil.show(PassWordActivity.this, "两次输入的密码不一致"); } } else { ToastUtil.show(PassWordActivity.this, "旧密码输入错误"); TipUtil.show(PassWordActivity.this, "旧密码输入错误"); } } else { ToastUtil.show(PassWordActivity.this, "请输完内容"); TipUtil.show(PassWordActivity.this, "请输完内容"); } app/src/main/java/com/dayu/recharge/activity/PowerActivity.java
@@ -7,7 +7,7 @@ import com.dayu.recharge.databinding.ActivityPowerBinding; import com.dayu.recharge.dbBean.PowerBean; import com.dayu.recharge.utils.ToastUtil; import com.dayu.recharge.utils.TipUtil; /** * Copyright (C), 2023, @@ -44,11 +44,11 @@ if (!TextUtils.isEmpty(data)) { powerBean.setPower(data); baseDao.powerDao().insert(powerBean); ToastUtil.show("保存成功"); TipUtil.show("保存成功"); // PowerActivity.this.finish(); initData(); } else { ToastUtil.show("请输入水泵功率"); TipUtil.show("请输入水泵功率"); } } }); app/src/main/java/com/dayu/recharge/activity/ReadCardAcitivy.java
@@ -5,7 +5,6 @@ import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; @@ -14,8 +13,6 @@ 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; @@ -23,13 +20,13 @@ 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 java.util.Arrays; import java.util.Calendar; @@ -60,6 +57,8 @@ volatile UserCard userCard; ActivityRedCardBinding redCardBinding; Intent intent; @Override protected void onCreate(Bundle savedInstanceState) { @@ -96,6 +95,8 @@ @Override public void onNewIntent(Intent intent) { super.onNewIntent(intent); this.intent = intent; startAnim(); if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) { readAllData(intent); @@ -105,7 +106,8 @@ /** * 读取全部数据 */ private void readAllData(Intent intent) { public void readAllData(Intent intent) { NfcReadHelper.getInstence(intent) .getAllData(new NfcReadHelper.NFCCallListback() { @Override @@ -227,10 +229,10 @@ break; case MyCommon.ERROR_MOVE: stopAnim(); ToastUtil.show("连接中断,请重新贴合卡片"); TipUtil.show("连接中断,请重新贴合卡片"); break; default: ToastUtil.show(ReadCardAcitivy.this, "卡片无法识别"); TipUtil.show(ReadCardAcitivy.this, "卡片无法识别"); stopAnim(); break; } @@ -281,11 +283,23 @@ try { stateText = new StringBuffer(); // 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)); setUserData(name, balance, stateText.toString()); 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("隶属信息不符"); @@ -294,29 +308,22 @@ } 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)); 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); } }); app/src/main/java/com/dayu/recharge/activity/RechargeActivity.java
@@ -10,10 +10,22 @@ import android.widget.EditText; import com.dayu.recharge.databinding.ActivityRechargeBinding; import com.dayu.recharge.dbBean.AdminDataBean; import com.dayu.recharge.net.SocketCallBack; import com.dayu.recharge.net.SocketData; import com.dayu.recharge.net.SocketNet; import com.dayu.recharge.socketBean.BalanceSelecteRequestBean; import com.dayu.recharge.tools.BcdUtil; 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.ToastUtil; import com.dayu.recharge.utils.WSHelper; import com.dayu.recharge.utils.MornyUtil; import com.dayu.recharge.utils.SocketUtil; import com.dayu.recharge.utils.TipUtil; import com.tencent.bugly.crashreport.CrashReport; import java.util.Arrays; /** @@ -22,11 +34,16 @@ * Date: 2023-11-5 09:52 * Description: 充值界面 */ public class RechargeActivity extends BaseActivity { public class RechargeActivity extends BaseNfcActivity { Intent intent; boolean userFlag; ActivityRechargeBinding binding; public static RechargeActivity rechargeActivity; AdminDataBean adminData; String userName; @Override protected void onCreate(Bundle savedInstanceState) { @@ -43,7 +60,33 @@ } } public void onNewIntent(Intent intent) { try { this.intent = intent; userCard = NfcReadHelper.getInstence(intent).getUserCardData(); if (userCard != null) { selectBalance(userCard.getInitPeasantCode()); } else { TipUtil.show(RechargeActivity.this, "卡片读取失败"); } readAllData(intent); } catch (Exception e) { e.printStackTrace(); CrashReport.postCatchedException(e); } super.onNewIntent(intent); } private void initView() { try { adminData = baseDao.adminDao().findFirst(); } catch (Exception e) { e.printStackTrace(); CrashReport.postCatchedException(e); } binding.rechargeRegistBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -51,20 +94,22 @@ if (!TextUtils.isEmpty(morny)) { String initCode = DeviceNumberUtils.getDeviceNumber(); if (TextUtils.isEmpty(initCode)) { ToastUtil.show(RechargeActivity.this, "设备注册号为空,请先设置IP和管理员地址"); // return; TipUtil.show(RechargeActivity.this, "设备注册号为空,请先设置IP和管理员地址"); } Intent intent = new Intent(RechargeActivity.this, NFCWreatActivity.class); intent.putExtra("morny", morny); intent.putExtra("userName", userName); intent.putExtra("userCard", userCard); startActivity(intent); } else { ToastUtil.show(RechargeActivity.this, "请输入充值金额(元)"); TipUtil.show(RechargeActivity.this, "请输入充值金额(元)"); } } }); } //校验金额 public static void setPricePoint(final EditText editText) { editText.addTextChangedListener(new TextWatcher() { @Override @@ -110,5 +155,81 @@ } /** * 查询余额 * * @param initPeasantCode 农户注册编号 */ private void selectBalance(String initPeasantCode) { try { BalanceSelecteRequestBean requestBean = new BalanceSelecteRequestBean(); requestBean.setAFN("94"); requestBean.setControl("01"); String initCode = DeviceNumberUtils.getDeviceNumber(); requestBean.setInitCode(initCode); requestBean.setInitPeasantCode(initPeasantCode); requestBean.setXuLie(SocketUtil.getXuLie(this)); SocketNet.getInstance().sendTestMessage(requestBean.pack(), new SocketCallBack() { @Override public void onSocketResponse(SocketData readData) { if (CRC8.isCRC8(readData.getOriginDataBytes())) { StringBuffer stateText = null; try { stateText = new StringBuffer(); String state = BcdUtil.bcdToStr(readData.getBodyBytes()[2]); //BCD码00启用 01禁用 02隶属信息不符 03无此卡信息 04其它s //只有启动状态才能充值 //金额 byte[] blanceByte = Arrays.copyOfRange(readData.getBodyBytes(), 3, 7); int balance = SocketUtil.get16to10LowHigh(blanceByte); //姓名 byte[] nameByte = Arrays.copyOfRange(readData.getBodyBytes(), 7, 19); userName = SocketUtil.fromHexString(SocketUtil.bytesToHexClean0(nameByte)); if ("00".equals(state)) { stateText.append("启用"); binding.rechargeReadLL.setVisibility(View.GONE); binding.rechargeTextLL.setVisibility(View.VISIBLE); binding.userName.setText(userName); binding.redRemainderBlance.setText(MornyUtil.changeF2Y(balance)); binding.redStatu.setText(stateText.toString()); binding.redInitCode.setText(initPeasantCode); userCard.setState("00"); userCard.setBalance(balance); return; } else if ("01".equals(state)) { stateText.append("禁用"); userCard.setState("01"); userCard.setBalance(balance); userFlag = WriteCardUtils.setUser(intent, userCard); TipUtil.show("该卡已被禁用"); } else if ("02".equals(state)) { stateText.append("隶属信息不符"); } else if ("03".equals(state)) { stateText.append("无此卡信息"); } else if ("04".equals(state)) { stateText.append("其它"); } TipUtil.show(RechargeActivity.this, stateText.toString()); } catch (Exception e) { e.printStackTrace(); } } else { //校验CRC错误 TipUtil.show(RechargeActivity.this, "开卡报文校验CRC错误"); } } @Override public void onSocketError(int code, String msg) { TipUtil.show(RechargeActivity.this, msg); } }); } catch (Exception e) { e.printStackTrace(); CrashReport.postCatchedException(e); } } } app/src/main/java/com/dayu/recharge/activity/RechargeDetail.java
New file @@ -0,0 +1,81 @@ package com.dayu.recharge.activity; import android.os.Build; import android.os.Bundle; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import com.dayu.recharge.card.UserCard; import com.dayu.recharge.databinding.ActivityRechargeDetailBinding; import com.dayu.recharge.utils.MornyUtil; import java.util.Calendar; /** * Created by Android Studio. * author: zuo * Date: 2023-11-21 * Time: 15:01 * 备注:写卡后的详情页 */ public class RechargeDetail extends BaseActivity { ActivityRechargeDetailBinding binding; UserCard userCard; String statu; String userName; String morny; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = ActivityRechargeDetailBinding.inflate(LayoutInflater.from(this)); setContentView(binding.getRoot()); try { userCard = (UserCard) getIntent().getSerializableExtra("userCard"); statu = getIntent().getStringExtra("statu"); userName = getIntent().getStringExtra("userName"); if (getIntent().hasExtra("morny")) { morny = getIntent().getStringExtra("morny"); } setUserData(userName, statu); } catch (Exception e) { throw new RuntimeException(e); } } private void setUserData(String userName, String statu) { int balance = userCard.getBalance(); if (!TextUtils.isEmpty(morny)) { balance = userCard.getBalance() + MornyUtil.changeY2F(morny); binding.redRemainderMorny.setText("充值金额:" + morny + " 元"); } else { balance = userCard.getBalance(); binding.redRemainderMorny.setVisibility(View.GONE); } binding.redName.setText("用户姓名:" + userName); binding.redRemainderBlance.setText("剩余金额:" + MornyUtil.changeF2Y(balance) + " 元"); binding.redStatu.setText("卡状态:" + statu); if (userCard != null) { binding.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); binding.redRechargeDate.setText("本卡最后购水日期:" + year + month + day + " " + hour + ":" + minute + ":" + second); } else { binding.redRechargeDate.setText("本卡最后购水日期:无"); } binding.redRechargeNumber.setText("本卡充值次数:" + userCard.getRechargeTimes() + ""); } } } app/src/main/java/com/dayu/recharge/activity/RechargeListActivity.java
@@ -10,7 +10,7 @@ import com.dayu.recharge.databinding.ActivityRechargeListBinding; import com.dayu.recharge.dbBean.RechargeBean; import com.dayu.recharge.utils.ArithUtil; import com.dayu.recharge.utils.ToastUtil; import com.dayu.recharge.utils.TipUtil; import com.dayu.recharge.view.datepicker.CustomDatePicker; import com.dayu.recharge.view.datepicker.DateFormatUtils; @@ -100,7 +100,7 @@ public void onTimeSelected(long timestamp) { endTime = timestamp; if ((endTime < beginTime) && endTime != beginTime) { ToastUtil.show(RechargeListActivity.this, "结束时间不能晚于开始时间"); TipUtil.show(RechargeListActivity.this, "结束时间不能晚于开始时间"); } else { endTime = endTime + (1000 * 60 * 60 * 24) - 1; List<RechargeBean> userList = baseDao.rechargeDao().findByTime(beginTime, endTime); app/src/main/java/com/dayu/recharge/activity/ReplacementActivity.java
@@ -11,7 +11,7 @@ import com.dayu.recharge.adapter.NewCardAdapter; import com.dayu.recharge.databinding.ActivityReplacementBinding; import com.dayu.recharge.dbBean.UserCardBean; import com.dayu.recharge.utils.ToastUtil; import com.dayu.recharge.utils.TipUtil; import com.dayu.recharge.view.EdtDialog; import java.util.List; @@ -73,7 +73,7 @@ userCardBeanList.addAll(beans); adapter.notifyDataSetChanged(); } else { ToastUtil.show("未找到该用户"); TipUtil.show("未找到该用户"); } } app/src/main/java/com/dayu/recharge/activity/SysActivity.java
@@ -1,9 +1,7 @@ package com.dayu.recharge.activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.telephony.TelephonyManager; import android.view.LayoutInflater; import android.view.View; @@ -18,7 +16,7 @@ import com.dayu.recharge.databinding.ActivityAdminBinding; import com.dayu.recharge.dbBean.DomainBean; import com.dayu.recharge.dbBean.PowerBean; import com.dayu.recharge.utils.ToastUtil; import com.dayu.recharge.utils.TipUtil; /** * Copyright (C), 2023, @@ -131,7 +129,7 @@ intent.putExtra("configurationPowerCard", configurationPowerCard); startActivity(intent); } else { ToastUtil.show("请先设置水泵功率"); TipUtil.show("请先设置水泵功率"); } } app/src/main/java/com/dayu/recharge/dbBean/RechargeBean.java
@@ -16,11 +16,33 @@ public long id; private String serial;//设备序列号 public String userName; public String userId;//用户身份证号 public long date; public String morny;//充值金额 public String balance;//余额 public String total_morn;//总充值金额 //状态 0未上传 1成功上传 public String orderID;//订单号 //服务器返回的农户注册编号 private String initPeasantCode; public int state = 0; public String getOrderID() { return orderID; } public void setOrderID(String orderID) { this.orderID = orderID; } public String getInitPeasantCode() { return initPeasantCode; } public void setInitPeasantCode(String initPeasantCode) { this.initPeasantCode = initPeasantCode; } public String getTotal_morn() { return total_morn; @@ -33,12 +55,6 @@ public void setUserId(String userId) { this.userId = userId; } public String total_morn;//总充值金额 //状态 0未上传 1成功上传 public int state = 0; public void setTotal_morn(String total_morn) { this.total_morn = total_morn; app/src/main/java/com/dayu/recharge/net/SocketNet.java
@@ -2,7 +2,6 @@ import android.content.Context; import android.os.Handler; import android.text.TextUtils; import android.util.Log; import com.dayu.recharge.dao.BaseDaoSingleton; @@ -15,9 +14,6 @@ import com.easysocket.interfaces.conn.ISocketActionListener; import com.easysocket.interfaces.conn.SocketActionListener; import com.dayu.recharge.MyApplication; import com.dayu.recharge.utils.ToastUtil; import com.dayu.recharge.utils.WSHelper; import com.easysocket.utils.LogUtil; /** @@ -29,7 +25,7 @@ public class SocketNet { public static SocketNet socketNet; SocketCallBack myCallBack; byte[] dataMessage; // byte[] dataMessage; boolean isTest = false; Context mContext; @@ -53,9 +49,10 @@ // 发送 // EasySocket.getInstance().upMessage(dataMessage); if (EasySocket.getInstance().getDefconnection() != null) { EasySocket.getInstance().disconnect(false); EasySocket.getInstance().connect(); this.dataMessage = dataMessage; // EasySocket.getInstance().disconnect(false); // EasySocket.getInstance().connect(); EasySocket.getInstance().upMessage(dataMessage); // this.dataMessage = dataMessage; } else { MyApplication.myApplication.initEasySocket(false, null); } @@ -72,8 +69,8 @@ isTest = true; mContext = context; if (EasySocket.getInstance().getDefOptions().getSocketAddress() != null && !MyApplication.myApplication.isDoInitMachine) { EasySocket.getInstance().disconnect(false); EasySocket.getInstance().connect(); // EasySocket.getInstance().disconnect(false); // EasySocket.getInstance().connect(); } else { // ToastUtil.show(mContext, "Socket地址为空"); } @@ -97,8 +94,9 @@ @Override public void onSocketConnSuccess(SocketAddress socketAddress) { Log.i("SocketActionListener", "连接成功"); MyApplication.myApplication.isConncet = true; DeviceNumber initCode = BaseDaoSingleton.getInstance(MyApplication.myApplication).deviceNumberDao().findFirst(); if (initCode==null && !MyApplication.myApplication.isDoInitMachine) { if (initCode == null && !MyApplication.myApplication.isDoInitMachine) { new Handler().postDelayed(new Runnable() { @Override public void run() { @@ -111,12 +109,12 @@ }, 500); } if (dataMessage != null) { EasySocket.getInstance().upMessage(dataMessage); } // if (dataMessage != null) { // EasySocket.getInstance().upMessage(dataMessage); // } if (isTest) { MyApplication.myApplication.isConncet = true; EasySocket.getInstance().disconnect(false); // EasySocket.getInstance().disconnect(false); } else { } @@ -130,7 +128,7 @@ */ @Override public void onSocketConnFail(SocketAddress socketAddress, boolean isNeedReconnect) { // isConnected = false; MyApplication.myApplication.isConncet = false; Log.i("SocketActionListener", "socket连接失败"); if (isTest) { // ToastUtil.show(mContext, "连接失败,请检查网络"); @@ -170,7 +168,7 @@ SocketData socketData = new SocketData(); socketData.setBodyData(originReadData.getBodyBytes()); socketData.setHeaderData(originReadData.getHeaderData()); dataMessage = null; // dataMessage = null; if (myCallBack != null) { myCallBack.onSocketResponse(socketData); } app/src/main/java/com/dayu/recharge/tools/NFCWriteHelper.java
@@ -24,10 +24,10 @@ * email 1058083107@qq.com * description */ public class NFCWriteHelper extends BaseNFCHelper{ public class NFCWriteHelper extends BaseNFCHelper { private Tag tag; private NFCWriteHelper.NFCCallback callback; private static NFCWriteHelper helper; private static int PASSWORD_LENTH = 6; @@ -67,12 +67,12 @@ /** * 写卡 * * @param str 书写内容,16个字节 * @param a 书写的扇区 (从0开始数) * @param b 书写的块(从0开始数) * @param callback 返回监听 * @param str 书写内容,16个字节 * @param a 书写的扇区 (从0开始数) * @param b 书写的块(从0开始数) * @param */ public void writeData(byte[] str, int a, int b, NFCWriteHelper.NFCCallback callback) { public boolean writeData(byte[] str, int a, int b) { if (str.length <= 16) { try { MifareClassic mfc = MifareClassic.get(tag); @@ -84,15 +84,13 @@ int count = mfc.getSectorCount(); //如果传进来的扇区大了或者小了直接退出方法 if (a > count - 1 || a < 0) { callback.isSusses(false); return; return false; } //获取写的扇区的块的数量 int bCount = mfc.getBlockCountInSector(a); //如果输入的块大了或者小了也是直接退出 if (b > bCount - 1 || b < 0) { callback.isSusses(false); return; return false; } //验证扇区密码 boolean isOpen = mfc.authenticateSectorWithKeyA(a, bytes); @@ -100,13 +98,12 @@ int bIndex = mfc.sectorToBlock(a); //写卡 mfc.writeBlock(bIndex + b, str); callback.isSusses(true); return; return true; } callback.isSusses(false); return false; } catch (Exception e) { e.printStackTrace(); callback.isSusses(false); return false; } finally { try { mfc.close(); @@ -117,8 +114,10 @@ } } catch (Exception e) { e.printStackTrace(); return false; } } return false; } app/src/main/java/com/dayu/recharge/tools/NfcReadHelper.java
@@ -5,6 +5,7 @@ import android.nfc.Tag; import android.nfc.tech.MifareClassic; import com.dayu.recharge.card.UserCard; import com.dayu.recharge.utils.MyCommon; import java.io.IOException; @@ -45,6 +46,64 @@ return helper; } public UserCard getUserCardData() { UserCard userCard = null; Map<String, List<byte[]>> map = new HashMap<>(); MifareClassic mfc = MifareClassic.get(tag); if (null != mfc) { try { //链接NFC mfc.connect(); //获取扇区数量 int count = mfc.getSectorCount(); //存储空间 int size = mfc.getSize(); //用于判断时候有内容读取出来 boolean flag = false; List<byte[]> list = new ArrayList<>(); //验证扇区密码,否则会报错(链接失败错误) boolean isOpen = mfc.authenticateSectorWithKeyA(1, bytes); if (isOpen) { //获取扇区里面块的数量 int bCount = mfc.getBlockCountInSector(1); //获取扇区第一个块对应芯片存储器的位置(我是这样理解的,因为第0扇区的这个值是4而不是0) int bIndex = mfc.sectorToBlock(1); //String data1 = ""; for (int j = 0; j < bCount; j++) { //读取数据 byte[] data = null; try { data = mfc.readBlock(bIndex); bIndex++; list.add(data); } catch (Exception e) { e.printStackTrace(); } } flag = true; } if (flag) { userCard = UserCard.getBean(list); return userCard; } } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { try { mfc.close(); } catch (Exception e) { e.printStackTrace(); } } } return null; } /** * 读取NFC卡的全部信息 * app/src/main/java/com/dayu/recharge/tools/WriteCardUtils.java
New file @@ -0,0 +1,30 @@ package com.dayu.recharge.tools; import android.content.Intent; import com.dayu.recharge.card.UserCard; /** * Created by Android Studio. * author: zuo * Date: 2023-11-21 * Time: 14:46 * 备注: */ public class WriteCardUtils { static boolean userFlag = false; //向卡写入用户信息 public static boolean setUser(Intent intent, UserCard userCard) { userFlag = NFCWriteHelper.getInstence(intent).writeData(userCard.getZeroBytes(), 1, 0); if (!userFlag) { return false; } userFlag = NFCWriteHelper.getInstence(intent).writeData(userCard.getOneBytes(), 1, 1); if (!userFlag) { return false; } userFlag = NFCWriteHelper.getInstence(intent).writeData(userCard.getTwoBytes(), 1, 2); return userFlag; } } app/src/main/java/com/dayu/recharge/utils/TipUtil.java
New file @@ -0,0 +1,38 @@ package com.dayu.recharge.utils; import android.content.Context; import com.dayu.recharge.activity.HomeActivity; import com.dayu.recharge.view.TipDialog; public class TipUtil { public interface TipListener { public void onCancle(); } public static void show(Context context, String data) { // Toast.makeText(context, data, Toast.LENGTH_LONG).show(); TipDialog tipDialog = new TipDialog(context, data); tipDialog.show(); } public static void show(Context context, String data, TipListener tipListener) { // Toast.makeText(context, data, Toast.LENGTH_LONG).show(); TipDialog tipDialog = new TipDialog(context, data, tipListener); tipDialog.show(); } public static void show(String data) { // Toast.makeText(, data, Toast.LENGTH_LONG).show(); TipDialog tipDialog = new TipDialog(HomeActivity.homeActivity, data); tipDialog.show(); } public static void show(String data, TipListener tipListener) { // Toast.makeText(, data, Toast.LENGTH_LONG).show(); TipDialog tipDialog = new TipDialog(HomeActivity.homeActivity, data, tipListener); tipDialog.show(); } } app/src/main/java/com/dayu/recharge/utils/ToastUtil.java
@@ -1,18 +1,18 @@ package com.dayu.recharge.utils; import android.content.Context; import android.widget.Toast; import com.dayu.recharge.MyApplication; /** * Created by Android Studio. * author: zuo * Date: 2023-11-22 * Time: 11:49 * 备注: */ public class ToastUtil { public static void show(Context context, String data) { Toast.makeText(context, data, Toast.LENGTH_LONG).show(); } public static void show(String data) { Toast.makeText(MyApplication.myApplication, data, Toast.LENGTH_LONG).show(); Toast.makeText(MyApplication.myApplication, data, Toast.LENGTH_SHORT).show(); } } app/src/main/java/com/dayu/recharge/view/EdtDialog.java
@@ -12,7 +12,7 @@ import android.widget.TextView; import com.dayu.recharge.R; import com.dayu.recharge.utils.ToastUtil; import com.dayu.recharge.utils.TipUtil; /** * Copyright (C), 2022, @@ -52,7 +52,7 @@ public void onClick(View v) { if (intent!=null){ if (TextUtils.isEmpty(editText.getText().toString())) { ToastUtil.show(mContext, "请输入序列号"); TipUtil.show(mContext, "请输入序列号"); } else { if (Integer.valueOf(editText.getText().toString()) <= 16777215) { // EquipmentNumber equipmentNumber = (EquipmentNumber) intent.getSerializableExtra("equipmentNumber"); @@ -60,7 +60,7 @@ mContext.startActivity(intent); EdtDialog.this.dismiss(); } else { ToastUtil.show(mContext, "输入的数字不能超过16777215"); TipUtil.show(mContext, "输入的数字不能超过16777215"); } } app/src/main/java/com/dayu/recharge/view/PassWordDialog.java
@@ -1,6 +1,5 @@ package com.dayu.recharge.view; import android.app.Activity; import android.app.Dialog; import android.content.Context; import android.content.Intent; @@ -13,7 +12,7 @@ import com.tencent.bugly.crashreport.CrashReport; import com.dayu.recharge.R; import com.dayu.recharge.utils.ToastUtil; import com.dayu.recharge.utils.TipUtil; import com.dayu.recharge.utils.WSMD5; /** @@ -46,7 +45,7 @@ mContext.startActivity(intent); PassWordDialog.this.dismiss(); } else { ToastUtil.show(mContext, "密码错误"); TipUtil.show(mContext, "密码错误"); } } catch (Exception e) { CrashReport.postCatchedException(e); app/src/main/java/com/dayu/recharge/view/TipDialog.java
New file @@ -0,0 +1,91 @@ package com.dayu.recharge.view; import android.app.Dialog; import android.content.Context; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.TextView; import com.dayu.recharge.R; import com.dayu.recharge.utils.TipUtil; /** * Created by Android Studio. * author: zuo * Date: 2023-11-22 * Time: 9:12 * 备注: */ public class TipDialog extends Dialog { Context mContext; EdtDialog.DialogBack mDialogBack; String mData; TipUtil.TipListener listener; public TipDialog(Context context, String data, TipUtil.TipListener tipListener) { super(context, R.style.ws_pay_showSelfDialog); mContext = context; mData = data; listener = tipListener; initView(); } public TipDialog(Context context, String data) { super(context, R.style.ws_pay_showSelfDialog); mContext = context; mData = data; initView(); } public TipDialog(Context context, EdtDialog.DialogBack dialogBack) { super(context, R.style.ws_pay_showSelfDialog); mContext = context; mDialogBack = dialogBack; initView(); } private void initView() { getWindow().setGravity(Gravity.CENTER); setContentView(R.layout.text_dialog); setCanceledOnTouchOutside(false); final TextView editText = (TextView) this.findViewById(R.id.textData); editText.setText(mData); TextView cannel = (TextView) this.findViewById(R.id.cannel); cannel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (listener != null) { listener.onCancle(); } TipDialog.this.dismiss(); } }); } @Override public void show() { super.show(); /** * 设置宽度全屏,要设置在show的后面 */ WindowManager.LayoutParams layoutParams = getWindow().getAttributes(); layoutParams.gravity = Gravity.CENTER; layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT; layoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT; getWindow().getDecorView().setPadding(0, 0, 0, 0); getWindow().setAttributes(layoutParams); } public interface DialogBack { void onOk(String data); void onCancel(); } } app/src/main/res/layout/activity_admin_setup.xml
@@ -45,48 +45,8 @@ </LinearLayout> <LinearLayout style="@style/newCardLL" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="管理员名称:" android:textSize="@dimen/new_card_size" /> <EditText android:id="@+id/admin_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:maxLength="5" android:textSize="@dimen/new_card_size" /> </LinearLayout> <LinearLayout style="@style/newCardLL" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="电话:" android:textSize="@dimen/new_card_size" /> <EditText android:id="@+id/admin_phone" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="number" android:maxLength="11" android:textSize="@dimen/new_card_size" /> </LinearLayout> <LinearLayout android:id="@+id/chose_address" @@ -109,6 +69,24 @@ android:textSize="@dimen/new_card_size" /> </LinearLayout> <LinearLayout android:id="@+id/chose_address_code" style="@style/newCardLL" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="地址编码:" android:textSize="@dimen/new_card_size" /> <TextView android:id="@+id/admin_address_code" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="@dimen/new_card_size" /> </LinearLayout> </LinearLayout> app/src/main/res/layout/activity_home.xml
@@ -25,7 +25,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:text="新卡注册" android:text="新卡开户" android:textSize="@dimen/home_text_size" /> <TextView app/src/main/res/layout/activity_my.xml
@@ -56,7 +56,7 @@ <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="管理员:" android:text="地址信息:" android:textSize="@dimen/text_size" /> <TextView app/src/main/res/layout/activity_new_card.xml
@@ -9,7 +9,7 @@ android:layout_width="match_parent" android:layout_height="@dimen/dimen_title_height" android:background="@drawable/title_bar_bg" app:centerText="新卡注册" app:centerText="新卡开户" app:leftImage="@mipmap/icon_back" /> <ScrollView @@ -163,7 +163,7 @@ android:layout_alignParentBottom="true" android:background="@color/title_bg" android:gravity="center" android:text="注册" android:text="开户" android:textColor="#000000" android:textSize="@dimen/new_card_size" /> </RelativeLayout> app/src/main/res/layout/activity_recharge.xml
@@ -12,44 +12,149 @@ app:centerText="充值" app:leftImage="@mipmap/icon_back" /> <ScrollView <LinearLayout android:id="@+id/recharge_read_LL" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/recharge_registBtn" android:layout_below="@+id/titleBar"> android:layout_below="@+id/titleBar" android:orientation="vertical" android:visibility="visible"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:gravity="center" android:text="请将卡贴在设备上进行读卡" android:textSize="@dimen/text_size" /> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/textView" android:scaleType="center" android:src="@mipmap/nfc_write" /> </LinearLayout> <LinearLayout android:id="@+id/recharge_text_LL" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/titleBar" android:orientation="vertical" android:padding="20dp" android:visibility="gone"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="用户姓名:" android:textSize="@dimen/new_card_size" /> <LinearLayout style="@style/newCardLL" <TextView android:id="@+id/userName" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="金额(元):" android:textSize="@dimen/new_card_size" /> <EditText android:id="@+id/recharge_water" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="numberDecimal" android:textSize="@dimen/new_card_size" /> </LinearLayout> android:layout_height="wrap_content" android:textSize="@dimen/new_card_size" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:orientation="horizontal"> </ScrollView> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="用户注册编号:" android:textSize="@dimen/text_size" /> <TextView android:id="@+id/red_initCode" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="" android:textSize="@dimen/new_card_size" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="剩余金额:" android:textSize="@dimen/text_size" /> <TextView android:id="@+id/red_remainder_blance" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="@dimen/new_card_size" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="卡状态:" android:textSize="@dimen/text_size" /> <TextView android:id="@+id/red_statu" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="@dimen/new_card_size" /> </LinearLayout> <LinearLayout android:id="@+id/recharge_LL" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:orientation="horizontal"> <TextView android:id="@+id/recharge_tx" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="金额(元):" android:textColor="@color/red" android:textSize="@dimen/new_card_size" /> <EditText android:id="@+id/recharge_water" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入充值的金额" android:inputType="numberDecimal" android:textSize="@dimen/new_card_size" /> </LinearLayout> </LinearLayout> <TextView android:id="@+id/recharge_registBtn" app/src/main/res/layout/activity_recharge_detail.xml
New file @@ -0,0 +1,80 @@ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.dayu.recharge.view.TitleBar android:id="@+id/titleBar" android:layout_width="match_parent" android:layout_height="@dimen/dimen_title_height" android:background="@drawable/title_bar_bg" app:centerText="写卡详情页" app:leftImage="@mipmap/icon_back" /> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="30dp"> <TextView android:id="@+id/red_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="用户姓名:" android:textSize="@dimen/text_size" /> <TextView android:id="@+id/red_initCode" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:text="用户注册编号:" android:textSize="@dimen/text_size" /> <TextView android:id="@+id/red_remainder_morny" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:text="充值金额:" android:textSize="@dimen/text_size" /> <TextView android:id="@+id/red_remainder_blance" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:text="剩余金额:" android:textSize="@dimen/text_size" /> <TextView android:id="@+id/red_rechargeDate" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:text="本卡最后购水日期:" android:textSize="@dimen/text_size" android:visibility="gone" /> <TextView android:id="@+id/red_rechargeNumber" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:text="本卡充值次数:" android:textSize="@dimen/text_size" android:visibility="gone" /> <TextView android:id="@+id/red_statu" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:text="卡状态:" android:textSize="@dimen/text_size" /> </LinearLayout> </LinearLayout> app/src/main/res/layout/activity_red_card.xml
@@ -57,7 +57,8 @@ android:layout_height="wrap_content" android:layout_marginTop="15dp" android:text="本卡最后购水日期:" android:textSize="@dimen/text_size" /> android:textSize="@dimen/text_size" android:visibility="gone" /> <TextView android:id="@+id/red_rechargeNumber" @@ -65,7 +66,8 @@ android:layout_height="wrap_content" android:layout_marginTop="15dp" android:text="本卡充值次数:" android:textSize="@dimen/text_size" /> android:textSize="@dimen/text_size" android:visibility="gone" /> <TextView android:id="@+id/red_statu" app/src/main/res/layout/text_dialog.xml
New file @@ -0,0 +1,54 @@ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#00ffffff" android:gravity="center" android:orientation="vertical"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/ws_pay_bg_dialog_top_stroke" android:gravity="center" android:orientation="vertical" android:padding="20dp"> <TextView android:id="@+id/textData" android:layout_width="300dp" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:gravity="center" android:textColor="#000000" android:textSize="20sp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="horizontal"> <TextView android:id="@+id/cannel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:background="@drawable/ws_login_red_btn_one" android:paddingLeft="15dp" android:paddingTop="5dp" android:paddingRight="15dp" android:paddingBottom="5dp" android:text="确认" android:textSize="@dimen/text_size" /> </LinearLayout> </LinearLayout> </LinearLayout> app/src/main/res/values/colors.xml
@@ -19,4 +19,5 @@ <color name="date_picker_text_light">#59B29C</color> <color name="date_picker_text_dark">#333333</color> <color name="ws_pay_alpha">#00000000</color> <color name="red">#ff0000</color> </resources>