左晓为主开发手持机充值管理机
zuoxiao
2024-04-02 732e4481b8437719468cddfb4971ee54a4b36625
修复设备序列号没有设置地址时一直变化的bug
7个文件已修改
561 ■■■■■ 已修改文件
app/build.gradle 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/activity/AdminSetupActivity.java 168 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/activity/HomeActivity.java 114 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/activity/MyActivity.java 202 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/activity/SysIpActivity.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/dao/AdminDataDao.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/dbBean/AdminDataBean.java 10 ●●●●● 补丁 | 查看 | 原始文档 | 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,71 +44,48 @@
    }
    private void initView() {
        adminBinding.setupOk.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!TextUtils.isEmpty(adminData.getCun())
                        && !TextUtils.isEmpty(adminBinding.adminSerial.getText().toString())
                ) {
                    if (Integer.valueOf(adminBinding.adminSerial.getText().toString()) <= 16777215) {
                        adminBinding.adminAddressCode.setText(adminData.getAddressCode());
                        adminData.setSerial(adminBinding.adminSerial.getText().toString());
                        baseDao.adminDao().insert(adminData);
                        setData();
                        IpBean ipBean = MyApplication.myApplication.ipBean;
                        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();
                            }
                        });
                    } else {
                        TipUtil.show(AdminSetupActivity.this, "输入的数字不能超过16777215");
        adminBinding.setupOk.setOnClickListener(v -> {
            if (!TextUtils.isEmpty(adminData.getCun())
                    && !TextUtils.isEmpty(adminBinding.adminSerial.getText().toString())
            ) {
                if (Integer.valueOf(adminBinding.adminSerial.getText().toString()) <= 16777215) {
                    adminBinding.adminAddressCode.setText(adminData.getAddressCode());
                    adminData.setSerial(adminBinding.adminSerial.getText().toString());
                    baseDao.adminDao().insert(adminData);
                    setData();
                    IpBean ipBean = MyApplication.myApplication.ipBean;
                    if (ipBean != null) {
                        MyApplication.myApplication.initMachineRequestBean(ipBean.getIp(), ipBean.getPort(), adminData.getAddressCode());
                    }
                    TipUtil.show(AdminSetupActivity.this, "设置成功", () -> AdminSetupActivity.this.finish());
                } else {
                    TipUtil.show(AdminSetupActivity.this, "请输入完整内容");
                    TipUtil.show(AdminSetupActivity.this, "输入的数字不能超过16777215");
                }
            } else {
                TipUtil.show(AdminSetupActivity.this, "请输入完整内容");
            }
        });
        adminBinding.choseAddress.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(adminBinding.adminSerial.getWindowToken(), 0);
                intiPickerView();
            }
        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,28 +105,25 @@
                    .setRadius(25)
                    .build();
            pickerView.show(adminBinding.choseAddress);
            pickerView.setOnPickerClickListener(new OnPickerClickListener() {
                @Override
                public void OnPickerClick(PickerData pickerData) {
                    adminData.setSheng("河南");
                    adminData.setShi(pickerData.getFirstText().getName());
                    adminData.setXian(pickerData.getSecondText().getName());
                    if (pickerData.getThirdText() != null) {
                        adminData.setZhen(pickerData.getThirdText().getName());
                    } else {
                        adminData.setZhen("");
                    }
                    if (pickerData.getFourthText() != null) {
                        adminData.setCun(pickerData.getFourthText().getName());
                        adminData.setAddressCode(pickerData.getFourthText().getCode());
                    } else {
                        adminData.setCun("");
                        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();
            pickerView.setOnPickerClickListener(pickerData -> {
                adminData.setSheng("河南");
                adminData.setShi(pickerData.getFirstText().getName());
                adminData.setXian(pickerData.getSecondText().getName());
                if (pickerData.getThirdText() != null) {
                    adminData.setZhen(pickerData.getThirdText().getName());
                } else {
                    adminData.setZhen("");
                }
                if (pickerData.getFourthText() != null) {
                    adminData.setCun(pickerData.getFourthText().getName());
                    adminData.setAddressCode(pickerData.getFourthText().getCode());
                } else {
                    adminData.setCun("");
                    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();
            });
        } 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) {
                    startActivity(new Intent(HomeActivity.this, NewCardActivity.class));
                } else {
                    TipUtil.show("请先设置地址信息");
                }
        AdminDataBean adminData = baseDao.adminDao().findFirst();
        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.homeRecharge.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AdminDataBean adminData = baseDao.adminDao().findFirst();
                if (adminData != null) {
                    startActivity(new Intent(HomeActivity.this, RechargeActivity.class));
                } else {
                    TipUtil.show("请先设置地址信息");
                }
        homeBinding.homeNewCard.setOnClickListener(v -> {
            AdminDataBean adminData1 = baseDao.adminDao().findFirst();
            if (adminData1.isHasAddressCode()) {
                startActivity(new Intent(HomeActivity.this, NewCardActivity.class));
            } else {
                TipUtil.show("请先设置地址信息");
            }
        });
        homeBinding.homeRedCard.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(HomeActivity.this, ReadCardAcitivy.class));
        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(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) {
                PassWordDialog passWordDialog = new PassWordDialog(HomeActivity.this, new Intent(HomeActivity.this, ParameterActivity.class));
                passWordDialog.show();
            }
        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,80 +55,42 @@
    }
    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) {
                PassWordDialog passWordDialog = new PassWordDialog(MyActivity.this, new Intent(MyActivity.this, AdminSetupActivity.class));
                passWordDialog.show();
        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.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.myRechargeListLl.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(MyActivity.this, RechargeListActivity.class));
            }
        myBinding.myRechargeOut.setOnClickListener(v -> {
            isRechargeList = true;
            beginDatePicker.show(System.currentTimeMillis());
        });
        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) {
                isRechargeList = false;
                beginDatePicker.show(System.currentTimeMillis());
            }
        });
        myBinding.myRechargeOut.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View 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) {
            switch (msg.what) {
                case 1:
                    TipUtil.show(MyActivity.this, "导出成功!");
                    break;
                case 3:
                    TipUtil.show(MyActivity.this, "记录为空!");
                    break;
                default:
                    TipUtil.show(MyActivity.this, "导出失败!");
                    break;
            }
            stopAnim();
            return false;
    Handler handler = new Handler(msg -> {
        switch (msg.what) {
            case 1:
                TipUtil.show(MyActivity.this, "导出成功!");
                break;
            case 3:
                TipUtil.show(MyActivity.this, "记录为空!");
                break;
            default:
                TipUtil.show(MyActivity.this, "导出失败!");
                break;
        }
        stopAnim();
        return false;
    });
    /**
@@ -141,50 +98,47 @@
     */
    private void outExcl() {
        startAnim();
        new Thread(new Runnable() {
            @Override
            public void run() {
                {
        new Thread(() -> {
            {
                try {
                    File file = new File(ExcelUtil.outPath);
                    //文件夹是否已经存在
                    if (!file.exists()) {
                        file.mkdirs();
                    }
                    List listData = new ArrayList();
                    try {
                        File file = new File(ExcelUtil.outPath);
                        //文件夹是否已经存在
                        if (!file.exists()) {
                            file.mkdirs();
                        if (isRechargeList) {
                            listData = asynchBaseDao.rechargeDao().ansyFindByTime(beginTime, endTime);
                        } else {
                            listData = asynchBaseDao.userCardDao().findByTime(beginTime, endTime);
                        }
                        List listData = new ArrayList();
                        try {
                            if (isRechargeList) {
                                listData = asynchBaseDao.rechargeDao().ansyFindByTime(beginTime, endTime);
                            } else {
                                listData = asynchBaseDao.userCardDao().findByTime(beginTime, endTime);
                            }
                            if (listData == null || listData.size() == 0) {
                                handler.sendEmptyMessage(2);
                                return;
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        String[] title;
                        String fileName;
                        if (listData == null || listData.size() == 0) {
                            TipUtil.show(MyActivity.this, "记录为空");
                            handler.sendEmptyMessage(2);
                            return;
                        }
                        if (isRechargeList) {
                            title = new String[]{"设备序列号", "用户名", "订单号", "充值日期", "充值金额(元)", "剩余金额(元)"};
                            fileName = file.toString() + "/" + ExcelUtil.outRechargePathName;
                        } else {
                            title = new String[]{"设备序列号", "用户名", "身份证号", "注册日期", "电话"};
                            fileName = file.toString() + "/" + ExcelUtil.outUserPathName;
                        }
                        ExcelUtil.initExcel(fileName, title);
                        ExcelUtil.writeObjListToExcel(listData, fileName, MyActivity.this);
                        handler.sendEmptyMessage(1);
                    } catch (Exception e) {
                        handler.sendEmptyMessage(2);
                        e.printStackTrace();
                    }
                    String[] title;
                    String fileName;
                    if (listData == null || listData.size() == 0) {
                        TipUtil.show(MyActivity.this, "记录为空");
                        return;
                    }
                    if (isRechargeList) {
                        title = new String[]{"设备序列号", "用户名", "订单号", "充值日期", "充值金额(元)", "剩余金额(元)"};
                        fileName = file.toString() + "/" + ExcelUtil.outRechargePathName;
                    } else {
                        title = new String[]{"设备序列号", "用户名", "身份证号", "注册日期", "电话"};
                        fileName = file.toString() + "/" + ExcelUtil.outUserPathName;
                    }
                    ExcelUtil.initExcel(fileName, title);
                    ExcelUtil.writeObjListToExcel(listData, fileName, MyActivity.this);
                    handler.sendEmptyMessage(1);
                } catch (Exception e) {
                    handler.sendEmptyMessage(2);
                    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) {
                beginTime = timestamp;
                endDatePicker.show(timestamp);
            }
        beginDatePicker = new CustomDatePicker(this, "选择开始时间", timestamp -> {
            beginTime = timestamp;
            endDatePicker.show(timestamp);
        }, beginTimestamp, endTimestamp);
        // 不允许点击屏幕或物理返回键关闭
        beginDatePicker.setCancelable(false);
@@ -263,19 +214,16 @@
        // 不允许滚动动画
        beginDatePicker.setCanShowAnim(false);
        endDatePicker = new CustomDatePicker(this, "选择结束时间", new CustomDatePicker.Callback() {
            @Override
            public void onTimeSelected(long timestamp) {
                endTime = timestamp;
                if ((endTime < beginTime) && endTime != beginTime) {
                    TipUtil.show(MyActivity.this, "结束时间不能晚于开始时间");
                } else {
                    try {
                        endTime = endTime + (1000 * 60 * 60 * 24) - 1;
                        outExcl();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
        endDatePicker = new CustomDatePicker(this, "选择结束时间", timestamp -> {
            endTime = timestamp;
            if ((endTime < beginTime) && endTime != beginTime) {
                TipUtil.show(MyActivity.this, "结束时间不能晚于开始时间");
            } else {
                try {
                    endTime = endTime + (1000 * 60 * 60 * 24) - 1;
                    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,39 +44,35 @@
    }
    private void initView() {
        ipBinding.ipOk.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (TextUtils.isEmpty(ipBinding.port.getText().toString())) {
                    ToastUtil.show("请输入端口号");
                    return;
                }
                int newPort = Integer.parseInt(ipBinding.port.getText().toString());
                if (newPort <= 0 || newPort > 65535) {
                    TipUtil.show("请输入正确的端口号");
                    return;
                }
                if (ipBean != null) {
                    String oldIp = ipBean.getIp();
                    int oldPort = ipBean.getPort();
                    if (!oldIp.equals(ipBinding.ip.getText().toString()) || oldPort != newPort) {
//                        DeviceNumberUtils.setDeviceNumber("");
                    }
                }
                if (ipBean == null) {
                    ipBean = new IpBean();
                }
                ipBean.setIp(ipBinding.ip.getText().toString());
                ipBean.setPort(newPort);
                baseDao.ipDao().insert(ipBean);
                AdminDataBean adminData = baseDao.adminDao().findFirst();
                //修改IP后重新连接
                MyApplication.myApplication.initEasySocket(false, null);
        ipBinding.ipOk.setOnClickListener(v -> {
            if (TextUtils.isEmpty(ipBinding.port.getText().toString())) {
                ToastUtil.show("请输入端口号");
                return;
            }
            int newPort = Integer.parseInt(ipBinding.port.getText().toString());
            if (newPort <= 0 || newPort > 65535) {
                TipUtil.show("请输入正确的端口号");
                return;
            }
            if (ipBean != null) {
                String oldIp = ipBean.getIp();
                int oldPort = ipBean.getPort();
//                if (!oldIp.equals(ipBinding.ip.getText().toString()) || oldPort != newPort) {
////                        DeviceNumberUtils.setDeviceNumber("");
//                }
            }
            if (ipBean == null) {
                ipBean = new IpBean();
            }
            ipBean.setIp(ipBinding.ip.getText().toString());
            ipBean.setPort(newPort);
            baseDao.ipDao().insert(ipBean);
            //修改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();
            }
            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;
    }
}