| app/build.gradle | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| app/src/main/java/com/dayu/recharge/activity/AdminSetupActivity.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| app/src/main/java/com/dayu/recharge/activity/HomeActivity.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| app/src/main/java/com/dayu/recharge/activity/MyActivity.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| app/src/main/java/com/dayu/recharge/activity/SysIpActivity.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| app/src/main/java/com/dayu/recharge/dao/AdminDataDao.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| app/src/main/java/com/dayu/recharge/dbBean/AdminDataBean.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
app/build.gradle
@@ -16,8 +16,8 @@ applicationId "com.dayu.recharge" minSdk 23 targetSdk 26 versionCode 20 versionName "2.0" versionCode 22 versionName "2.2" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" ndk{ app/src/main/java/com/dayu/recharge/activity/AdminSetupActivity.java
@@ -1,28 +1,18 @@ package com.dayu.recharge.activity; import android.annotation.SuppressLint; import android.content.Context; import android.os.Build; import android.os.Bundle; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.inputmethod.InputMethodManager; import com.dayu.recharge.MyApplication; import com.dayu.recharge.databinding.ActivityAdminSetupBinding; import com.dayu.recharge.dbBean.AdminDataBean; import com.dayu.recharge.dbBean.IpBean; import com.dayu.recharge.utils.SocketUtil; 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; import com.tencent.bugly.crashreport.CrashReport; import java.lang.reflect.Method; import java.util.Random; import java.util.zip.CRC32; /** * Copyright (C), 2023, @@ -54,9 +44,7 @@ } private void initView() { adminBinding.setupOk.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { adminBinding.setupOk.setOnClickListener(v -> { if (!TextUtils.isEmpty(adminData.getCun()) && !TextUtils.isEmpty(adminBinding.adminSerial.getText().toString()) ) { @@ -69,56 +57,35 @@ if (ipBean != null) { MyApplication.myApplication.initMachineRequestBean(ipBean.getIp(), ipBean.getPort(), adminData.getAddressCode()); } TipUtil.show(AdminSetupActivity.this, "设置成功", new TipUtil.TipListener() { @Override public void onCancle() { AdminSetupActivity.this.finish(); } }); TipUtil.show(AdminSetupActivity.this, "设置成功", () -> AdminSetupActivity.this.finish()); } else { TipUtil.show(AdminSetupActivity.this, "输入的数字不能超过16777215"); } } else { TipUtil.show(AdminSetupActivity.this, "请输入完整内容"); } } }); adminBinding.choseAddress.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { adminBinding.choseAddress.setOnClickListener(v -> { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(adminBinding.adminSerial.getWindowToken(), 0); intiPickerView(); } }); pickerView = new TeaPickerView(this); new Thread(new Runnable() { @Override public void run() { pickerView.initAddressData(); } }).start(); new Thread(() -> pickerView.initAddressData()).start(); } private void setData() { try { AdminDataBean adminData = baseDao.adminDao().findFirst(); if (adminData != null) { this.adminData = adminData; adminData = baseDao.adminDao().findFirst(); if (adminData.isHasAddressCode()) { adminBinding.adminSerial.setText(adminData.getSerial()); adminBinding.adminAddressCode.setText(adminData.getAddressCode()); adminBinding.adminAddress.setText(adminData.getSheng() + adminData.getShi() + adminData.getXian() + adminData.getZhen() + adminData.getCun()); } else { // 创建一个随机数生成器对象 Random random = new Random(); // 生成 1 到 12 之间的随机数字 int randomNumber = random.nextInt(12) + 1; adminBinding.adminSerial.setText(randomNumber + generateUniqueNumber(getSN())); adminBinding.adminSerial.setText(adminData.getSerial()); } } catch (Exception e) { @@ -138,9 +105,7 @@ .setRadius(25) .build(); pickerView.show(adminBinding.choseAddress); pickerView.setOnPickerClickListener(new OnPickerClickListener() { @Override public void OnPickerClick(PickerData pickerData) { pickerView.setOnPickerClickListener(pickerData -> { adminData.setSheng("河南"); adminData.setShi(pickerData.getFirstText().getName()); adminData.setXian(pickerData.getSecondText().getName()); @@ -159,7 +124,6 @@ adminBinding.adminAddress.setText(adminData.getSheng() + adminData.getShi() + adminData.getXian() + adminData.getZhen() + adminData.getCun()); adminBinding.adminAddressCode.setText(adminData.getAddressCode()); pickerView.dismiss(); } }); } catch (Exception e) { CrashReport.postCatchedException(e); @@ -168,53 +132,5 @@ } } @SuppressLint("MissingPermission") public static String getSN() { String serial = null; try { Class<?> c = Class.forName("android.os.SystemProperties"); Method get = c.getMethod("get", String.class); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { try { serial = (String) get.invoke(c, "ro.sunmi.serial"); } catch (Exception e) { e.printStackTrace(); } return serial; } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { serial = Build.getSerial(); return serial; } else { //安卓8以下使用Build.SERIAL相同方式 //return Build.SERIAL; try { serial = (String) get.invoke(c, "ro.serialno"); } catch (Exception e) { e.printStackTrace(); } return serial; } } catch (ClassNotFoundException e) { throw new RuntimeException(e); } catch (NoSuchMethodException e) { throw new RuntimeException(e); } } public static String generateUniqueNumber(String input) { try { // 使用CRC32哈希函数 CRC32 crc32 = new CRC32(); crc32.update(input.getBytes()); long crcValue = crc32.getValue(); // 将哈希值映射到6位数字的范围 long sixDigitNumber = Math.abs(crcValue) % 1000000; // 格式化为6位数字的字符串 return String.format("%06d", sixDigitNumber); } catch (Exception e) { e.printStackTrace(); return null; } } } app/src/main/java/com/dayu/recharge/activity/HomeActivity.java
@@ -1,6 +1,8 @@ package com.dayu.recharge.activity; import android.annotation.SuppressLint; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.view.KeyEvent; import android.view.LayoutInflater; @@ -13,6 +15,10 @@ import com.dayu.recharge.dbBean.AdminDataBean; import com.dayu.recharge.utils.TipUtil; import com.dayu.recharge.view.PassWordDialog; import java.lang.reflect.Method; import java.util.Random; import java.util.zip.CRC32; /** @@ -37,7 +43,6 @@ } public void rushState() { if (MyApplication.myApplication.isConncet) { homeBinding.socketState.setTextColor(getResources().getColor(R.color.title_bg)); @@ -50,36 +55,37 @@ } private void initView() { homeBinding.homeNewCard.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AdminDataBean adminData = baseDao.adminDao().findFirst(); if (adminData != null) { if (adminData == null) { // 创建一个随机数生成器对象 Random random = new Random(); // 生成 1 到 12 之间的随机数字 int randomNumber = random.nextInt(12) + 1; AdminDataBean adminDataBean = new AdminDataBean(); adminDataBean.setSerial(randomNumber + generateUniqueNumber(getSN())); baseDao.adminDao().insert(adminDataBean); } homeBinding.homeNewCard.setOnClickListener(v -> { AdminDataBean adminData1 = baseDao.adminDao().findFirst(); if (adminData1.isHasAddressCode()) { startActivity(new Intent(HomeActivity.this, NewCardActivity.class)); } else { TipUtil.show("请先设置地址信息"); } } }); homeBinding.homeRecharge.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AdminDataBean adminData = baseDao.adminDao().findFirst(); if (adminData != null) { homeBinding.homeRecharge.setOnClickListener(v -> { AdminDataBean adminData12 = baseDao.adminDao().findFirst(); if (adminData12.isHasAddressCode()) { startActivity(new Intent(HomeActivity.this, RechargeActivity.class)); } else { TipUtil.show("请先设置地址信息"); } } }); homeBinding.homeRedCard.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(HomeActivity.this, ReadCardAcitivy.class)); } }); homeBinding.homeRedCard.setOnClickListener(v -> startActivity(new Intent(HomeActivity.this, ReadCardAcitivy.class))); homeBinding.homeAdmin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -88,12 +94,9 @@ } }); //参数设置 homeBinding.homeParameter.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { homeBinding.homeParameter.setOnClickListener(v -> { PassWordDialog passWordDialog = new PassWordDialog(HomeActivity.this, new Intent(HomeActivity.this, ParameterActivity.class)); passWordDialog.show(); } }); homeBinding.homeMy.setOnClickListener(new View.OnClickListener() { @Override @@ -127,4 +130,53 @@ } return super.onKeyDown(keyCode, event); } public String generateUniqueNumber(String input) { try { // 使用CRC32哈希函数 CRC32 crc32 = new CRC32(); crc32.update(input.getBytes()); long crcValue = crc32.getValue(); // 将哈希值映射到6位数字的范围 long sixDigitNumber = Math.abs(crcValue) % 1000000; // 格式化为6位数字的字符串 return String.format("%06d", sixDigitNumber); } catch (Exception e) { e.printStackTrace(); return null; } } @SuppressLint("MissingPermission") public static String getSN() { String serial = null; try { Class<?> c = Class.forName("android.os.SystemProperties"); Method get = c.getMethod("get", String.class); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { try { serial = (String) get.invoke(c, "ro.sunmi.serial"); } catch (Exception e) { e.printStackTrace(); } return serial; } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { serial = Build.getSerial(); return serial; } else { //安卓8以下使用Build.SERIAL相同方式 //return Build.SERIAL; try { serial = (String) get.invoke(c, "ro.serialno"); } catch (Exception e) { e.printStackTrace(); } return serial; } } catch (ClassNotFoundException e) { throw new RuntimeException(e); } catch (NoSuchMethodException e) { throw new RuntimeException(e); } } } app/src/main/java/com/dayu/recharge/activity/MyActivity.java
@@ -7,20 +7,15 @@ import android.os.Build; 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 androidx.annotation.NonNull; import com.dayu.recharge.MyApplication; import com.dayu.recharge.databinding.ActivityMyBinding; import com.dayu.recharge.dbBean.AdminDataBean; import com.dayu.recharge.net.SocketNet; import com.dayu.recharge.utils.DeviceNumberUtils; import com.dayu.recharge.utils.ExcelUtil; import com.dayu.recharge.utils.SocketUtil; import com.dayu.recharge.utils.TipUtil; import com.dayu.recharge.view.PassWordDialog; import com.dayu.recharge.view.datepicker.CustomDatePicker; @@ -60,66 +55,29 @@ } private void initView() { myBinding.cardReplacement.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MyActivity.this, ReplacementActivity.class)); } }); myBinding.myAdmin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { myBinding.cardReplacement.setOnClickListener(v -> startActivity(new Intent(MyActivity.this, ReplacementActivity.class))); myBinding.myAdmin.setOnClickListener(v -> { PassWordDialog passWordDialog = new PassWordDialog(MyActivity.this, new Intent(MyActivity.this, AdminSetupActivity.class)); passWordDialog.show(); // startActivity(new Intent(MyActivity.this, AdminSetupActivity.class)); } }); myBinding.myPsw.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MyActivity.this, PassWordActivity.class)); } }); myBinding.myRechargeListLl.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MyActivity.this, RechargeListActivity.class)); } }); myBinding.myNewCardListLl.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MyActivity.this, NewCardListActivity.class)); } }); myBinding.myNewCardOut.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { myBinding.myPsw.setOnClickListener(v -> startActivity(new Intent(MyActivity.this, PassWordActivity.class))); myBinding.myRechargeListLl.setOnClickListener(v -> startActivity(new Intent(MyActivity.this, RechargeListActivity.class))); myBinding.myNewCardListLl.setOnClickListener(v -> startActivity(new Intent(MyActivity.this, NewCardListActivity.class))); myBinding.myNewCardOut.setOnClickListener(v -> { isRechargeList = false; beginDatePicker.show(System.currentTimeMillis()); } }); myBinding.myRechargeOut.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { myBinding.myRechargeOut.setOnClickListener(v -> { isRechargeList = true; beginDatePicker.show(System.currentTimeMillis()); } }); myBinding.myTestConnect.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SocketNet.getInstance().isConnect(MyActivity.this); } }); myBinding.myTestConnect.setOnClickListener(v -> SocketNet.getInstance().isConnect(MyActivity.this)); } Handler handler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(@NonNull Message msg) { Handler handler = new Handler(msg -> { switch (msg.what) { case 1: TipUtil.show(MyActivity.this, "导出成功!"); @@ -133,7 +91,6 @@ } stopAnim(); return false; } }); /** @@ -141,9 +98,7 @@ */ private void outExcl() { startAnim(); new Thread(new Runnable() { @Override public void run() { new Thread(() -> { { try { File file = new File(ExcelUtil.outPath); @@ -186,7 +141,6 @@ e.printStackTrace(); } } } }).start(); @@ -213,7 +167,7 @@ AdminDataBean adminData; try { adminData = baseDao.adminDao().findFirst(); if (adminData != null) { if (adminData.isHasAddressCode()) { myBinding.myAdminName.setText(adminData.getSheng() + adminData.getShi() + adminData.getXian() + adminData.getZhen() + adminData.getCun()); myBinding.myVillageNum.setText(adminData.getSerial()); } else { @@ -226,7 +180,7 @@ if (TextUtils.isEmpty(initCode)) { msgData.append("设备未注册"); } else { msgData.append("设备注册号:" + initCode); msgData.append("设备注册号:").append(initCode); } myBinding.myTestConnect.setText(msgData); } catch (Exception e) { @@ -247,12 +201,9 @@ final long endTimestamp = System.currentTimeMillis(); // 通过时间戳初始化日期,毫秒级别 beginDatePicker = new CustomDatePicker(this, "选择开始时间", new CustomDatePicker.Callback() { @Override public void onTimeSelected(long timestamp) { beginDatePicker = new CustomDatePicker(this, "选择开始时间", timestamp -> { beginTime = timestamp; endDatePicker.show(timestamp); } }, beginTimestamp, endTimestamp); // 不允许点击屏幕或物理返回键关闭 beginDatePicker.setCancelable(false); @@ -263,9 +214,7 @@ // 不允许滚动动画 beginDatePicker.setCanShowAnim(false); endDatePicker = new CustomDatePicker(this, "选择结束时间", new CustomDatePicker.Callback() { @Override public void onTimeSelected(long timestamp) { endDatePicker = new CustomDatePicker(this, "选择结束时间", timestamp -> { endTime = timestamp; if ((endTime < beginTime) && endTime != beginTime) { TipUtil.show(MyActivity.this, "结束时间不能晚于开始时间"); @@ -275,7 +224,6 @@ outExcl(); } catch (Exception e) { e.printStackTrace(); } } } }, beginTimestamp, endTimestamp); app/src/main/java/com/dayu/recharge/activity/SysIpActivity.java
@@ -3,17 +3,13 @@ import android.os.Bundle; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.widget.Toast; import com.dayu.recharge.MyApplication; import com.dayu.recharge.databinding.ActivityIpBinding; import com.dayu.recharge.dbBean.AdminDataBean; import com.dayu.recharge.dbBean.IpBean; import com.dayu.recharge.utils.DeviceNumberUtils; import com.dayu.recharge.utils.TipUtil; import com.dayu.recharge.utils.ToastUtil; import com.dayu.recharge.utils.WSHelper; /** * Copyright (C), 2022, @@ -48,9 +44,7 @@ } private void initView() { ipBinding.ipOk.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ipBinding.ipOk.setOnClickListener(v -> { if (TextUtils.isEmpty(ipBinding.port.getText().toString())) { ToastUtil.show("请输入端口号"); return; @@ -63,9 +57,9 @@ if (ipBean != null) { String oldIp = ipBean.getIp(); int oldPort = ipBean.getPort(); if (!oldIp.equals(ipBinding.ip.getText().toString()) || oldPort != newPort) { // DeviceNumberUtils.setDeviceNumber(""); } // if (!oldIp.equals(ipBinding.ip.getText().toString()) || oldPort != newPort) { //// DeviceNumberUtils.setDeviceNumber(""); // } } if (ipBean == null) { ipBean = new IpBean(); @@ -73,14 +67,12 @@ ipBean.setIp(ipBinding.ip.getText().toString()); ipBean.setPort(newPort); baseDao.ipDao().insert(ipBean); AdminDataBean adminData = baseDao.adminDao().findFirst(); //修改IP后重新连接 MyApplication.myApplication.initEasySocket(false, null); // if (adminData != null) { // MyApplication.myApplication.initMachineRequestBean(ipBean.getIp(), ipBean.getPort(), adminData.getAddressCode()); // } Toast.makeText(SysIpActivity.this, "保存成功", Toast.LENGTH_LONG).show(); } }); } app/src/main/java/com/dayu/recharge/dao/AdminDataDao.java
@@ -28,4 +28,7 @@ @Query("select * from AdminDataBean limit 1") AdminDataBean findFirst(); } app/src/main/java/com/dayu/recharge/dbBean/AdminDataBean.java
@@ -1,5 +1,7 @@ package com.dayu.recharge.dbBean; import android.text.TextUtils; import androidx.room.Entity; import androidx.room.PrimaryKey; @@ -113,4 +115,12 @@ public void setAddressCode(String addressCode) { this.addressCode = addressCode; } public boolean isHasAddressCode() { if (!TextUtils.isEmpty(addressCode)) { return true; } return false; } }